15 дек. 2014 г.

Памятка по установке GRUB2 и загрузке через EFI в Gentoo x64.

ПРЕДУПРЕЖДЕНИЕ! Всё, что вы делаете со своим компьютером вы делаете на свой страх и риск. Эта заметка создавалась с целью сохранения накопленного опыта для себя. Возможно, в будущем, я ещё раз проверю все действия и внесу в текст уточнения.

Уж очень много времени убил на поиск рабочего варианта. Итак!

Во-первых, при разметке диска нужно создать раздел с файловой системой FAT. На нём и будут располагаться ядро системы или Grub 2. Этот раздел нужно подключить в /boot/EFI. Хотя я в своё время сделал весь раздел /boot в FAT32. Далее рассматривается именно этот вариант.

Что нам понадобится:

  • sys-boot/grub — непосредственно GRUB2. Не забываем включить efi-64 в GRUB_PLATFORMS в файле /etc/portage/make.conf.
  • sys-boot/os-prober — нужен если мы ходим, чтобы GRUB2 находил что-то ещё, кроме ядер Linux, например, загрузчик Windows.
  • sys-boot/efibootmgr — утилита для настройки EFI.

После сборки нужных пакетов устанавливаем GRUB2:

grub2-install --target=x86_64-efi --efi-directory=/boot

Не забываем положить нужные ядра в /boot. После этого можно сгенерировать конфиг для grub2:

grub2-mkconfig -o /boot/grub/grub.cfg

Проверим, всё ли в порядке c EFI:

# efibootmgr -v
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000,0001
Boot0000* GRUB2 HD(1,800,f3800,927dfa8b-a8da-4a33-ae18-3cbab9449dbb)File(\EFI\gentoo\grubx64.efi)
Boot0001* Windows Boot Manager HD(1,800,96000,b0a33380-d8c1-4402-b7da-7d1214ebfd4c)File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...s................

У меня почему-то после первой установки был указан тот же диск, что и для Windows. В любом случае можно удалить неугодные записи через:

efibootmgr -b XXXX -B

и создать угодную нам. ВНИМАНИЕ! Главное не перестарайтесь и не полудаляйте что-нибудь ценное.

efibootmgr -c -d /dev/sdb -p 1 -L "GRUB2" -l \\EFI\\gentoo\\grubx64.efi

(двойных слешей можно не делать, если взять имя файла в кавычки). Обратите внимание на направление слеша - оно не типичное для *nix систем.

Если лень ждать каждый раз загрузку GRUB и выбирать ядро, можно скопировать нужную версию ядра в любую папку в /boot/EFI и указать путь к ней:

efibootmgr -c -d /dev/sdb -p 1 -L "Gentoo Linux" -l \\EFI\\gentoo\\vmlinuz.efi

В результате получим что-то вроде:

# efibootmgr -v
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000,0002,0001
Boot0000* Grub 2 HD(1,800,f3800,927dfa8b-a8da-4a33-ae18-3cbab9449dbb)File(\EFI\gentoo\grubx64.efi)
Boot0001* Windows Boot Manager HD(1,800,96000,b0a33380-d8c1-4402-b7da-7d1214ebfd4c)File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...s................
Boot0002* Gentoo Linux HD(1,800,f3800,927dfa8b-a8da-4a33-ae18-3cbab9449dbb)File(\EFI\gentoo\vmlinuz.efi)

Проверяем что пути к файлам указаны верно, слеш в нужную сторону (я убил некоторое время пока пытался использовать разделитель "/", потом ещё немного времени, с тем, чтобы правильно прописался "\".

Если что-то сделали не так (кстати, нужно определённым образом сконфигурировать ядро, об этом позже), то просто выбираем в меню загрузки GRUB2 и грузим рабочее ядро. Если грузить ядро напрямую, то загрузка компьютера производится очень быстро!!!

20 февр. 2014 г.

Загружаем загрузчик linux по сети

Надеюсь со временем эта заметка вырастет во что-то больше. Но хотелось бы описать просто то, что раньше не мог понять и собирал по крупицам на русском языке, а потом нашёл немного времени разобраться что и как. Закончилось всё хорошо. Загрузилось красивое меню, куда можно добавлять разные нужные штуковины для загрузки по сети. Грузить пока ничего не будем, может быть позже :) Всё действо происходит под Gentoo, но пользователи иных дистрибутивов (и даже пользователи BSD) могут воспользоваться своими apt-get, aptitude, rpm, pacman, portmaster и т.д. по вкусу. Возможно, пути не всегда будут совпадать, надеюсь вы разберётесь сами.

Первое, что нужно сделать, это настроить свой DHCP-сервер. Обычно я использую net-misc/dhcp, т.е. isc-dhcpd. Всё, что нам нужно, это указать что мы будем грузить по сети и с какого сервера.

filename="pxelinux.0" # Какой мы файл будем загружать с нашего сервера. Можно указать файл где-то глубже в папке.
next-server="192.168.1.1" # Адрес нашего TFTP-сервера.

Добавляем эти строчки в глобальную секцию dhcpd.conf, если хотим предоставить наши услуги всем нашим сетям или в секцию subnet нужной сети. next-server можно не указывать, если ваш TFTP-сервер расположен на том же хосте, что и DHCP.

Как вы уже наверно поняли, нам понадобится ещё и TFTP-сервер. Можно использовать, например, net-ftp/tftp-hpa или net-ftp/atftp. Оба сервера ставятся без проблем, настройки минимальные. Корень TFTP сервера в обоих случаях размещается в /tftproot/. Запускаем наш TFTP-сервер и начнём заниматься его наполнением.

Третий компонент, необходимый для загрузки по сети, как ни странно, загрузчик linux. Его мы можем найти в пакете sys-boot/syslinux. В нём содержится множество разных загрузчиков, в том числе, необходимый нам pxelinux. После установки пакета заглядываем в /usr/share/syslinux и /usr/share/doc/syslinux-{ВЕРСИЯ}. В первой папке мы можем найти все необходимые нам файлы, а во второй можно узнать подробности о настройке загрузчика. Попробуем загрузить красивое меню для выбора того, что нам загружать в дальнейшем. Для этого нам понадобится загрузчик pxelinux.0 и красочное меню vesamenu.c32 (или текстовое меню menu.c32). Скопируем их в корень нашего TFTP-сервера, папку /tftproot/. Расскажем загрузчику что же мы хотим загружать. Для этого создадим в папке с pxelinux.0 папку с именем pxelinux.cfg. Внутри папки размещаются файлы конфигурации для наших клиентов. Можно задать свой индивидуальный файл для каждого клиента, группы и по умолчанию. Порядок поиска файлов конфигурации можно найти в файлах документации /usr/share/doc/syslinux-{ВЕРСИЯ}/pxelinux.txt.bz2 и menu.txt.bz2. Создадим в папке pxelinux.cfg файл default, который будет использоваться всеми клиентами для которых вы не задали конфигурацию.

UI vesamenu.c32 # Указываем какой интерфейс мы будем использовать

MENU TITLE My PXE boot menu # Заголовок меню
PROMPT 0 # Пункт меню, выбираемый по умолчанию (нумерация с 0)
TIMEOUT 50 # Количество секунд до автоматического выбора пункта меню умноженное на 10

LABEL Boot from first HDD # наименование пункта меню
LOCALBOOT 0x80 # загружаемся с первого HDD

Теперь можно попробовать запустить другой ПК или даже виртуальную машину в VirtualBox и вы должны увидеть красивую меню с единственным пунктом загрузки с HDD.

На этом всё. Следите за обновлениями данного поста! Всем удачной загрузки по сети!!!