Compilando Kernel no CentOS 6.0

Artigos e Dicas sobre compilação de Kernel são normalmente postados utilizando-se distros como Debian ou seus derivados. Minha motivação principal para este artigo é mostrar como fazer uma compilação de Kernel no sistema GNU/Linux CentOS 6.0, bastante usado em servidores Linux.

[ Hits: 31.583 ]

Por: Perfil removido em 10/01/2012


Configurando e instalando



Configurando

Após acessar o diretório onde está o source do Kernel 3.4, execute o comando abaixo para definir quais serão as funcionalidades compiladas, como built-in (estas ficarão dentro do kernel) e os módulos que serão compilados externamente, ou seja, que ficarão dentro de /lib/modules/3.4.

Uma dica é carregar a configuração do Kernel atual no momento de configurar o Kernel que será compilado para evitar erros (indicado principalmente para iniciantes). Para isso, logado como root, copie para dentro do diretório /usr/src/linux-3.4 o arquivo de configuração do Kernel que está usando:

# cp /boot/config-$(uname -r) ./.config

Em seguida, execute o comando usando o usuário root para gerar a configuração personalizada:

# make menuconfig

Na tela de configuração do kernel, vá na opção:
Load an Alternate configuration File

Digite: .config

E dê um OK.

Em seguida, salve a configuração na opção e saia da configuração do kernel:
Save an Alternative Configuration File

Caso deseje alterar as configurações, digite: make menuconfig novamente, faça as alterações e salve.

Instalando o Kernel e initrd

Após configurar o Kernel, compile os pacotes com o comando make:

# make

Caso use um processador Dual Core na máquina que está compilando o Kernel, execute o comando make -j4 (o comando fará a compilação terminar mais rápido).

A opção "-j" executa N jobs por segundo, onde 'N' será a quantidade de funcionalidades compiladas por segundo:

# make -j2

Depois de compilado, é hora de instalar os módulos do Kernel e gerar a imagem initramfs (initrd). Para instalar os módulos, execute o comando abaixo; este comando irá copiar todos os módulos externos para o diretório /lib/modules/3.4:

# make modules_install

Para instalar o Kernel, copie o arquivo de configuração do kernel compilado e a imagem initramfs e copie o arquivo "bzImage" para o diretório /boot e, opcionalmente, os arquivos de configuração de "System.map", ou Execute o comando a seguir:

# make install

Caso a imagem initramfs-3.4 não for gerada pelo comando make anterior, rode o comando abaixo para gera-la.

# dracut /boot/initramfs-3.4.img 3.4

Obs.: Se compilou os módulos que o Kernel necessita para acessar o sistema instalado junto com o Kernel (como 'built-in'), não há necessidade de gerar esta imagem. Mas, se feito o contrário, e se não gerar o initrd, terá um kernel Panic.

Os comandos make install e/ou dracut irão gerar o arquivo "initramfs-3.4.img" dentro do diretório /boot. O tamanho da imagem varia de acordo com a configuração gerada para o Kernel compilado (podendo ficar com o tamanho de 60 Megabytes, ou até mais), mas este tamanho não só se atribui à configuração.

Esta imagem contém um sistema de arquivos Raiz temporário, que o Kernel usa para acessar o sistema de arquivos principal. A imagem contém, além de módulos que o Kernel necessita para o acesso, comandos e diretórios como: /proc, /sys, /dev, entre outros.

Após executar o comando make install, será adicionado uma entrada para o kernel atualmente instalado, caso esta entrada não seja criada, edite o arquivo de configuração "grub.conf". Coloque a entrada referente ao novo Kernel e a imagem initramfs que foram gerados e salve as alterações:

# vim /boot/grub/grub.conf

Pronto. Seu novo Kernel foi compilado e gerado.

Agora tenha bom uso do mesmo.

Página anterior    

Páginas do artigo
   1. Instalando dependências e obtendo o source do Kernel
   2. Configurando e instalando
Outros artigos deste autor

ATI 200M + XGL no Gentoo

Minimalismo em ambientes gráficos

Servidores Debian ou Ubuntu integrados ao AD com cid-tty

Lançamento do GFP Open (Gerenciador Financeiro Pessoal) versão 0.0.1.2

Multiboot pelo pendrive usando grub2: instalando várias distros a partir de uma unidade de armazenamento móvel

Leitura recomendada

Compilando o kernel no Conectiva Linux 10

Compilando o kernel 2.6.13 no Slackware 10.2

Compilando um Kernel customizado a partir do código-fonte do Kernel do Debian 12

NPTL, Exec-Shield e outros palavrões que fazem seus programas crasharem

Recompilando o kernel na distribuição Debian

  
Comentários
[1] Comentário enviado por levi linux em 12/01/2012 - 09:49h

Parabéns, muito bom o seu artigo, bastante didático. Realmente a maioria dos artigos e dicas sobre compilação de Kernel envolvem distros debian-like. Não conhecia esse comando "dracut".
Favoritado!

[2] Comentário enviado por elionay em 17/01/2012 - 02:22h

muito bom artigo e concordo com o levi_linux
Favoritado!

[3] Comentário enviado por erikogp em 18/06/2012 - 13:07h

Olá, segui o tutorial e me embananei ao editar o arquivo /boot/grub/grub.conf. Agora ao iniciar me deparo com a mensagem: "Booting CentOS (2.6.39.4el6.i686) daí quando passa dessa mensagem, vem a mensagem de erro: "Error 15: File not Found". Press any key to continue.

Como faço para voltar ou consertar?

[4] Comentário enviado por removido em 18/06/2012 - 16:42h

