Сборка из исходных кодов стабильной версии lxc
для Centos 7 с поддержкой python
.
Поддержка python
необходима, например для работы команды lxc-ls --fancy
Установка зависимостей:
yum install -y epel-release
yum install -y gcc git rpm-build automake make python34 python34-devel
yum install -y libcap-devel docbook2X graphviz
Согласно официальному сайту на момент написания статьи доступно 3 версии LXC, я выбрал LTS stable-1.0
Скачивание исходных кодов:
git clone git://github.com/lxc/lxc -b stable-1.0
cd lxc
Почитав немного доку и исходники, получился такой порядок действий:
./autogen.sh
./configure --enable-python PYTHON=/usr/bin/python3.4 PYTHONDEV_CFLAGS=-I/usr/include/python-3.4m PYTHONDEV_LIBS=-l/usr/include/python-3.4m
Как можно заметить, конфигурация происходит с явным указанием версии python3.4
, он появился сравнительно недавно в EPEL, его и будем использовать далее.
Т.к. у нас Centos и тут не все как у людей как в других дистрибутивах, изменим в исходниках путь до исполняемого файла Python, но сперва найдем файлы, которые нужно модифицировать:
grep -Rn '^#.*/python3'
В результате у меня получился такой небольшой скрипт:
for f in config/apparmor/lxc-generate-aa-rules.py src/lxc/lxc-device src/lxc/lxc-ls.in src/lxc/lxc-start-ephemeral.in src/lxc/lxc-ls src/lxc/lxc-start-ephemeral src/python-lxc/examples/api_test.py src/python-lxc/examples/pyconsole-vte.py src/python-lxc/examples/pyconsole.py src/python-lxc/setup.py src/python-lxc/setup.py.in; do
sed -i 's|#!/usr/bin/python3|#!/usr/bin/python3.4|' $f
done
sed -i 's|Requires: python3|Requires: python34|' lxc.spec
sed -i 's|BuildRequires: python3-devel|BuildRequires: python34-devel|' lxc.spec
sed -i 's|/python3.3/site-packages/|/python3.4/site-packages/|' lxc.spec
После изменений проверим результат:
grep -Rn '^#.*/python3'
Теперь соберем rpm
пакеты используя Python3.4:
make rpm PYTHON=/usr/bin/python3.4 PYTHONDEV_CFLAGS=-I/usr/include/python-3.4m PYTHONDEV_LIBS=-l/usr/include/python-3.4m
Найти собранные пакеты можно в каталоге cd /root/rpmbuild/RPMS/x86_64
, а установить командой:
yum localinstall lxc-libs-1.0.7-1.el7.centos.x86_64.rpm lxc-1.0.7-1.el7.centos.x86_64.rpm
Не будем останавливаться на этом!
Для запуска Centos 7 контейнера необходимо проделать еще несколько манипуляций:
В файле /usr/share/lxc/config/centos.common.conf
нужно найти опцию lxc.cap.drop
, содержащую значения setfcap
и setpcap
их нужно убрать,
например для хоста Ubuntu 14.04 нужно сделать примерно так:
#lxc.cap.drop = mac_admin mac_override setfcap setpcap
lxc.cap.drop = mac_admin mac_override
Не зависимо от дистрибутива нужно в тот же файл еще добавить в конец сроки:
# This lets LXC SUSE containers run on hosts with apparmor.
# It does nothing on hosts which do not have apparmor enabled.
lxc.aa_profile = unconfined
# https://bugs.launchpad.net/ubuntu/+source/lxc/+bug/1347020
lxc.kmsg = 0
UPD: 14.10.2016
Под Centos 7 и начиная с Ubuntu 16.06 для персистентных контейнеров лучше использовать systemd-nspawn
и управлять ими через machinectl
.
Ссылки по теме:
- Bug 1176816 - booting a centos 7 container is extremely slow
- centos 7 needs setpcap capability
- systemd does not boot in a container
- [[lxc-devel] [PATCH] Various fixes for Fedora/CentOS/OpenSUSE templates and systemd.](https://lists.linuxcontainers.org/pipermail/lxc-devel/2014-September/010261.html)
- big big login delays in CentOS 7 systemd #340
- Linux Containers: Downloads
- [LXC 1.0: Troubleshooting and debugging 10/10
Comments
comments powered by Disqus