Você está calmo hoje? Não se estressou? Então você poderá compilar seu kernel, pois requer muita paciência... Nesse artigo veremos o modo correto e mais prático de compilar em distribuições baseadas em Debian.
Insatisfeito com o desempenho na inicialização do seu PC? Você queria tirar coisas, mas não sabe como? Bom, então vamos compilar seu kernel!
Como todos sabemos, quando adequamos um kernel ao SEU uso, seu PC agradece e você fica satisfeito, seu desempenho em termos de velocidade e segurança aumentam e muito. Então vamos parar de baboseira e vamos ao que interessa...
Primeiramente baixe a versão mais estável (The latest stable version of the Linux kernel) e nova do kernel em www.kernel.org.
Adquirida a nova versão iremos prosseguir com nossos passos:
Passo 1.
# apt-get update
Atualizaremos suas fontes de repositório para que os pacotes mais recentes sejam instalados.
Passo 2.
# apt-get install build-essential kernel-package libncurses5-dev tar gzip bzip2
Instalando pacotes necessários para a compilação do kernel:
build-essential - instala os pacotes mais usados para compilar programas que devem ser instalados;
kernel-package - pacote feito para "criarmos" pacotes de kernel em deb e instalarmos no Ubuntu de forma nativa (que pertença a ele por padrão);
libncurses5-dev - provê links, headers entre outros elementos da biblioteca libncurses5, que serve para rodar programas compilados por meio de ncurses;
tar, gzip e bzip2 - compactadores básicos do Linux.
Passo 3.
Descompacte o arquivo do kernel do Linux no diretório /usr/src:
O primeiro descompacta o arquivo linux-2.6.22.1 para a pasta /usr/src/linux-2.6.22.1. O segundo cria um link simbólico do seu novo kernel para a pasta linux, a criação deste link simbólico serve para que seu sistema e seus programas instalados consigam identificar que kernel você está usando.
Lembrando-se que quando construí este tutorial o kernel mais novo e estável do Linux estava em 2.6.22.1.
Na quarta linha do arquivo /usr/src/linux/Makefile está a extraversion como .1, podemos editar o .1 colocando -20070715-c1 (data de trás para frente e -c1 significa compilação 1), para isso:
# vim /usr/src/linux/Makefile
E altere a 5ª linha do arquivo.
Pra que mudar esta linha?
Esta linha chamada extraversion nós mudamos pra efeito de organização, pois quando as configurações forem relativas a kernel, sempre após o nome e o versão do kernel será escrito um "nome", que é o que está escrito na extraversion. Por exemplo:
Quando o kernel for compilado, se listarmos nossos módulos de dispositivos instalados, poderemos ver que módulos pertencem a que compilação usando o comando:
# ls /lib/modules
Passo 6.
Vamos a compilação, agora ficou fácil vamos compilar o bichinho:
# make menuconfig
Agora escolha as opções que você quiser, não abordarei esta parte pois existem N computadores com N hardwares e N configurações de kernel boas.
Passo 7.
Agora vamos criar uma pacote .deb pra que fique mais fácil instalar e desinstalar seu novo kernel.
Limpando porcarias...
# make-kpkg clean
Criando e pacotes de acordo com a compilação...
# make-kpkg -initrd kernel_image kernel_headers
Agora vá tomar uns 30 litros de café porque este processo é super demorado!
Passo 8.
Agora que a imagem e o header foram gerados, simplesmente instale-os com o dpkg ;)!
Os nomes dos arquivos de vocês podem ser diferentes, mas isso não muda nada.
Bom gente, terminado, agora só dêem um reboot e rezem, se deu erro voltem ao passo 6 e mãos a obra, e não se aborreçam, pois quando compilamos kernel às vezes não conseguimos ver tudo funcionando de primeira mesmo, mas isto é completamente normal.
Legenda:
# - executar como root
$ - executar como usuário normal (sem poderes administrativos)
[1] Comentário enviado por tjpp em 03/09/2007 - 09:12h
Legal o artigo. Eu tenho algumas pequenas considerações a fazer:
Acho que faltou o exemplo no passo 5 (Por exemplo:)
Não entendi porque editar o Makefile, se o make-kpkg já tem as opções --revision e --append-to-version que fazem isto para você.
Como você disse que vai comentar em próximo artigo, o que retirar e o que manter, então só nos resta aguardar :-) , mas há muito tempo que não compilo o kernel (no máximo uso o module-assistant para webcam). O kernel Debian tem atualizações de segurança e mantendo módulos, mesmo que você não use, é legal pois você pode adicionar hardware sem precisar se preocupar com o mesmo.
[2] Comentário enviado por mautech em 03/09/2007 - 11:03h
kra muito bom artigo foi o que eu fiquei quebrando a kbca a madrugada de sabado td!! se voce puder me enviar um e-mail com seu icq ou msn para trocar-mos umas ideias agradeco muito!!! mau_root@yahoo.com.br
[4] Comentário enviado por dzamin em 03/09/2007 - 13:22h
Aproveitando o assunto, gostaria de discutir com os colegas sobre a melhor forma de saber o que é ou não necessário na hora de compilar o Kernel. Na semana passada compilei o Kernel para o meu notebook porém, mesmo após eliminar uma série de parâmetros que eu não precisava, percebi que o tempo de boot continuou praticamente o mesmo (na verdade, uns 10 segundos mais demorado), e o meu objetivo principal, era deixar o Kernel enxuto e ganhar velocidade no boot da máquina. Passei horas verificando parâmetro por parâmetro, lendo a descrição de cada um deles, e no final não consegui alcançar o objetivo esperado. Gostaria de saber os comentários dos colegas sobre este fato e, se existe alguma documentação específica sobre o que tirar e/ou manter compilado no Kernel para ganhar performance. Também gostaria de saber se existe algum lugar onde é possível encontrar arquivos .config prontos para diferentes modelos de hardware, como notebooks por exemplo.
[8] Comentário enviado por rafaelhenrique em 04/09/2007 - 05:46h
tjpp o exemplo do passo 5 foi só pra ilustrar como os módulos do seu kenrle compilado ficariam organizados, poderia ser visto o "comentário" acrescido ao seu nome pelo comando "uname -r" também sem problemas, e eu preferi editar o Makefile justamente pelo que você falou todo mundo conhece os parâmetros do make-kpkg, e quem não conhece tem n tutoriais que compilam kernel com make-kpkg na internet ;) , mas obrigado pelas críticas muito bem pensado! Até mais! Abraço!
[12] Comentário enviado por marcosandre em 04/09/2007 - 11:08h
Muito bom o artigo, só tenho uma dúvida, pois não sou nenhum "expert": o que devo colocar no lugar do que está escrito "(uname -r)", e é assim mesmo com os parênteses? Valeu e obrigado..
[13] Comentário enviado por rafaelhenrique em 04/09/2007 - 13:22h
Oi marcosandre é o seguinte o comando:
#uname -r
Quando executado em um terminal retorna sua versão do kernel (ou seja o kernel que você está usando), ai quando queremos usar a saída de um comando pra outro comando executamos este comando desta forma $(uname -r) ou então entre crases `uname -r` ! :) blzinha?
Só dando um exemplo....
Ex: Eu quero remover todos os arquivos em formato txt (texto) da minha home...
# rm -rf $(ls -a *.txt)
Executados separadamente os comandos fazem as seguintes ações:
# ls -a *.txt
-Lista todos (ocultos ou não) os arquivos com final .txt
-Sua saída no meu pc é:
debian-etch-r1.txt foomatic.txt permissoes.txt
Agora é o seguinte o rm -rf exclui! Isso todos sabem, ai no caso ele excluirá a saída do ls -a sendo assim....
Desta forma! Só que usamos o ls -a pra não precisar ficar digitando o nome dos arquivos, por que tempo é dinheiro heheheh! Com o uname -r é a mesma coisa, jah pensou c toda vez que eu Rafael quando tivesse que falar minha versão do kernel tivesse que lembrar de 2.6.22.1-486 ? Daria trabalho né? Então eu uso o uname -r pra não precisar ficar digitando essa bagatela de números quando for precisar fazer referência ao meu kernel!
[16] Comentário enviado por MorbiD em 06/09/2007 - 18:20h
um amigo meu teve problemas ao instalar o drive da nvidia no novo kernel (2.6.22.6) qndo ele compilou.
o novo kernel foi compilado e tals... mas o drive da nvidia não estava instalado nesse novo kernel. ele foi instalar o drive (do site da nvidia - onde este é compilado pra dentro do kernel) e nada... e dando boot no kernel antigo a tela fica branco.. não entra.
a solução dele foi reinstalar o ubuntu... sem instalar nada da nvidia... instalou o novo kernel... compilou o drive da nvidia e tudo funciona normalmente.
alguém tem alguma solução pra instalar o drive da nvidia no novo kernel sem q esse altera as configurações de outros kernel?
[17] Comentário enviado por rafaelhenrique em 08/09/2007 - 08:51h
MorbiD bom se fosse eu que estivesse nessa situação, eu primeiro removeria o conteúdo dos pacotes da nvidia por completo ( com apt-get remove --purge <pacote>) e depois tentaria compilar, por que pode ser que o drive pré-compilado esteja tomando o lugar do drive que você iria compilar, bom eu tentaria isso, mas é como digo tentaria, não sei se daria certo, porém acho mais viável
[19] Comentário enviado por rafaelhenriqu em 05/10/2007 - 21:39h
Tilzao é o seguinte esse tutorial é mais pra aprender a criar os pacotes na compilação e pra os iniciantes verem que compilação de kernel não é bicho de 7 cabeças, mas se você procura performance modifique o seu kernel de acordo com suas necessidades com o comando make menuconfig dentro da pasta /usr/src/linux ;) ai se você deixar ele realmente enxuto a performance melhora :), eu tenho um notebook pentium II que ficou show depois de uma compilação :)
Flww! E logo mais eu to pensando em criar um tutorial 2.0 deste mesmo, ensinando a adaptá-lo as suas necessidades!
[20] Comentário enviado por Tilzao em 18/10/2007 - 14:52h
Rafael o seu tutorial é muito bom e me ajudou bastante. Tive de recompilar o meu kernel por causa do Bootflash e aproveitei e dei uma enxugada nele e ai realmente melhorou.
Abaixo segue um link onde o autor dá varias dicas sobre o menuconfig, quem sabe ele não pode servir de fonte de inspiração para o seu tutorial 2.0 ?
[21] Comentário enviado por Izavos em 06/12/2007 - 22:02h
Muito bom seu artigo!
Esclareceu minha duvida sobre como e se era possível compilar o kernel no ubuntu. Mas devo lhe dizer que não executei o passo "4º" até porque não entendi o mesmo. E tudo funciono muito bem, após algumas horas.O kernel que baixei foi o "2.6.23.9".O uso da memoria subio muito para uns 200MB (-+) mas não afectou o desempenho. E todo o hardware esta funcionando muito bem!
AT a próxima!
O make-kpkg busca um arquivo chamado .config dentro do diretório /usr/src/linux e nas distros baseadas em Debian o sistema copia este arquivo .config pra dentro do /boot com o seguinte nome...
config-<nome do kernel>
Ou seja ele fica dentro do /boot com o nome config seguido da numeração do kernel atual, o que eu fiz no passo 4 foi copiar a configuração default do seu sistema e colá-la no lugar que você irá compilar, para que a compilação não altere seu sistema, deixe-o como ele está! Mas se preferir criar uma nova configuração (um novo .config) você poderá usar o make menuconfig dentro da pasta /usr/src/linux como exemplifiquei abaixo...
# cd /usr/src/linux
# make menuconfig
Aí é só começar a editar as configurações que você quer q seu kernel tenha, mas você TEM que saber o que está fazendo, não brinque com isso se não souber... qualquer coisa se quiser fazer isso e precisar de ajuda me manda email...
Até +
*obs: o comando uname -r mostra sua versão atual do kernel, eu o usei para que não fosse preciso ficar digitando o nome dele todo o tempo
[24] Comentário enviado por edersg em 19/11/2008 - 23:02h
Muito boa noite Rafael e demais membros do portal Viva o Linux.
Rafael, gostaria de PARABENIZÁ-LO por disponibilizar o tutorial
de como compilar o kernel linux na maneira do Debian GNU/Linux.
Foi a primeira vez que utilizei esta forma de compilar o kernel linux.
Muito obrigado!
[root@jordan ~]# uname -a
Linux jordan 2.6.27-2008-11-19-c6 #1 SMP Wed Nov 19 21:21:32 BRST 2008 i686 GNU/Linux
[28] Comentário enviado por rafaelhenrique em 04/12/2009 - 08:01h
caradepastel o kernel que você está usando é o 2.6.24-25 quando escrevi este artigo o kernel mais novo era o 2.6.22.1. Tenho que criar outro artigo mais atualizado, não testei este tutorial com o kernel que você está querendo compilar.