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

Материал из ALT Linux Wiki
м (→‎VirtualBox: - объезд для автоматической загрузки)
м (→‎Linkdump: - ссылка на efi user manual)
Строка 137: Строка 137:
* http://mjg59.dreamwidth.org/4957.html
* http://mjg59.dreamwidth.org/4957.html
** 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


[[MacBookPro]]
[[MacBookPro]]

Версия от 14:29, 7 января 2013

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


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

Цель

Обеспечить возможность совместного использования с ОС, установленными в UEFI-режиме, прямо сейчас (переключение BIOS/UEFI более хлопотно); предоставить возможность использования «железа» вообще без BIOS (legacy mode).

Состояние

В работе, есть промежуточные итоги.

Результат

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

Всё так же доступен более ранний экспериментальный Live-образ, поддерживающий загрузку в EFI mode и Legacy mode, будучи записанным на CD/DVD-болванку или USB-флэшку. Проверен на ASUS/Gigabyte UEFI и MacBook/MBP EFI.

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

mkimage

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

  • добавлению в инсталер dosfstools (efibootmgr будет вытянут текущим alterator-grub);
  • добавлению в базовую устанавливаемую систему grub2-efi;
  • добавлению в modules для propagator kernel/drivers/firmware ради efivars.ko;
  • передаче mkimage значения EFI_BOOTLOADER = elilo (другие типы бутлоадеров ещё не реализованы, см. tools/mki-copy-efiboot; установка этого приведёт к добавлению в BOOT_TYPE значения efiboot).

HOWTO

Приборы и материалы:

  • свежий Sisyphus (в т.ч. xorriso 1.2.4+, syslinux-4.04-alt5+ либо 4.06+)
  • «простая» live-исошка (например, live-efi с нужными утилитами и live-install, но пока без EFI-загрузчика)

Действия от имени root (может быть удобно записать в скрипт):

cd ${TMP:-/tmp}
apt-get install bsdtar dosfstools elilo syslinux xorriso
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

Копия результата выполнения именно этого скрипта доступна здесь (120M).

Проверка

При загрузке в EFI-режиме загрузчиком будет текстовое 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 таким образом.

VirtualBox

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

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

KVM

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

Использование

В упомянутом образе есть скрипт live-install, использовать который можно примерно так:

  1. загружаем полученный live-efi.iso с болванки, флэшки или ещё чего
  2. проверяем то, что загрузились в EFI mode:
    • modprobe efivars
    • efibootmgr
  3. готовим на диске (далее sda) GPT-разбивку, не забываем FAT32-раздел ESP (~100—500 Мб), далее sda1; корень пусть будет sda2:
    • fdisk /dev/sda
    • [ сносим MBR-разделы ]
    • gdisk /dev/sda
    • [ создаём GPT ]
    • n
    • 1
    • +100M
    • ef00
    • n
    • 2
    • +1G
    • 8300 (enter)
    • p
    • w
    • y
  4. live-install --no-lilo /dev/sda2 /dev/sda2
  5. mount /dev/sda2 /mnt
  6. for i in dev proc sys; do mount --bind /$i /mnt/$i; done
  7. chroot /mnt /bin/bash
    • echo "/dev/sda1 /boot/efi vfat defaults 0 0" >> /etc/fstab
    • mount /boot/efi
    • grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=altlinux --recheck
    • update-grub
    • umount /boot/efi
    • exit
  8. umount /mnt/{dev,sys,proc,}
  9. reboot

Возможно применение parted вместо gdisk.

Linkdump

MacBookPro