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/stable-systemd/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]
   [ ] Auditing Support [CONFIG_AUDIT]
   CPU/Task time and stats accounting --->
      [*] Pressure stall information tracking [CONFIG_PSI]
   < > Enable kernel headers through /sys/kernel/kheaders.tar.xz [CONFIG_IKHEADERS]
   [*] Control Group support [CONFIG_CGROUPS]   --->
      [*] Memory controller [CONFIG_MEMCG]
   [ ] Enable deprecated sysfs features to support old userspace tools [CONFIG_SYSFS_DEPRECATED]
   [*] Configure standard kernel features (expert users) [CONFIG_EXPERT] --->
      [*] open by fhandle syscalls [CONFIG_FHANDLE]
General architecture-dependent options  --->
   [*] Enable seccomp to safely compute untrusted bytecode [CONFIG_SECCOMP]
   [*] Stack Protector buffer overflow detection [CONFIG_STACKPROTECTOR]
   [*]   Strong Stack Protector [CONFIG_STACKPROTECTOR_STRONG]
Networking support  --->
  Networking options  --->
   <*> The IPv6 protocol [CONFIG_IPV6]
Device Drivers  --->
  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]
   Firmware Loader --->
      [ ] Enable the firmware sysfs fallback mechanism [CONFIG_FW_LOADER_USER_HELPER]
  Firmware Drivers   --->
   [*] Export DMI identification via sysfs to userspace [CONFIG_DMIID]
  Graphics support --->
   Frame buffer Devices --->
      <*> Support for frame buffer devices --->
   Console display driver support --->
      [*] Framebuffer Console support [CONFIG_FRAMEBUFFER_CONSOLE]
File systems  --->
   [*] Inotify support for userspace [CONFIG_INOTIFY_USER]
       Pseudo filesystems  --->
        [*] Tmpfs POSIX Access Control Lists [CONFIG_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 [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]
         
        
          
          
            Nota
          
          
            Enquanto que "The IPv6 Protocol" não é estritamente exigido, ela
            é altamente recomendada pelos(as) desenvolvedores(as) do systemd.
          
         
        
          
          
            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-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.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.