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.
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?
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.
Onde fico sabendo os tipos de suporte (o que cada um faz), pra poder escolher aqueles que não desejo ter?
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
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
Orra cara valeu mesmo pelo tuto!
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?
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.
Epa, consegui, em alguns lugares na hora de mandar copiar os “-” foram sustituidos, resolvido
[…] http://penguim.wordpress.com/2006/11/14/compilando-o-kernel-no-ubuntu-linux/ […]
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”.
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”.
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 — .
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 – – .
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 – – .
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 – – .
Alex, fiz os passos aqui.
Ficou show.
A documentação ta muito boa.
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
🙂
Olá!
Não seria viável fazer um backup? Qual software para backups você me recomandaria?
Ah, belo post!
[…] http://penguim.wordpress.com/2006/11/14/compilando-o-kernel-no-ubuntu-linux/ […]
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.
[…] http://penguim.wordpress.com/2006/11/14/compilando-o-kernel-no-ubuntu-linux/ Explore posts in the same categories: […]
Alex,
vc esqueceu de colocar a fonte cara:
http://www.howtoforge.com/kernel_compilation_ubuntu_p2
Abraço
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
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
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.
Olá Alexandre,
Onde tem – entenda como – -.
Então ficará assim:
fakeroot make-kpkg –initrd –append-to-version=-alex kernel_image kernel_headers
Bom dia, coloquei: fakeroot make-kpkg –initrd –append-to-version=-alero kernel_image kernel_header
e deu a mesma mensagem.
fakeroot make-kpkg – -initrd – -append-to-version=-alero kernel_image kernel_header
sem espaço entre os – -(coloquei na mensagem anterior pois ficou como um traço)
kkkk, desculpa : tava faltando um s no final.
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
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.
[…] Fui fazer isso hoje e refresquei a memória lendo um ótimo post do Alexandro Silva, o post pode ser encontrado aqui: http://penguim.wordpress.com/2006/11/14/compilando-o-kernel-no-ubuntu-linux/ […]