Re: Compilando kernel na Debian

2003-11-25 Por tôpico José Adilson
A questão não é só compilar o kernel. o detalhe é o cidadão saber entre 
todas aquelas opções de módulos quais são os corretos para o perfeito 
funcionamento da máquina. Neste ponto o instalador do Debian me parece 
meio falho já que não há qualquer informação sobre o que deve ser feito 
para cada máquina. P. ex., na compilação do kernel direto dos fontes 
através do ncurse ou mesmo da interface tcl-tk são sugeridas 
possibilidades para cada módulo. Já no caso do instalador do Debian são 
oferecidas as possibilidades mas não explicadas. Em todo caso o novo 
instalador está saindo e este problema estará resolvido


Paulo Henrique de Lima Santana escribió:
Saiu na Dicas-L. 
Acredito que pode ser util.


Paulo


Compilando kernel na Debian



--

José Adilson - Usuário Linux Registrado
[EMAIL PROTECTED]





Compilando kernel na Debian

2003-11-21 Por tôpico Paulo Henrique de Lima Santana
Saiu na Dicas-L. 
Acredito que pode ser util.

Paulo


Compilando kernel na Debian
  ===

Colaboração: Rodrigo Bernardo Pimentel [EMAIL PROTECTED]

A Debian (http://www.debian.org), assim como a maioria das grandes
distribuições, empacote o kernel de forma modular, para que não seja
necessário recompilá-lo para adicionar suporte a novo hardware ou 
coisas do
gênero.

Entretanto, volta e meia é necessário, pra aplicar um patch, pegar
uma versão nova de kernel que ainda não foi empacotada pro stable, 
alterar
alguma configuração como tipo de processador etc.

Como a Debian (e, novamente, a maioria das grandes distribuições)
normalmente acrescenta patches ao empacotar o kernel, seria 
interessante, ao
recompilar, manter esses patches. Além disso, instalar o kernel como 
pacote
Debian tem a vantagem de permitir usar o dpkg (e apt), removê-lo com
facilidade etc.

Para compilar (ou recompilar) um kernel do jeito Debian,
utiliza-se um programa chamado make-kpkg, que vem com o pacote
kernel-package (apt-get install kernel-package, que deve instalar o 
pacote
dpkg-dev).

Por exemplo, se você quer recompilar o kernel 2.4.22 a partir do
fonte distribuído pela Debian (o processo é semelhante para compilar e 
gerar
um pacote a partir do kernel oficial), você pode fazer (como root, ou
usando uma ferramenta como sudo ou fakeroot):


  apt-get install kernel-source-2.4.22


Isso colocao arquivo kernel-source-2.4.22.tar.bz em /usr/src . Daí,
você faz:
--- 
cd /usr/src
tar xjf kernel-source-2.4.22.tar.bz
--- 
Com isso, você tem um diretório /usr/src/kernel-source-2.4.22 .


  cd kernel-source-2.4.22


Para compilar o kernel, você precisa configurá-lo. Você pode fazer
da maneira usual (make config, make menuconfig ou make xconfig), 
ou
pode partir da configuração do kernel correspondente da Debian. Se você 
tem
um kernel da Debian instalado, há um arquivo de configuração 
correspondente
em /boot/config-versao do kernel . Por exemplo, supondo que você tem
instalado o pacote kernel-image-2.4.22-1-k7:


  cp /boot/config-2.4.22-1.k7 /usr/src/kernel-source-2.4.22/.config


Se você copiar um arquivo de configuração de um kernel mais antigo,
o processo de compilação do kernel (explicado a seguir) vai pedir sua
intervenção nas opções novas ou incompatíveis que surgirem.

Feito isso, agora é só compilar:


  make-kpkg --append-to-version -rbp --initrd --us --uc kernel_image


Esse é o comando que faz a mágica. Destrinchando:

1) --append-to-version acrescenta a palavra que você indicar (no
exemplo, -rbp) à versão do pacote criado. É útil pra diferenciar seu
kernel recompilado de um oficial.

2) --initrd indica que junto com o kernel deve ser criado um arquivo
initrd, que é o padrão da Debian (e o modo mais flexível). Para mais
informações, man 4 initrd.

3) --us e --uc são opções pra criação do pacote, dizem pra não
tentar assinar com gpg o pacote, nem criar changelog. Se você não 
quiser se
preocupar com essas tecnicalidades da Debian, simplesmente use as 
opções sem
pensar mais nisso. Se quiser entender, man dpkg-buildpackage

4) kernel_image é a ação que o make-kpkg vai executar. Com essa
ação, ele cria um pacote Debian com a imagem do kernel. Há outras ações
possíveis, veja man make-kpkg.

Há uma série de outras opções, inclusive para aplicar patches
automaticamente (funciona de forma mais ou menos imediata com patches
instalados da própria Debian, com apt-get; para mais informações, man
make-kpkg, opção --added_patches).

Feito isso, o sistema vai te fazer uma pergunta (por causa do
--initrd):

Warning: You are using the initrd option, that may not
work unless you have applied the initrd cramfs patch to
the kernel, or modified mkinitrd not to use cramfs by
default. The  cramfs initrd patch, is included in the
Debian supplied kernel sources, but is not present in
pristine kernel sources.
By default, I assume you know what you are doing, and I
apologize for being so annoying. Should I abort[Ny]?

É só digitar n (pra *não* abortar) e Enter.

Se houver opções não configuradas, como citado anteriormente, o
sistema vai pedir que você as configure, em modo make config 
(portanto é
sempre prático configurar antes com make menuconfig, ou copiar uma
configuração já existente).

Em seguida o programa vai começar a efetivamente compilar o kernel,
então essa é a hora de fazer algo produtivo, como ir assistir a um 
filme do
Monty Python :)

E, algum tempo depois...
--- 
cd ..   # Ou seja, cd /usr/src
dpkg -i kernel-image-2.4.22-rbp_10.00.Custom_i386.deb
--- 
Ou seja, foi criado um pacote
kernel-image-2.4.22-rbp_10.00.Custom_i386.deb em /usr/src, é só 
instalá-lo e
usá-lo! Cuidado para que ele não sobrescreva algum kernel existente, a 
opção
--append-to-version ajuda nisso.

E pronto! Agora há os arquivos /boot/vmlinuz-2.4.22-rbp e
/boot/initrd-2.4.22-rbp, prontos pra serem usados!

Como o kernel novo foi instalado como um pacote Debian, é uma boa
hora pra usar mais uma facilidade da Debian: update-grub (se você ainda