В этом примере я не буду рассматривать другие ОС. По вопросам для других операционных систем обращайтесь к соответствующей документации. Подразумевается, что на вашем сервере уже установлена ОС Gentoo Linux. Подробнее об установке: http://www.gentoo.org/doc/ru/handbook/handbook-x86.xml (32 битная система) http://www.gentoo.org/doc/ru/handbook/handbook-amd64.xml (64 битная система) Общие вопросы: http://www.gentoo.org/doc/ru/ В данном случае будет рассмотрен пример, когда у вас есть только 1 внешний IP адрес. В этом случае будет использоваться NAT. Для начала обновим дерево портежей. Code: [COLOR=Lime][B]emerge --sync[/B][/COLOR] Скачиваем исходники ядра openvz Code: [COLOR=Lime][B]emerge openvz-sources[/B][/COLOR] Переходим в директория с исходниками (XXX - здесь будет ваша версия ядра. Используйте ls /usr/src для уточнения) Code: [COLOR=Lime][B]cd /usr/src/linux-2.X.X-openvz-XXX.XXX[/B][/COLOR] Запускаем конфигурацию ядра Code: [COLOR=Lime][B]make menuconfig[/B][/COLOR] Далее будут указаны только ОСНОВНЫЕ параметры, которые я добавил на своем сервере. Часть информации о параметрах ядра на русском языке: http://wiki.kryukov.biz/wiki/Параметры_ядра_Linux PHP: Loadable module support --> [*] Automatic kernel module loading Networking --> Networking options --> <*> Packet socket <*> Unix domain sockets [*] networking [*] IP: advanced router [*] Network packet filtering (replaces ipchains) ---> Core Netfilter Configuration ---> <*> Netfilter Xtables support (required for ip_tables) IP: Netfilter Configuration ---> <M> Connection tracking (required for masq/NAT) <M> IP tables support (required for filtering/masq/NAT) <M> Packet filtering <M> Full NAT <M> MASQUERADE target support OpenVZ ---> [*] Virtual Environment support <M> VE calls interface <M> VE network device <M> Virtual ethernet device <M> VE device [*] VE netfiltering <M> VE watchdog module <M> Checkpointing & restoring Virtual Environments КоНПЕлируем ) ядро и устанавливаем модули Code: [COLOR=Lime][B]make && make modules_install[/B][/COLOR] Копируем образ ядра в директорию загрузчика (на примере GRUB) Code: [COLOR=Lime][B]cp arch/x86_64(x86 для 32-битных)/boot/bzImage /boot/kernel-openvz[/B][/COLOR] Добавим в конфиг загрузчика Code: [COLOR=Lime][B]nano /boot/grub/grub.conf[/B][/COLOR] Более подробно про распознование grub`ом дисков и прочее читайте в handbook, раздел "Настройка начального загрузчика" Также сделаем следующее. Вполне возможно, что в вашем ядре чего-нибудь будет не хватать (как обычно бывает))), и система выдаст cernel panic Это не проблема, если есть прямой доступ к серверу. Перезагрузили -> выбрали предыдущее ядро -> исправили ошибки-> перезагрузили. А если сервер недоступен - придется тревожить саппорт, который не всегда есть когда нужен. В этом случае укажем в grub.conf опцию panic=5, равно как и пропишем savedefault Теперь, если при загрузке нашего нового ядра возникнет kernel panic - система перезагрузится через 5 секунд с преждним, работающим ядром PHP: default saved timeout 10 title Gentoo Linux Kernel 2.6.25-7 root (hd0,0) kernel /boot/2.6.25-gentoo-r7 root=/dev/sda3 // Наше старое ядро savedefault title Gentoo Linux OpenVZ root (hd0,0) kernel /boot/kernel-openvz panic=5 root=/dev/sda3 // Наше openvz ядро savedefault 0 Перезагружаемся Code: [COLOR=Lime][B]reboot[/B][/COLOR]
Если все сделано верно, то вы должны загрузиться с новым ядром (приверяем: uname -s) После этого продолжаем установку Устанавливаем vzctl Code: [COLOR=Lime][B]emerge vzctl[/B][/COLOR] Добавляем vz в автозагрузку Code: [COLOR=Lime][B]rc-update add vz default[/B][/COLOR] Запускаем vz Code: [COLOR=Lime][B]/etc/init.d/vz start[/B][/COLOR] Приступаем к созданию виртуальных машин. Фактически, все виртуальные сервера хранятся в директории /vz/private Создаем директорию для нашей машины Code: [COLOR=Lime][B]mkdir /vz/private/100[/B][/COLOR] Распаковываем туда наш stage3 (берем здесь http://www.gentoo.org/main/en/mirrors.xml каталог /releases/amd64(или x86)/2008.0/stages/stage3-amd64-2008.0.tar.bz2 или тот, что остался от установки системы) Code: [COLOR=Lime][B]tar -xjf stage3-i686-2008.0_beta2.tar.bz2 -C /vz/private/100[/B][/COLOR] Создаем файл конфигурации ... Code: [COLOR=Lime][B]vzctl set 100 --applyconfig vps.basic --save[/B][/COLOR] ..и правим его nano /etc/vz/conf/100.conf, добавив в конце файла PHP: OSTEMPLATE="gentoo" IP_ADDRESS="192.168.0.101" HOSTNAME="test.server" Заменяем mtab символьной ссылкой на /proc/mounts Code: [COLOR=Lime][B]rm -f /vz/private/100/etc/mtab ln -s /proc/mounts /vz/private/100/etc/mtab[/B][/COLOR] При загрузке нам нужен только /proc Code: [COLOR=Lime][B]echo "proc /proc proc defaults 0 0" > /vz/private/100/etc/fstab[/B][/COLOR] Правим /vz/private/100/etc/inittab. Закоментируем строки наших консолей PHP: #c1:12345:respawn:/sbin/agetty 38400 tty1 linux #c2:2345:respawn:/sbin/agetty 38400 tty2 linux #c3:2345:respawn:/sbin/agetty 38400 tty3 linux #c4:2345:respawn:/sbin/agetty 38400 tty4 linux #c5:2345:respawn:/sbin/agetty 38400 tty5 linux #c6:2345:respawn:/sbin/agetty 38400 tty6 linux Правим /vz/private/100/etc/shadow. Заменяем пароль root на ! , что не позволит использовать учетную запись. Позже его можно сменить командой vzctl set 100 --userpasswd rootassword PHP: root:!:10071:0::::: Удаляем checkroot и consolefont Code: [COLOR=Lime][B]rm /vz/private/100/etc/runlevels/boot/checkroot rm /vz/private/100/etc/runlevels/boot/consolefont [/B][/COLOR] Правим /vz/private/100/sbin/rc. Закоментируем строку PHP: # try mount -n ${mntcmd:--t sysfs sysfs /sys -o noexec,nosuid,nodev} Добавляем в /vz/private/100/etc/make.conf строку PHP: CONFIG_PROTECT = /sbin/rc В файле /vz/private/100/etc/conf.d/rc находим RC_DEVICES= и указываем значение PHP: RC_DEVICES="static" Выходим из директории vz если вы там Code: [COLOR=Lime][B]cd /[/B][/COLOR] Запускаем наш сервер Code: [COLOR=Lime][B]vzctl start 100[/B][/COLOR] Смотрим его в списке Code: [COLOR=Lime][B]vzlist[/B][/COLOR] Все в порядке? Заходим на него Code: [COLOR=Lime][B]vzctl enter 100[/B][/COLOR] vzctl enter 100 Смотрим vzctl --help для вариантов использования команды Для того, что бы на нашей ВМ была возможность устанавливать пакеты из порежей выполним следующее: Создадим директорию для портежей Code: [COLOR=Lime][B]mkdir -p /vz/root/100/usr/portage[/B][/COLOR] И монтируем туда портажи с нашего сервера Code: [COLOR=Lime][B]mount -o bind /usr/portage /vz/root/100/usr/portage[/B][/COLOR] и каталог с исходниками Code: [COLOR=Lime][B]mount -n -o bind /usr/portage/distfiles /vz/root/100/usr/portage/distfiles[/B][/COLOR] Теперь установка пакетов возможно через emerge <пакет> Если все работает - переходим к реализации "вывода в мир" Устанавливаем на основной сервер iptables Code: [COLOR=Lime][B]emerge iptables[/B][/COLOR] Разрешаем ip форвардинг Code: [COLOR=Lime][B]echo 1 > /proc/sys/net/ipv4/ip_forward[/B][/COLOR] Задаем правило Code: [COLOR=Lime][B] iptables -t nat -A POSTROUTING -s 192.168.0.101 -o <внешняя карта сервера> -j SNAT --to <внешний адрес сервера>[/B][/COLOR] Теперь виртуальная машина будет выходить в мир через наш НАТ Сохраняем параметры и добавляем iptables в автозагрузку Code: [COLOR=Lime][B]/etc/init.d/iptables save rc-update add iptables default[/B][/COLOR] Если где-либо описался сильно не пинать ) Полезные ресурсы: wiki.openvz.org gentoo.org
PHP: VEID NPROC STATUS IP_ADDR HOSTNAME 100 14 running XX.XX.XX.XX -----------.ru 110 25 running XX.XX.XX.XX -----------.ru 200 44 running XX.XX.XX.XX -----------.ru 300 26 running XX.XX.XX.XX -----------.ru 400 20 running XX.XX.XX.XX -----------.ru Значит что то не то делаешь ВМ стартуют? Работают?