HowTo

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. 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

  2. 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

  3. 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?

  4. 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.

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

  6. 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”.

  7. 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”.

  8. 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 — .

  9. 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 – – .

  10. 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 – – .

  11. 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 – – .

  12. 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

    🙂

  13. 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.

  14. 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

  15. 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

  16. 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.

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

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

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

  20. 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

  21. 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.

  22. Olá Alexandre,

    Onde tem – entenda como – -.

    Então ficará assim:

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

Comments are closed.