na hora do boot de "ENTER" e escolha o kernel antigo. e corrija.

pela mensagem provavelmente um dos arquivos (kernel ou initrd) não foram indicados corretamente no arquivo de configuração, ai você precisa indicar a localização correta do arquivo assim como o nome do mesmo. isso é se você copiou o arquivo do kernel, initrd.img e os outros arquivo para /boot.

[5] Comentário enviado por erikogp em 18/06/2012 - 22:28h

Acho que foi isso mesmo, na hora de configurar o grub. Nunca tinha feito isso, daí fui seguindo o tutorial, mas no tutorial não tinha explicação sobre a edição do grub.conf, daí me embananei. Eu salvei uma cópia do grub.conf antes de modifica-lo, agora vou ver se consigo chegar até ele usando um outro cd de boot. Eu dou ENTER no boot e tem 2 opções mas nenhuma delas vai adiante, só retorna a mesma mensagem de erro.



[4] Comentário enviado por eabreu em 18/06/2012 - 16:42h:

na hora do boot de "ENTER" e escolha o kernel antigo. e corrija.

pela mensagem provavelmente um dos arquivos (kernel ou initrd) não foram indicados corretamente no arquivo de configuração, ai você precisa indicar a localização correta do arquivo assim como o nome do mesmo. isso é se você copiou o arquivo do kernel, initrd.img e os outros arquivo para /boot.


[6] Comentário enviado por removido em 18/06/2012 - 22:58h

amigo erikogp,

após executar esse passo do artigo:

# make modules_install

execute o comando abaixo:

# make install

e depois reinicie a máquina, na hora do boot de "ENTER" quando estiver fazendo a contagem para carregar o kernel, então veja se o novo kernel está aparecendo, caso não esteja vai ter que editar o arquivo de configuração do grub mesmo.

[7] Comentário enviado por erikogp em 21/06/2012 - 13:03h

Isso mesmo amigo. Fiz igual dito acima, tive que editar o arquivo de configuração do grub. Na verdade só voltei o antigo, e está funcionando, só que com o kernel antigo. Vou ter que estudar mais sobre o grub, pois o problema é na edição dele. Amigo, seria demais pedir para vc enviar as linhas de configuração do grub para funcionar de acordo com o tutorial acima? Segui a risca tudo no tutorial, só ficou faltando a configuração do grub, pois não é mostrado aí como se faz. Se tiver como vc enviar eu agradeço.

[8] Comentário enviado por removido em 21/06/2012 - 13:40h

No artigo não foi abordado a configuração do grub, pois para fazer a mesma seria necessário saber o dispositivo no qual está armazenado a imagem do kernel, qual é o dispositivo onde está armazenado o sistema. você leu e seguiu a dica do ultimo post postado por mim acima ?

[9] Comentário enviado por serph em 13/07/2012 - 22:08h

pra fazer esse initrd, eu inseri a seguinte sintaxe estando no diretório /usr/src/linux-2.6.39.4:

#mkinitrd /boot/initrd-2.6.39.4.img 2.6.39.4

depois editei o vim /boot/grub/grub.conf:

default=0
timeout=5
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.39.4)
root (hd0,1)
kernel /boot/vmlinuz-2.6.39.4 ro root=UUID=5d353de2-8c2f-4491-aca1-1594a0c6dcd7 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=br-abnt2 LANG=pt_BR.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M rd_NO_LVM rd_NO_DM rhgb quiet
initrd /boot/initrd-2.6.39.4.img

[10] Comentário enviado por removido em 15/11/2012 - 15:36h

Artigo atualizado na data 15-11-2012.

[11] Comentário enviado por wagneralves em 06/03/2013 - 14:11h

Olá Pessoal,

Muito interessante o artigo bem diferente de outros bem complicados, aproveitei o artigpo acima e criei um script simples para quem quiser automatizar o processo fiz rapidão aki no trabalho mas dependendo da galera posso melhorar segue para quem quiser



#!/bin/bash

yum install -y gcc bison ncurses-devel make gcc-c++
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.4.tar.bz2
tar -jxvf linux-3.4.tar.bz2
cd linux-3.4
cp /boot/config-$(uname -r) ./.config

echo "Na tela de configuração do kernel, vá na opção:

? Load an Alternate configuration File


Digite: .config

E dê um OK.

Em seguida, salve a configuração na opção e saia da configuração do kernel:

? Save an Alternative Configuration File


Caso deseje alterar as configurações, digite: make menuconfig novamente, faça as alterações e salve."

sleep 5

make menuconfig

echo "Seu processador é dual core? :"
echo "y/n"
read proc
if [ $proc == n ] ;

then
make

else

make -j4

fi

make modules_install

make install

result=`ls -1 /boot | grep -i initramfs-3.4.0.img`

if [ $result == 'initramfs-3.4.0.img' ] ;

then

echo "Kernel Compilado com Sucesso! "

else

echo "Copiando o initramfs-3.4.img para o diretório /boot"

dracut /boot/initramfs-3.4.img 3.4

fi

echo "Deseja que o novo kernel inicialise por padrão? :"
echo "y/n"

read kernel

if [ $kernel == 'y' ] ;

then

sed -i 's/default=1/default=0/' /boot/grub/grub.conf

echo "O kernel padrão foi alterado para 3.4"

else

echo "O kernel padrão é "`uname -r`" "

fi

echo "Deseja reiniciar o sistema? :"
echo "y/n"

read sistema
if [ $sistema == 'y' ] ;

then

echo "Reinicializando o sistema!"

init 6

else

echo "O ideal seria reiniciar o sistema"

echo "BYE"

fi


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts