Příručka:AMD64/Bloky/Zavaděč

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Handbook:AMD64/Blocks/Bootloader and the translation is 19% complete.
Outdated translations are marked like this.


Po nakonfigurování jádra Linux, nainstalování systémových nástrojů a dokončenou úpravou konfiguračních souborů je čas k nainstalování poslední důležité součásti linuxové instalace: zavaděče systému.

Zavaděč je odpovědný za spuštění jádra Linux během nabíhání - bez něj by systém nevěděl, jak pokračovat dál po té, co počítač stiskem tlačítka spustíte.

Pro architekturu amd64 uvádíme jak nastavit buď GRUB2 nebo LILO pro systémy založené na BIOSu a #Výchozí: Použití GRUB2 nebo efibootmgr pro systémy s UEFI.

V této sekci příručky rozlišujeme mezi nahrátím (emerging) zavaděče a jeho instalací (installing) na systémový disk. Termín instalace bude použit pro použití Portage k tomu, aby byl balíček zpřístupněn v systému. Pojem "nahrátí" pak bude označovat, že zavaděč kopíruje soubory a fyzicky mění odpovídající sekce na systémovém disku za účelem aktivace a přípravy zavaděče na jeho fungování v dalším spouštěcím cyklu.

Výchozí: GRUB2

Většina systémů Gentoo se spoléhá na GRUB2 (k nalezení v balíčku sys-boot/grub), který je přímým nástupcem "GRUB Legacy". Bez jakékoli další konfigurace GRUB2 podporuje starší systémy ("pc") s BIOSem. S malou dávkou konfigurace nezbytné před sestavením, podporuje GURB2 půltucet dalších platforem. Pro více informací konzultujte Oddíl o prerekvizitách v článku GRUB2.

Nahrátí (emerge)

Při použití staršího BIOSu, který podporuje pouze tabulky oddílů MBR není před instalací třeba žádné dodatečné konfigurace:

root #emerge --ask --verbose sys-boot/grub:2

Poznámka pro uživatele UEFI: po spuštění shora uvedeného příkazu se zobrazí povolené hodnoty v GRUB_PLATFORMS před instalací. V případě že použití sytému s UEFI by se uživatelé měli ujistit, že je nastavena proměnná GRUB_PLATFORMS="efi-64" (což je výchozí stav). Pokud tomu tak v daném případě není, je třeba doplnit GRUB_PLATFORMS="efi-64" do souboru /etc/portage/make.conf před instalací GRUB2, tak aby byl balíček sestaven s podporou funkcí EFI.

root #echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf
root #emerge --ask sys-boot/grub:2
Pokud došlo k instalaci GRUB2 bez toho, aby byla napřed nastavena proměnná GRUB_PLATFORMS="efi-64", může to být doplněno do make.conf později a závislosti v setu balíčků world mohou být znovu sestaveny za pomocí parametrů --update --newuse příkazu emerge:
root #emerge --ask --update --newuse --verbose sys-boot/grub:2

Software GRUB2 byl nyní nahrán do systému, ale ještě ne nainstalován.

Instalace

Dále nainstalujte potřebné soubory GRUB2 do adresáře /boot/grub pomocí příkazu grub-install. Předpokládejme, že první disk (ten, ze kterého systém nabíhá) je /dev/sda, jeden z následujících souborů tak udělá co chceme:

  • Při použití BIOS:
root #grub-install /dev/sda

For DOS/Legacy BIOS systems:

root #grub-install /dev/sda
  • Při použití UEFI:
Důležité
Ujistěte se, že systémový oddíl EFI byl připojen před spuštěním grub-install. grub-install může nainstalovat soubor GRUB EFI (grubx64.efi) do špatného adresáře bez toho, aby jakkoli upozornil na to, že byl použit špatný adresář.

For UEFI systems:

root #grub-install --target=x86_64-efi --efi-directory=/boot

Upon successful installation, the output should match the output of the previous command. If the output does not match exactly, then proceed to Debugging GRUB, otherwise jump to the Configure step.

Optional: Secure Boot

