Вчера я написал маленький рецензент новый загрузчик GRUB 2. И одно неприятное обстоятельство привлекло мое внимание.
Ведь если ничего не работает, вы не обращаете на это внимания.
Итак, я решил попробовать виртуализацию на базе Xen. Она потребовала установить модифицированное ядро.
Конечно, о таких тонкостях разработчики еще не подумали, поэтому вновь добавленный пункт меню не заработал.
Очевидно, у нас есть два варианта.
Нам либо нужен скрипт, который правильно найдет ядро и правильно составит пункт меню, либо придется вручную вводить пункт меню в /boot/grub/grub.cfg самодельным методом.
Естественно, у меня не было четкого представления о том, как должен выглядеть правильный пункт меню, поэтому я обратился в Google. Он дал мне записку «xen с grub2 на debian etch» в блоге простого австралийца по имени Дэниел Матеос.
Статья мне помогла и все было бы хорошо, если бы Дэниел не снес свой блог :) Точнее, ему надоел Wordpress, и, засунув руку куда-то не туда, он создал новый сайт на django. Именно поэтому я решил написать здесь то, о чем говорилось в его статье.
Для большей безопасности.
GRUB2 привлек австралийских админов поддержкой разделов GPT/EFI, с помощью которых можно использовать диски емкостью более 2 ТБ (им требовалось 5 ТБ).
Как и все, кто гуглил тему документации GRUB2, ребята были очень расстроены.
Она ушла.
Поэтому они надеются, что нижеследующее будет вам полезно.
0. Подготовим GRUB
Откройте и отредактируйте /etc/kernel-img.conf, приведя его к такому виду: do_symlinks = yes
relative_links = yes
do_bootloader = no
do_bootfloppy = no
do_initrd = yes
link_in_boot = no
postinst_hook = update-grub
postrm_hook = update-grub
Все линии интуитивно понятны.
Конфиг определяет, как будет вести себя система при установке нового ядра из deb-пакета.
Более подробная информация в человек ядро-img.conf
Дальнейшие действия: # mount /dev/sda1 /boot
# apt-get install grub-pc
# grub-install /dev/sda
# apt-get install linux-image-2.6.18-5-amd64
Расшифровка построчно:
1. Смонтируйте нужный раздел в соответствующий каталог.
Это совершенно необязательно.
2. Устанавливаем, собственно, GRUB 2. Странно, если у вас его еще нет. 3. Зарегистрируйте загрузчик в загрузочном секторе жесткого диска.
Это может занять некоторое время.
4. Установите ядро.
После этого GRUB сам добавит его в меню.
Ядро нормальное, не Xen, поэтому проблем быть не должно.
1. Установка элементов Xen
# apt-get install xen-hypervisor-3.2-1-amd64
# apt-get install xen-docs-3.2 xen-utils-3.2-1 xen-tools
# apt-get install libc6-xen
# apt-get install linux-image-2.6.18-5-xen-amd64
# apt-get install xen-linux-system-2.6.18-5-xen-amd64
# apt-get install xen-linux-system-2.6.18-5-xen-vserver-amd64
Обратите внимание, что автор устанавливает конкретную версию ядра (2.6.18-5) для конкретной архитектуры (amd64).
Не нужно тупо копипастить эти команды.
Настройте их в соответствии с вашей системой и предпочтениями.
2.1. Добавление записи в меню вручную
Сразу напомню: это не правильный способ редактирования меню.По правилам мы должны написать скрипт, который автоматически создавал бы подобные записи для Xen. Но если время для вас более ценно, чем надежность системы, вы можете поступить так.
Все будет работать до следующего обновления загрузчика.
Добавим аналогичную запись в конец grub.cfg: menuentry “Xen 3.2″ {
multiboot (hd0,1)/xen-3.2-1-amd64.gz dom0_mem=256M
module (hd0,1)/vmlinuz-2.6.18-5-xen-amd64 root=/dev/sda2 ro
module (hd0,1)/initrd.img-2.6.18-5-xen-amd64
}
Теперь после перезагрузки вы должны оказаться в ядре dom0, работающем внутри гипервизора Xen.
2.2 Скрипт для корректного решения проблемы
Этот сценарий предоставлен в комментарии к сообщению человеком по имени Роджер Смит. Конечно, он нуждается в доработке, но фундамент заложен и отсюда можно понять логику сценария.
#!/bin/bash
set -e
kernels=`ls /boot/vmlinuz-*-xen-*|sed s/”.
*vmlinuz-”//` 2>/dev/null initrds=`ls /boot/vmlinuz-*-xen-*|sed s/”.
*initrd.img-”//` 2>/dev/null xenimgs=`ls /boot/xen-*|sed s/”.
*xen-”//|sed s/”.
gz”//` 2>/dev/null
MODULE=”}”
for i in $xenimgs; do
for j in $kernels; do
echo “Found xen kernel and image: $j –> $i” >&2
echo “$initrds” | grep $j > /dev/null 2>&1
if [ $? -eq 0 ]; then
MODULE=”module ${GRUB_DRIVE_BOOT}/initrd.img-$j
}”
else
MODULE=”}”
fi
cat << EOF
menuentry “Xen ${i} kernel $j” {
multiboot ${GRUB_DRIVE_BOOT}/xen-$i.gz dom0_mem=256M
module ${GRUB_DRIVE_BOOT}/vmlinuz-$j root=/dev/sda2 ro console=tty0
${MODULE}
EOF
echo “”
done
done
Необходимые действия:
1. Создайте файл для скрипта.
#touch /etc/grub.d/10_xen
2. Установите к нему права доступа: #chmod 755 /etc/grub.d/10_xen
3. Добавьте приведенный выше скрипт в /etc/grub.d/10_xen.
Вот и все.
Удачи! Теги: #настройка Linux #Xen #grub2
-
Сборник Упражнений Typescript
19 Oct, 24 -
Конфиги: Xml Против Api
19 Oct, 24 -
Российские Прорывные Исследования В Сфере It
19 Oct, 24 -
Внутри Атари 65Xe
19 Oct, 24 -
Блоки И Итераторы В Ruby
19 Oct, 24