Boas.

  Depois de uma primeira versão deste mini how-to que teve *algum* sucesso,
lanço agora neste newsgroup a segunda versão, revista e actualizada. Desde
já agradeço a todos pelas correções que enviaram, e pela participação que
tiveram no thread que se seguiu.

  Este artigo é dirigido sobretudo aqueles utilizadores que ainda não
experimentaram configurar, compilar e instalar um kernel de raiz nas
suas distribuições linux.

  Para quem já o sabe fazer muito provavelmente o artigo não trará
nada de novo. :-)

  Este mini how-to foi feito para uma distribuição redhat. Se calhar
para a sua distribuição é diferente. É questão de adaptar. :-)

Bem, lets kick it out...

[0 - Considerações Iniciais ]

Devem executar todos os comandos fornecidos numa shell de root. Se não
estiverem na shell como root, basta darem este comando na shell para
iram lá ter:

$ su -

Podem utilizar por exemplo o xterm ou o kconsole, caso estejam numa sessão X.

[1 - Reunir informações sobre o Hardware ]

Bem, para quem vai compilar um kernel, é uma boa ideia saber que
hardware está dentro da máquina.

$ cat /proc/cpuinfo 
$ cat /proc/pci

Se calhar a melhor forma de obter uma lista realmente fiável do
hardware que a máquina possui é desligando-a e abrindo-a. Note-se que
ao abrir a máquina poderá perder determinadas garantias dadas por quem
a vendeu ou pelo fabricante da mesma. Se for esse o seu caso, procure
antes na página do vendedor ou fabricante pelas características da
máquina.

[2 - Ir buscar o Kernel ]

Normalmente todos os kernel's são guardados e compilados na directoria
/usr/src. Em http://www.kernel.org/ encontrará indicações sobre a
versão mais recente do kernel, entre outras coisas. Existem várias
versões, mas aconselho-o a utilizar a "latest stable version". Neste
momento que escrevo, é a versão 2.4.22.

$ cd /usr/src
$ wget -c
http://www.pt.kernel.org/pub/linux/kernel/v2.4/linux-2.4.22.tar.bz2

Note-se que o download do kernel foi feito a partir de um mirror
localizado em Portugal utilizando o programa "wget", que faz resume
automático no caso da ligação cair. :-)

Para verificar se o ficheiro corresponde exactamente ao ficheiro que foi
publicado pelo "Linux Kernel Archive", e que não foi alterado por terceiros,
pode seguir as instruções presentes em http://www.kernel.org/signature.html .

[3 - Descomprimir o Kernel ]

O kernel em si (sources, documentação, ficheiros compilados, etc)
ocupa cerca de 200MB de espaço! Portanto, convém à partida saber mesmo
se possui espaço no seu disco para estas aventuras.

$ df -h
$ bunzip2 linux-2.4.22.tar.bz2
$ tar xvf linux-2.4.22.tar
$ chown -R root.root linux-2.4.22
$ ln -s linux-2.4.22 linux

[4 - Configurar o Kernel ]

Bem, depois dos passos indicados no ponto anterior, teremos uma
directoria "linux-2.4.22" em /usr/src com tudo o que vem no kernel,
prontinha a ser usada.

$ cd linux-2.4.22

Aconselho nesta directoria a leitura do ficheiro README e dos
ficheiros presentes em ~/Documentation, caso queiram obter mais
informações sobre o kernel.

Para quem possuir um ficheiro de configuração de um kernel
anteriormente compilado, deverá copiá-lo neste momento para esta
directoria, de forma a aproveitar as configurações feitas
anteriormente.

$ cp <ficheiro_de_configuração> .config

De seguida, deverão dar o seguinte comando:

$ make menuconfig

A partir daqui irá aparecer-vos um menu com várias opções, e dentro
dessas opções mais opções ainda! Esta é a parte mais compilada na
compilação de um kernel: acertar com as configurações ideias para a
nossa máquina!

Não tenha medo. Podem errar as vezes que quiserem nas configurações.
Não se preocupem em acertar nas melhores opções à primeira. Só com o
hábito é que se começa a acertar tudo à primeira. Errem as vezes que
quiserem. Estão à vontade. :-)

Aconselho na opção "Code maturity level options" a activação da opção
"Prompt for development and/or incomplete code/drivers".

Note-se que existe a opção de se "[M]odularizar" muitas das opções.
Sempre que possível façam-no, pois no final terão um kernel mais
pequeno, e terão a possibilidade de activar ou desactivar certos
drivers em pleno funcionamento, além de outras vantagens.