The sys-boot/grub package does not recognize the secureboot USE flag, this is because the GRUB EFI executable is not installed by the package but is instead built and installed by the grub-install command. GRUB must therefore be manually signed after installation to the boot partition. Additionally, GRUB is a modular bootloader but loading modules is prohibited when Secure Boot is enabled. Therefore all necessary modules must be compiled into the GRUB EFI executable, below an example is shown including some basic modules, this may have to be adjusted for more advanced configurations:

root #emerge --noreplace sbsigntools
root #export GRUB_MODULES="all_video boot btrfs cat chain configfile echo efifwsetup efinet ext2 fat font gettext gfxmenu gfxterm gfxterm_background gzio halt help hfsplus iso9660 jpeg keystatus loadenv loopback linux ls lsefi lsefimmap lsefisystab lssal memdisk minicmd normal ntfs part_apple part_msdos part_gpt password_pbkdf2 png probe reboot regexp search search_fs_uuid search_fs_file search_label sleep smbios squash4 test true video xfs zfs zfscrypt zfsinfo"
root #grub-install --target=x86_64-efi --efi-directory=/efi --modules=${GRUB_MODULES} --sbat /usr/share/grub/sbat.csv
root #sbsign /efi/EFI/GRUB/grubx64.efi --key /path/to/kernel_key.pem --cert /path/to/kernel_key.pem --out /efi/EFI/GRUB/grubx64.efi

To successfully boot with secure boot enabled the used certificate must either be accepted by the UEFI firmware, or shim must be used as a pre-loader. Shim is pre-signed with the third-party Microsoft Certificate, accepted by default by most UEFI motherboards.

How to configure the UEFI firmware to accept custom keys depends on the firmware vendor, which is beyond the scope of the handbook. Below is shown how to setup shim instead:

root #emerge sys-boot/shim sys-boot/mokutil sys-boot/efibootmgr
root #cp /usr/share/shim/BOOTX64.EFI /efi/EFI/GRUB/shimx64.efi
root #cp /usr/share/shim/mmx64.efi /efi/EFI/GRUB/mmx64.efi

Shims MOKlist requires keys in the DER format, since the OpenSSL key generated in the example here is in the PEM format, the key must be converted first:

root #openssl x509 -in /path/to/kernel_key.pem -inform PEM -out /path/to/kernel_key.der -outform DER
Poznámka
The path used here must be the path to the pem file containing the certificate belonging to the generated key. In this example both key and certificate are in the same pem file.

Then the converted certificate can be imported into Shims MOKlist:

root #mokutil --import /path/to/kernel_key.der

And finally we register Shim with the UEFI firmware. In the following command, boot-disk and boot-partition-id must be replaced with the disk and partition identifier of the EFI system partition:

root #efibootmgr --create --disk /dev/boot-disk --part boot-partition-id --loader '\EFI\GRUB\shimx64.efi' --label 'shim' --unicode
Debugging GRUB

When debugging GRUB, there are a couple of quick fixes that may result in a bootable installation without having to reboot to a new live image environment.

In the event that "EFI variables are not supported on this system" is displayed somewhere in the output, it is likely the live image was not booted in EFI mode and is presently in Legacy BIOS boot mode. The solution is to try the removable GRUB step mentioned below. This will overwrite the executable EFI file located at /EFI/BOOT/BOOTX64.EFI. Upon rebooting in EFI mode, the motherboard firmware may execute this default boot entry and execute GRUB.

Důležité
Pokud grub-install vrátí chybu podobnou této: Could not prepare Boot variable: Read-only file system, bude potřeba k úspěšnému pokračování znovu připojit speciální přípojný bod efivars k zápisu:
root #mount -o remount,rw /sys/firmware/efi/efivars
root #mount -o remount,rw,nosuid,nodev,noexec --types efivarfs efivarfs /sys/firmware/efi/efivars

This is caused by certain non-official Gentoo environments not mounting the special EFI filesystem by default. If the previous command does not run, then reboot using an official Gentoo live image environment in EFI mode.

Někteří výrobci základních desek zřejmě podporují pouze adresář /efi/boot k umístění souboru .EFI na systémovém oddílu EFI (ESP). Instalátor GRUB může tuto operaci provést automaticky při použití volby --removable. Ověřte si, že je ESP připojeno před tím, že než spustíte následující příkazy. Za předpokladu, že je ESP připojena do /boot (jak bylo uvedeno výše), spusťte:

