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: 28.997 ]

Por: Edson em 10/01/2012


Instalando dependências e obtendo o source do Kernel



A compilação do Kernel é feita por vários motivos, entre eles:
  • Suporte a um maior número de Hardwares possíveis;
  • Manter somente funcionalidades que são necessárias para funcionamento do sistema;
  • Deixar seu Kernel mais rápido e enxuto;
  • Prover mais funcionalidades para segurança do sistema.

Em qualquer distribuição GNU/Linux, a única coisa que pode diferir na compilação do Kernel são as dependências, como: pacotes necessários, bibliotecas usadas, compiladores, etc.

Instalação das dependências

Nesta parte, para compilação do Kernel, vou tratar de descrever a instalação dos pacotes necessários para compilação do Kernel e sua instalação.

Usando o usuário root, instale os pacotes usando o gerenciador de pacotes yum:

# yum install gcc bison ncurses-devel make gcc-c++

Obtendo o Kernel a ser compilado

O Kernel usado para este artigo foi a versão 3.4, mas pode utilizar o mesmo método em outras versões do Kernel.

Digite no terminal o comando abaixo para baixar o source do Kernel 3.4:

# cd /usr/src
# wget
http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.4.tar.bz2

Após baixar o arquivo, copie o mesmo para o diretório /usr/src e descompacte-o usando o usuário root, depois acesse o diretório criado:

# tar -jxvf linux-3.4.tar.bz2
# cd linux-3.4


    Próxima página

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

Clonezilla - Servidor de imagens (Parte II)

Sistemas de arquivos para GNU/Linux

Apresentando o Btrfs - Nova geração de sistema de arquivos para GNU/Linux

Tunando sistemas de arquivos para GNU/Linux

FwLogWatch - Analisando Registros do IPtables

Leitura recomendada

Linux Virtual Memory Management e lentidão ao copiar arquivos grandes para mídia lenta

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

Alterando as permissões de um arquivo

Algoritmos de compressão

Placas NVIDIA com kernel 2.6.8

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

[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 eabreu 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 eabreu 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 eabreu 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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts