LINUX.ORG.RU

GRUB2 и EFI

 , , efivars, ,


1

1

Начну немного издалека. Все началось с того, что я решил проапгрейдить свой Gentoo, а почитать о том, чем мне грозит переход с Gnome2 на Gnome3 я как-то не догадался (:E. Само собой пришлось переходить с OpenRC на systemd, разруливать зависимости и т.п. Но это совсем другая песня. Дело в том, что у systemd есть требование, чтобы ядро было собрано без built-in kernel command, а команда для запуска этого самого systemd была прописана в опциях загрузчика GRUB/GRUB2/LILO (по крайней мере так в Gentoo-wiki написано). Я же пользовался built-in kernel command, для загрузки с EFI раздела (соответственно диск размечен в GPT), пришлось emerg'ить GRUB2 (с опцией GRUB_PLATFORM=efi-x64). Удалось даже настроить чтоб с EFI-раздела грузился GRUB2, но как я не бился, отобразить русский шрифт (хотя бы unicode.pf) так и не удалось, не удалось изменить разрешение, подключить тему. Но это еще пол беды. Пока экспериментировал с GRUB2/efibootmgr снес напрочь весь bootorder EFI, то бишь с EFI/BOOT/bootx64.efi ничего не грузится. Пытался исправлять с Ubuntu LiveCD (и ничего в этом смешного нет!), но не получается получить доступ к EFI variables (т.к. там ядро без их поддержи и модуля нет). Отсюда вопросы. 1) Что делать с EFI, efibootmgr, чтоб он хотябы EFI/BOOT/bootx64.efi грузил. 2) Может с livecd это попробовать сделать? Какой подойдет? 2) Кто-нибудь осилил EFI + GRUB2 + темы + шрифты? Если да, то как (можно кусок конфига)?


grub2
uefi
systemd
gnome3

Да ты же эталон ССЗБ!

системд в систему тащит емнип gdm, можно было просто его не ставить или поставить с nodeps и пользоваться любым DE по вкусу. По сабжу не в курсе, юзаю первограб, uefi не нужен.

NeverLoved ★★★★★
()

1. Ты что-то совсем страшное сделал, если у тебя EFI не грузит EFI/BOOT/bootx64.efi (со сменных носителей) - это стандарт.

2. Можно грузить ядро и передавать ему аргументы напрямую из BootOption - см. man efibootmgr.

3. Загрузи шелл с флешки, шеллом линукс или граб, а потом линукс с модулем на efi vars.

4. В шелле может быть bcfg - местный аналог efibootmgr

5. Почитай арчвики, там довольно подробно https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface

gadfly ★★
()

Да, EFI + GRUB использую только в экстренных случаях, обычно сразу ядро с initramfs.

gadfly ★★
()

1) Что делать с EFI, efibootmgr, чтоб он хотябы EFI/BOOT/bootx64.efi грузил.

Первый раздел сохранился с fat? если нет то восстанавливай

2) Может с livecd это попробовать сделать? Какой подойдет?

Не тестировал, не знаю

3) Кто-нибудь осилил EFI + GRUB2 + темы + шрифты? Если да, то как (можно кусок конфига)?

EFI + GRUB2 - (темы + шрифты) осиливал на IA64. Я проще в свое время поступил - EFI раздел с fat системой использовал для всего установленного grub. Может у тебя картинки в другом месте и нет доступа на этапе загрузки?

Atlant ★★★★★
()
Ответ на: комментарий от NeverLoved

Спасибо КЭП

системд в систему тащит емнип gdm, можно было просто его не ставить или поставить с nodeps и пользоваться любым DE по вкусу. По сабжу не в курсе, юзаю первограб, uefi не нужен.

Вы, пардон, Gentoo-Wiki читали? Начиная с Gnome 3.8 systemd становится обязательным для его функцонирования (и при апгрейде до Gnome3.8 подтянется). Это раз. gdm - не зависимость systemd, a как раз зависимость gnome-base/gnome. Это два. Можете внятно аргументировать, отчего же, по вашему, uefi не нужен? Это три.

OEvg85
() автор топика
Ответ на: комментарий от gadfly

1. Ты что-то совсем страшное сделал, если у тебя EFI не грузит EFI/BOOT/bootx64.efi (со сменных носителей) - это стандарт.

efibootmgr -O

2. Можно грузить ядро и передавать ему аргументы напрямую из BootOption - см. man efibootmgr.

То есть от GRUB можно отказаться в пользу efibootmgr? Если не сложно, ткните носом, где об этом подробней почитать?

3. Загрузи шелл с флешки, шеллом линукс или граб, а потом линукс с модулем на efi vars. 4. В шелле может быть bcfg - местный аналог efibootmgr

Вы имеете ввиду built-in UEFI shell?

5. Почитай арчвики, там довольно подробно https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface

Спасибо, почитаю :)

OEvg85
() автор топика
Ответ на: комментарий от OEvg85

Вы имеете ввиду built-in UEFI shell?

Он самый.

То есть от GRUB можно отказаться в пользу efibootmgr? Если не сложно, ткните носом, где об этом подробней почитать?

Надо гуглить. Почему-то все попавшиеся мануалы советуют вкорячивать всё в ядро. В мане тоже не особо описано, параметр -@. А я делал как-то так:

echo 'root=UUID=34073059-bdf0-4b4a-9d85-16f3afdb0932 ro rootfstype=ext4 add_efi_memmap initrd=\EFI\gentoo\initramfs-gentoo.img' | iconv -f ascii -t ucs2 | efibootmgr -c -g -d /dev/sdb -p 1 -L "Gentoo" -l '\EFI\gentoo\vmlinuz-gentoo.efi' -@ -