root #grub-install --target=x86_64-efi --efi-directory=/boot --removable

Tím vytvoříte výchozí adresář definovaný specifikací UEFI a následně zkopírujte soubor grubx64.efi do 'výchozího' umístění souborů EFI definované touto specifikací.

Nastavení

Dále vygenerujte konfiguraci GRUB2 na základě nastavení specifikovaného v souboru /etc/default/grub a skriptech v /etc/grub.d. Ve většině případů není třeba žádných zásahů ze strany uživatele, jelikož GRUB2 automaticky zjistí, jaké jádro má zavést (to nejvyšší, jaké je k dispozici v /boot/ a který souborový systém je kořenový (root)). Je rovněž možné přidávat parametry jádra pomocí proměnné GRUB_CMDLINE_LINUX v souboru /etc/default/grub.

K vygenerování konečné konfigurace GRUB2 spusťte příkaz grub-mkconfig:

root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-6.1.38-gentoo
Found initrd image: /boot/initramfs-genkernel-amd64-6.1.38-gentoo
done

Výstup příkazu by měl obsahovat, že byl nalezen alespoň jeden obraz jádra, jelikož ten je potřeba k naběhnutí systému. Pokud je použit initramfs nebo byl k sestavení jádra použit genkernel, měl by být nalezen také správný obraz initrd. Pokud se tak nestalo, podívejte se na obsah adresáře /boot příkazem ls. Pokud tyto soubory opravdu chybí, vraťte se zpět k instrukcím pro nastavení a instalaci jádra.

Tip
Utilitu os-prober můžete použít ve spojení s GRUB2 k nalezení dalších operačních systémů na připojených discích. Detekovatelné jsou Windows 7, 8.1, 10 a ostatní distribuce Linuxu. Ti, kteří požadují, aby jejich systém podporoval dual-boot by měli nainstalovat (emerge) sys-boot a po té znovu spustit příkaz grub-mkconfig (jak je uvedeno výše). Pokud narazíte na problémy s detekcí, určitě si přečtěte celý článek o GRUB2 před tím, než požádáte komunitu Gentoo o podporu.

Alternativa 1: LILO

Nahrátí (emerge)

LILO, "LI"nux "LO"ader, je osvědčeným řešením v oblasti Linuxových zavaděčů. Nicméně v porovnání s GRUB se mu nedostává některých funkcí. LILO se stále používá, jelikož na některých systémech GRUB nefunguje, zatímco LILO ano. Samozřejmě se používá také proto, že někteří lidé jsou s ním obeznámeni a chtějí jej používat. Tak jak tak, Gentoo podporuje oba zavaděče.

Instalace LILO je snadná, prostě použijte emerge.

root #emerge --ask sys-boot/lilo

Nastavení

K nastavení LILO nejprve vytvořte soubor /etc/lilo.conf.

root #nano -w /etc/lilo.conf

Jádro ke spuštění označíte v konfiguračním souboru za použití sekcí. Ověřte si, že názvy souborů jádra (včetně verze jádra) a initramfs, znáte, jelikož na ně musíte odkázat v konfiguračním souboru.

Poznámka
Pokud je souborovým systémem na kořenovém oddílu JFS, připojte na konec řádku každé položky append="ro" kvůli tomu, že JFS musí přehrát svůj log před tím, než umožní připojení v režimu pro zápis.
FILE /etc/lilo.confPříklad nastavení LILO
'"`UNIQ--pre-00000005-QINU`"'
Poznámka
Pokud používáte odlišné schéma diskových oddílů nebo jiný obraz jádra, udělejte odpovídající změny.

Pokud je potřeba initramfs, změňte konfiguraci uvedením odkazu na soubor initramfs a označením zařízení s kořenovým oddílem:

FILE /etc/lilo.confPřidání informace o initramfs do položky zavaděče
'"`UNIQ--pre-00000008-QINU`"'

Pokud potřebujte předat jádru další volby, použijte výraz append. Například k zapnutí framebufferu pomocí volby video:

