четверг, 4 июня 2009 г.

Установка и настройка Openvz

Захотел я поставить побаловаться такую интересную вещь, как OpenVZ. Нашел в интернете несколько мануалов, в том числе http://www.gentoo.org/proj/en/vps/openvz-howto.xml и http://wiki.openvz.org/Kernel_build.
Поехали.
На данный момент в портах стабильная версия ядра для openvz - 2.6.18
emerge openvz-sources
emerge vzctl && rc-update add vz default

Все как обычно:
make menuconfig

Далее проверил по мануалу с gentoo.org, выхожу, сохраняю конфиг.
Делаю
make

и первый облом:
kernel/built-in.o: In function `getnstimeofday':
(.text+0xeac3): undefined reference to `__umoddi3'
kernel/built-in.o: In function `do_gettimeofday':
(.text+0xeb7e): undefined reference to `__udivdi3'
kernel/built-in.o: In function `do_gettimeofday':
(.text+0xeb98): undefined reference to `__umoddi3'
kernel/built-in.o: In function `do_timer':
(.text+0xf877): undefined reference to `__udivdi3'
kernel/built-in.o: In function `do_timer':
(.text+0xf894): undefined reference to `__umoddi3'
make: *** [.tmp_vmlinux1] Ошибка 1

Если я правильно понял тонкие намеки гугла, то ядро слишком старое для нынешнего gcc-4.3.2. Три решения - накатить патч, чтобы компилятор проглотил это ядро (на багзиле gentoo не советовали так делать, т.к. в дальнейшем могут быть ошибки).
Второй вариант - установить компилятор постарее (благо, gentoo легко позволяет иметь их несколько штук одновременно). Но как-то лениво. Третий вариант - взять openvz поновее. Я выбрал третье. Раз уж брать из нестабильных, то брать самый последний.
echo =sys-kernel/openvz-sources-2.6.27.2.1-r1 >> /etc/portage/package.keywords && emerge openvz-sources

Снова
make menuconfig

Настроил, сверился с мануалом. Выхожу, сохраняю. Делаю
make

второй облом:
CC      arch/x86/kernel/process_32.o
CC      arch/x86/kernel/signal_32.o
AS      arch/x86/kernel/entry_32.o
CC      arch/x86/kernel/traps_32.o
arch/x86/kernel/traps_32.c:814: ошибка: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘nmi_ipi_callback’
arch/x86/kernel/traps_32.c: В функции ‘do_nmi’:
arch/x86/kernel/traps_32.c:872: ошибка: неявная декларация функции ‘nmi_ipi_callback’
arch/x86/kernel/traps_32.c: На верхнем уровне:
arch/x86/kernel/traps_32.c:879: ошибка: expected ‘)’ before ‘callback’
arch/x86/kernel/traps_32.c: В функции ‘unset_nmi_ipi_callback’:
arch/x86/kernel/traps_32.c:886: ошибка: ‘nmi_ipi_callback’ не описан (первое использование в этой функции)
arch/x86/kernel/traps_32.c:886: ошибка: (Сообщение о неописанном идентификаторе выдается один раз
arch/x86/kernel/traps_32.c:886: ошибка: для каждой функции, в которой он используется.)
make[1]: *** [arch/x86/kernel/traps_32.o] Ошибка 1
make: *** [arch/x86/kernel] Ошибка 2

Черт с ним, ставлю gcc предыдущей версии, переключаюсь с помощью gcc-config, source /etc/profile.
Снова
make

и та же ошибка.
Снова в интернет. Не знаю, как это связано, но одному человеку помогло включение в конфиге ядра опции
Processor type and features  --->  Symmetric multi-processing support

(т.е. поддержка мультипроцессорности). На моем тестовом компьютере процессор один и ядро всего одно. Ну да ладно.
В итоге получилось.

UPD: Забегая вперед, скажу что в процессе настройки понадобилась еще одна вещь. В ядре нужно включить опцию
Device Drivers  --->
Character devices  --->
[*] Legacy (BSD) PTY support
Поэтому пришлось снова собирать ядро (я не любитель модулей почему-то).
make
make modules_install
cp arch/i386/boot/bzImage /boot/kernel-2.6.27-openvz

(добавил новую строчку в grub)
reboot

Теперь необходимо создать собственно виртуальное окружение, VE. Я поставил туда gentoo. В мануале от gentoo сказано, что openvz не работает с bzip2, поэтому архив со стейджем конвертируем в gzip.
cd /vz/template/cache
wget -c wget http://bb.xnull.de/projects/gentoo/stages/i686/stage3-i686-current.tar.bz2
bunzip2 ./stage3-i686-current.tar.bz2
mv ./stage3-i686-current.tar ./gentoo.tar
gzip ./gentoo.tar

Это "скелет" для создания каждого нового vps. Кстати можно и самому сделать такой "шаблон". Достаточно настроить систему под свои нужды и снова упаковать каталог /vz/private/101 в gzip и положить его в /vz/template/cache.
При установленном bash-completion утилитой vzctl очень легко пользоваться.
Создаем и запускаем vps:
vzctl create 101 --ostemplate gentoo --hostname VE-101 --ipadd 192.168.1.161

vzctl start 101

Чтобы в VE работала сеть, надо включить форвардинг на основной машине:
sysctl -w net.ipv4.ip_forward = 1
sysctl -w net.ipv4.conf.default.rp_filter = 1
sysctl -w net.ipv4.conf.all.rp_filter = 1

Если есть необходимость туда зайти, то
vzctl enter 101

Вот тут-то и выпала ошибка:
enter into VE 101 failed
Unable to open pty: No such file or directory

из-за которой снова пришлось пересобирать ядро.

Теперь можно подключить /usr/portage с помощью nfs. Чтобы включить эту возможность, нужно дать команду:
vzctl set 101 --feature nfs:on --save

Комментариев нет:

Отправить комментарий