Данные: сервер на Linux Slackware64 13.37
Задача: разделить сервисы на изолированные виртуальные хосты посредством Linux Containers (LXC) на примере LAMP (Linux + Apache + MySQL + PHP)
Если у вас Slackware сборки x86 то, всё будет справедливо если заменить slackware64 на slackware.
Настройка host машины
1. cgroup
Создаем директорию:
mkdir /cgroup
Добавляем в файл /etc/fstab
none /cgroup cgroup defaults 1 2
2. Bridge interface
Предполагается что ip настройки моста будет совпадать с интерфейсом под номером [0] в файле /etc/rc.d/rc.inet1.conf. Чем самым не будем нарушать логику скриптов slackware.
touch /etc/rc.d/rc.bridge
Содержимое файла:
#!/bin/sh
#Импортируем файл настроек сети slackware
. /etc/rc.d/rc.inet1.conf
iface="eth0"
bridge_name="br0"
echo "Make bridging"
echo "Replace \"$iface->$bridge_name:${IPADDR[0]}\" via \"$iface\""
/sbin/ifconfig $iface down
/sbin/brctl addbr $bridge_name
/sbin/brctl setfd $bridge_name 0
/sbin/ifconfig $bridge_name ${IPADDR[0]} netmask ${NETMASK[0]} promisc up
/sbin/brctl addif $bridge_name $iface
/sbin/ifconfig $iface 0.0.0.0 up
route add default gw $GATEWAY
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/br0/proxy_arp
echo 0 > /proc/sys/net/ipv4/conf/default/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
Устанавливаем пакет mylxc- небольшой framework над стандартными командами lxc-*
3. Шаблон виртуальной машины.
Запускаем создание контейнера
lxc-create -n lamp -t slackware
Контейнер будет будет создан в директории /var/lib/lxc/lamp
Имейте ввиду минимальной набор пакетов таков:
aaa_base aaa_elflibs aaa_terminfo bash bin bzip2 coreutils dhcpcd dialog diffutils e2fsprogs elvis etc findutils gawk glibc-solibs gnupg grep gzip iputils logrotate net-tools network-scripts openssh openssl-solibs pkgtools procps sed shadow sharutils slackpkg sysklogd sysvinit sysvinit-functions sysvinit-scripts tar udev util-linux wget which xz
4. Работа с контейнером перед запуском
Настройка сети файл config добавляем:
lxc.network.type=veth lxc.network.link=br0 lxc.network.flags=up
файл rootfs/etc/rc.d/rc.inet1.conf
IPADDR[0]="192.168.1.88" NETMASK[0]="255.255.255.0" GATEWAY="192.168.1.1"
Настройка просмотра DNS сервера rootfs/etc/resolv.conf
search localhost nameserver 192.168.1.1
Меняем пароль администратора (по умолчанию он root):
# chroot rootfs/ passwd Password:
Настройка репозитория slackpkg
Файл rootfs/etc/slackpkg/mirrors
Если близко зеркала яндекса:
http://mirror.yandex.ru/slackware/slackware64-13.37/
У меня в локальной сети репозиторий:
http://192.168.1.100:88/slackware/slackware64-13.37/
Запускаем контейнер.
mylxc start lamp
Входим в консоль. Стандартная команда lxc-console после входа ни в какую не дает освободить терминал, хотя заявляет что это делается нажатием (Ctrl+a q) что к великому сожалению не срабатывает. Поэтому вход в консоль решен посредством mylxc при помощи screen. После первого запуска контейнера с именем lamp создаются скрипты: lamp-start, lamp-stop, lamp-enter.
Теперь войдем в консоль:
lamp-enter
Настройка контейнера после запуска
Обновляем slackpkg
slackpkg update
Пакеты для lamp (относительно минимального набора пакетов из шаблона)
echo "sudo httpd apr apr-util cyrus-sasl php glibc glibc-i18n glibc-profile glibc-zoneinfo libmcrypt libxml2 enchant t1lib libX11 libXpm libxcb libXau libXdmcp sqlite net-snmp aspell gcc-g++ libxslt libgcrypt libgpg-error mysql" > /etc/slackpkg/templates/lamp.template
Устанавливаем MySQL хранилище
sudo -u mysql mysql_install_db
Дополнительные пакеты:
libgpg-error-1.9-x86_64-1 gcc-g++-4.5.2-x86_64-2 libXdmcp-1.1.0-x86_64-1 libgcrypt-1.4.6-x86_64-1 libXau-1.0.6-x86_64-1 libxslt-1.1.26-x86_64-1 aspell-ru-0.99f7_1-noarch-4 aspell-en-6.0_0-noarch-4 aspell-0.60.6-x86_64-1 libxcb-1.7-x86_64-1 libXpm-3.5.9-x86_64-1 libX11-1.4.3-x86_64-2 t1lib-5.1.2-x86_64-2 enchant-1.5.0-x86_64-1 sqlite-3.7.5-x86_64-1 gd-2.0.35-x86_64-4 net-snmp-5.6.1-x86_64-1 glibc-zoneinfo-2.13-noarch-5_slack13.37 glibc-profile-2.13-x86_64-5_slack13.37 glibc-2.13-x86_64-5_slack13.37 git-1.7.4.4-x86_64-1 samba-3.5.10-x86_64-1_slack13.37 less-443-x86_64-1 glibc-i18n-2.13-x86_64-5_slack13.37 sudo-1.7.4p6-x86_64-1 libxml2-2.7.8-x86_64-3 libmcrypt-2.5.8-x86_64-1 apr-1.4.5-x86_64-1_slack13.37 qca-cyrus-sasl-2.0.0_beta3-x86_64-1 cyrus-sasl-2.1.23-x86_64-1 apr-util-1.4.1-x86_64-1_slack13.37 mc-4.7.5.2-x86_64-1 mysql-5.1.56-x86_64-1 php-5.3.10-x86_64-1_slack13.37 httpd-2.2.22-x86_64-1_slack13.37
Настройка LAMP
Настройка PHP /etc/httpd/php.ini. Жестко пропишем часовой пояс
date.timezone = Europe/Moscow
Пакеты для обработки графических файлов imagemagick с зависимостями
imagemagick lcms jasper djvulibre fftw libwmf libwmf-doc libXext libXt openexr ilmbase librsvg gdk-pixbuf2 pango glib2 cairo pixman fontconfig libXrender libSM libICE
Пакеты для обработки файлов TIF и PDF
libtiff poppler poppler-data
Прокси контейнер squid
1. Ставим пакетный менеджер для сторонних репозиториев slapt-get http://software.jaos.org/
для 64-бит
echo "gpgme libassuan" > /etc/slackpkg/templates/pkg4slapt-get.template slackpkg install-template pkg4slapt-get wget http://software.jaos.org/slackpacks/13.37-x86_64/slapt-get/slapt-get-0.10.2m-x86_64-1.tgz installpkg slapt-get-0.10.2m-x86_64-1.tgz echo "done"
Ссылки:
уважаемый, отличная статья
вот только мне интересно где Вы взяли mylxc framework
ели можно, то поделитесь ссылочкой
Спасибо за интерес.
https://github.com/xv1t/mylxc – Проект начал чтобы сделать поудобнее использование контейнеров, к использованию в принципе готова, задумок ещё много не реализовано. Если есть потребность можно в отдельную статью его вынести. Делал под себя, по этому даже элементарную документация не оформил.
Bonjour
J’ai lu votre article en le traduisant, de ce fait il y a des choses qui m’echappent. Entre autre quand vous expliquez qu’il faut installer le package mylxc; j’ai pas bien compris où faut-il l’installer.
Je suis avec une slackware, je parviens à installer lxc grace au template de Bernardini mais toujours des problemes avec le reseau.
Thank you for interested of my topic.
MyLXC successfully installed? This project in the deep “beta” status.
Please, show me a text out in host machine before start lxc-container:
ifconfig;
cat /proc/sys/net/ipv4/ip_forward;
After starting lxc-container, in the host machine:
ifconfig;
In the lxc-container:
ifconfig;
route -n;