Written by: Helio Loureiro
Category: Linux
Hits: 11564

Ainda hoje muita gente mostra supresa quando digo que estou rodando um kernel recém lançado em meu sistema.  Apesar de quase todo mundo saber que Linux é o kernel apenas, uma parte do sistema operacional, pouca gente compila seu próprio kernel. E isso é uma coisa bastante simples com Debian e Ubuntu, ou qualquer outro sistema baseado neles.

Também vejo pessoas distribuindo o kernel em forma de download em sites como 4share, mega, etc.  É legal contribuir com comunidade, mas distribuir um kernel assim, a parte mais vital do sistema, dá brecha de segurança pra que alguém insira um malware ali.  Então evite fazer isso.  E compile seu próprio kernel.

O primeiro passo é ter o código fonte do Linux.  Depois que passou a utlizar o git pra controle de versão (e muito mais que isso), eu também passei a usar o mesmo pra sincronizar meus fontes.  No diretório "/usr/src", como root, crie o repositório git local da seguinte forma:

root@jessie:src# git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

Não é um processo rápido.  O sistema vai baixar mais de 1 GB de arquivos no diretório "/usr/src/linux-stable".

Antes de botar a mão na massa, crie um novo "branch" com a versão que irá compilar.  É possível ver as versões disponíveis pelo comando "git tag -l".  No meu caso eu usei a versão v4.1-rc7.  Então a coisa toda pra listar e criar seu "branch" fica assim:

root@jessie:linux-stable# git tag -l | grep v4.1 
root@jessie:linux-stable# git checkout -b v4.1-rc7 tags/v4.1-rc7

O próximo passo é criar uma configuração de kernel antes de compilar.  Em geral eu copio o arquivo "/root/config-<minha versão corrente>".  Se quiser fazer isso, o comando correto é: 

root@jessie:linux-stable# cp /boot/config-$(uname -r) .

Existem outras maneiras de configurar o kernel, como usando o comando "make menuconfig" ou "make xconfig", entre outros.  Mas é preciso saber exatamente o que se quer do kernel pra configurar o que se realmente deseja.  Uma tarefa não muito fácil pras primeiras compilações.

O passo seguinte é instalar um pacote chamado "kernel-package".  Esse pacote é que faz toda a mágica da compilação e geração de pacotes pra você.  Isso mesmo: ao final do processo terá um kernel seu num arquivo .deb.  Eu já usei isso muito pra compilar em uma máquina e instalar em várias outras.  Voltando ao pacote, instale usado "apt-get", "apt" (novíssimo), ou "aptitude".

root@jessie:linux-stable# apt install kernel-package

O passo seguinte é chamar o kernel-package pra criar o kernel.  Eu pessoalmente uso da seguinte forma:

root@jessie:linux-stable# make-kpkg --initrd --append-to-version "-helio" --bzimage --revision 1 -j 4 kernel_image

O comando passado e os parâmetros são:

Ao iniciar a compilação, o sistema passará por uma etapa de revisão da configuração que foi definida anteriormente.  Todo opção nova passará por uma pergunta se deve ou não ser incluída, ou ficar como módulo (pra ser carregado dinamicamente).  Toda pergunta já vem com alguma sugestão de resposta.  Em geral essa é a melhor opção a menos que realmente saiba o que aquela configuração significa.

Passada essa etapa, pode ir pegar um café.  Um café?  Melhor um bule inteiro.  E pode ir assistir ao último episódio de Game of Thrones que a compilação demora um pouco.

Uma vez terminada, se não tiver nenhum erro, será gerado um pacote com o formato "/usr/src/linux-image-<versão do kernel><nome que você personalizou>_<revisão>_<arquitetura da máquina>.deb".  No meu caso foi o pacote "/usr/src/linux-image-4.1.0-rc7-helio_1_amd64.deb".  Basta instalar e rebootar o computador pra testar a nova versão.

root@jessie:linux-stable# cd ..
root@jessie:linux-stable# dpkg -i linux-image-4.1.0-rc7-helio_1_amd64.deb
root@jessie:linux-stable# reboot

Se por acaso alguma coisa der errado, basta segurar o <Shift> ou <Esc> na inicialização da máquina, antes de carregar o Grub, pra poder ver o menu do mesmo.  Em seguida escolher o kernel que se estava rodando antes e inicializar por ele.  Depois basta remover o kernel criado, algo que e facilitado pela geração do pacote .deb.

root@jessie:linux-stable# dpkg -r linux-image-4.1.0-rc7-helio

Se for compilar o mesmo kernel, mas com opções de configuração diferentes, pode usar outra revisão.  Aliás incrementar a mesma.  Isso aparecerá no pacote gerado, mas não no kernel.

Boa compilação e boa diversão :)