Boas. Com a nova versão 2.4.26 sai uma nova versão deste mini-howto. :-) Agradeço a todos pelas correcções que enviaram no passado, e pela participação que tiveram nos threads que se seguiram aos howto's anteriores, assim como agradeço em avanço notas sobre este novo howto. 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. Espera-se que seja apenas um bom manual. :-) Este mini-howto foi feito para uma distribuição redhat recente. Se calhar para a sua distribuição é diferente. É questão de adaptar. :-) Bem, lets kick it... again! [-1 - Antes de Começar ] Neste howto são utilizados vários programas, escolhidos pelo autor, mas que podem ser perfeitamente substituídos por outros, ou mesmo ignorados. A lista do software usado, e respectivas homepages, é a seguinte: pciutils : ftp://ftp.kernel.org/pub/software/utils/pciutils/ wget : http://www.gnu.org/software/wget/ gnupg : http://www.gnupg.org/ bzip2: http://sources.redhat.com/bzip2/ tar : http://www.gnu.org/software/tar/ lilo : http://lilo.go.dyndns.org/ grub : http://www.gnu.org/software/grub/ gzip : http://www.gzip.org/ O próprio kernel tem as suas necessidades em termos de software. Estas estão normalmente listadas em ~/Documentation/Changes. [0 - Considerações Iniciais ] Os comandos precedidos por # deverão ser obrigatoriamente dados como utilizador root. Os comandos precedidos por $ poderão ser dados por qualquer utilizador do sistema, tendo este que ter acesso aos ficheiros e ferramentas que venham a ser utilizadas no entretanto. Devem executar todos os comandos fornecidos numa shell. Podem utilizar por exemplo o xterm ou o konsole, caso estejam numa sessão X. Quando necessitarem de usar uma shell como root, basta darem este comando para irem lá ter: $ su - [1 - Reunir informações sobre o Hardware ] Bem, para quem vai compilar um kernel, é uma boa ideia saber que hardware está presente na máquina. $ cat /proc/cpuinfo $ cat /proc/pci # lspci -v # lsusb 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. No entanto nada o impede de compilar um kernel noutra directoria qualquer. 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.26. # cd /usr/src # wget -c http://www.pt.kernel.org/pub/linux/kernel/v2.4/linux-2.4.26.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 . Nomeadamente deverá executar os seguintes passos: a) Importar a chave pública do "Linux Kernel Archive", caso ainda não a tenha importado anteriormente: $ gpg --keyserver wwwkeys.pgp.net --recv-keys 0x517D0F0E b) Fazer o download da assinatura associada ao ficheiro do kernel que queremos instalar: $ wget http://www.pt.kernel.org/pub/linux/kernel/v2.4/linux-2.4.26.tar.bz2.sign c) Verificar a validade da assinatura: $ gpg --verify linux-2.4.26.tar.bz2.sign linux-2.4.26.tar.bz2 [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.26.tar.bz2 # tar xvf linux-2.4.26.tar # chown -R root.root linux-2.4.26 # ln -s linux-2.4.26 linux [4 - Configurar o Kernel ] Bem, depois dos passos indicados no ponto anterior, teremos uma directoria "linux-2.4.26" em /usr/src com tudo o que vem no kernel, prontinha a ser usada. # cd linux-2.4.26 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 .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 ideais 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 konsole. 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.26 # cp System.map /boot/System-2.4.26.map # ln -s /boot/System-2.4.26.map /boot/System.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) Os dois boot loaders mais comuns são o LILO e o grub. a) LILO 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 e editar as seguintes linhas no ficheiro de configuração do LILO: image=/boot/vmlinuz-2.4.25 label=linux-old read-only root=/dev/hda2 image=/boot/vmlinuz-2.4.26 label=linux read-only root=/dev/hda2 Depois de editarem e salvarem o ficheiro de configuração, deverão dar o seguinte comando para que o lilo seja (re)instalado: # lilo Para mais opções poderão ler um howto sobre o LILO em http://www.tldp.org/HOWTO/LILO.html . b) Grub O ficheiro de configuração do grub está situado em /etc/grub.conf ou em /boot/grub/grub.conf. Nas versões mais antigas costuma estar localizado em /boot/grub/menu.lst . Neste caso, deveremos efectuar as seguintes modificações: default=1 timeout=5 title linux-old root (hd0,1) kernel /boot/vmlinuz-2.4.25 ro root=LABEL=/ title linux-new root (hd0,1) kernel /boot/vmlinuz-2.4.26 ro root=LABEL=/ Mais informações sobre o grub em http://www.gnu.org/software/grub/ . Estas configurações deverão ser semelhante nos vossos casos em particular. Note-se que em ambos as situações foi deixada uma entrada para um kernel anterior, de forma a podermos "bootar" a máquina caso o kernel que acabámos de compilar tenha problemas. [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.26, de forma a poderem usá-lo em próximas releases do kernel. Já agora, para verificarem a versão actual do vosso kernel podem usar o seguinte comando: $ uname -a [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 - Feedback ] A compilação de um kernel, assim como a compilação/instalação de qualquer software deverá ser feita tomando as maiores e melhores cautelas em termos de segurança. Este howto, pelo target de utilizadores a que se dirige é "relaxado" em relação a esses detalhes. Mais dicas neste artigo de Rui Malheiro: http://groups.google.com/groups?selm=pan.2003.09.04.04.15.15.873422%40mail.telepac.pt Para quem usa redhat/fedora, poderá utilizar uma outra técnica para compilar um novo kernel, utilizando a técnica descrita por MC em: http://groups.google.com/groups?selm=brcbde%241pafs%241%40ID-201481.news.uni-berlin.de [11 - Formatos Alternativos ] Este mini-howto, além do simples formato de texto, é também fornecido nos seguintes formatos: HTML: http://maracuja.homeip.net/doc/ti/kmht/2.4.26 DVI: http://maracuja.homeip.net/doc/ti/kmht/2.4.26/kmht.dvi PDF: http://maracuja.homeip.net/doc/ti/kmht/2.4.26/kmht.pdf LaTeX: http://maracuja.homeip.net/doc/ti/kmht/2.4.26/kmht-tex.tar.gz [12 - Agradecimentos ] Amarok Antonio Manuel Dias Carlos J. G. Duarte GotTLoS hexbin Higuita João Jerónimo João Miguel Neves João M. S. Silva Luis Bruno Luis Oliveira Marco Oliveira MC Mr. BuNgL3 Nuno Justo Nuno Tavares RJ Rui Malheiro VL VP (Se faltar alguém ou quiserem efectuar alguma alteração a esta lista de nomes e emails avisem-me por email. TIA) Um agradecimento especial ao António Manuel Dias pela disponibilização dos formatos alternativos acima indicados. Having fun, @010, Nbk Nota: Este documento pode ser copiado e distribuído segundo os termos da licença CreativeCommons Attribution-NonCommercial-ShareAlike 1.0, acessível em http://creativecommons.org/licenses/by-nc-sa/1.0/