Press "Enter" to skip to content

Compilando o kernel no Ubuntu Linux

Do que vale possuirmos um sistema livre no maior sentido da palavra e não podermos usufrir de um dos pré-requisitos mais valiosos que existe na GPL que é a liberdade de adaptar o código fonte de um programa de acordo com nossas necessidades.

Este artigo irá ajudar você a adaptar o kernel do linux as suas necessidades.

Inicialmente vamos alterar o link do shell padrão para o /bin/sh já que por default ele aponta para /bin/dash

sudo rm -f /bin/sh

sudo ln -s /bin/bash /bin/sh

Instale os pacotes necessários para a compilação do kernel

sudo apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

Baixe a fonte do kernel e o patch para o vserver

cd /usr/src

sudo wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.2.tar.bz2

sudo wget http://www.13thfloor.at/vserver/d_rel26/v2.1.1/patch-2.6.18.2-vs2.1.1.diff.bz2

Descompate o arquivo e crie um link para o diretório linux

sudo tar xjf linux-2.6.18.2.tar.bz2

sudo ln -s linux-2.6.18.2 linux

cd /usr/src/linux

Aplique o patch para habilitar o uso do vserver no kernel. O primeiro comando irá simular a aplicação do patch, não havendo nenhum erro use o segundo comando.

sudo bzip2 -dc /usr/src/patch-2.6.18.2-vs2.1.1.diff.bz2 | patch -p1 –dry-run

sudo bzip2 -dc /usr/src/patch-2.6.18.2-vs2.1.1.diff.bz2 | patch -p1

Aproveite a configuração do kernel atual como base para o nosso kernel customizado

sudo cp /boot/config-`uname -r` ./.config

Agora inicie o menu de configuração do kernel

make menuconfig

No menu acesse a opção Load an Alternate Configuration File e pressione OK, para escolher o arquivo com a atual configuração do kernel

Navegue nas opções do kernel e escolha as configurações desejadas.

Eu por exemplo modifiquei os seguintes itens:

Processador de 486 para Athlon

Desabilitei o suporte a:

– Firewire
– Pcmcia
– MCA
– EISA
– ISA
– Drivers de placas de rede 10000/1000 e WAN
– Telefonia
– Fibra
– RAID
– Kernel Hacking

Após fazer as alterações desejadas salve e saia

Vamos agora compilar e instalar o novo kernel. Após o –append-to-version você pode adiconar seu nome ou qualquer string que facilite a identificação, por exemplo eu escolhi alex.

sudo make-kpkg clean

sudo fakeroot make-kpkg –initrd –append-to-version=-alex kernel_image kernel_headers

Agora vá tomar um banho, tomar café, ler a wiki page do Time de Documentação por que o processo demora.

Se não surgir nenhum erro 2 ( dois ) arquivos serão criados no diretório /usr/src

cd /usr/src

ls -l

linux-headers-2.6.18.2-vs2.1.1-alex_2.6.18.2-vs2.1.1-alex-10.00.Custom_i386.deb

linux-image-2.6.18.2-vs2.1.1-alex_2.6.18.2-vs2.1.1-alex-10.00.Custom_i386.deb

Agora só precisamos instalar os pacotes .deb com o velho e bom dpkg

sudo dpkg -i linux-headers-2.6.18.2-vs2.1.1-alex_2.6.18.2-vs2.1.1-alex-10.00.Custom_i386.deb

sudo dpkg -i linux-image-2.6.18.2-vs2.1.1-alex_2.6.18.2-vs2.1.1-alex-10.00.Custom_i386.deb

Ao finalizar a instalação dos pacotes reinicie o micro

sudo shutdown -r now

Após a inicialização confirme o kernel que está em execução

uname -r

2.6.18.2-vs2.1.1-alex

Pronto agora você está rodando um kernel customizado para sua arquitetura.