FILE /etc/lilo.confDoplnění parametru video k volbám spuštění
'"`UNIQ--pre-0000000B-QINU`"'

Uživatelé, kteří použili genkernel by měli mít na paměti, že jejich jádro používá stejné volby jako instalační CD. Pokud tedy například potřebujete zapnout podporu pro SCSI zařízení, přidejte mezi volby jádra doscsi.

Nyní soubor uložte a ukončete editor.

Instalace

Pro dokončení spusťte /sbin/lilo, čímž umožníte, aby LILO aplikovalo nastavení v /etc/lilo.conf na systém (např. nainstalovalo samo sebe na disk). Berte na vědomí, že program /sbin/lilo musí být spuštěn pokaždé, když nainstalujete nové jádro nebo uděláte změny v souboru /etc/lilo.conf z důvodu, aby systém mohl nastartovat, změní-li se název souboru s jádrem.

root #/sbin/lilo

Alternativa 2: efibootmgr

V systémech s UEFI může být upravován přímo firmware UEFI (jinými slovy primární zavaděč systému) k tomu, aby vyhledal položky je spuštění. Takové systému nepotřebují zavaděče jako je GRUB2 (známé jako sekundární zavaděče) k tomu, aby je pomohly spustit. Se vším tímto na paměti, důvodem, proč existují EFI zavaděče jako je GRUB2, je rozšíření funkcí UEFI systémů v průběhu procesu spouštění. Použití efibootmgr je vhodné pro ty, kdo chtějí využit opravdu minimalistický (avšak více svázaný) přístup ke spouštění svého systému; použití GRUB2 (viz výše) je pro většinu uživatelů jednodušší, protože je z hlediska svých možností při spouštění systému s UEFI pružnější.

System administrators who desire to take a minimalist, although more rigid, approach to booting the system can avoid secondary bootloaders and boot the Linux kernel as an EFI stub.

Uvědomte si, že aplikace sys-boot/efibootmgr není zavaděč; je to nástroj sloužící k přizpůsobení firmwaru UEFI a aktualizaci jeho nastavení tak, aby mohlo být dříve do systému nainstalované linuxové jádro spuštěno i s dodatečnými volbami (je-li to třeba) nebo aby mohlo být zapnuto více spustitelných položek. Toto přizpůsobení se děje pomocí proměnných EFI (proto potřeba mít v jádře podporu proměnných EFI).

Před tím, než budete pokračovat, pročtěte si článek EFI stub kernel. Jádro musí mít zapnuty specifické volby, aby bylo přímo spustitelné ze strany UEFI firmwaru. Možná bude potřeba jádro překompilovat. Dobrý nápad je také podívat se na článek efibootmgr.

It is also a good idea to take a look at the efibootmgr article for additional information.

Poznámka
Pro uvedení věcí na pravou míru, efibootmgr není pro spuštění systému UEFI vyžadováno. Linuxové jádro samo o sobě může být spuštěno napřímo, dodatečné volby mohou být zabudovány přímo do linuxového jádra (v konfiguraci jádra je volba, která umožňuje uživateli specifikovat parametry spuštění). Dokonce i initramfs může být "součástí" jádra.

Kdo se rozhodl jít touto cestou, musí nainstalovat příslušný software:

root #emerge --ask sys-boot/efibootmgr

Po té vytvořte adresář /boot/efi/boot a zkopírujte do něj jádro, které nazvete bzImage.efi:

root #mkdir -p /boot/efi/boot
root #cp /boot/vmlinuz-* /boot/efi/boot/bzImage.efi
Poznámka
Použití \ jako oddělovače adresářů je v rámci definicí pro UEFI povinné.

Dále sdělte firmwaru UEFI, že má být vytvořena položka "Gentoo" s čerstvě sestaveným jádrem:

root #efibootmgr --create --disk /dev/sda --part 2 --label "Gentoo" --loader "\efi\boot\bzImage.efi"

Pokud je použit zaváděcí souborový systém RAM (initramfs), přidejte k němu odpovídající volbu:

root #efibootmgr -c -d /dev/sda -p 2 -L "Gentoo" -l "\efi\boot\bzImage.efi" initrd='\initramfs-genkernel-amd64-6.1.38-gentoo'

