Linux Containers (Slackware)

Данные: сервер на 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"

Ссылки:

http://slackware.ponce.cc/blog/2011/07/17/lxc-containers/

MyLXC
https://github.com/xv1t/mylxc

About these ads
Запись опубликована в рубрике Uncategorized. Добавьте в закладки постоянную ссылку.

5 комментариев на «Linux Containers (Slackware)»

  1. pasha:

    уважаемый, отличная статья
    вот только мне интересно где Вы взяли mylxc framework
    ели можно, то поделитесь ссылочкой

    • Спасибо за интерес.
      https://github.com/xv1t/mylxc — Проект начал чтобы сделать поудобнее использование контейнеров, к использованию в принципе готова, задумок ещё много не реализовано. Если есть потребность можно в отдельную статью его вынести. Делал под себя, по этому даже элементарную документация не оформил.

  2. 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;

  3. pasha:

    Здравствуйте.
    Понадобилось мне тут поднять пару контейнеров на Slackware64 13.37.
    Я уже писал выше, что у Вас получилась отличная статья.
    Развернул контейнеры — все ок.
    Стал думать как правильно выключить контейнер.
    lxc-stop — это ведь грубое выключение (палку в колесо).
    В новых версияx lxc есть комманда lxc-shutdown.
    Но на Slackware64 13.37 старая версия glibc.
    Поэтому поставить последнюю версию lxc не получиться.
    В новых версия lxc-shutdown — это скрипт.
    Поэтому, после небольших экпериментов, я его немного поправил.
    И теперь контейнер выключается как надо. (останавливая все процессы внутри себя).
    Вот на него ссылка http://pastebin.com/WXTsW4en
    Следить за выключением контейнера очень удобно с помощью pstree

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s