Gentoo Xen 4
Повесть о том как я Xen4 мучал… или он меня…..
Что мы имеем:
uname -a Linux Gentoo 2.6.34-xen-r4 #3 SMP Sat Jan 1 19:30:46 EET 2011 x86_64 AMD Phenom(tm) II X4 925 Processor AuthenticAMD GNU/Linux |
И почти мертвый винт на 500Г
5 Reallocated_Sector_Ct 0x0033 090 090 140 Pre-fail Always FAILING_NOW 873 |
Перед установкой пакетов необходимо снять с них архитектурное маскирование (~x64):
echo "app-emulation/xen app-emulation/xen-tools sys-kernel/xen-sources" >> /etc/portage/package.keywords |
До начала сборки нужно выполнить следующие шаги:
1. Добавить в /etc/make.conf опции компилятора:
CFLAGS="-march=native -O2 -pipe -fomit-frame-pointer -mfpmath=sse -funroll-loops -mno-tls-direct-seg-refs" CXXFLAGS="${CFLAGS}" |
2. Там же (в /etc/make.conf), можно включить опции сборки бинарных пакетов (готовые пакеты emerge разместит в /usr/portage/packages), они пригодятся для ускоренного развертывания domU:
FEATURES="buildpkg" |
3. Пересобрать текущее окружение с новой опцией компилятора, которая нужна корректной работы системного окружения с гипервизором xen (заодно построятся бинарные пакеты окружения):
emerge -evat world |
Предварительный этап окончен, можно запускать сборку/установку пакетов xen, xen-tools и исходников адаптированного для Xen ядра — xen-sources:
emerge -av xen-sources xen xen-tools |
По USE-флагам рекомендаций особо не будет, всё на ваше усмотрения, для себя я выбрал api ioemu screen hvm к пакету app-emulation/xen-tools
echo app-emulation/xen-tools api ioemu screen hvm >> /etc/portage/package.use emerge xen-sources xen xen-tools |
После сборки необходимо переключить симлинк /usr/src/linux на новое дерево исходного кода ядра:
eselect kernel list Available kernel symlink targets: [1] linux-2.6.34-gentoo-r1 * [2] linux-2.6.34-xen-r4 eselect kernel set 2 |
On amd64 you will also need to add sys-devel/dev86 if you plan on using hvm.
emerge -av dev86 |
Если у вас не собрался XEN (в моем случае 4.0.1) и вывалился с ошибкой
In file included from tapdisk.h:62, from blk_linux.c:4: ../lib/blktaplib.h:199:1: error: "WRITE" redefined In file included from blk_linux.c:3: /usr/include/linux/fs.h:150:1: error: this is the location of the previous definition make[5]: *** [blk_linux.o] Ошибка 1 make[5]: Leaving directory `/usr/src/xen/xen-4.0.1/xen-4.0.1/tools/blktap/drivers' make[4]: *** [subdir-install-drivers] Ошибка 2 make[4]: Leaving directory `/usr/src/xen/xen-4.0.1/xen-4.0.1/tools/blktap' make[3]: *** [subdirs-install] Ошибка 2 make[3]: Leaving directory `/usr/src/xen/xen-4.0.1/xen-4.0.1/tools/blktap' make[2]: *** [subdir-install-blktap] Ошибка 2 make[2]: Leaving directory `/usr/src/xen/xen-4.0.1/xen-4.0.1/tools' make[1]: *** [subdirs-install] Ошибка 2 make[1]: Leaving directory `/usr/src/xen/xen-4.0.1/xen-4.0.1/tools' make: *** [install-tools] Ошибка 2 |
Полазив по форумах разработчиков нашел патч http://sticky.reverse.kiev.ua/1005/
И заодно решил собрать руками все это безобразие.
Качаем исходники Xen-4.0.1
cd /usr/src/xen wget http://bits.xensource.com/oss-xen/release/4.0.1/xen-4.0.1.tar.gz |
распаковываем
tar -xvf xen-4.0.1.tar.gz |
Скачиваем патч отсюда http://sticky.reverse.kiev.ua/1005/raw/
и применяем его к нашим исходникам
patch -p1 < patch.txt |
Теперь собираем все это :
make xen && make tools && make install-xen && make install-tools |
Если хотите собрать с ядром которое рекомендует разработчик, то:
make && make xen && make tools && make install-xen && make install-tools |
Конфигурируем ядро:
cat /usr/src/linux/.config | grep -i xen | grep -v ^# CONFIG_X86_64_XEN=y CONFIG_X86_XEN_MCE=y CONFIG_XEN_PCIDEV_FRONTEND=y CONFIG_XEN=y CONFIG_XEN_INTERFACE_VERSION=0x00030207 CONFIG_XEN_PRIVILEGED_GUEST=y CONFIG_XEN_PRIVCMD=y CONFIG_XEN_XENBUS_DEV=y CONFIG_XEN_BACKEND=y CONFIG_XEN_BLKDEV_BACKEND=y CONFIG_XEN_BLKDEV_TAP=y CONFIG_XEN_BLKDEV_TAP2=y CONFIG_XEN_BLKBACK_PAGEMAP=y CONFIG_XEN_NETDEV_BACKEND=y CONFIG_XEN_NETDEV_TX_SHIFT=8 CONFIG_XEN_PCIDEV_BACKEND=y CONFIG_XEN_PCIDEV_BACKEND_VPCI=y CONFIG_XEN_SCSI_BACKEND=y CONFIG_XEN_USB_BACKEND=y CONFIG_XEN_SCSI_FRONTEND=m CONFIG_XEN_USB_FRONTEND=m CONFIG_XEN_GRANT_DEV=y CONFIG_XEN_DISABLE_SERIAL=y CONFIG_XEN_SYSFS=y CONFIG_XEN_NR_GUEST_DEVICES=256 CONFIG_XEN_COMPAT_LATEST_ONLY=y CONFIG_XEN_COMPAT=0xffffff CONFIG_XEN_VCPU_INFO_PLACEMENT=y CONFIG_XEN_SMPBOOT=y CONFIG_XEN_DEVMEM=y CONFIG_XEN_BALLOON=y CONFIG_XEN_SCRUB_PAGES=y CONFIG_XEN_DEV_EVTCHN=y |
Тут можно взять мой конфиг ядра http://sticky.reverse.kiev.ua/1006/ (AMD64, Phenom X4, ATI HD3200)
Компилируем ядро:
make && make modules_install mount /boot cp vmlinux /boot/vmlinux-2-6-34-xen |
cat /boot/grub/menu.lst ...... title Xen-4 kernel 2.6.34-new root (hd0,0) kernel /boot/xen.gz dom0_mem=1024M module /boot/vmlinux-2-6-34-xen root=/dev/sda5 dummy=dummy |
Во время загрузки ядро ругалось на отсутствие микрокодов устройств, в моем случае он ругался на видео-карту, решение проблеммы для меня:
скомпилировать микрокод
emerge -av radeon-ucode |
добавить 2 строки в файл .config ядра:
CONFIG_EXTRA_FIRMWARE="radeon/R600_rlc.bin" CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware" |
Еще может потребовать микрокод на процессор, см. сюда http://www.gentoo.ru/node/21477
В теории, все должно загрузиться.
Добавляем Xen в автозагрузку:
rc-update add xend default |
Смотрим состояние:
# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 1000 4 r----- 5205.2 |
Теперь посмотрим как вообще работает Xen, для этого попробуем запустить виртуальную машину посредством HVM (hardware virtualization mode)
HVM-домен Xen (hardware virtualization mode) — полностью виртуализированный домен Xen. Требует для своего исполнения поддержки аппаратной виртуализации со стороны процессора. Позволяет исполнять любые операционные системы, предназначенные для работы на процессоре этой архитектуры (C)
Я буду пытатся установить Gentoo в DomU Xen
Для этого качаем загрузочный диск
cd soft/ wget http://mirror.yandex.ru/gentoo-distfiles/releases/amd64/current-iso/install-amd64-minimal-20101209.iso |
Сама ОС будет находится на LVM2 разделе.
Инициализируем винт и создадим на нем раздел на 20G
Добавляем физ.устройство
pvcreate /dev/sdb |
Поверх создаем виртуальную группу
vgcreate virtuals /dev/sdb |
В пределах группы создаем логический том на 20G
lvcreate -L20G -n gentoo virtuals |
Смотрим, что получилось
lvdisplay File descriptor 6 (pipe:[14917]) leaked on lvdisplay invocation. Parent PID 9279: bash --- Logical volume --- LV Name /dev/virtuals/gentoo VG Name virtuals LV UUID Or1vRI-IGJi-s7TB-bT1x-pDrd-Bkpx-DY7S0W LV Write Access read/write LV Status available # open 2 LV Size 20,00 GiB Current LE 5120 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:1 |
Сам том должен появится в /dev
ls -la /dev/virtuals/ итого 0 drwxr-xr-x 2 root root 80 Янв 2 12:03 . drwxr-xr-x 19 root root 4260 Янв 2 12:03 .. lrwxrwxrwx 1 root root 7 Янв 2 10:03 gentoo -> ../dm-0 lrwxrwxrwx 1 root root 7 Янв 2 11:52 hdd -> ../dm-1 |
Вродь все готово для запуска, но еще необходимо подготовить конфиг для Xen
Создадим папку /etc/xen/config
А внутри нее наш конфиг gentoo
cat gentoo import os, re arch = os.uname()[4] if re.search('64', arch): arch_libdir = 'lib64' else: arch_libdir = 'lib' kernel = '/usr/lib/xen/boot/hvmloader' builder = 'hvm' memory = '256' vcpus=1 device_model='/usr/lib/xen/bin/qemu-dm' disk = [ 'phy:/dev/virtuals/gentoo,ioemu:sda,w', 'file:/data/soft/install-amd64-minimal-20101209.iso,hdc:cdrom,r' ] name = 'gentoo' vif = [ 'type=ioemu, mac=00:16:3e:55:44:12, bridge=xenbr0, model=rtl8139' ] boot='d' vnc=1 vncconsole=0 vncdisplay=31 sdl=0 pae=1 acpi=1 apic=1 #on_poweroff = 'destroy' #on_reboot = 'restart' #on_crash = 'destroy' |
Для запуска amd64 ядра в виртуальной машине установлена опция pae=1.
После запуска мы можем подключится к экрану нашей ОС через VNC протокол, для чего нам необходим какой нибудь VNC-client (в моем случае отлично работает KRDC под KDE4)
Для инициализации VNC мы указали такие опции:
vnc=1 vncconsole=0 vncdisplay=31 |
Что говорит о том, что мы сможем подключится к экрану такими способами:
vncviewer :0
или KRDC по адресу 127.0.0.1:31
Но как-то у меня не заладилось с офф.документацией и мне не удалось подключится этими двумя способами, а прошло подключение через KRDC по адресу 127.0.0.1:5931 (порт = 5900+vncdisplay)
netstat -anp | grep 5931 tcp 0 0 127.0.0.1:5931 0.0.0.0:* LISTEN 11435/qemu-dm |
boot=’d’ – указывает на запуск со второго диска 🙂 тоесть CD-ROM
NetInstall запустился без проблем. Устройства которые определились в виртуальной машине:
lspci 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] 00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 01) 00:02.0 VGA compatible controller: Cirrus Logic GD 5446 00:03.0 Class ff80: XenSource, Inc. Xen Platform Device (rev 01) 00:04.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 20) |
Собираем базовую систему Gentoo по HandBook
Очень кратко опишу инсталяцию для тех кто впервые столкнулся с Gentoo:
#Делим винт cfdisk /dev/hda #hda1 - /boot #hda5 - / #hda6 - swap #Форматируем разделы mkfs.ext3 /dev/hda1 && mkfs.ext4 /dev/hda5 && mkswap /dev/hda6 #Цепляем разделы к системе (монтируем) mount /dev/hda5 /mnt/gentoo && mkdir /mnt/gentoo/boot && mount /dev/hda1 /mnt/gentoo/boot && swapon /dev/hda6 #Монтируем псевдоФС mount -t proc none /mnt/gentoo/proc && mount -o bind /dev /mnt/gentoo/dev #качаем архив с базовой системой и деревом портежей cd /mnt/gentoo/ wget http://mirror.yandex.ru/gentoo-distfiles/releases/amd64/current-stage3/stage3-amd64-20101230.tar.bz2 wget http://mirror.yandex.ru/gentoo-distfiles/snapshots/portage-latest.tar.bz2 # распаковываем tar xvjpf stage3-*.tar.bz2 tar xvjf portage* -C usr/ # Правим /mnt/gentoo/etc/resolv.conf и /mnt/gentoo/etc/conf.d/net nano /mnt/gentoo/etc/resolv.conf nameserver 193.24.25.1 nano /mnt/gentoo/etc/conf.d/net # This network configuration was written by net-setup config_eth0=( "10.0.1.121 broadcast 10.0.1.255 netmask 255.255.255.0" ) routes_eth0=( "default via 10.0.1.1" ) #Заходим (chroot) в нашу голую систему chroot /mnt/gentoo /bin/bash env-update source /etc/profile export PS1="(chroot) $PS1" #Устанавливаем пароль для root passwd #качаем ядро и компилим его по вкусу: emerge -av gentoo-sources && cd /usr/src/linux/ && make menuconfig && make && make modules_install #Ставим загрузчик и учим его грузить наше ядро emerge -av grub && cp arch/x86/boot/bzImage /boot/vmlinux grep -v rootfs /proc/mounts > /etc/mtab nano /boot/grub/menu.lst default 0 timeout 30 splashimage=(hd0,0)/boot/grub/splash.xpm.gz title Gentoo Linux 2.6.36-r1 root (hd0,0) kernel /boot/vmlinux root=/dev/sda5 #Запихиваем загрузчик в MBR grub-install /dev/hda # Уходим в reboot reboot |
Кому лень вбивать команды может поставить Debian с NetInstall образа 🙂
…..
…….
много выпитого пива
………
…………
У меня Gentoo в DomU под управлением Xen запустилась и прекрасно работала (я так думаю), но ведь не серьёзно использовать Linux в DomU и при этом не использовать все прелести паравиртуализации.
И я было собрался переводить свой домен в режим паравиртуализации…. и тут меня ждал сюрприз
xm dmesg | grep -i svm |
И пустота! Виртуализация в BIOS включена! О_о
….тут много матов……
А я то думал, чего так систему плющит.
Время познее… нада переставать выделываться…. плюнул и собрал то ядро, которое рекомендуют в Xen – 2.6.32-27
Скачать конфиг можно тут pv-ops-kernel -2.6.32-27
Собрал руцями ядро
make menuconfig make make modules_install cp vmlinux /boot/ |
И привалило мне счастье
xm dmesg | grep -i svm (XEN) HVM: SVM enabled |
Приступим к переводу нашего DomU в паравиртуальный режим.
Для чего я создал еще один конфиг gentoo_new в котором буду в будущем описывать конфигурацию.
Но для начала нужно обьяснить виртуалке, что она будет работать под гипервизором
Ставим ксеновское ядро:
emerge -av /usr/portage/sys-kernel/xen-sources/xen-sources-2.6.34-r4 eselect kernel list Available kernel symlink targets: [1] linux-2.6.34-xen-r4 * [2] linux-2.6.36-gentoo-r6 make menuconfig |
Тут отмечаем такие опции
Processor type and features ---> [*] Xen-compatible Bus options (PCI etc.) ---> [*] Xen PCI Frontend XEN ---> [ ] Privileged Guest (domain 0) <*> Backend driver support <*> Block-device backend driver <*> Block-device tap backend driver <*> Block-device tap backend driver 2 <*> Network-device backend driver (8) Maximum simultaneous transmit requests (as a power of 2) [ ] Pipelined transmitter (DANGEROUS) < > Network-device loopback driver < > TPM-device backend driver <M> SCSI backend driver <M> USB backend driver <*> Block-device frontend driver <*> Network-device frontend driver <*> Network-device frontend driver acceleration for Solarflare NICs <M> SCSI frontend driver <M> USB frontend driver [*] Taking the HCD statistics (for debug) [ ] HCD suspend/resume support (DO NOT USE) < > User-space granted page access driver <*> Framebuffer-device frontend driver <*> Keyboard-device frontend driver [*] Disable serial port drivers <*> Export Xen attributes in sysfs (256) Number of guest devices Xen version compatibility (no compatibility code) ---> [*] Place shared vCPU info in per-CPU storage |
Брал информацию с таких источников:
Gentoo-Wiki
pingvin.sumy.ua
Далее
make && make modules_install cp vmlinux /boot/vmlinux |
Ядро у нас есть, теперь нужно подготовить саму ОС:
cat /boot/grub/menu.lst .... title Gentoo Linux 2.6.34-r4 root (hd0,0) kernel /boot/vmlinux root=/dev/xvda5 .... |
Почему xvda5 ? На xgu.ru есть такое:
В конфигурационном файле нужно перейти на использование дисков типа xvda. Для этого нужно изменить название корневой файловой системы (сделать /dev/xvda1), изменить параметр disk в конфигурационном файле домена чтобы в нём использовались имена xvda и изменить /etc/fstab внутри самого домена
А также такие изменения:
# cd /dev # mknod hvc0 c 229 0 # chown root:tty hvc0 # chmod 600 hvc0 # grep hvc0 /etc/inittab 1h:2345:respawn:/sbin/agetty 38400 hvc0 # grep hvc0 /etc/securetty hvc0 # cat /etc/fstab /dev/xvda1 /boot ext3 noauto,noatime 1 2 /dev/xvda5 / ext4 noatime 0 1 /dev/xvda6 none swap sw 0 0 |
Источник
Готово, систему мы подготовили. Приступим к сочинению конфига.
Так как мы будем использовать pv_ops, то нет необходимости указывать какое ядро грузить, а просто передаем управление pygrub
Вот такой конфиг получится в итоге(немного почистил от лишнего):
cat /etc/xen/config/gentoo_new bootloader = '/usr/bin/pygrub' memory = '256' vcpus=1 disk = [ 'phy:/dev/virtuals/gentoo,xvda,w' ] root="root=/dev/xvda5 ro console=hvc0" name = 'gentoo-new' vif = [ 'mac=00:16:3e:00:00:11, bridge=eth0' ] boot='c' vnc=1 vncconsole=0 vncdisplay=30 sdl=0 pae=1 acpi=1 apic=1 on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'destroy' |
Запускаем наш домен:
xm create gentoo_new |
Подключаемся к консоли:
xm console gentoo-new |
И наблюдаем как грузится ОС
To be continued….