gadfly ★★
()

чем мне грозит переход с Gnome2 на Gnome3

А ни кто не заставляет переходить на gnome3, вам достаточно замаскировать те версии пакетов, которые «тянут» gnome3, ну либо самому поправить ebuild`ы gnome2, что бы они ни коим образом не использовали версии пакетов, которые являются частями gnome3 и поместить их в локальный оверлей или написать запрос в багзиллу Gentoo с запросом на правку ebuild`ов gnome2.

Само собой пришлось переходить с OpenRC на systemd

Не обязательно, у gdm-3.8 можно отключить флаг systemd и включить флаг consolekit. А у остальных пакетов, которые тянут systemd можно включить флаг openrc-force, правда он пока отключён в профиле, но его можно разблокировать. Естественно будет работать не весь функционал, т.к. пока кое-что требует именно systemd, но работать в DE (gnome3) можно будет, да и systemd не нужно ставить.

что у systemd есть требование, чтобы ядро было собрано без built-in kernel command

Маловероятно, если вам так уж хочется systemd и built-in kernel command, то припишите в нём вызов systemd в качестве init.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 2)
Ответ на: комментарий от gadfly

Спасибо за подсказку. Дело в том, что моя материнская плата не имет built-in shell'a (здорово, правда?!). Однако спас т.н. DUET со своим shell'ом. Вся проблема заключалась в том, что после перехода на systemd, efivarfs на моей системе не смонтировалась автоматически. «Руками» подмонтировал, потом и GRUB2 установился без проблем. Да, кстати, initramfs не используется. ЗЫ. Огромное спасибо!

OEvg85
() автор топика
Ответ на: комментарий от kostik87

Спасибо, что просветил, не знал таких тонкостей. Кстати, про про включение/отключение флагов. Как это делается? Где расположен тот самый use.mask? Директории «/etc/portage/profile/» нет.

OEvg85
() автор топика

Что-бы добавить запить в efibootmgr, тебе нужно загрузить полностью тачку с EFI, тут без вариантов. Другой вопрос, если ты как-то умудрился снести все бутлисты... Тогда тыкай во все кнопки пытаясь восстановить дефолт.

Я как-то во время экспериментов на своем x230 снес все бут листы. Так он вообще ни с чего не грузился. Только беспомощно заходил в биос (%

Помогла волшебная штука «загрузить оптимальные настройки windows 8», которая восстановила дефолтный бут лист. Чуть инфаркт не схватил, вобщем :]

vasily_pupkin ★★★★★
()
Ответ на: комментарий от Atlant

EFI + GRUB2 - (темы + шрифты) осиливал на IA64
ia64

да ты суровый парень

parrto
()
Ответ на: комментарий от vasily_pupkin

ЕМНИП efivarfs deprecated, и там efivars или что-то такое похожее

Наоборот это более новая замена старому API: https://www.kernel.org/doc/Documentation/filesystems/efivarfs.txt

Кстати, efibootmgr 0.6.0 в gentoo не умеет работать с efivarfs, в то время как efibootmgr 0.6.0 из арча работает, но в арче исходники берутся из другого места, сам сейчас решаю эту проблему.

Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
Try 'modprobe efivars' as root.
gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

забиндь proc и sys (в хандбуке это опиано), и ты должен быть уже загружен с EFI.

в общем, УМВР.

рекомендую настроить ефи, загрузиться в sysresccd с ефёй, и оттуда всё это делать.

funeralismatic ★★★
()
Ответ на: комментарий от funeralismatic

забиндь proc и sys (в хандбуке это опиано), и ты должен быть уже загружен с EFI.

Я загружен с EFI:

ls -l /sys/firmware/efi 
итого 0
drwxr-xr-x 2 root root    0 Янв 10 10:35 efivars
-r-------- 1 root root 4096 Янв 21 10:40 systab

Все переменные есть в /sys/firmware/efi/efivars, это точка, куда смонтирована efivarfs — новое API для доступа к переменным EFI без ограничения в размер переменной 1024 байта. Старого API /sys/firmware/efi/vars у меня нет (ядро 3.12.3 из арча), а efibootmgr из генты пытается туда обращаться. Проблема решается просто: нужно всего лишь собрать efibootmgr не тот, что в portage, а отсюда (из master): https://github.com/vathpela/efibootmgr (не забыв библиотеку-зависимость отсюда: https://github.com/vathpela/efivar). Если кому-то нужно, могу даже свои ебилды выложить.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

Если кому-то нужно, могу даже свои ебилды выложить.

такие вещи не спрашивают. давай ссылку на свой оверлей. я как раз себе пилю флешку для всяких подобных случаев.

заранее благодарен.

funeralismatic ★★★
()
Ответ на: комментарий от funeralismatic

такие вещи не спрашивают. давай ссылку на свой оверлей. я как раз себе пилю флешку для всяких подобных случаев.

Своего оверлея у меня нет. Ебилды выложил на пастбин.

sys-boot/efivar-0.7 — библиотека для доступа к переменным efi в линуксе, нужная, чтобы работал этот efibootmgr.

sys-boot/efibootmgr-9999 — efibootmgr из гита, он использует эту библиотеку (там же на гитхабе есть версия 0.6.1, но в ней ещё нет поддержки библиотеки efivar и, соответственно, efivarfs).

Я не утверждаю, что там всё идеально, я мог где-то налажать. Ебилд для efibootmgr переделывал из того, что в дереве.

gentoo_root ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.