UEFI: различия между версиями

Материал из ALT Linux Wiki
м (→‎Примечания: поправки)
(переработано на корню, HOWTO осталось в старых ревизиях и более не нужно)
Строка 1: Строка 1:
[[Category:Devel]]
[[Category:Devel]]
[[Category:Distributions]]
[[Category:Distributions]]
{{Stub}}


= Поддержка UEFI в ALT Linux =
= Поддержка UEFI в ALT Linux =
== Цель ==
== Цель ==
Обеспечить возможность совместного использования с ОС, установленными в UEFI-режиме, прямо сейчас (переключение BIOS/UEFI более хлопотно); предоставить возможность использования «железа» вообще без BIOS (legacy mode).
Обеспечить возможность совместного использования с ОС, установленными в UEFI-режиме, без мороки с переключением BIOS/UEFI; предоставить возможность использования UEFI-«железа» без CSM<ref>2013: такое уже начинает появляться</ref>.


== Состояние ==
== Состояние ==
В работе, есть промежуточные итоги.
Бета.  Нормально устанавливаемся на bare metal и в мультизагрузку с, например, openSUSE 12.2 и Windows 8.
 
Для сборки образов требуется свежий Sisyphus, в т.ч.:
* {{pkg|mkimage}} 0.2.5+ (для SB — 0.2.7+)<ref>рекомендуется также {{pkg|mkimage-profiles}} 0.9.8+ или свежий гит {{pkg|mkimage-profiles-desktop}}</ref>
* {{pkg|xorriso}} 1.2.4[http://git.altlinux.org/people/mike/packages/?p=libisofs.git;a=commitdiff;h=786a1a8f11f1e6d0e39daf938992f104fdf25a5d +]
* {{pkg|syslinux}} 4.04-alt5+<ref>в апстриме syslinux нужное добавлено в 4.06</ref>
* {{pkg|evms}} 2.5.5-alt30+
* {{pkg|guile-evms}} 0.4-alt14+
* {{pkg|alterator-vm}} 0.4.2-alt1+


== Результат ==
== Результат ==
По состоянию на январь 2013 года начальная поддержка UEFI включена в альфу [[Альт Линукс 7.0 Кентавр|Centaurus 7.0]] и [[регулярные сборки образов]]; есть экспериментальные live-сборки с подписанным загрузчиком для UEFI Secure Boot.
По состоянию на февраль 2013 года начальная поддержка UEFI включена в альфу [[Альт Линукс 7.0 Кентавр|Centaurus 7.0]] и [[Regular|регулярные сборки образов]]; последние также включают подписанный загрузчик и публичный ключ для работы без отключения Secure Boot.


Всё так же доступен более ранний [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/efi/live-uefi-20121112-x86_64.iso экспериментальный Live-образ], поддерживающий загрузку в EFI mode и Legacy mode, будучи записанным на CD/DVD-болванку или USB-флэшку.  Проверен на ASUS/Gigabyte UEFI и MacBook/MBP EFI.
Реализация поддерживает запись на CD/DVD-болванку или USB-флэшку и загрузку в EFI mode или Legacy modeПроверена на ASUS/Gigabyte UEFI и MacBook/MBP EFI.


Также есть пробный [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/efi/icewm-uefi-20121115-x86_64.iso графический инсталятор], ныне требующий [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/efi/README некоторого внимания и ручной работы] для установки.
== Применение ==
Как обычно; [http://www.rodsbooks.com/efi-bootloaders/principles.html отличия] состоят в разбивке и установке загрузчика:
* требуется подключить в {{path|/boot/efi}} существующий или новый FAT32-раздел с GPT-типом ESP (EFI System Partition) размером ~100—500 Мб;
* модуль установки загрузчика предложит вариант «EFI», с которым стоит согласиться<ref>при установке загрузчика в MBR или раздел, а не ESP, загрузка в EFI mode не пройдёт</ref>.


== mkimage ==
Следует устанавливать 64-битные дистрибутивы; запуск 32-битного дистрибутива возможен в режиме BIOS/CSM (Compatibility Support Module), а в режиме EFI такая установка не будет сочтена загрузочной<ref>OVMF в составе virtualbox обычно загружает EFI Shell, а поведение фирмварей на железе варьирует от представления меню пунктов загрузки до перехода к настройкам</ref>.
Начальная поддержка сборки UEFI-загружаемых гибридных образов добавлена в {{pkg|mkimage-0.2.5}}; в качестве образца можно использовать example4 из документации пакета, а суть требуемых изменений в профиле сводится к:
* добавлению в инсталер {{pkg|dosfstools}} ({{pkg|efibootmgr}} будет вытянут текущим {{pkg|alterator-grub}});
* добавлению в базовую устанавливаемую систему {{pkg|grub2-efi}};
* добавлению в {{path|modules}} для {{pkg|propagator}} {{path|kernel/drivers/firmware}} ради {{path|efivars.ko}};
* передаче mkimage значения <tt>EFI_BOOTLOADER = elilo</tt> (другие типы бутлоадеров ещё не реализованы, см. {{path|tools/mki-copy-efiboot}}; установка этого приведёт к добавлению в <tt>BOOT_TYPE</tt> значения <tt>efiboot</tt>).


== HOWTO ==
При загрузке с образа в EFI-режиме загрузчиком будет графический rEFInd либо совсем текстовое ELILO, в BIOS-режиме — синяя текстовая либо брендированная графическая менюшка SYSLINUX.
Приборы и материалы:
* свежий Sisyphus (в т.ч. xorriso 1.2.4+, syslinux-4.04-alt5+ либо 4.06+)
* «простая» live-исошка (например, [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/tmp/live-efi-20121112-x86_64.iso live-efi] с нужными утилитами и live-install, но пока без EFI-загрузчика)


Действия от имени root (может быть удобно записать в скрипт):
После собственно загрузки и логина именем root в EFI-режиме должны отработать команды
 
modprobe efivars
cd ${TMP:-/tmp}
efibootmgr
apt-get install bsdtar dosfstools elilo syslinux xorriso
в BIOS-режиме вторая из них скажет
rm -rf ISO
mkdir ISO
cd ISO
wget -O - http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/tmp/live-efi-20121112-x86_64.iso | bsdtar -xf -
mkdir -p EFI/BOOT
cp -a syslinux/alt0/{vmlinuz,full.cz} EFI/BOOT
cp -a /usr/lib64/efi/elilo.efi EFI/BOOT/bootx64.efi
cat > EFI/BOOT/elilo.conf << EOF
prompt
timeout="20"
default="linux"
image="vmlinuz"
        label="linux"
        read-only
        initrd=full.cz
        append="fastboot live lowmem showopts automatic=method:cdrom ramdisk_size=131072 stagename=live"
EOF
cd ..
rm -rf EFIBOOT
mkdir EFIBOOT
dd if=/dev/zero of=efiboot.img bs=16384 count=1024
mkfs.vfat efiboot.img
mount -o loop efiboot.img EFIBOOT
cp -a ISO/EFI EFIBOOT
wget -O EFIBOOT/shellx64.efi https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/EdkShellBinPkg/FullShell/X64/Shell_Full.efi
umount EFIBOOT
mv efiboot.img ISO/EFI/
xorriso -as mkisofs -r -V ALT -isohybrid-mbr /usr/lib/syslinux/isohdpfx.bin \
  -partition_offset 16 -J -l -b syslinux/isolinux.bin -c syslinux/boot.cat \
  -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e EFI/efiboot.img \
  -no-emul-boot -isohybrid-gpt-basdat -o live-efi.iso ISO
pwd
echo rm -rf EFIBOOT ISO
 
Копия результата выполнения именно этого скрипта доступна [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/tmp/live-uefi-20121112-x86_64.iso здесь] (120M).
 
== Проверка ==
 
При загрузке в EFI-режиме загрузчиком будет текстовое ELILO, в BIOS-режиме -- синяя менюшка SYSLINUX; после собственно загрузки и логина именем root в EFI-режиме должны отработать команды {{cmd|modprobe efivars; efibootmgr}}, в BIOS-режиме вторая из них скажет
  Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
  Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
  Try 'modprobe efivars' as root.
  Try 'modprobe efivars' as root.


'''ВНИМАНИЕ: не пытайтесь запускать {{cmd|efibootmgr}} на оборудовании Apple, [http://www.rodsbooks.com/efi-bootloaders/installation.html известны случаи повреждения его firmware таким образом].'''
{{attention|Не пытайтесь запускать '''efibootmgr''' на оборудовании '''Apple''', [http://www.rodsbooks.com/efi-bootloaders/installation.html известны] случаи повреждения его firmware таким образом.}}
При загрузке установленной системы типичным на сегодня будет почти обычный {{pkg|grub2-efi}}.
 
=== Secure Boot ===
Если нет возможности отключить (зайдя в firmware по Del или F2 и поискав в секциях Boot или Security) — можно подтвердить ключ, добавленный в упомянутые сборки по пути {{path|EFI/enroll/altlinux.cer}}<ref>в ранних образах был по пути {{path|EFI/BOOT/altlinux.cer}}</ref>.  Пошаговая процедура описана на [http://www.rodsbooks.com/efi-bootloaders/secureboot.html rodsbooks.com] (потребуются не все шаги).


=== VirtualBox ===
=== VirtualBox ===
Желательна ветка 4.2 и выше, в 4.1 реализация EFI несколько странная и крайне задумчивая.  Требуется 64-битный экземпляр со включенной галкой "EFI" в настройках материнской платы.  ISO рекомендуется подключать через SATA-, а не IDE-контроллер (спасибо vsu@ за подсказку).  Диск -- динамический на 10Gb или больше, чтобы по возможности отрабатывала авторазбивка.
Желательна ветка 4.2 и выше, в 4.1 реализация EFI несколько странная и крайне задумчивая.  Требуется 64-битный экземпляр со включенной галкой "EFI" в настройках материнской платы.  ISO рекомендуется подключать через SATA-, а не IDE-контроллер (спасибо vsu@ за подсказку).  Диск — динамический на 10Gb или больше, чтобы по возможности отрабатывала авторазбивка.


Получить доступ к настройкам можно быстрым нажатием F8, пока промелькивает логотип VirtualBox. Следует отметить, что NVRAM на виртуальном железе VirtualBoxне переживает выключение экземпляра (это известная [http://www.virtualbox.org/ticket/11177 проблема]). Т.е. установщик/efibootmgr не может добавить ссылку на grub, а если добавить её руками, она исчезнет при следующем запуске экземпляра. Объезд упомянут по этой же ссылке: выполнить echo '"fs0:\EFI\ALT Linux\grubx64.efi"' > /boot/efi/startup.nsh (внешние кавычки для UNIX-шелла, внутренние для EFI-шелла, чтобы не пугался пробела) в загруженной системе.
Получить доступ к настройкам можно быстрым нажатием F8, пока промелькивает логотип VirtualBox.
 
Следует отметить, что NVRAM на виртуальном железе VirtualBox не переживает выключение экземпляра (это известная [http://www.virtualbox.org/ticket/11177 проблема]). Т.е. установщик/efibootmgr не может добавить ссылку на grub, а если добавить её руками, она исчезнет при следующем запуске экземпляра. Объезд упомянут по этой же ссылке: выполнить в ещё загруженной системе
echo "fs0:\EFI\altlinux\grubx64.efi" > /boot/efi/startup.nsh


=== KVM ===
=== KVM ===
Нужно загрузить экземпляр kvm с [http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=OVMF TianoCore firmware].
Нужно загрузить экземпляр kvm с [http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=OVMF TianoCore firmware].


== Использование ==
<div id="HOWTO"></div>
 
== Самостоятельная сборка ==
=== regular-*.iso ===
Достаточно хорошая поддержка сборки UEFI-загружаемых гибридных образов<ref>бывшие здесь секции HOWTO и про live-uefi-*.iso уже окультурены и обобщены в указанных пакетах, потому более не требуются</ref> добавлена в {{pkg|mkimage}} 0.2.7; в качестве образца можно использовать example4 из документации пакета, а суть требуемых изменений в профиле сводится к:
LiveCD/LiveFlash с возможностью установки (при которой UEFI поддерживается, UEFI SB по состоянию на 11.01.2013 придётся дорабатывать руками).
* добавлению в инсталер {{pkg|dosfstools}} ({{pkg|efibootmgr}} будет вытянут текущим {{pkg|alterator-grub}});
 
* добавлению в базовую устанавливаемую систему {{pkg|grub2-efi}};
=== live-uefi-*.iso ===
* добавлению в {{path|modules}} для {{pkg|propagator}} {{path|kernel/drivers/firmware}} ради {{path|efivars.ko}};
В текстовом live-образе есть скрипт {{cmd|live-install}}, использовать который можно примерно так:
* передаче mkimage переменной <tt>EFI_BOOTLOADER</tt> со значением <tt>elilo</tt> либо <tt>refind</tt><ref>другие типы бутлоадеров ещё не реализованы, см. {{path|tools/mki-copy-efiboot}}</ref><ref>что автоматически приведёт к добавлению в <tt>BOOT_TYPE</tt> значения <tt>efiboot</tt></ref>.
# загружаем полученный live-efi.iso с болванки, флэшки или ещё чего
# проверяем то, что загрузились в EFI mode:
#* {{cmd|modprobe efivars}}
#* {{cmd|efibootmgr}}
# готовим на диске (далее <tt>sda</tt>) [http://www.rodsbooks.com/efi-bootloaders/installation.html GPT-разбивку], не забываем FAT32-раздел ESP (~100—500 Мб), далее <tt>sda1</tt>; корень пусть будет <tt>sda2</tt>:
#* {{cmd|fdisk /dev/sda}}
#* [ сносим MBR-разделы ]
#* {{cmd|gdisk /dev/sda}}
#* [ создаём GPT ]
#* n
#* 1
#* +100M
#* [http://www.rodsbooks.com/efi-bootloaders/principles.html ef00]
#* n
#* 2
#* +1G
#* 8300 (enter)
#* p
#* w
#* y
# {{cmd|live-install --no-lilo /dev/sda2 /dev/sda2}}
# {{cmd|mount /dev/sda2 /mnt}}
# {{cmd|for i in dev proc sys; do mount --bind /$i /mnt/$i; done}}
# {{cmd|chroot /mnt /bin/bash}}
#* {{cmd|echo "/dev/sda1 /boot/efi vfat defaults 0 0" >> /etc/fstab}}
#* {{cmd|mount /boot/efi}}
#* {{cmd|grub-install --target&#x3d;x86_64-efi --efi-directory&#x3d;/boot/efi --bootloader-id&#x3d;altlinux --recheck}}
#* {{cmd|update-grub}}
#* {{cmd|umount /boot/efi}}
#* {{cmd|exit}}
# {{cmd|umount /mnt/{dev,sys,proc,&#125;}}
# {{cmd|reboot}}
 
Возможно применение {{cmd|parted}} вместо {{cmd|gdisk}}, а также создание небольшого BIOS Boot Partition для GRUB в случае жалоб на невозможность встраивания.


== Примечания ==
== Примечания ==
* На EFI следует устанавливать 64-битные дистрибутивы; попытка запуска 32-битного дистрибутива возможна в режиме BIOS, иначе OVMF в составе virtualbox обычно вываливается в EFI Shell, а поведение фирмвари на железе варьирует от представления меню пунктов загрузки до перехода к настройкам.
<references />


== Linkdump ==
== Linkdump ==
Важное:
* http://www.rodsbooks.com/efi-bootloaders/index.html
* http://www.rodsbooks.com/efi-bootloaders/index.html
* https://wiki.archlinux.org/index.php/UEFI
* https://wiki.archlinux.org/index.php/UEFI
* http://www.linuxfoundation.org/news-media/blogs/browse/2012/10/linux-foundation-uefi-secure-boot-system-open-source
* http://en.opensuse.org/KVM/UEFI_Secure_boot_using_qemu-kvm
* http://en.opensuse.org/KVM/UEFI_Secure_boot_using_qemu-kvm
Разное:
* http://www.opennet.ru/opennews/art.shtml?num=36068
** http://www.opennet.ru/opennews/art.shtml?num=36077
* http://www.suse.com/blogs/uefi-secure-boot-overview/
* http://www.suse.com/blogs/uefi-secure-boot-overview/
* http://www.suse.com/blogs/uefi-secure-boot-plan/
* http://www.suse.com/blogs/uefi-secure-boot-plan/
Строка 145: Строка 84:
** https://bugs.launchpad.net/ubuntu-cdimage/+bug/1062737
** https://bugs.launchpad.net/ubuntu-cdimage/+bug/1062737
* http://download.intel.com/support/motherboards/server/sr9000mk4u/sb/d71474002_sr9000mk4u_efi_userguide.pdf
* http://download.intel.com/support/motherboards/server/sr9000mk4u/sb/d71474002_sr9000mk4u_efi_userguide.pdf
 
* [[MacBookPro]]
[[MacBookPro]]

Версия от 13:09, 22 февраля 2013


Поддержка UEFI в ALT Linux

Цель

Обеспечить возможность совместного использования с ОС, установленными в UEFI-режиме, без мороки с переключением BIOS/UEFI; предоставить возможность использования UEFI-«железа» без CSM[1].

Состояние

Бета. Нормально устанавливаемся на bare metal и в мультизагрузку с, например, openSUSE 12.2 и Windows 8.

Для сборки образов требуется свежий Sisyphus, в т.ч.:

  • mkimage 0.2.5+ (для SB — 0.2.7+)[2]
  • xorriso 1.2.4+
  • syslinux 4.04-alt5+[3]
  • evms 2.5.5-alt30+
  • guile-evms 0.4-alt14+
  • alterator-vm 0.4.2-alt1+

Результат

По состоянию на февраль 2013 года начальная поддержка UEFI включена в альфу Centaurus 7.0 и регулярные сборки образов; последние также включают подписанный загрузчик и публичный ключ для работы без отключения Secure Boot.

Реализация поддерживает запись на CD/DVD-болванку или USB-флэшку и загрузку в EFI mode или Legacy mode. Проверена на ASUS/Gigabyte UEFI и MacBook/MBP EFI.

Применение

Как обычно; отличия состоят в разбивке и установке загрузчика:

  • требуется подключить в /boot/efi существующий или новый FAT32-раздел с GPT-типом ESP (EFI System Partition) размером ~100—500 Мб;
  • модуль установки загрузчика предложит вариант «EFI», с которым стоит согласиться[4].

Следует устанавливать 64-битные дистрибутивы; запуск 32-битного дистрибутива возможен в режиме BIOS/CSM (Compatibility Support Module), а в режиме EFI такая установка не будет сочтена загрузочной[5].

При загрузке с образа в EFI-режиме загрузчиком будет графический rEFInd либо совсем текстовое ELILO, в BIOS-режиме — синяя текстовая либо брендированная графическая менюшка SYSLINUX.

После собственно загрузки и логина именем root в EFI-режиме должны отработать команды

modprobe efivars
efibootmgr

— в BIOS-режиме вторая из них скажет

Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
Try 'modprobe efivars' as root.
Внимание! Не пытайтесь запускать efibootmgr на оборудовании Apple, известны случаи повреждения его firmware таким образом.

При загрузке установленной системы типичным на сегодня будет почти обычный grub2-efi.

Secure Boot

Если нет возможности отключить (зайдя в firmware по Del или F2 и поискав в секциях Boot или Security) — можно подтвердить ключ, добавленный в упомянутые сборки по пути EFI/enroll/altlinux.cer[6]. Пошаговая процедура описана на rodsbooks.com (потребуются не все шаги).

VirtualBox

Желательна ветка 4.2 и выше, в 4.1 реализация EFI несколько странная и крайне задумчивая. Требуется 64-битный экземпляр со включенной галкой "EFI" в настройках материнской платы. ISO рекомендуется подключать через SATA-, а не IDE-контроллер (спасибо vsu@ за подсказку). Диск — динамический на 10Gb или больше, чтобы по возможности отрабатывала авторазбивка.

Получить доступ к настройкам можно быстрым нажатием F8, пока промелькивает логотип VirtualBox.

Следует отметить, что NVRAM на виртуальном железе VirtualBox не переживает выключение экземпляра (это известная проблема). Т.е. установщик/efibootmgr не может добавить ссылку на grub, а если добавить её руками, она исчезнет при следующем запуске экземпляра. Объезд упомянут по этой же ссылке: выполнить в ещё загруженной системе

echo "fs0:\EFI\altlinux\grubx64.efi" > /boot/efi/startup.nsh

KVM

Нужно загрузить экземпляр kvm с TianoCore firmware.

Самостоятельная сборка

Достаточно хорошая поддержка сборки UEFI-загружаемых гибридных образов[7] добавлена в mkimage 0.2.7; в качестве образца можно использовать example4 из документации пакета, а суть требуемых изменений в профиле сводится к:

  • добавлению в инсталер dosfstools (efibootmgr будет вытянут текущим alterator-grub);
  • добавлению в базовую устанавливаемую систему grub2-efi;
  • добавлению в modules для propagator kernel/drivers/firmware ради efivars.ko;
  • передаче mkimage переменной EFI_BOOTLOADER со значением elilo либо refind[8][9].

Примечания

  1. 2013: такое уже начинает появляться
  2. рекомендуется также mkimage-profiles 0.9.8+ или свежий гит mkimage-profiles-desktop
  3. в апстриме syslinux нужное добавлено в 4.06
  4. при установке загрузчика в MBR или раздел, а не ESP, загрузка в EFI mode не пройдёт
  5. OVMF в составе virtualbox обычно загружает EFI Shell, а поведение фирмварей на железе варьирует от представления меню пунктов загрузки до перехода к настройкам
  6. в ранних образах был по пути EFI/BOOT/altlinux.cer
  7. бывшие здесь секции HOWTO и про live-uefi-*.iso уже окультурены и обобщены в указанных пакетах, потому более не требуются
  8. другие типы бутлоадеров ещё не реализованы, см. tools/mki-copy-efiboot
  9. что автоматически приведёт к добавлению в BOOT_TYPE значения efiboot

Linkdump

Важное:

Разное: