Ставим Gentoo x64 + xen на диски размером 3Tb в Hetzner
Для чего это нужно: Допустим вам нужно организовать пару тройку независимых удаленных рабочих столов. Не арендовать же под каждый rdp, отдельный сервер, можно арендовать один и сделать их там хоть 16 штук.
Арендовав пару серверов класса EX4 на hetzner.de я встал перед проблемой, в сервере установлено два диска по 3Tb и все. Есть известная проблема, что диски с таблицей разделов MBR могут адресовать только 2,2Тб. Было два варианта, либо настраивать MBR и отказываться от 800гигов дискового пространства, либо сделать таблицу GPT и попытаться загрузиться из неё, что весьма не тривиально, но по факту просто.
Плюс небольшой HOWTO как поставить Xen.
Step-by-step
После аренды сервера, вам присылается ип, логин и пароль на новый сервер, зайдя по ssh попадаем в rescue систему, на основе какого то Debian, но нам это не помеха.
Два диска sda и sdb было решено объединить в raid1 массив, и поверх него сделать LVM, чтобы не рисковать, было решено boot вынести в отдельный раздел, так же понадобиться дополнительный раздел для efi.
Разбивать будем программой
gdisk /dev/sda
Создаем первый раздел это будет boot
Command:n Partition Number: 1 First sector: Last sector: +100M Hex Code:
Создаем второй раздел это будет efi
Command: n Partition Number: 2 First sector: Last sector: +32M Hex Code: EF02
Хочу отметить, что очень важно ему указать тип раздела.
Создаем третий раздел под LVM
Command: n Partition Number: 3 First sector: Last sector: Hex Code:
Записываем данные на диск командой w и выходим.
Проделываем тоже самое для диска sdb.
Создаем райд массивы.
Массив для boot:
mdadm –C /dev/md0 –-level=1 -–raid-devices=2 -–metadata=0.9 /dev/sd[ab]1
Массив для LVM:
mdadm –C /dev/md1 –-level=1 –-raid-devices=2 /dev/sd[ab]3
Убеждаемся, что они успешно начали синхронизироваться:
cat /proc/mdstat
Создаем LVM группу:
pvcreate /dev/md1 vgcreate ld1 /dev/md1 vhchange –a y
Создаем lvm разделы:
lvcreate –L2G –n swap ld1 lvcreate –L8G –n root ld1
Форматируем разделы:
mkswap /dev/ld1/swap mkreiserfs /dev/md0 mkreiserfs /dev/ld1/root
Создадим папку и подмантируем туда новый root:
mkdir /mnt/gentoo mount /dev/ld1/root /mnt/gentoo
Дальше по мануалу с Gentoo.org ставим Gentoo из stage3, я не буду заострять внимание, только перечислю список команд.
cd /mnt/gentoo wget http://de-mirror.org/gentoo/releases/amd64/current-stage3/stage3-amd64-20111006.tar.bz2 tar –xvjpf stage3-amd64-20111006.tar.bz2 mount /dev/md0 boot mount –o bind /dev/ dev mount –t proc proc proc cp /etc/resolv.conf etc/ scp сервак с make.conf etc/make.conf
Он у меня выглядит так:
CFLAGS="-O2 -pipe" CXXFLAGS="${CFLAGS}" CHOST="x86_64-pc-linux-gnu" MAKEOPTS="-j9" LINGUAS="ru" ACCEPT_KEYWORDS="~amd64" USE="-ipv6 mmx sse sse2 hvm qemu pygrub xen static-libs agent efiemu"
Продолжаем:
chroot /mnt/gentoo env-update && source /etc/profile emerge -–sync echo “=sys-fs/lvm2-2.02.88” >> /etc/portage/package.mask emerge gentoo-sources screen vim vixie-cron metalog reiserfsprogs mdadm lvm2 gentoolkit genkernel dhcp mdadm -–detail -–scan >> /etc/mdadm.conf ln –s /etc/init.d/net.lo /etc/init.d/net.eth0
Настраиваем и собираем ядро с поддержкой raid и lvm, я собираю через genkernel.
Правим fstab:
/dev/md0 /boot reiserfs noatime 1 2 /dev/ld1/root / reiserfs noatime 0 1 /dev/ld1/swap none swap sw 0 0
Задаем пароль рута через passwd.
Ставим в атозагрузку службы:
rc-update add net.eth0 default rc-update add sshd default rc-update add metalog default rc-update add vixie-cron default
Теперь самое интересное настроить grub а вернее его версию 2.
echo "sys-boot/grub:2" >> /etc/portage/package.accept_keywords echo "sys-boot/grub:2" >> /etc/portage/package.unmask emerge -av sys-boot/grub:2
Надо груб прописать на диски:
grub2-install /dev/sda grub2-install /dev/sdb
И настроить его, я сделал так:
grub2-mkconfig -o test.cfg
На выходе он мне создал test.cfg.
Я поменял строчку
linux /kernel-genkernel-x86_64-3.0.6-gentoo root=/dev/mapper/ld1-root ro
на
linux /kernel-genkernel-x86_64-3.0.6-gentoo root=/dev/ram0 real_root=/dev/ld1/root dolvm domdadm init=/linuxrc
и скопировал этот файлик в бут:
cp test.cfg /boot/grub2/grub.cfg
Все можно перегружаться.
Установка и настройка самого xen
emerge xen xen-tools –av
Настроим сеть:
cat /etc/conf.d/net bridge_br0="eth0" rc_need_br0="net.eth0" config_eth0=("null") config_br0=( "x.x.x.x/27" "192.168.194.1/24" для общения с виртуалками ) routes_br0=("default gw y.y.y.y")
Добавим бридж в автозагрузку:
ln –s /etc/init.d/net.lo /etc/init.d/net.br0 rc-update add net.br0 default
Закоментируем в файле /etc/xen/xend-config.sxp строчку
(network-script network-bridge)
Добавим в автозагрузку Xen:
rc-update add xenstored default
Добавим в fstab строчку:
none /proc/xen xenfs defaults 0 0
Переконфигурируем ядро, включив поддержку паравиртуализации:
Processor type and features ---> [*] Paravirtualized guest support ---> [*] Xen guest support -*- Enable paravirtualization code [*] Paravirtualization layer for spinlocks
Плюс сходим в Device Drivers —>
И включи все backend-ы:
<*> Block-device backend driver <*> Xen backend network device
Плюс в Xen driver support —>
Включим все галочками, т.е. вкомпилим в ядро.
Пересоберем ядро через genkernel и поправим grub.cfg
multiboot /xen.gz module /kernel-genkernel-x86_64-3.0.6-gentoo root=/dev/ram0 real_root=/dev/ld1/root dolvm domdadm init=/linuxrc module /initramfs-genkernel-x86_64-3.0.6-gentoo
Перегружаемся и можем создавать виртуальные машины.
Пример конфгурации:
cat /etc/xen/dp-rdp kernel = "/usr/lib/xen/boot/hvmloader" builder='hvm' vcpus=2 memory = 3400 shadow_memory = 8 name = "dp-rdp" vif = [ 'type=ioemu, bridge=br0, mac=00:16:3e:03:00:c5' ] disk = [ 'phy:/dev/ld1/dprdp,hda,w' , 'phy:/dev/ld1/dprdp_back,xvdb,w' , 'file:/root/Windows.x64.6in1.DVD-XiSO.iso,hdc:cdrom,r' ] device_model = '/usr/lib64/xen/bin/qemu-dm' boot="c" acpic=0 sdl=0 vnc=1 vncdisplay=1 vnclisten="0.0.0.0" vncpasswd='а не скажу' stdvga=0 usb=0
Запускается виртуалка командой:
xl create /etc/xen/dp-rdp