Debian 6.0.3 как гостевая OS в Hyper-V
Как создать внутри Hyper-V виртуальную машину и прочую ерунду я рассказывать небуду. Но вот про особенность установки стабильного Debian как гостевой OS я хотел бы сказать пару слов. Особенность эта заключается в том, что стабильный на данный момент Debian Squeeze с ядром 2.6.32-5 не поддерживает сеть со стандартным сетевым адаптером Hyper-V. Реально сетевой интерфейс в VM появляется только тогда когда в настройках VM добавить «Legacy Network Adapter». Но оставлять так настроенную сеть не есть хорошо, так как все равно сетевая карта в VM будет вести себя нестабильно. И вообще ядро 2.6.32 в принципе старовато и не имеет никаких упоминаний о работе в виде гостевой ОС под Hyper-V. Поддержка плюшек Hyper-V реализована (хоть и на стадии Experimental) в ядре 2.6.38, которое доступно из backports репозитариев Debian.
Итак, сначала я попробовал просто поставить из backports ядро 2.6.38. Делается это очень просто, но как выяснилось после установки, для решения моего вопроса этот шаг был бесполезен так как в стандартной сборке ядра нужных мне модулей небыло включено. Рекомендую сразу ставить сырцы ядра 2.6.38, для начала надо убедится что в гостевой системе подключен репозитарий backports:
deb ftp://ftp.ua.debian.org/debian-backports/ squeeze-backports main contrib non-free
root@deb:~#
Если у вас ничего не выдает введение этой команды, добавте себе данный репозитарий в sources.list
Теперь обязательно:
Теперь можно ставить:
После перезагрузки я поднялся с новым ядром без проблем, но к сожелению, плюшки Hyper-V которые мне нужны были, в стандартной сборке отсутствовали. Ну не беда, ядро можно и самому пересобрать. Для этого сначала ставим исходные коды ядра
Дальше ставим инструменты для сборки ядра:
root@deb:~# apt-get install -y ncurses-dev kernel-package fakeroot
Также нам понадобятся linux-headers, тоже ставим
Теперь топаем в директорию /usr/src, тут лежит архив с установленными только что исходниками ядра 2.6.38
И розпаковываем архив с исходными кодами
Переходим в розархивированную директорию
Чтобы упростить себе процесс конфигурирования ядра (ато там опций мульйон!) советую скопировать конфиг бэкпортового ядра 2.6.38 в файлик .config
И вперед конфигурить:
все что нам нужно включить находится в
ставим напротив этого пункта букву «M» чтобы собрать это драйвера модулями. Настраивать или не настраивать остальное — дело ваше. Я заодно отключил явно непотребные вещи на сервере, к примеру поддержку Bluetooth и WI-FI.
Для выхода из menuconfig достаточно понажимать Esc и когда спросит о сохранении, нажмите «Сохранить»
После того как вы вернетесь в рутовую консоль можно приступить к сборке:
Собираем deb пакеты с ядром и хедерсами командой:
После отработки данной команды у нас в папке /usr/src появятся deb пакеты с ядром и хедерсами, можете убедиться:
total 105708
drwxr-xr-x 4 root root 4096 Nov 21 03:21 linux-headers-2.6.38-bpo.2-amd64
drwxr-xr-x 4 root root 4096 Nov 21 03:21 linux-headers-2.6.38-bpo.2-common
-rw-r--r-- 1 root root 7175142 Nov 21 06:21 linux-headers-2.6.38-hyperv_2.6.38-hyperv-10.00.Custom_amd64.deb
-rw-r--r-- 1 root root 27047394 Nov 21 06:15 linux-image-2.6.38-hyperv_2.6.38-hyperv-10.00.Custom_amd64.deb
lrwxrwxrwx 1 root root 26 Nov 21 03:21 linux-kbuild-2.6.38 -> ../lib/linux-kbuild-2.6.38
drwxr-xr-x 24 root root 4096 Nov 21 06:16 linux-source-2.6.38
-rw-r--r-- 1 root root 73881042 Jun 6 12:47 linux-source-2.6.38.tar.bz2
root@deb:~#
Установим сначала новое ядро:
Selecting previously deselected package linux-image-2.6.38-hyperv.
(Reading database ... 34205 files and directories currently installed.)
Unpacking linux-image-2.6.38-hyperv (from .../linux-image-2.6.38-hyperv_2.6.38-hyperv-10.00.Custom_amd64.deb) ...
Done.
Setting up linux-image-2.6.38-hyperv (2.6.38-hyperv-10.00.Custom) ...
Running depmod.
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 2.6.38-hyperv /boot/vmlinuz-2.6.38-hyperv
update-initramfs: Generating /boot/initrd.img-2.6.38-hyperv
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 2.6.38-hyperv /boot/vmlinuz-2.6.38-hyperv
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.38-bpo.2-amd64
Found initrd image: /boot/initrd.img-2.6.38-bpo.2-amd64
Found linux image: /boot/vmlinuz-2.6.38-hyperv
Found initrd image: /boot/initrd.img-2.6.38-hyperv
Found linux image: /boot/vmlinuz-2.6.32-5-amd64
Found initrd image: /boot/initrd.img-2.6.32-5-amd64
done
root@deb:~#
А потом хедерсы:
Selecting previously deselected package linux-headers-2.6.38-hyperv.
(Reading database ... 37161 files and directories currently installed.)
Unpacking linux-headers-2.6.38-hyperv (from .../linux-headers-2.6.38-hyperv_2.6.38-hyperv-10.00.Custom_amd64.deb) ...
Setting up linux-headers-2.6.38-hyperv (2.6.38-hyperv-10.00.Custom) ...
Examining /etc/kernel/header_postinst.d.
root@deb:~#
После этого нужно пересобрать initrd образ в котором будут нужные нам модули hyper-v. Для этого конфиг /etc/initramfs-tools/modules приведем к следующему виду:
# List of modules that you want to include in your initramfs.
# They will be loaded at boot time in the order below.
#
# Syntax: module_name [args ...]
#
# You must run update-initramfs(8) to effect this change.
#
# Examples:
#
# raid1
# sd_mod
hv_vmbus
hv_storvsc
hv_blkvsc
hv_netvsc
root@deb:~#
Соберем initrd-image командой
После этого перезагрузка. После перезагрузки убедимся что мы поднялись с только что собранным ядром
Linux deb 2.6.38-hyperv #1 SMP Mon Nov 21 03:58:25 EST 2011 x86_64 GNU/Linux
root@deb:~#
И нужные нам модули подгрузились и работают:
hv_utils 12589 0
hv_timesource 12351 0 [permanent]
hv_blkvsc 25932 3
hv_storvsc 21491 0
hv_netvsc 30579 0
scsi_mod 157361 6 hv_blkvsc,hv_storvsc,sg,sr_mod,sd_mod,libata
hv_vmbus 40605 4 hv_utils,hv_blkvsc,hv_storvsc,hv_netvsc
root@deb:~#
Если по каким либо причинам ядро в загрузчике grub автоматически выбрано неверно, порядковый номер нужного нам ядра можно настроить в /etc/default/grub опция GRUB_DEFAULT (только помните что в grub нумерация пунктов начинается из 0 а не с 1!)
После того как мы убедились что ядро поднялось то что нам нужно и модули доступны и работают можно в настройках гостевой машины удалять legacy network adapter и ставить обычный. Карточка нормально увидится и будет прекрасно конфигуриться как на лету командой ifconfig так и с помощью конфига /etc/network/interfaces
Ну вот и все 🙂 Всем удачно завиртуализироваться 😉
Комментов пока нет