Construir um kernel da forma tradicional

Intenção primária e variantes de busca
- Intenção: compilar e instalar um kernel Linux a partir das fontes
- Variantes: construir kernel manualmente, compilar kernel Linux, aplicar patch no kernel, recuperar GRUB após falha de kernel, configurar kernel com menuconfig
3 Construindo um kernel do modo tradicional
Este capítulo descreve um método genérico que funciona em qualquer sistema Linux. Não é específico do Fedora; portanto, o resultado final não será um pacote RPM do kernel, mas um kernel pronto para boot.
3.1 Baixar as fontes do kernel
Baixe o tarball do kernel desejado para /usr/src. Visite https://www.kernel.org e escolha a versão requerida, por exemplo linux-2.6.18.2.tar.bz2 (a árvore 2.6 está em http://www.kernel.org/pub/linux/kernel/v2.6/). No sistema faça:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.2.tar.bz2
Descompacte as fontes e crie um link simbólico linux apontando para o diretório das fontes:
tar xjf linux-2.6.18.2.tar.bz2
ln -s linux-2.6.18.2 linux
cd /usr/src/linux
Nota: manter o link simbólico facilita compilações posteriores e scripts que assumem /usr/src/linux.
3.2 Aplicar patches nas fontes do kernel (Opcional)
Às vezes é necessário aplicar um patch para adicionar drivers, suporte a virtualização ou recursos em pré-lançamento. Suponha que você baixou patch.bz2 para /usr/src. Aplique assim (execute os comandos em /usr/src/linux):
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1
O primeiro comando realiza um teste sem alterar as fontes; se não houver erros, execute o segundo para aplicar o patch. Se o teste falhar, não aplique o patch até corrigir o problema.
Existem também prepatches (equivalente a versões alfa). Por exemplo, para compilar 2.6.19-rc5 você pode baixar o patch-2.6.19-rc5.bz2 e aplicá-lo às fontes 2.6.18 (não a 2.6.18.1/2). Exemplo:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc5.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.19-rc5.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.19-rc5.bz2 | patch -p1
Important: prepatches são para teste; evite usá-los em produção sem validação completa.
3.3 Configurar o kernel
É recomendável basear a nova configuração na configuração do kernel atualmente em uso. No diretório /usr/src/linux:
make mrproper
cp /boot/config-`uname -r` ./.config
Em seguida execute o menu de configuração:
make menuconfig
No menu do kernel escolha Load an Alternate Configuration File e selecione .config (que contém a configuração do kernel atual). Navegue pelas opções, ative ou desative módulos conforme necessário e, ao sair, responda Yes para salvar a nova configuração.
Quando terminar, confirme salvar a configuração:
Dica rápida: habilite apenas os drivers que realmente precisa; módulos desnecessários aumentam tempo de compilação e superfície de ataque.
3.4 Compilar e instalar o kernel
Para compilar e instalar, execute:
make all
make modules_install
make install
A compilação pode levar horas, dependendo da configuração e da CPU. O comando make install normalmente também cria um initramfs/initrd e atualiza /boot/grub/menu.lst.
Edite /boot/grub/menu.lst para garantir que o novo kernel seja a entrada padrão (valor default = 0):
vi /boot/grub/menu.lst
Exemplo de menu.lst gerado:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.18.2)
root (hd0,0)
kernel /vmlinuz-2.6.18.2 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.18.2.img
title Fedora Core (2.6.18-1.2798.fc6)
root (hd0,0)
kernel /vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.18-1.2798.fc6.img
Reinicie o sistema:
shutdown -r now
Depois do boot, verifique a versão do kernel em execução:
uname -r
Deve exibir algo como:
2.6.18.2
Recuperação se o sistema não iniciar
Se o sistema não subir com o novo kernel, reinicie e, quando vir a tela de boot do GRUB, pressione qualquer tecla para entrar no menu do GRUB:
Selecione o kernel anterior e inicie. Corrija a configuração, recompile e teste novamente. Não esqueça de remover do /boot/grub/menu.lst a entrada do kernel que não funciona.
Lista de verificação por função
- Administrador de sistemas:
- Fazer backup de /boot, /etc/fstab e /boot/grub/menu.lst
- Garantir acesso físico/console em caso de falha
- Verificar espaço livre em /boot
- Desenvolvedor/engenheiro de driver:
- Confirmar compatibilidade do driver com a versão do kernel
- Testar patches em ambiente isolado (VM)
- Operador de produção:
- Testar kernel em ambiente de pré-produção
- Planejar janela de manutenção e rollback
Playbook rápido de recuperação (runbook)
- Reinicie a máquina.
- Na tela do GRUB pressione qualquer tecla para entrar no menu.
- Selecione o kernel estável anterior.
- Boot e verifique logs: dmesg, /var/log/messages, journalctl.
- Ajuste .config ou aplique/remova patches conforme erro.
- Recompile e instale novamente.
- Se necessário, remova a entrada inválida em /boot/grub/menu.lst.
Quando este método falha / alternativas
- Você não terá um pacote do kernel para gerenciar via gerenciador de pacotes (RPM/DEB). Alternativa: use ferramentas de empacotamento (makedeb, make rpm) ou scripts de distro para gerar pacotes.
- Para deploy em muitas máquinas, prefira construir um pacote nativo (RPM/DEB) ou usar repositório interno.
- Se precisar de versões com backports de segurança e suporte a longo prazo, prefira kernels fornecidos pela distribuição.
Modelo mental e heurísticas
- Mental model: construir um kernel é um pipeline: fontes → configurar → compilar → instalar → testar → iterar.
- Heurísticas:
- Comece a partir da configuração atual (.config).
- Habilite drivers como módulos sempre que possível para reduzir tamanho e risco.
- Use VMs para testar kernels experimentais.
Caixa de fatos (qualitativa)
- Tempo de compilação: minutos a horas (dependendo do CPU e opções). Uma máquina moderna compila um kernel padrão em ~10–30 minutos; máquinas mais antigas podem levar horas.
- Risco: kernels personalizados aumentam chances de regressão; valide em staging.
Fluxo de decisão (Mermaid)
flowchart TD
A[Precisa de kernel personalizado?] -->|Não| B[Use kernel da distro]
A -->|Sim| C[Tem patch/prepatch?]
C -->|Sim| D[Aplicar patch e testar em VM]
C -->|Não| E[Configurar a partir de .config atual]
D --> F[Compilar em VM]
E --> F
F --> G[Testar boot]
G -->|OK| H[Implantar]
G -->|Falha| I[Entrar no GRUB; selecionar kernel antigo]
I --> J[Corrigir configurações ou remover patch]
J --> F
Casos de teste / Critérios de aceitação
- O kernel compila sem erros (make all conclui com sucesso).
- Módulos são instalados em /lib/modules/
uname -r
(verifique pasta correspondente à versão nova). - Sistema realiza boot e uname -r mostra a versão compilada.
- Serviços críticos sob supervisão iniciam corretamente após boot.
Dicas de segurança e privacidade
- Não compilar em hosts de produção sem testes: use ambiente isolado.
- Mantenha backups de chaves e configurações. Alguns módulos expostos podem alterar comportamento do subsistema de segurança; revise opções como SELinux/AppArmor.
Sumário final
Compilar um kernel manualmente dá controle total sobre opções e drivers, mas exige testes e um processo de rollback bem definido. Use VMs para validar alterações, mantenha backups de /boot e do GRUB, e prefira empacotar o kernel se precisar distribuir para várias máquinas.
Links
- Fedora: http://fedora.redhat.com
- Fedora Wiki: http://fedoraproject.org/wiki
- The Linux Kernel Archives: http://www.kernel.org
Materiais semelhantes

Liberar espaço no iPhone sem excluir apps

Instalar WireGuard em CentOS 8

Liberar 24GB no Windows 10 após Threshold 2

Motorista de entregas: como garantir renda estável

Como limpar o cache no Microsoft Edge
