HOWTO. Создание виртуальных серверов. Gentoo + OpenVZ

Discussion in 'Linux, Freebsd, *nix' started by neval, 5 Dec 2008.

  1. neval

    neval Elder - Старейшина

    Joined:
    13 Dec 2006
    Messages:
    457
    Likes Received:
    116
    Reputations:
    23
    В этом примере я не буду рассматривать другие ОС. По вопросам для других операционных систем обращайтесь к соответствующей документации.

    Подразумевается, что на вашем сервере уже установлена ОС 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 
             
    [*]   IPadvanced router

             
    [*] Network packet filtering (replaces ipchains)  --->
                
                
    Core Netfilter Configuration  ---> 

                    <*> 
    Netfilter Xtables support (required for ip_tables)

                
    IPNetfilter Configuration  --->
                     <
    MConnection tracking (required for masq/NAT)
                     <
    MIP 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
        <
    MVE network device
        
    <MVirtual ethernet device 
        
    <MVE device 
        
    [*] VE netfiltering 
        
    <MVE watchdog module 
        
    <MCheckpointing 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]
     
    5 people like this.
  2. neval

    neval Elder - Старейшина

    Joined:
    13 Dec 2006
    Messages:
    457
    Likes Received:
    116
    Reputations:
    23
    Если все сделано верно, то вы должны загрузиться с новым ядром (приверяем: 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 root:password

    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
     
    #2 neval, 5 Dec 2008
    Last edited: 20 May 2009
  3. neval

    neval Elder - Старейшина

    Joined:
    13 Dec 2006
    Messages:
    457
    Likes Received:
    116
    Reputations:
    23
    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

    Значит что то не то делаешь

    ВМ стартуют? Работают?
     
    2 people like this.
  4. MaSTeR GэN

    MaSTeR GэN Member

    Joined:
    23 May 2008
    Messages:
    102
    Likes Received:
    54
    Reputations:
    7
    Интересная статья ))автору + )
     
  5. sedoy_xxx

    sedoy_xxx Elder - Старейшина

    Joined:
    5 Jul 2006
    Messages:
    244
    Likes Received:
    41
    Reputations:
    -1
    ТС поправь Kernel, а так вполне неплохо - молодец!
     
  6. neval

    neval Elder - Старейшина

    Joined:
    13 Dec 2006
    Messages:
    457
    Likes Received:
    116
    Reputations:
    23
    ???