O BLFS não tem os pacotes essenciais para suportar a Inicialização Segura. Para configurar o processo de inicialização com GRUB e UEFI no BLFS, a Inicialização Segura precisa ser desligada a partir interface de configuração do firmware. Leia a documentação fornecida pelo(a) fabricante do seu sistema para descobrir como.
Habilite as seguintes opções na configuração do núcleo e recompile o núcleo, se necessário:
Processor type and features ---> [*] EFI runtime service support [EFI] -*- Enable the block layer ---> [BLOCK] Partition Types ---> [ /*] Advanced partition selection [PARTITION_ADVANCED] [*] EFI GUID Partition support [EFI_PARTITION] Device Drivers ---> Firmware Drivers ---> [*] Mark VGA/VBE/EFI FB as generic system framebuffer [SYSFB_SIMPLEFB] Graphics support ---> <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) ---> ... [DRM] [*] Enable legacy fbdev support for your modesetting driver ... [DRM_FBDEV_EMULATION] <*> Simple framebuffer driver [DRM_SIMPLEDRM] Frame buffer Devices ---> <*> Support for frame buffer devices ---> [FB] Console display driver support ---> -*- Framebuffer Console support [FRAMEBUFFER_CONSOLE] File systems ---> DOS/FAT/EXFAT/NT Filesystems ---> <*/M> VFAT (Windows-95) fs support [VFAT_FS] Pseudo filesystems ---> <*/M> EFI Variable filesystem [EFIVAR_FS] -*- Native language support ---> [NLS] <*/M> Codepage 437 (United States, Canada) [NLS_CODEPAGE_437] <*/M> NLS ISO 8859-1 (Latin 1; Western European Languages) [NLS_ISO8859_1]
O significado das opções de configuração:
CONFIG_PARTITION_ADVANCED
Se não estiver habilitado, CONFIG_EFI_PARTITION
será
habilitado automaticamente. Mas quando estiver habilitado,
você precisa configurar CONFIG_EFI_PARTITION
como
habilitado também.
CONFIG_SYSFB_SIMPLEFB
, CONFIG_DRM
, CONFIG_DRM_FBDEV_EMULATION
,
CONFIG_DRM_SIMPLEDRM
,
CONFIG_FB
e CONFIG_FRAMEBUFFER_CONSOLE
A combinação dessas opções fornece suporte ao console Linux no topo do framebuffer UEFI. Para permitir que o núcleo imprima mensagens de depuração em um estágio inicial da inicialização, elas não deveriam ser construídas como módulos do núcleo, a menos que um initramfs seja usado.
Garanta que um disco de inicialização de emergência esteja pronto
para “resgatar” o sistema no caso do sistema se
tornar não inicializável. Para produzir um disco de inicialização
de emergência com o GRUB para um sistema baseado em EFI, encontre
uma unidade flash USB sobressalente e crie um sistema de arquivos
vfat
nela. Instale o dosfstools-4.2 primeiro, então, como o(a)
usuário(a) root
:
O comando a seguir apagará todos os diretórios e arquivos na
partição. Certifique-se de que sua unidade flash USB não contém
dados que serão necessários e mude sdx1
para o nó de dispositivo
correspondente à primeira partição da unidade flash USB. Seja
cuidado(a) para não sobrescrever sua unidade rígida com um erro
de digitação!
mkfs.vfat /dev/sdx1
Ainda como o(a) usuário(a) root
,
use o utilitário fdisk para configurar a primeira
partição da unidade flash USB para ser uma partição do “sistema EFI” (mude
sdx
para o nó de
dispositivo correspondente à sua unidade flash USB):
fdisk /dev/sdxWelcome to fdisk (util-linux 2.39.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help):
tPartition number (1-9, default 9):
1Partition type or alias (type L to list all):
uefiChanged type of partition 'Linux filesystem' to 'EFI System'. Command (m for help):
wThe partition table has been altered. Syncing disks.
Ainda como o(a) usuário(a) root
,
crie um ponto de montagem para a partição EFI na unidade flash USB
e monte-o:
mount --mkdir -v -t vfat /dev/sdx1 -o codepage=437,iocharset=iso8859-1 \ /mnt/rescue
Instale o GRUB para EFI na partição:
grub-install --target=x86_64-efi --removable \ --efi-directory=/mnt/rescue --boot-directory=/mnt/rescue
Desmonte a partição:
umount /mnt/rescue
Agora, a unidade flash USB pode ser usada como um disco de inicialização de emergência em qualquer plataforma UEFI x86-64. Ele inicializará o sistema e mostrará o shell do GRUB. Então você consegue digitar comandos para inicializar seu sistema operacional a partir da unidade rígida. Para saber como selecionar o dispositivo de inicialização, leia-se o manual da sua placa-mãe ou notebook.
Em sistemas baseados em EFI, os carregadores de inicialização são
instalados em uma partição especial FAT32 chamada EFI System Partition (ESP). Se o seu
sistema suportar EFI e uma versão recente de alguma distribuição
Linux ou Windows estiver pré-instalada, [então] é provável que o
ESP já tenha sido criada. Como o(a) usuário(a) root
, liste todas as partições em sua unidade
rígida (substitua sda
pelo dispositivo
correspondente à unidade rígida apropriada):
fdisk -l /dev/sda
A coluna “Type” da ESP deveria ser EFI System
.
Se o sistema ou a unidade rígida for novo(a) ou essa for a primeira
instalação de um Sistema Operacional inicializado por UEFI no
sistema, a ESP possivelmente não exista. Nesse caso, instale
dosfstools-4.2 primeiro. Em seguida, crie uma
nova partição, produza um sistema de arquivos vfat
nela e configure o tipo de partição como
“EFI system”.
Vejam-se as instruções para o dispositivo de inicialização de
emergência acima como uma referência.
Algumas (antigas) implementações UEFI possivelmente exijam que a ESP seja a primeira partição no disco.
Agora, como o(a) usuário(a) root
,
crie o ponto de montagem para a ESP e monte-a (substitua
sda1
pelo nó de
dispositivo correspondente à ESP):
mount --mkdir -v -t vfat /dev/sda1 -o codepage=437,iocharset=iso8859-1 \ /boot/efi
Se você quiser montar a ESP automaticamente durante a inicialização
do sistema, como o(a) usuário(a) root
, adicione uma entrada para a ESP em
/etc/fstab
:
cat >> /etc/fstab << EOF
/dev/sda1 /boot/efi vfat codepage=437,iocharset=iso8859-1 0 1
EOF
Em sistemas baseados em UEFI, o GRUB funciona instalando um
aplicativo EFI (um tipo especial de executável) na ESP. O firmware
EFI pesquisará carregadores de inicialização em aplicativos EFI a
partir de entradas de inicialização registradas em variáveis EFI e,
adicionalmente, um caminho rigidamente codificado, EFI/BOOT/BOOTX64.EFI
. Normalmente, um carregador
de inicialização deveria ser instalado em um caminho personalizado
e o caminho deveria ser registrado nas variáveis EFI. O uso do
caminho codificado rigidamente deveria ser evitado, se possível. No
entanto, em alguns casos, temos que usar o caminho codificado
rigidamente:
O sistema não foi inicializado com EFI ainda, tornando as variáveis EFI inacessíveis.
O firmware EFI é de 64 bits, mas o sistema LFS é de 32 bits, tornando as variáveis EFI inacessíveis porque o núcleo não consegue invocar serviços de tempo de execução EFI com um comprimento diferente de endereço virtual.
O LFS é construído para um Live USB, de forma que não podemos confiar nas variáveis EFI, as quais são armazenadas em NVRAM ou em EEPROM na máquina local.
Você não consegue ou não quer instalar o efibootmgr para manipular entradas de inicialização em variáveis EFI.
Nesses casos, siga estas instruções para instalar o aplicativo EFI do GRUB no caminho codificado rigidamente e faça uma configuração mínima de inicialização. Caso contrário, é melhor pular à frente e definir a configuração de inicialização normalmente.
Para instalar o GRUB com o aplicativo EFI no caminho rigidamente
codificado EFI/BOOT/BOOTX64.EFI
,
primeiro certifique-se de que a partição de inicialização esteja
montada em /boot
e de que a ESP
esteja montada em /boot/efi
. Então,
como o(a) usuário(a) root
, execute
o comando:
Este comando sobrescreverá /boot/efi/EFI/BOOT/BOOTX64.EFI
. Ele
possivelmente quebre um carregador de inicialização já instalado
lá. Produza uma cópia de segurança dele se não tiver certeza.
grub-install --target=x86_64-efi --removable
Esse comando instalará o aplicativo EFI do GRUB no caminho
rigidamente codificado /boot/efi/EFI/BOOT/BOOTX64.EFI
, de forma que o
firmware EFI consiga achá-lo e carregá-lo. Os arquivos restantes do
GRUB são instalados no diretório /boot/grub
e serão carregados pelo BOOTX64.EFI
durante a inicialização do sistema.
O firmware EFI geralmente prefere os aplicativos EFI com um caminho armazenado em variáveis EFI ao aplicativo EFI no caminho codificado rigidamente. Portanto, você possivelmente precise invocar o menu de seleção de inicialização ou a interface de configuração de firmware para selecionar manualmente o GRUB recém-instalado na próxima inicialização. Leia-se o manual da sua placa-mãe ou laptop para aprender como.
Se você tiver seguido as instruções nesta seção e configurou uma configuração mínima de inicialização, agora pule à frente para “Criando o Arquivo de Configuração do GRUB”.
A instalação do GRUB em uma plataforma UEFI exige que o sistema de
arquivos de Variáveis EFI, efivarfs
, esteja montado. Como o(a) usuário(a)
root
, monte-o se já não estiver
montado:
mountpoint /sys/firmware/efi/efivars || mount -v -t efivarfs efivarfs /sys/firmware/efi/efivars
Se o sistema for inicializado com UEFI e systemd, [então] o
efivarfs
será montado
automaticamente. No entanto, no ambiente chroot do LFS ele ainda
precisa ser montado manualmente.
Se o sistema não for inicializado com UEFI, [então] o diretório
/sys/firmware/efi
estará ausente.
Nesse caso, você deveria inicializar o sistema no modo UEFI com o
disco de inicialização de emergência ou usando uma configuração
mínima de inicialização criada como acima, então montar o
efivarfs
e continuar.
Em sistemas baseados em UEFI, o GRUB funciona instalando um
aplicativo EFI (um tipo especial de executável) em /boot/efi/EFI/[id]/grubx64.efi
, onde /boot/efi
é o ponto de montagem da ESP e
[id]
é substituído por um
identificador especificado na linha de comando do grub-install. O GRUB criará uma
entrada nas variáveis EFI contendo o caminho EFI/[id]/grubx64.efi
, de forma que o firmware EFI
consiga encontrar o grubx64.efi
e
carregá-lo.
O grubx64.efi
é muito leve (136 KB
com o GRUB-2.06), de forma que não usará muito espaço na ESP. Um
tamanho típico da ESP é de 100 MB (para o gerenciador de
inicialização do Windows, que usa cerca de 50 MB na ESP). Assim que
o grubx64.efi
tenha sido carregado
pelo firmware, ele carregará os módulos do GRUB a partir da
partição de inicialização. O local padrão é /boot/grub
.
Como o(a) usuário(a) root
, instale
os arquivos do GRUB em /boot/efi/EFI/LFS/grubx64.efi
e em /boot/grub
. Em seguida, configure a entrada de
inicialização nas variáveis EFI:
grub-install --bootloader-id=LFS --recheck
Se a instalação for bem-sucedida, [então a saída gerada deveria ser:
Installing for x86_64-efi platform.
Installation finished. No error reported.
Emita o comando efibootmgr | cut -f 1 para verificar novamente a configuração de inicialização EFI. Um exemplo da saída gerada é:
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0005,0000,0002,0001,0003,0004
Boot0000* ARCH
Boot0001* UEFI:CD/DVD Drive
Boot0002* Windows Boot Manager
Boot0003* UEFI:Removable Device
Boot0004* UEFI:Network Device
Boot0005* LFS
Observe que 0005
é o primeiro no
BootOrder
e Boot0005
é LFS
. Isso
significa que, na próxima inicialização, a versão do GRUB instalada
pelo LFS será usada para inicializar o sistema.
Gere o /boot/grub/grub.cfg
para
configurar o menu de inicialização do GRUB:
cat > /boot/grub/grub.cfg << EOF
# Inicia /boot/grub/grub.cfg
set default=0
set timeout=5
insmod part_gpt
insmod ext2
set root=(hd0,2)
insmod all_video
if loadfont /boot/grub/fonts/unicode.pf2; then
terminal_output gfxterm
fi
menuentry "GNU/Linux, Linux 6.4.10-lfs-12.0" {
linux /boot/vmlinuz-6.4.10-lfs-12.0 root=/dev/sda2 ro
}
menuentry "Firmware Setup" {
fwsetup
}
EOF
Consulte-se o livro
LFS para o conhecimento básico acerca do arquivo grub.cfg
. (hd0,2)
,
sda2
e 6.4.10-lfs-12.0
precisam corresponderem à tua
configuração.
A diretiva insmod all_video carrega vários módulos para suporte de vídeo. Ela é necessária para inicializar o framebuffer EFI para o núcleo imprimir mensagens corretamente antes da inicialização do controlador GPU de núcleo.
A diretiva terminal_output
gfxterm muda a resolução da tela do menu do GRUB
para corresponder ao teu dispositivo de exibição. Isso quebrará a
renderização se o arquivo de dados da fonte unicode.pf2
não estiver carregado, de forma que
ele é protegido por uma diretiva if.
Da perspectiva do GRUB, os arquivos são relativos às partições
usadas. Se você usou uma partição /boot separada, [então] remova
/boot dos caminhos acima (para o núcleo e para unicode.pf2
). Você também precisará mudar a
linha "set root" para apontar para a partição de inicialização.
A entrada Firmware Setup
pode ser
usada para entrar na interface de configuração fornecida pelo
firmware (às vezes chamada de “Configuração do BIOS”).
Adicione uma entrada de menu para o Windows no grub.cfg
:
cat >> /boot/grub/grub.cfg << EOF
# Início da adição do Windows
menuentry "Windows 11" {
insmod fat
insmod chain
set root=(hd0,1)
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
EOF
(hd0,1)
deveria ser substituído pelo
nome designado pelo GRUB para a ESP. A diretiva chainloader
pode ser usada para dizer ao GRUB para
executar outro executável EFI, nesse caso o Windows Boot Manager.
Você pode colocar mais ferramentas utilizáveis no formato de
executável EFI (por exemplo, um shell EFI) na ESP e, também, criar
entradas do GRUB para elas.