Ferramentas do usuário

Ferramentas do site


compilando_kernel_linux_no_linux_mint

<note>Esse artigo é uma adaptação do artigo original de Helio Loureiro, publicado dia 10 Junho 2015 em seu blog : http://helio.loureiro.eng.br</note>

COMPILANDO KERNEL LINUX NO LINUX MINT

helio.loureiro.eng.br_images_stories_2015_13939_221846518372_542678372_4120722_3296334_n.jpg

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, como o nosso Linux Mint.

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:

  [email protected] 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.15. Então a coisa toda pra listar e criar seu “branch” fica assim:

  [email protected] linux-stable # git tag -l | grep v4.1 
  [email protected] linux-stable # git checkout -b v4.1.15 tags/v4.1.15

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 é:

  [email protected] 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 os pacotes necessários para compilar o kernel, “build-essential”, “kernel-package”, “libssl-dev”. O build-essential contém ferramentas para compilar o kernel como o compilador GCC e outras ferramentas relacionadas. Já o pacote libssl-dev contém os arquivos de cabeçalho do openssl, que é um dependência do kernel e não vem pré instalado no Mint. O pacote kernel-package é 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”.

  [email protected] linux-stable # apt install build-essential kernel-package libssl-dev

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

  [email protected] linux-stable # make-kpkg --initrd --append-to-version "-skyn12" --uimage --revision 1 -j 4 kernel_image kernel_headers

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

make-kpkg: é o comando instalado pelo pacote kernel-package. --initrd: criar um sistema de boot initrd (a maioria dos sistema usa). --append-to-version “-skyn12”: pra deixar seu kernel com a sua “cara”. Vai aparecer algo como 4.1.15-skyn12 na versão dele. --uimage: criar um kernel comprimido no formato uimage. --revision 1: revisão do pacote que será gerado. -j 4: quantas CPUs serão usadas durante a compilação. Se sua máquina tem múltiplos cores como a minha, basta colocar esse número. Se não tem ou não sabe, não use esse parâmetro. kernel_image: é o que diz pro kernel-package pra gerar o pacote .deb do linux-image. Pode-se criar outros pacotes como source, headers (kernel-headers), etc. kernel_headers : Esse diz para criar o pacote de imagem do Linux kernel header.

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ão gerados pacotes com os formatos “/usr/src/linux-image-<versão do kernel><nome que você personalizou>_<revisão>_<arquitetura da máquina>.deb” e “/usr/src/linux-headers-<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.15-skyn12_1_amd64.deb” e “/usr/src/linux-headers-4.1.15-skyn12_1_amd64.deb”. Basta instalar e rebootar o computador pra testar a nova versão.

  [email protected] linux-stable # cd ..
  [email protected] linux-stable # dpkg -i linux-headers-4.1.15-skyn12_1_amd64.deb
  [email protected] linux-stable # dpkg -i linux-image-4.1.15-skyn12_1_amd64.deb
  [email protected] 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.

  [email protected] linux-stable # dpkg -r linux-image-4.1.15-skyn12

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.

<note>Você deve “limpar” o código fonte antes de compilar uma nova revisão, use o comando abaixo para fazer isso.

   make-kpkg clean

</note> Boa compilação e boa diversão :)

Alguns comandos para gerenciar seu código fonte com o GIT

Mudar de branch

git checkout <nome_branch>

Voltar para a branch principal

git checkout master

Apagar uma branch

git branch -D <nome_branch>

Atualizar o código fonte

git pull

Atualizar as tags (sempre execute depois de executar o “git pull”)

git fetch --tags https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

Referências

compilando_kernel_linux_no_linux_mint.txt · Última modificação: 2016/08/22 16:48 por 8812