Como compilar o kernel (em #! CrunchBang Linux)

Desde a altura que adquiri um netbook (Acer Aspire One A110) que tenho procurado uma distribuição leve para o mesmo.

Até à altura que encontrei o #! CrunchBang Linux, uma versão do Ubuntu muito leve criada por Philip Newborough que utiliza o Openbox como gestor de janelas.

Mas precisava de algo mais, já tinha procurado por optimizar o sistema e procurei e experimentei todos os tweaks, até que não tive outra hipótese senão virar-me para o kernel.

Encontrei um programazinho que fazia a optimização do kernel, compilando-o de forma fácil – o kernelcheck – mas devo ter alterado qualquer coisa que após duas compilações já não funcionava mais, dava sempre um erro qualquer que eu, não sendo programador e sendo somente um curioso em relação a este maravilhoso SO não consegui resolver.

Finalmente procurei e encontrei um how-to muito simples para compilar o meu próprio kernel. Eu sei que para os gurus este conjunto de instruções deve ser coisa corriqueira, mas para mim foi uma grande conquista, deixo assim o how-to de como compilar o próprio kernel (mais que não seja para eu me lembrar de como o fazer).

Aviso: Este tutorial foi feito para o Ubuntu como cada distribuição tem as suas próprias ferramentas pode não funcionar noutras distribuições. O que se segue são um conjunto de instruções simples feitas originalmente por Falco Timme para o HowToForge com um kernel vanilla, também prevê a utilização de patches para o próprio kernel.

Tal como o autor original afirma, esta não é a única maneira de compilar o kernel, existem várias alternativas, mas esta maneira funcionou comigo, não se dando garantias de que funcionará sempre, nem em todas as ocasiões.

Passo 1. Estas acções deverão ser efectuadas como root (se não sabe o que é isto, é melhor ainda não se aventurar nestas andanças).

Passo 2. Instalar os pacotes necessários para a compilação do kernel:

Antes de tudo, actualizar a base de dados dos pacotes

sudo apt-get update

Depois instalamos todos os pacotes desta forma:

sudo apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

Passo 3. Fazer o download das fontes do kernel

Agora fazemos o download do kernel desejado para /usr/src. Vamos a www.kernel.org e seleccionamos o kernel que queremos instalar, por exemplo linux-2.6.29.tar.bz2. Depois podemos fazer o download directamente para a /usr/src desta forma:

cd /usr/src
sudo wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.tar.bz2

Depois descompactamos as fontes do kernel e criamos um symlink para a a pasta das fontes do kernel:

sudo tar xjf linux-2.6.29.tar.bz2
sudo ln -s linux-2.6.29 linux
cd /usr/src/linux

Passo 4 (opcional) Aplicar patches às fontes do kernel

Por vezes necessitamos de drivers para hardware que ainda não é suportado pelo kernel, ou precisamos de suporte para técnicas de virtualização ou outra qualquer tecnologia novíssima que ainda não chegou ao kernel. Nestes casos terá de ser feito um “remendo/acrescento”(patch) à fonte do kernel (desde que exista…).

Vamos assumir que foi feito o download do patch necessário (patch.bz2 – por exemplo) para /usr/src. Esta é a forma de o aplicar à fonte do kernel (deve-se estar ainda em /usr/src/linux):

bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1

A primeira linha de comando é só um teste, não afecta as fontes. Se não mostrar erros, pode se utilizar o segundo comando que vai aplicar o patch. Não fazer nada disto se o primeiro comando der erro!

Também se podem aplicar prepatches às fontes do kernel. Pore exemplo, se for necessário uma actualização que só está no kernel 2.6.30.rc1, mas que a fonte completa ainda não foi lançada para este kernel. Em vez disso, um patch-2.6.30-rc1.bz2 está disponível. Este patch pode ser aplicado às fontes do kernel 2.6.29, mas não às actualizações seguintes (2.6.29.1, etc). Isto está explicado em http://kernel.org/patchtypes/pre.html:

Os prepatches são equivalentes aos lançamentos alfa para linux.

Passo 5. Configurar o kernel

É sempre uma boa ideia utilizar a configuração do actual kernel como base para o próximo. Assim copiamos a configuração existente para /usr/src/linux:

cp /boot/config-`uname -r` ./.config

De seguida

sudo make menuconfig

que vai trazer o menu de configuração do kernel. Vá a “Load an Altternate Configuration File” e escolha .config (que contém a configuração do kernel actual).
Depois procure e efectue as alterações necessárias à configuração do novo kernel. Quando terminarmos selecionando o Exit, respondemos à seguinte questão com um Yes (Do you wish to save your new kernel configuration?).

Passo 6. Compilar o kernel

Para compilar o kernel executa-se estes comandos:

sudo make-kpkg clean
sudo fakeroot make-kpkg --initrd --append-to-version=-custom 
> kernel_image kernel_headers

Depois de –append-to-version= podemos escrever uma identificação do kernel, que deve começar sempre com – (menos) e não deve conter espaços em branco.
Agora vem a parte chata: a compilação do kernel pode demorar horas, dependendo da configuração do kernel e da velocidade de processamento do computador. (O meu na máquina de testes com um Pentium M a 1500MHz demorou 2 horas e picos).

Passo 7. Instalar o novo kernel

Após a construção bem sucedida do novo kernel, encontramos dois pacotes .deb em /usr/src

cd /usr/src
ls -l

Neste teste os ficherios chamavam-se linux-image-2.6.29-flsantos_2.6.29-custom-10.00.Custom_i386.deb (que contém o kernel) e linux-headers-2.6.29-flsantos_2.6.29-custom-10.00.Custom_i386.deb (que contém os ficheiros necessários se quisermos compilar módulos adicionais ao kernel). Eu instalei-os assim:

sudo dpkg -i linux-image-2.6.29-flsantos_2.6.29-custom-10.00.Custom_i386.deb
sudo dpkg -i linux-headers-2.6.29-flsantos_2.6.29-custom-10.00.Custom_i386.deb

Agora até podemos transferir os pacotes .deb para outros sistemas e instalá-los da mesma forma, ou utilizando o gdebi.

Agora, reboot e se tudo correr bem temos o nosso próprio kernel compilado a funcionar. Claro que se não resultar, temos de fazer os passo todos outra vez para ver o que falhou, portanto deixemos ficar sempre (pelo menos) a versão anterior do kernel.

Fonte: HowToForge

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: