Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[kernel] mini how-to - versao 2

0 views
Skip to first unread message

Nbk

unread,
Sep 3, 2003, 7:12:03 PM9/3/03
to

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

Rui Malheiro

unread,
Sep 4, 2003, 12:15:16 AM9/4/03
to
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Thu, 04 Sep 2003 00:12:03 +0100, Nbk wrote:

> [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:

Na verdade, práticamente todo o processo de configuração e compilação
do kernel pode ser executado sem permissões de root. Por norma apenas é
necessário permissões de root para instalar o kernel (copiar o bzImage
para o /boot) e para fazer make modules_install.

Um dos motivos porque os sistemas MICROS~1 são tão inseguros é porque
assumem que toda a gente precisa permissões para fazer quase tudo, só
para simplificar nas raras situações em que realmente é necessário. Ou
seja, aproximação de que se deve fazer tudo como root é uma
aproximação insegura.

Nesta revisão, vou-me limitar à questão da segurança, comentando os
diversos passos e apresentando alternativas.

> $ su -

Para fazer "su -" é necessário que se utilize a password de root. Além
disso ficamos numa shell com permissões que implicam que um pequeno erro
pode ser um GRANDE erro (rm -r na directoria errada p ex.).

A melhor forma de executar comandos para os quais não temos permissões
é utilizar o "sudo". Com o sudo podemos executar determinados comandos
(depende da configuração no /etc/sudoers) com permisão de root mesmo
sem apenas usando a nossa password. Ver "man sudo" e "man sudoers" para
mais informação.

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

[...]


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

A maioria dos ficheiros em /proc são "world readable" pelo que não é
necessário permissões de root.



> [2 - Ir buscar o Kernel ]

> $ cd /usr/src

Normalmente o /usr/src apenas tem permissões de escrita para a root. Do
ponto de vista de segurança, para evitar fazer o resto do processo como
root, aconselho a que se faça o download para uma directoria na "nossa"
homedir (~/src é o que eu uso).

[...]


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

Sublinho a importância deste passo. Mesmo que se confie no endereço do
servidor, é possível que alguém "engane" um servidor DNS algures de
modo a redireccionar para outro servidor, como modo de sabotagem. Como
devem calcular, basta umas poucas linhas de código sabotado num kernel
para comprometer a segurança de todo o sistema.

Alternativamente um makefile alterado funciona como um excelente meio de
semear o caos. Basta por um "rm -rf" no sitio certo... Mais uma razão
para não fazer make como root e trabalhar com permissões restritas. E
verificar as assinaturas.

> [3 - Descomprimir o Kernel ]

[...]

> $ chown -R root.root linux-2.4.22
> $ ln -s linux-2.4.22 linux

Nenhum destes passos é necessário se estivermos a trabalhar no ambiente
controlado da nossa homedir.

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

Para executar o "make modules_install" é necessário ter permissões de
root, visto que é aqui que os módulos são copiados para
/lib/modules/... Tendo em conta o que disse acima aconselho a utilização
de "sudo make modules_install"

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

Mais uma vez, se estivermos a trabalhar de modo seguro, aqui necessitamos
de acesso de root, pelo que é necessário executar os comandos através
do sudo.



> [7 - Configurar o boot loader ]

Aqui também o /etc/lilo.conf (e o /boot/grub/grub.conf) pode apenas ser
escrito por root. Usem o sudo.

> [8 - Reboot! ]
>
> Bem, depois disto tudo, basta fazer reboot e escolher no arranque o
> kernel acabadinho de compilar. :-)
>
> $ shutdown -r 0

Para fazer shutdown normalmente podem usar o método normal que não
implica usar a password de root. Mas se quiserem podem sempre usar o sudo.



> 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

O dmesg pode ser usado sem ser root, mas o /var/log/messages tem
normalmente modo 600. Já sabem... sudo.

Do ponto de vista de segurança a máxima a reter é "A segurança é um
processo, não é um produto". Isto quer dizer que não se pode "comprar"
segurança, visto que ela depende directamente das nossas acções.

Obrigado ao Nbk pela compilação do mini-howto e mantenham-se seguros ;)

- --
Rui Malheiro
"Um outro mundo é possível"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE/VrxC6xZVe81Ht3gRArNiAKDWv/EESc8D3MHpRKx0hgM1QTL7nQCg04Gk
D+pwT1SMfVaGbL2b8HMMgp4=
=Tab5
-----END PGP SIGNATURE-----

FS/OSS

unread,
Sep 4, 2003, 5:44:46 PM9/4/03
to
On Thu, 04 Sep 2003 00:12:03 +0100, Nbk wrote:

> [kernel] mini how-to - versao 2

já agora deixo aqui um link interessante:

"Feature: HowTo Upgrade To The 2.6 Kernel"
http://kerneltrap.org/node/view/799

RJ
--
Key fingerprint = 478B C11B 3802 D151 CDB1 309E 69BF 6F02 352C 9ED3
KeyID: 352C9ED3
http://pgp.mit.edu/
----
http://fs-oss.cjb.net
http://www.debian.org | http://www.gnu.org | http://www.fsf.org
----
"Security is a process, not a product." Bruce Schneier (Counterpane)

João Jerónimo

unread,
Sep 9, 2003, 4:10:31 PM9/9/03
to
Nbk wrote:
> 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:
> (...)

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

esta aqui um contracensso... quando se poe um $ antes do comando a
digitar esta-se a dizer que o comando e para executar como utilizador
normal!


--
João Jerónimo

-----------------------------------------------
The system is going down for a system halt NOW!
-----------------------------------------------

Nbk

unread,
Sep 9, 2003, 5:03:50 PM9/9/03
to
On Tue, 09 Sep 2003 21:10:31 +0100, João Jerónimo
<j_j...@myrealbox.com> escreveu em 20 linhas:

Boas.

[...]

>> $ cat /proc/pci
>
>esta aqui um contracensso... quando se poe um $ antes do comando a
>digitar esta-se a dizer que o comando e para executar como utilizador
>normal!

Onde é que leste isso?

@919, Nbk

Luis Oliveira

unread,
Sep 10, 2003, 7:38:28 AM9/10/03
to
On Tue, 09 Sep 2003 22:03:50 +0100 Nbk wrote:
>>esta aqui um contracensso... quando se poe um $ antes do comando a
>>digitar esta-se a dizer que o comando e para executar como utilizador
>>normal!
>
> Onde é que leste isso?

De facto, é costume ser $ para utilizador normal e # para root. Não é?

--
Luís Oliveira Lisp is the red pill.
Reply-To: luismbo (@) netcabo (.) pt -- John Fraser, comp.lang.lisp
Equipa Portuguesa do Translation Project
http://www2.iro.umontreal.ca/~pinard/po/registry.cgi?team=pt

Luis Bruno

unread,
Sep 10, 2003, 8:29:37 AM9/10/03
to
Luis Oliveira wrote:
> De facto, é costume ser $ para utilizador normal e # para root. Não é?

Yep. Ah, era uma pergunta retórica; desculpa.

> --
> Luís Oliveira Lisp is the red pill.

Fizeste-me lembrar uma .sig do a.s.recovery, a qual vou adaptar para o
contexto deste froup:

pt.comp.so.linux: We took both pills.

--
Luis Bruno C8-H10-N4-O2-CH3-CH2-OH
UTM 29T 629481 E 4511776 N Alt: 576m

João Jerónimo

unread,
Sep 10, 2003, 9:46:47 AM9/10/03
to
Nbk wrote:
> Onde é que leste isso?

ler nao li... mas e sempre assim que esta...

Luis Bruno

unread,
Sep 10, 2003, 9:59:38 AM9/10/03
to
João Jerónimo wrote:
> ler nao li... mas e sempre assim que esta...

Yep, é uma pratica antiga; o prompt por omissao da csh e da ksh
é $ para os users e # para o todo-poderoso.

0 new messages