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.
        
        
          
          
            Importante
          
          
            Construir o núcleo Linux pela primeira vez é uma das tarefas mais
            desafiadoras no LFS. Acertar depende do hardware específico para
            o sistema alvo e de suas necessidades específicas. Existem quase
            12.000 itens de configuração que estão disponíveis para o núcleo,
            embora somente cerca de um terço deles sejam necessários para a
            maioria dos computadores. Os(As) editores(as) do LFS recomendam
            que os(as) usuários(as) não familiarizados(as) com esse processo
            sigam os procedimentos abaixo bastante de perto. O objetivo é o
            de obter um sistema inicial em um ponto onde você possa se logar
            na linha de comando quando reinicializar posteriormente na
            Seção 11.3,
            “Reinicializando o Sistema”. Nesse ponto, otimização e
            personalização não é um objetivo.
          
          
            Para informação geral a respeito da configuração do núcleo,
            veja-se 
            https://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt.
            Informação adicional acerca de configurar e construir o núcleo
            podem ser encontradas em https://anduin.linuxfromscratch.org/LFS/kernel-nutshell/.
            Essas referências estão um pouco desatualizadas, mas ainda
            fornecem uma visão geral razoável do processo.
          
          
            Se tudo mais falhar, você consegue pedir ajuda na lista de
            discussão lfs-support.
            Observe que a assinatura é exigida para a finalidade de que a
            lista evite mensagens indesejadas.
          
         
        
          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.
              
             
          
         
        
          
          
            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:
          
          
General setup --->
  [ ] Compile the kernel with warnings as errors                        [WERROR]
  [ ] Auditing support                                                   [AUDIT]
  CPU/Task time and stats accounting --->
    [*] Pressure stall information tracking                                [PSI]
    [ ]   Require boot parameter to enable pressure stall information tracking
                                                     ...  [PSI_DEFAULT_DISABLED]
  < > Enable kernel headers through /sys/kernel/kheaders.tar.xz      [IKHEADERS]
  [*] Control Group support --->                                       [CGROUPS]
    [*] Memory controller                                                [MEMCG]
  [ ] Configure standard kernel features (expert users) --->            [EXPERT]
Processor type and features --->
  [*] Build a relocatable kernel                                   [RELOCATABLE]
  [*]   Randomize the address of the kernel image (KASLR)       [RANDOMIZE_BASE]
General architecture-dependent options --->
  [*] Stack Protector buffer overflow detection                 [STACKPROTECTOR]
  [*]   Strong Stack Protector                           [STACKPROTECTOR_STRONG]
[*] Networking support --->                                                [NET]
  Networking options --->
    [*] TCP/IP networking                                                 [INET]
    <*>   The IPv6 protocol --->                                          [IPV6]
Device Drivers --->
  Generic Driver Options --->
    [ ] Support for uevent helper                                [UEVENT_HELPER]
    [*] Maintain a devtmpfs filesystem to mount at /dev               [DEVTMPFS]
    [*]   Automount devtmpfs at /dev, after the kernel mounted the rootfs
                                                           ...  [DEVTMPFS_MOUNT]
    Firmware loader --->
      < /*> Firmware loading facility                                [FW_LOADER]
      [ ]     Enable the firmware sysfs fallback mechanism
                                                    ...  [FW_LOADER_USER_HELPER]
  Firmware Drivers --->
    [*] Export DMI identification via sysfs to userspace                 [DMIID]
  Graphics support --->
    Frame buffer Devices --->
      <*> Support for frame buffer devices --->                             [FB]
    Console display driver support --->
      [*] Framebuffer Console support                      [FRAMEBUFFER_CONSOLE]
File systems --->
  [*] Inotify support for userspace                               [INOTIFY_USER]
  Pseudo filesystems --->
    [*] Tmpfs virtual memory file system support (former shm fs)         [TMPFS]
    [*]   Tmpfs POSIX Access Control Lists                     [TMPFS_POSIX_ACL]
          
            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                                                [X86_X2APIC]
Device Drivers --->
  [*] PCI support --->                                                     [PCI]
    [*] Message Signaled Interrupts (MSI and MSI-X)                    [PCI_MSI]
  [*] IOMMU Hardware Support --->                                [IOMMU_SUPPORT]
    [*] Support for Interrupt Remapping                              [IRQ_REMAP]
          
            Se você estiver construindo um sistema de 32 bits executando em
            um hardware com RAM mais que 4 GB, ajuste a configuração, de modo
            que o núcleo consiga usar até 64 GB de RAM física:
          
          
Processor type and features --->
  High Memory Support --->
    (X) 64GB                                                        [HIGHMEM64G]
          
            Se a partição para o sistema LFS estiver em um SSD NVME (isto é,
            o nó do dispositivo para a partição for /dev/nvme*, em vez de /dev/sd*), habilite o suporte a NVME ou o
            sistema LFS não inicializaria:
          
          
Device Drivers --->
  NVME Support --->
    <*> NVM Express block device                                  [BLK_DEV_NVME]
         
        
          
          
            Nota
          
          
            Enquanto que "The IPv6 Protocol" não é estritamente exigido, ela
            é altamente recomendada pelos(as) desenvolvedores(as) do systemd.
          
         
        
          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.
        
        
          
          
            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, mesmo se você
            usará o carregador de inicialização UEFI da distribuição
            anfitriã.
          
         
        
          
            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.
              
             
            - 
              
Configurar
              recursos padrão do núcleo (usuários(as)
              experientes)
             
            - 
              
                Isso fará com que algumas opções apareçam na interface de
                configuração, mas alterar essas opções possivelmente seja
                perigoso. Não use isso, a menos que você saiba o que está
                fazendo.
              
             
            - 
              
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.
              
             
            - 
              
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.
              
             
            - 
              
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
             
            - 
              
                Support running the interrupt controller of 64-bit x86
                processors in x2APIC mode. x2APIC may be enabled by firmware
                on 64-bit x86 systems, and a kernel without this option
                enabled will panic on boot if x2APIC is enabled by firmware.
                This option has has no effect, but also does no harm if
                x2APIC is disabled by the 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.4.12
          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.4.12/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.4.12-lfs-12.0-systemd
        
          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.4.12
        
          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.4.12
        
          Instale a documentação para o núcleo Linux:
        
        cp -r Documentation -T /usr/share/doc/linux-6.4.12
        
          É 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.4.12 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.4.12”. 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.