Ставим Gentoo x64 + xen на диски размером 3Tb в Hetzner

16 октября 2011 г.

Для чего это нужно: Допустим вам нужно организовать пару тройку независимых удаленных рабочих столов. Не арендовать же под каждый 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.

Gentoo
Разбивать будем программой

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
Теги: рубрика Linux
  • Похожие статьи
  • Предыдущие из рубрики