Поехали.
На данный момент в портах стабильная версия ядра для 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
Комментариев нет:
Отправить комментарий