34 Comments

  1. Marcus VBP Marcus VBP November 15, 2006

    Cara, soh me explique uma coisa.

    Pq vc mudou o shell de bash para sh? o que essa modificação vai afeta no meu sistema depois?

  2. penguim penguim November 15, 2006

    Olá Marcus,

    O link foi alterado de dash para bash, apenas por causa daa limitações do dash.

    Não irá mudar nada em seu sistema.

  3. Marcus VBP Marcus VBP November 15, 2006

    Onde fico sabendo os tipos de suporte (o que cada um faz), pra poder escolher aqueles que não desejo ter?

  4. Alexandro Silva Alexandro Silva November 15, 2006

    Olá Marcus,

    Pressione no botão , lá você terá a descrição de cada opção do kernel.
    Aconselho inicialmente que você altere somente o processador e o kernel hacking.
    Depois você vai alterando aos poucos os outros módulos.

    Forte abraço

  5. Jose Nilton Jose Nilton November 16, 2006

    sudo bzip2 -dc /usr/src/patch-2.6.18.2-vs2.1.1.diff.bz2 | patch -p1

    Sobre esse comando; eu fiz isso e le perguntou alguma coisa sobre o caminho do arquivo varias vezes o que eu coloco ?

    E sobre o iptables, eu tenho um script de firewall no /etc/init.d/

    E com o novo kernel que o mesmo que está no seu link 2.6.18.2 e ele diz que o modulo não está presente no kernel, pede para eu recompilar o kernel, no kernel onde encontra a opção de ativar o iptables ou eu tenho que baixar o patch neste link
    http://www.netfilter.org/projects/iptables/downloads.html#iptables-1.3.6

    E como eu coloco esse patch ?

    Em vez de você responder faz um tutorial legal dessas perguntas que eu fiz ?

    Pois tentei compilar o kernel 2 vezes mas não consegui adicionar os patchs nem do iptables nem vserver onde estou errando.

    Mas kernel compilou legal, só faltou algumas coisas o boot load do ubuntu, fica uma tela preta e depois entra no gdm; tem como mudar isso.

    Olha se vc tiver tempo de fazer um tutorial desses ia ser muito bom.

    Desculpe esse monte de perguntas.

    Fora essas questões o kenel ficou bem legal e instalou tudo. PS fico rapido esse meu sempron 3000+ 64Bit

    Adorei seu tutorial vc é fera cara ! Parabens
    Ass: Jose Nilton

  6. Thiago Thiago February 6, 2007

    Orra cara valeu mesmo pelo tuto!

  7. David David February 26, 2007

    Estou com um problema que está me deixando maluco. Após o make menuconfig eu executo o comando sudo make-kpkg clean, e a menesagem que aparece é essa: *** Error. I do not know where the kernel image goes to [kimagedest undefined] The usual case for this is that I could not determine which arch or subarch tihs machine belongs to. Please specify a subarch, and try again.. Pare.

    e o que me deixa mais intrigado é que eu conseguia compilar o kernel numa boa no Debian.

    O que será que está errado?

  8. Vitor Vitor March 10, 2007

    Tipo, no finalzinho, ao tentar essa etapa:

    sudo fakeroot make-kpkg –initrd –append-to-version=-vitor kernel_image kernel_headers

    aparece isso

    Error: Unknown target –initrd Unknown target –append-to-version=-vitor
    use –targets to display help on valid targets.

  9. Vitor Vitor March 10, 2007

    Epa, consegui, em alguns lugares na hora de mandar copiar os “-” foram sustituidos, resolvido

  10. francitonio nogueira dias francitonio nogueira dias May 12, 2007

    Oi amigo, tem um comando que foi escrito errado, em vez de “sudo fakeroot make-kpkg –initrd –append-to-version=-alex kernel_image kernel_headers” e
    “sudo fakeroot make-kpkg –initrd –append-to-version=-teste kernel_image kernel_headers”.

  11. francitonio nogueira dias francitonio nogueira dias May 12, 2007

    Oi amigo, tem um comando que foi escrito errado, em vez de “sudo fakeroot make-kpkg –initrd –append-to-version=-alex kernel_image kernel_headers” e
    “sudo fakeroot make-kpkg –initrd –append-to-version=-alex kernel_image kernel_headers”.

  12. francitonio nogueira dias francitonio nogueira dias May 12, 2007

    Oi amigo, tem um comando que foi escrito errado, em vez de “sudo fakeroot make-kpkg –initrd –append-to-version=-alex kernel_image kernel_headers” e
    “sudo fakeroot make-kpkg *initrd *append-to-version=-teste kernel_image kernel_headers”.

    *Obs: e igual a — .

  13. francitonio nogueira dias francitonio nogueira dias May 12, 2007

    Oi amigo, tem um comando que foi escrito errado, em vez de “sudo fakeroot make-kpkg –initrd –append-to-version=-alex kernel_image kernel_headers” e
    “sudo fakeroot make-kpkg –initrd –append-to-version=-teste kernel_image kernel_headers”.

    *Obs: e igual a – – .

  14. francitonio nogueira dias francitonio nogueira dias May 12, 2007

    Oi amigo, tem um comando que foi escrito errado, em vez de “sudo fakeroot make-kpkg –initrd –append-to-version=-alex kernel_image kernel_headers” e
    “sudo fakeroot make-kpkg *initrd *append-to-version=-teste kernel_image kernel_headers”.

    *Obs: e igual a – – .

  15. francitonio nogueira dias francitonio nogueira dias May 12, 2007

    Oi amigo, tem um comando que foi escrito errado, em vez de “sudo fakeroot make-kpkg –initrd –append-to-version=-alex kernel_image kernel_headers” e
    “sudo fakeroot make-kpkg –initrd –append-to-version=-teste kernel_image kernel_headers”.

    Obs: * igual a – – .

  16. Elton Andrade Elton Andrade October 11, 2007

    Alex, fiz os passos aqui.
    Ficou show.
    A documentação ta muito boa.

  17. vittor vittor October 13, 2007

    O comando:

    sudo fakeroot make-kpkg –initrd –append-to-version=-alex kernel_image kernel_headers

    Esta correto, o problema que mtos nao notaram o sinal (–)

    no caso fincando assim:

    sudo fakeroot make-kpkg -initrd -append-to-version=-alex kernel_image kernel_headers

    🙂

  18. Jakson Rochelly Jakson Rochelly December 22, 2007

    Olá!
    Não seria viável fazer um backup? Qual software para backups você me recomandaria?

    Ah, belo post!

  19. Ronai Lisboa Ronai Lisboa January 4, 2008

    Muito bem. Ótimo e simples tutorial, mas não encontrei como gerar os .deb para os restricted drivers como o nvidia, intel wifi etc.

    Geralmente quando se segue estes passos, há dependências não satisfeitas para os módulos das placas de drivers da nvidia, intel etc.

    Como proceder para gerar os restricted drivers com o mesmo nome do nosso kernel customizado?

    Obrigado.

  20. Renato Leite Renato Leite October 12, 2008

    Alex,

    Obrigado pelo post! Super didático… Fiz algumas adaptações mas foi numa boa…

    Just FYI, compilei o kernel 2.6.22.19 no ubuntu Hardy com o múdulos do Lustre File System [1].

    Depois instalei o mesmo e montei meu sistema de arquivos clusterizado. Para quem tiver interesse em saber como eu fiz isso, entrem no meu blog…(está na versão beta ainda, mas dá pra ter uma noção).

    Abraços,
    Renato
    [1] http://www.sun.com/lustre

  21. Danillo Danillo November 2, 2008

    Ai grande, vi numa das perguntas que te fazem pediram pra tu fazer um tutorial.
    E depois eu vejo ele agradecendo o tutorial, tu mandou pra ele? pode me mandar? ou vc disponibilizou onde???

    valeu em
    obrigadão

  22. Alexandre Pereira Menezes Alexandre Pereira Menezes April 18, 2009

    Ola, por favor me ajude. Fiz todo o processo corretamente so que quando chegou na hora de compilar o kernel deu um erro:
    dei o comando: fakeroot make-kpkg –initrd –append-to-version=-alero kernel_image kernel_headers
    dai apareceu: Error: Unknown target –initrd Unknown target –append-to-version=-alero
    use –targets to display help on valid targets.

  23. penguim penguim April 18, 2009

    Olá Alexandre,

    Onde tem – entenda como – -.

    Então ficará assim:

    fakeroot make-kpkg –initrd –append-to-version=-alex kernel_image kernel_headers

  24. Alexandre Pereira Menezes Alexandre Pereira Menezes April 18, 2009

    Bom dia, coloquei: fakeroot make-kpkg –initrd –append-to-version=-alero kernel_image kernel_header
    e deu a mesma mensagem.

  25. Alexandre Pereira Menezes Alexandre Pereira Menezes April 18, 2009

    fakeroot make-kpkg – -initrd – -append-to-version=-alero kernel_image kernel_header

  26. Alexandre Pereira Menezes Alexandre Pereira Menezes April 18, 2009

    sem espaço entre os – -(coloquei na mensagem anterior pois ficou como um traço)

  27. Alexandre Pereira Menezes Alexandre Pereira Menezes April 18, 2009

    kkkk, desculpa : tava faltando um s no final.

  28. Alexandre Pereira Menezes Alexandre Pereira Menezes April 18, 2009

    Desculpe o incomodo, mas estou necessitando compilar um kernel. Bem deu o seguinte erro:
    scripts/mod/sumversion.c:384: error: ‘PATH_MAX’ undeclared (first use in this function)
    scripts/mod/sumversion.c:384: error: (Each undeclared identifier is reported only once
    scripts/mod/sumversion.c:384: error: for each function it appears in.)
    scripts/mod/sumversion.c:384: warning: unused variable ‘filelist’
    make[3]: ** [scripts/mod/sumversion.o] Erro 1
    make[2]: ** [scripts/mod] Erro 2
    make[1]: ** [scripts] Erro 2
    make[1]: Saindo do diretório `/usr/src/linux-2.6.18.2′
    make: ** [debian/stamp-build-kernel] Erro 2

  29. Alexandre Pereira Menezes Alexandre Pereira Menezes April 18, 2009

    Outra coisa, teve uma parte que foi meio esquisita. Os comandos:
    sudo bzip2 -dc /usr/src/patch-2.6.18.2-vs2.1.1.diff.bz2 | patch -p1 –dry-run

    sudo bzip2 -dc /usr/src/patch-2.6.18.2-vs2.1.1.diff.bz2 | patch -p1

    O primeiro rodou beleza mas o segundo apareceu:
    diff.bz2 | patch -p1
    The next patch would create the file Documentation/vserver/debug.txt,
    which already exists! Assume -R? [n]
    Dai eu dei enter e apareceu:
    Apply anyway? [n]
    Skipping patch.
    1 out of 1 hunk ignored — saving rejects to file Documentation/vserver/debug.txt.rej
    patching file Makefile
    Reversed (or previously applied) patch detected! Assume -R? [n]
    Dai fui dando enter até parar.

Comments are closed.