Note that the above command presumes an initramfs file was copied into the ESP inside the same directory as the bzImage.efi file.

Po těchto změnách, jakmile systém znovunaběhne, bude zpřístupněna položka "Gentoo".

Unified Kernel Image

If installkernel was configured to build and install unified kernel images. The unified kernel image should already be installed to the EFI/Linux directory on the EFI system partition, if this is not the case ensure the directory exists and then run the kernel installation again as described earlier in the handbook.

To add a direct boot entry for the installed unified kernel image:

root #efibootmgr --create --disk /dev/sda --part 1 --label "gentoo" --loader /efi/EFI/Linux/gentoo-x.y.z.efi

Alternativa 3: Syslinux

Syslinux je dalším alternativním zavaděčem pro architekturu amd64. Podporuje MBR a, od verze 6.00, zavedení z EFI. PXE (síťové) zavedení a další méně známé způsoby jsou podporovány také. Ačkoli je Syslinux u mnoha lidí oblíbeným zavaděčem, je příručkou nepodporovaný. Čtenáři mohou najít informace o instalaci a nastavení tohoto zavaděče v článku o Syslinuxu.

Alternative 4: systemd-boot

Another option is systemd-boot, which works on both OpenRC and systemd machines. It is a thin chainloader and works well with secure boot.

To install systemd-boot:

root #bootctl install
Důležité
Make sure the EFI system partition has been mounted before running bootctl install.

When using this bootloader, before rebooting, verify that a new bootable entry exists using:

root #bootctl list

If no new entry exists, ensure the sys-kernel/installkernel package has been installed with the systemd-boot USE flag enabled, and re-run the kernel installation.

For the distribution kernels:

root #emerge --ask --config sys-kernel/gentoo-kernel

For a manually configured and compiled kernel:

root #make install
Důležité
When installing kernels for systemd-boot, no root= kernel command line argument is added by default. On systemd systems that are using an initramfs users may rely instead on systemd-gpt-auto-generator to automatically find the root partition at boot. Otherwise users should manually specify the location of the root partition by setting root= in /etc/kernel/cmdline as well as any other kernel command line arguments that should be used. And then reinstalling the kernel as described above.

Optional: Secure Boot

When the secureboot USE flag is enabled, the systemd-boot EFI executable will be signed automatically. bootctl install will automatically install the signed version.

To successfully boot with secure boot enabled the used certificate must either be accepted by the UEFI firmware, or shim must be used as a pre-loader. Shim is pre-signed with the third-party Microsoft Certificate, accepted by default by most UEFI motherboards.

How to configure the UEFI firmware to accept custom keys depends on the firmware vendor, which is beyond the scope of the handbook. A postinst hook to automatically update systemd-boot and set it up with shim instead is provided on the systemd-boot wiki page. However the first time this should be done manually by following the steps below:

root #emerge --ask sys-boot/shim sys-boot/mokutil sys-boot/efibootmgr
root #cp /usr/share/shim/BOOTX64.EFI /efi/EFI/BOOT/BOOTX64.EFI
root #cp /usr/share/shim/mmx64.efi /efi/EFI/BOOT/mmx64.efi
root #cp /efi/EFI/systemd/systemd-bootx64.efi /efi/EFI/BOOT/grubx64.efi
Poznámka
Shim is hardcoded to load grubx64.efi. As such the systemd-boot bootloader must be named as if it were GRUB.

Shims MOKlist requires keys in the DER format, since the OpenSSL key generated in the example here is in the PEM format, the key must be converted first:

root #openssl x509 -in /path/to/kernel_key.pem -inform PEM -out /path/to/kernel_key.der -outform DER
Poznámka
The path used here must be the path to the pem file containing the certificate belonging to the generated key. In this example both key and certificate are in the same pem file.

Then the converted certificate can be imported into Shims MOKlist:

root #mokutil --import /path/to/kernel_key.der

And finally we register Shim with the UEFI firmware. In the following command, boot-disk and boot-partition-id must be replaced with the disk and partition identifier of the EFI system partition:

root #efibootmgr --create --disk /dev/boot-disk --part boot-partition-id --loader '\EFI\BOOT\BOOTX64.EFI' --label 'shim' --unicode