Configurar o GRUB incorretamente pode tornar teu sistema inoperável sem um dispositivo alternativo de inicialização, como um CD-ROM ou uma unidade USB inicializável. Esta seção não é exigida para inicializar teu sistema LFS. Você possivelmente queira apenas modificar teu carregador de inicialização atual, por exemplo, Grub-Legacy ou GRUB2.
Certifique-se de que um disco de inicialização de emergência esteja
pronto para “resgatar” o computador se o computador se
tornar desusável (não inicializável). Se já não tiver um
dispositivo de inicialização, você consegue criar um. Para a
finalidade de que o procedimento abaixo funcione, você precisa
saltar adiante para o BLFS e instalar xorriso oriundo do pacote
libisoburn.
cd /tmp grub-mkrescue --output=grub-img.iso xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso
O LFS não tem os pacotes essenciais para suportar a Inicialização Segura. Para configurar o processo de inicialização seguindo as instruções desta seção, a Inicialização Segura precisa ser desativada a partir da interface de configuração do firmware. Leia-se a documentação fornecida pelo(a) fabricante do teu sistema para saber como desativar o suporte de Inicialização Segura.
O GRUB usa estrutura de nomenclatura própria dele para unidades e
partições na forma de (hdn,m), onde n é o número da unidade rígida e
m é o número da partição. Os
números da unidade rígida começam do zero, porém os números da
partição começam do um para partições normais (do cinco para
partições estendidas). Observe que isso é diferente de versões
anteriores, onde ambos os números começavam do zero. Por exemplo, a
partição sda1 é (hd0,1) para o GRUB e sdb3 é (hd1,3). Em contraste com o Linux, GRUB
não considera unidades de CD-ROM como unidades rígidas. Por
exemplo, se usar um CD em hdb e uma
segunda unidade rígida em hdc, essa
segunda unidade rígida ainda seria (hd1).
Se inicializar o sistema via BIOS, o GRUB funcionará escrevendo um Código de Carregador de Estágio Inicial no primeiro setor (nominado de Master Boot Record, ou MBR) do disco rígido. Essa área não é parte de nenhum sistema de arquivos. O BIOS carrega e executa o conteúdo do MBR e, em seguida, o Código de Carregador de Estágio Inicial carrega a imagem principal do GRUB a partir da Partição de Inicialização do BIOS. A imagem do GRUB é armazenada como dados brutos em vez de um arquivo (precisa não existir sistema de arquivos na Partição de Inicialização do BIOS), de modo que o Código de Carregador de Estágio Inicial não precise suportar nenhum sistema de arquivos e possa ser pequeno o suficiente para caber no MBR.
Se inicializar o sistema via UEFI, o GRUB funcionará armazenando a
imagem principal do GRUB como um arquivo executável PE-COFF em um
local padrão na Partição EFI de Sistema: EFI/BOOT/BOOTX64.EFI (ou EFI/BOOT/BOOTIA32.EFI para i386-efi). O firmware UEFI o carrega a partir do
local padrão e o executa, iniciando o GRUB.
Muitas funções do GRUB (incluindo inicializar o núcleo Linux) não
estão incluídas na imagem principal do GRUB. Em vez disso, elas
estão armazenadas em um sistema de arquivos como módulos do GRUB.
Esse sistema de arquivos geralmente é montado de maneira que os
módulos do GRUB possam ser acessados em /boot/grub na maioria das distribuições Linux.
Para evitar o problema do ovo e da galinha, grub-install embute os módulos
necessários para acessar esse sistema de arquivos na imagem
principal do GRUB, de modo que ele consiga encontrar e carregar
outros módulos.
O local da partição de inicialização é uma escolha do(a) usante que
afeta a configuração. Uma recomendação é a de ter-se uma pequena
partição separada (tamanho sugerido de 200 MB) apenas para
informações de inicialização. Ao fazer isso, não apenas o LFS, mas
qualquer distribuição Linux, poderá acessar os mesmos arquivos de
inicialização e, consequentemente, qualquer sistema inicializado.
Se optar por fazer isso, você precisará montar a partição separada,
mover todos os arquivos no diretório atual /boot (por exemplo, o núcleo Linux que você recém
construiu na seção anterior) para a nova partição. Você precisará,
então, desmontar a partição e remontá-la como /boot. Se você fizer isso, certifique-se de
atualizar o arquivo /etc/fstab.
Se a distribuição anfitriã utilizar uma partição separada para
/boot e você quiser que o sistema
LFS também use essa partição para /boot, basta montar a partição em $LFS/boot na distribuição anfitriã. O núcleo
Linux suporta montar uma partição em múltiplos pontos de
montagem.
Deixar /boot na partição LFS atual
também funcionará, porém a configuração para múltiplos sistemas é
mais complicada.
Para exemplos e mais informações acerca de esquemas de partição de inicialização, olhar para a Seção 2.4, “Criando uma Nova Partição” possivelmente seja informativo.
Usando as informações acima, determine o designador apropriado para
a partição raiz (ou partição de inicialização, se uma separada for
usada). Para o exemplo seguinte, é assumido que a partição raiz (ou
inicialização separada) é sda2.
As seguintes seções explicam como inicializar com BIOS e UEFI. As instalações do GRUB para BIOS, UEFI de 64 bits e UEFI de 32 bits podem coexistir e compartilhar a mesma configuração. As imagens e os dados ficam em locais diferentes, de modo que você pode criar tanto a Partição de Inicialização do BIOS quanto a Partição EFI de Sistema e instalar o GRUB para todos os tipos suportados de firmware (ou seja, executando três comandos grub-install). Se você não tiver certeza acerca do teu tipo de firmware ou se planeja mover o disco rígido para um computador diferente, isso é algo que você pode fazer como uma estratégia abrangente.
Se você estiver fazendo inicialização UEFI, mas tiver criado a partição de BIOS do Grub, possivelmente seja uma boa ideia executar o comando para BIOS caso a inicialização UEFI não funcione como esperado.
Se você precisar instalar o GRUB somente para um método de inicialização, não tem que executar comandos para ambos os métodos. Você pode executar apenas o comando para o método de inicialização que precisar.
Para inicializar com BIOS, certifique-se de que a partição de
inicialização esteja montada (se usar uma separada) e de que a
Partição de BIOS de inicialização exista. Depois disso, instale
os arquivos do GRUB em /boot/grub e
configure a trilha de inicialização:
O seguinte comando sobrescreverá o carregador de inicialização atual. Não execute o comando de isso não for desejado, por exemplo, se usar um gerenciador de inicialização de terceiro(a) para gerenciar o MBR.
grub-install /dev/sda --target=i386-pc
Para inicializar com UEFI, certifique-se de que a partição de
inicialização esteja montada (se usar uma separada) e de que a
Partição EFI de Sistema esteja montada em /boot/efi. Depois disso, instale os arquivos do
GRUB em /boot/grub e a imagem
principal do GRUB em /boot/efi/EFI/BOOT/BOOTX64.EFI:
O seguinte comando sobrescreverá o arquivo /boot/efi/EFI/BOOT/BOOTX64.EFI. Se ele já
existir, é provável que seja a entrada de outro carregador de
inicialização (por exemplo, a instalação do GRUB proveniente da
distribuição anfitriã ou o Gerenciador de Inicialização do
Windows). Produza uma cópia de segurança do arquivo, de modo
que ele possa ser restaurado posteriormente ou carregado como
um carregador secundário de inicialização pela nova instalação
do GRUB originária do LFS.
grub-install --target=x86_64-efi --removable
O comando acima assume que você tenha um firmware UEFI de 64
bits. Se você quiser tornar o sistema inicializável sobre um
firmware UEFI de 32 bits, execute o comando com x86_64-efi substituído por i386-efi.
A opção --removable faz
com que grub-install use o local
padrão, EFI/BOOT/BOOTX64.EFI (ou
EFI/BOOT/BOOTIA32.EFI para
i386-efi), em vez do local que o
GRUB prefere (EFI/GRUB/GRUBX64.EFI
ou EFI/GRUB/GRUBIA32.EFI). Usar um
local não padrão resultaria no local em uma variável EFI ser
registrada, mas o LFS carece do pacote do BLFS
efibootmgr, o qual é necessário para o GRUB registrar o local
na variável EFI.
Algumas implementações de firmware UEFI, embora raras, ignoram o caminho EFI padrão. Tais sistemas, na maioria das vezes, são antigos, como Lenovo ThinkPads ou desktops/laptops HP. Quando a entrada de inicialização estiver ausente na configuração do firmware, você precisará instalar o pacote do BLFS efibootmgr para criar uma entrada de inicialização para UEFI. Se for mais fácil, o pacote pode ser instalado pelo gerenciador de pacotes da distribuição, se aplicável, e usado no anfitrião em vez de no sistema LFS. Isso consegue evitar a necessidade de baixar mais tarballs para o sistema LFS por enquanto.
Primeiro instale o pacote e, em seguida, monte o sistema de arquivos da variável EFI, se ele já não estiver montado:
mountpoint /sys/firmware/efi/efivars || mount -v -t efivarfs efivarfs /sys/firmware/efi/efivars
Agora crie uma entrada de inicialização para a EFI:
efibootmgr -c -d /dev/sd<x>\ -p<y>-L "LFS" -l '\EFI\BOOT\BOOT<X64>.EFI'
A unidade /dev/sd deveria ser o
nó de dispositivo para o disco onde a ESP existir. O número da
partição <x><y>
deveria corresponder ao número da ESP. Se a ESP estiver em
/dev/sda2, então o número da
partição seria 2. Se você estiver
usando UEFI de 32 bits, substitua <X64> por IA32.
Algum firmware (quebrado) possivelmente exija parâmetros
adicionais para efibootmgr, como --full-dev-path ou -e 1 -E. Leia-se a página de
manual efibootmgr(8)
para detalhes.
Agora desmonte o sistema de arquivos da variável EFI:
umount -v /sys/firmware/efi/efivars
Gere o /boot/grub/grub.cfg:
cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5
insmod part_gpt
insmod ext2
set root=(hd0,2)
set gfxpayload=1024x768x32
menuentry "GNU/Linux, Linux 7.1.8-lfs-13.1-systemd" {
linux /boot/vmlinuz-7.1.8-lfs-13.1-systemd root=/dev/sda2 ro
}
EOF
Os comandos insmod
carregam os módulos do GRUB
nominados part_gpt e ext2. Apesar da nomenclatura, ext2 suporta, na verdade, os sistemas de arquivos
ext2, ext3 e ext4. Em
uma configuração típica, os módulos part_gpt e ext2 já
estão embutidos na imagem principal do GRUB pelo grub-install, e os comandos
insmod para eles não
farão nada. No entanto, eles não danificam de qualquer maneira e
podem ser necessários com algumas configurações raras.
O comando set gfxpayload=1024x768x32 configura a resolução e a profundidade de cor do framebuffer VESA a ser passado para o núcleo. Ele é necessário para o controlador SimpleDRM do núcleo usar o framebuffer VESA. Você pode usar um valor diferente de resolução ou de profundidade de cor que melhor se adeque para teu monitor. Essa linha não faz nada quando o sistema for inicializado via UEFI, mas ela não danifica de qualquer maneira.
A partir da perspectiva do GRUB, os arquivos do núcleo estão relativos à partição usada. Se você usou uma partição /boot separada, remova /boot da linha linux acima. Você também precisará mudar a linha set root para apontar para a partição de inicialização.
O designador do GRUB para uma partição possivelmente mude se você
adicionou ou removeu alguns discos (incluindo discos removíveis,
como dispositivos USB miniatura). A mudança possivelmente cause
falha de inicialização, pois o grub.cfg se refere a alguns designadores
“antigos”.
Se desejar evitar tal problema, você possivelmente use o UUID de
uma partição e o UUID de um sistema de arquivos, em vez de um
designador do GRUB para especificar um dispositivo. Execute
lsblk -o
UUID,PARTUUID,PATH,MOUNTPOINT para exibir os
UUIDs dos teus sistemas de arquivos (na coluna UUID) e partições (na coluna PARTUUID). Então substitua set root=(hdx,y) por search --set=root --fs-uuid ; e substitua
<UUID do sistema de arquivos onde o núcleo
estiver instalado>root=/dev/sda2 por root=PARTUUID=.
<UUID da
partição onde o LFS estiver construído>
Observe que o UUID de uma partição é completamente diferente do
UUID do sistema de arquivos nessa partição. Alguns recursos
online possivelmente instruam você a usar o root=UUID=, em vez do
<UUID do
sistema de arquivos>root=PARTUUID=,
porém fazer isso exigirá um initramfs, o qual está além do escopo
do LFS.
<UUID da partição>
O nome do nó de dispositivo para uma partição em /dev também possivelmente mude (muito
frequentemente em alguns sistemas com múltiplos discos NVME).
Você também pode substituir caminhos para nós de dispositivo,
como /dev/sda1, por PARTUUID=, no <UUID da
partição>/etc/fstab, para evitar uma potencial falha de
inicialização no caso do nome do nó de dispositivo tiver mudado.
O GRUB é um programa extremamente poderoso e ele fornece um tremendo número de opções para inicializar a partir de uma ampla variedade de dispositivos, sistemas operacionais e tipos de partição. Existem também muitas opções para personalização, tais como telas gráficas de abertura; reprodução de sons; entrada gerada de mouse; etc. Os detalhes dessas opções estão além do escopo desta introdução.
Existe um comando, grub-mkconfig, que consegue escrever um arquivo de configuração automaticamente. Ele usa um conjunto de scripts em /etc/grub.d/ e destruirá quaisquer personalizações que você fizer. Esses scripts são projetados primariamente para distribuições não fonte e não são recomendados para o LFS. Se você instalar uma distribuição comercial do Linux, existe uma boa chance de que esse programa seja executado. Tenha certeza de produzir uma cópia de segurança do teu arquivo grub.cfg.