10.3.1. Instalação do Núcleo
Construir o núcleo envolve uns poucos passos—configuração;
compilação; e instalação. Leia-se o arquivo README
na árvore do fonte do núcleo para métodos
alternativos à maneira que este livro configura o núcleo.
Prepare para compilação executando o seguinte comando:
make mrproper
Isso garante que a árvore do núcleo esteja absolutamente limpa. A
equipe do núcleo recomenda que esse comando seja emitido antes de
cada compilação do núcleo. Não confie que a árvore do fonte esteja
limpa depois de descompactar.
Existem várias maneiras para configurar as opções do núcleo.
Usualmente, isso é feito por meio de uma interface controlada por
menu, por exemplo:
make menuconfig
O significado das variáveis opcionais de ambiente do
make:
-
LANG=<host_LANG_value>
LC_ALL=
-
Isso estabelece a configuração do locale para aquela usada no
anfitrião. Isso possivelmente seja necessário para um
adequado desenho de linha da interface ncurses do menuconfig
em um console de texto UTF-8 do Linux.
Se usada, [então] assegure-se de substituir <host_LANG_value>
pelo
valor da variável $LANG
oriunda do
seu anfitrião. Você pode, alternativamente, usar, em vez
disso, o valor do anfitrião de $LC_ALL
ou $LC_CTYPE
.
-
make
menuconfig
-
Isso lança uma interface ncurses controlada por menu. Para
outras (gráficas) interfaces, digite make help.
Para informação geral a respeito de configuração do núcleo, veja-se
https://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt.
O BLFS tem alguma informação relativa a exigências específicas de
configuração do núcleo de pacotes fora do LFS em
https://www.linuxfromscratch.org/blfs/view/11.3/longindex.html#kernel-config-index.
Informação adicional acerca de configurar e construir o núcleo pode
ser encontrada em http://www.kroah.com/lkn/
Nota
Um bom lugar de partida para configurar a configuração do núcleo
é executar make
defconfig. Isso configurará a configuração base
para um bom estado que leve a sua atual arquitetura de sistema em
conta.
Assegure-se de habilitar/desabilitar/configurar os seguintes
recursos ou o sistema poderia não funcionar corretamente ou
inicializar de jeito nenhum:
Processor type and features --->
[*] Build a relocatable kernel [CONFIG_RELOCATABLE]
[*] Randomize the address of the kernel image (KASLR) [CONFIG_RANDOMIZE_BASE]
General setup --->
[ ] Compile the kernel with warnings as errors [CONFIG_WERROR]
< > Enable kernel headers through /sys/kernel/kheaders.tar.xz [CONFIG_IKHEADERS]
General architecture-dependent options --->
[*] Stack Protector buffer overflow detection [CONFIG_STACKPROTECTOR]
[*] Strong Stack Protector [CONFIG_STACKPROTECTOR_STRONG]
Device Drivers --->
Graphics support --->
Frame buffer Devices --->
<*> Support for frame buffer devices --->
Console display driver support --->
[*] Framebuffer Console support [CONFIG_FRAMEBUFFER_CONSOLE]
Generic Driver Options --->
[ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
[*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
[*] Automount devtmpfs at /dev, after the kernel mounted the rootfs [CONFIG_DEVTMPFS_MOUNT]
Habilite alguns recursos adicionais se você estiver construindo
um sistema de 64 bits. Se você estiver usando o menuconfig,
[então] habilite-as na ordem de CONFIG_PCI_MSI
primeiro; então
CONFIG_IRQ_REMAP
; e
finalmente CONFIG_X86_X2APIC
, pois uma opção
somente aparece depois que as dependências dela forem
selecionadas.
Processor type and features --->
[*] Support x2apic [CONFIG_X86_X2APIC]
Device Drivers --->
[*] PCI Support ---> [CONFIG_PCI]
[*] Message Signaled Interrupts (MSI and MSI-X) [CONFIG_PCI_MSI]
[*] IOMMU Hardware Support ---> [CONFIG_IOMMU_SUPPORT]
[*] Support for Interrupt Remapping [CONFIG_IRQ_REMAP]
Existem várias outras opções que possivelmente sejam desejadas,
dependendo das exigências para o sistema. Para uma lista das opções
necessárias para pacotes do BLFS, veja-se o
Índice do BLFS das Configurações do Núcleo
(https://www.linuxfromscratch.org/blfs/view/11.3/longindex.html#kernel-config-index).
Nota
Se seu hardware do anfitrião estiver usando UEFI e você desejar
inicializar o sistema LFS com ela, [então] você deveria ajustar
alguma configuração do núcleo seguindo
a página do BLFS.
A justificativa para os itens de configuração
acima:
-
Torne aleatório
o endereço da imagem do núcleo (KASLR)
-
Habilita ASLR para imagem do núcleo, para mitigar alguns
ataques baseados em endereços fixos de dados ou código
sensíveis no núcleo.
-
Compila o núcleo
com avisos como erros
-
Isso possivelmente cause falha de construção se o compilador
e (ou) a configuração forem diferentes daqueles dos(as)
desenvolvedores(as) do núcleo.
-
Habilita
cabeçalhos do núcleo por meio de
/sys/kernel/kheaders.tar.xz
-
Isso exigirá cpio ao se construir o
núcleo. cpio
não é instalado pelo LFS.
-
Protetor Forte
da Pilha
-
Habilita SSP para o núcleo. Nós o habilitamos para o espaço
inteiro de usuário(a) com --enable-default-ssp
ao
configurar o GCC, porém o núcleo não usa a configuração
padrão do GCC para SSP. Nós o habilitamos explicitamente
aqui.
-
Suporte a
auxiliar do uevent
-
Ter essa opção configurada possivelmente interfira com o
gerenciamento de dispositivo quando se usar o Udev/Eudev.
-
Mantém um
devtmpfs
-
Isso criará nós automatizados de dispositivos, os quais são
povoados pelo núcleo, mesmo sem o Udev executando. O Udev
então executa no topo disso, gerenciando permissões e
adicionando links simbólicos. Esse item de configuração é
exigido para todos(as) os(as) usuários(as) do Udev/Eudev.
-
Automonta
devtmpfs em /dev
-
Isso montará a visão do núcleo dos dispositivos em /dev assim
que alternar para o sistema de arquivos raiz pouco antes de
iniciar o init.
-
Suporte a
Console do Framebuffer
-
Isso é necessário para exibir o console do Linux em um
dispositivo de buffer de quadros. Para permitir que o núcleo
imprima mensagens de depuração em um estágio inicial de
inicialização, não deveria ser construído como um módulo do
núcleo, a menos que um initramfs seja usado. E, se
CONFIG_DRM
(Direct Rendering
Manager) estiver habilitado, [então] é provável que
CONFIG_DRM_FBDEV_EMULATION
(Habilita suporte legado a fbdev para o seu controlador de
configuração de modo) devesse estar habilitado também.
-
Suporte a
x2apic
-
Suporta executar o controlador de interrupção dos
processadores x86 de 64 bits em modo x2APIC. O x2APIC
possivelmente seja habilitado por firmware em sistemas x86 de
64 bits e um núcleo sem essa opção habilitada dará pânico na
inicialização se o x2APIC for habilitado por firmware. Essa
opção não tem efeito, porém também não danifica, se o x2APIC
for desabilitado pelo firmware.
Alternativamente, make
oldconfig possivelmente seja mais apropriado em
algumas situações. Veja-se o arquivo README
para mais informação.
Se desejado, [então] pule a configuração do núcleo copiando o
arquivo config do núcleo, .config
, a
partir do sistema anfitrião (assumindo que ele esteja disponível)
para o diretório linux-6.1.11
desempacotado. Entretanto, nós não recomendamos essa opção.
Frequentemente é melhor explorar todos os menus de configuração e
criar a configuração do núcleo a partir do zero.
Compile a imagem do núcleo e módulos:
make
Se usar módulos do núcleo, [então] a configuração do módulo em
/etc/modprobe.d
possivelmente seja
exigida. Informação pertinente à configuração de módulos e núcleo
está localizada na Seção 9.3,
“Visão Geral do Manuseio de Dispositivo e de Módulo” e na
documentação do núcleo no diretório linux-6.1.11/Documentation
. Também, modprobe.d(5)
possivelmente seja de interesse.
A menos que o suporte a módulo tenha sido desabilitado na
configuração do núcleo, instale os módulos com:
make modules_install
Depois que a compilação do núcleo estiver completa, passos
adicionais são exigidos para completar a instalação. Alguns
arquivos precisam ser copiados para o diretório /boot
.
Cuidado
Se você tiver decidido usar uma partição /boot
separada para o sistema LFS (talvez
compartilhando uma partição /boot
com a distribuição anfitriã), [então] os arquivos copiados abaixo
deveriam ir para lá. A maneira mais fácil de fazer isso é a de
criar a entrada para /boot
em
/etc/fstab
primeiro (leia-se a
seção anterior para detalhes), então emitir o seguinte comando
como o(a) usuário(a) root
dentro
do ambiente chroot:
mount /boot
O caminho para o nó de dispositivo está omitido no comando, pois
mount consegue
lê-lo a partir de /etc/fstab
.
O caminho para a imagem do núcleo possivelmente varie, dependendo
da plataforma sendo usada. O nome de arquivo abaixo pode ser mudado
para se adequar ao seu gosto, porém o tronco do nome de arquivo
deveria ser vmlinuz para ser
compatível com a configuração automática do processo de
inicialização descrito na próxima seção. O seguinte comando assume
uma arquitetura x86:
cp -iv arch/x86/boot/bzImage /boot/vmlinuz-6.1.11-lfs-11.3
System.map
é um arquivo de símbolo
para o núcleo. Ele mapeia os pontos de entrada de função de cada
função na API do núcleo, bem como os endereços das estruturas de
dados do núcleo para o núcleo em execução. Ele é usado como um
recurso quando se investigar problemas do núcleo. Emita o seguinte
comando para instalar o arquivo de mapa:
cp -iv System.map /boot/System.map-6.1.11
O arquivo de configuração do núcleo .config
produzido pelo passo make menuconfig acima contém
todas as seleções de configuração para o núcleo que foi recém
compilado. É uma boa ideia manter esse arquivo para futura
referência:
cp -iv .config /boot/config-6.1.11
Instale a documentação para o núcleo Linux:
install -d /usr/share/doc/linux-6.1.11
cp -r Documentation/* /usr/share/doc/linux-6.1.11
É importante observar que os arquivos no diretório do fonte do
núcleo não são de propriedade do(a) root. Sempre que um pacote é
desempacotado como o(a) usuário(a) root (como nós fizemos dentro do
chroot), os arquivos tem os IDs de usuário(a) e de grupo do que
quer que fossem no computador do(a) empacotador(a). Isso geralmente
não é um problema para qualquer outro pacote ser instalado, pois a
árvore do fonte é removida depois da instalação. Entretanto, a
árvore do fonte do Linux frequentemente é mantida por um longo
tempo. Devido a isso, existe uma chance de que qualquer ID de
usuário(a) que o(a) empacotador(a) usou seja atribuído para alguém
na máquina. Essa pessoa então teria acesso de escrita ao fonte do
núcleo.
Nota
Em muitos casos, a configuração do núcleo precisará ser
atualizada para pacotes que serão instalados posteriormente no
BLFS. Diferente de outros pacotes, não é necessário remover a
árvore do fonte do núcleo depois que o recém construído núcleo
for instalado.
Se a árvore do fonte do núcleo será mantida, [então] execute
chown -R 0:0 no
diretório linux-6.1.11
para
assegurar que todos os arquivos sejam de propriedade do(a)
usuário(a) root.
Atenção
Alguma documentação do núcleo recomenda criar um link simbólico a
partir de /usr/src/linux
apontando
para o diretório do fonte do núcleo. Isso é específico para
núcleos anteriores à série 2.6 e precisa não ser criado em um sistema
LFS, uma vez que ele pode causar problemas para pacotes que você
possivelmente deseje construir tão logo seu sistema base LFS
esteja completo.
Atenção
Os cabeçalhos no diretório include
do sistema (/usr/include
) deveriam
sempre ser aqueles contra
os quais a Glibc foi compilada, isto é, os cabeçalhos sanitizados
instalados na Seção 5.4,
“Cabeçalhos da API do Linux-6.1.11”. Portanto, eles
nunca deveriam ser
substituídos nem pelos cabeçalhos crus do núcleo nem por
quaisquer outros cabeçalhos sanitizados do núcleo.