Quando acabarem as configurações todas, basta sair do programa e
salvar as configurações.

Nota: Para configurar o kernel poderão também usar os seguintes comandos:

$ make config

Neste caso a configuração será feita na shell através de perguntas sequenciais
onde terão de ir respondendo Y/N/M.

$ make xconfig

Este caso será aconselhado para quem está a tentar compilar o kernel numa
sessão X, usando por exemplo o kconsole. Neste caso aparecerá um configurador
gráfico bastante simples de usar.

$ make oldconfig

Para quem copiou um .config de um kernel anteriormente compilado, poderá
usar este comando para que a configuração do kernel apenas coloque perguntas
sobre novas opções que existirem no novo kernel. Útil no caso de não ter
mudado o hardware da sua máquina.

[5 - Compilar o Kernel ]

Esta é a parte mais fácil, mas mais demorada:

$ make dep
$ make clean
$ sync
$ make bzImage
$ make modules
$ make modules_install

Dependendo do computador, poderá levar mais ou menos tempo a finalizar
os comandos anteriores. No meu cyrix a 266Mhz com 128MB de ram leva
prai uns bons 25 minutos. :-)

[6 - Instalar o novo Kernel]

Normalmente os kernel's são colocados na directoria /boot. Se
verificarem os ficheiros nessa directoria provavelmente já lá terão
vários kernel's, assim como outros ficheiros.

$ cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.22
$ cp System.map /boot/System-2.4.22.map

[7 - Configurar o boot loader ]

O que é o "boot loader"?

Bem, é um ... boot loader!

"A boot loader is a program that resides in the starting sectors of a
disk, e.g., the MBR (Master Boot Record) of the hard disk. After
testing the system during bootup, the BIOS (Basic Input/Output System)
tranfers control to the MBR if the system is set to be booted from
there. Then the program residing in MBR gets executed. This program is
called the boot loader. Its duty is to transfer control to the
operating system, which will then proceed with the boot process."

(in http://www.linuxgazette.com/issue64/kohli.html)

Vou apenas explicar aqui com se configura o LILO. Para quem usa o GRUB
deverão ler o manual desse outro boot loader ( ou esperar que alguém
contribua meia dúzia de linhas para este mini-howto.. :-> )

O ficheiro de configuração do LILO é o /etc/lilo.conf .

Deverão passar primeiro os olhos pelo manual do LILO:

$ man lilo.conf

No meu caso, foi só necessário adicionar as seguintes linhas no
ficheiro de configuração do LILO:

image=/boot/vmlinuz-2.4.22
	label=linux2.4.22
	read-only
	root=/dev/hda1

Deverá ser semelhante nos vossos casos em particular.

Depois de editarem e salvarem o ficheiro de configuração, deverão dar
o seguinte comando para que o lilo seja (re)instalado:

$ lilo

[8 - Reboot! ]

Bem, depois disto tudo, basta fazer reboot e escolher no arranque o
kernel acabadinho de compilar. :-)

$ shutdown -r 0

Muito provavelmente irão apanhar com alguns erros, e alguns dos
programas deixarão de arrancar, etc.

Poderão visualizar esses erros usando os seguintes comandos:

$ dmesg
$ tail -n 100 /var/log/messages

Depois de acertarem com as configurações para a vossa máquina, e de
conseguirem uma versão satisfatória do kernel, salvem o ficheiro
.config que está em /usr/src/linux-2.4.22, de forma a poderem usá-lo
em próximas releases do kernel.

[9 - Considerações Finais ]

O autor deste mini how-to não se responsabiliza por danos causados por
terceiros que leram este how-to. :-)

Agradeço o máximo de feedback possível sobre o mini-howto. Se tiver
paciência e tempo, prometo lançar novas versões actualizadas do mesmo.

[10 - Agradecimentos ]

Amarok <amarok(@)netcabo.pt>
Antonio Manuel Dias <amdias(@)netvisao.pt>
João Jerónimo <j_j_b_o(@)myrealbox.com>
João Miguel Neves <news(@)silvaneves.org>
João M. S. Silva <jmss(@)vinci.inesc-id.pt>
Luis Oliveira <luismbo(@)netcabo.pt>
Nuno Justo <nuno(@)justoweb.com>
Nuno Tavares <nunotavares(@)hotmail.com>
RJ <fsoss(@)linuxwaves.com>
VL <vonloxx(@)yahoo.com>

Having fun,

@993, Nbk

P.s. - text version