Como compilar o Kernel no Linux CentOS

Este post demonstra como instalar as dependências, baixar as fontes, alterar uma configuração, compilar e instalar um novo Kernel Linux em uma instalação básica do CentOS 5 em modo Server.

A alteração que vamos fazer no Kernel, na prática não irá afetar praticamente nada nele, pois apenas insere no texto de release um valor personalizado. Entretanto é uma alteração simples e segura para ser usada num tutorial que dedica-se a mostrar como é realizada a compilação do Kernel.

Para saber mais sobre a instalação do CentOS utilizada neste, visite o post Instalar Linux CentOS pela rede (ISO netinstall) no Oracle VirtualBox.


Vejamos:

  • É preciso certificar-se que algumas dependências estão resolvidas, caso não estejam o comando yum irá resolver e instala-las automaticamente:
  • yum install gcc ncurses-devel rpm-build make wget
  • Obtenha os fontes da versão do Kernel que deseja compilar. Podemos baixar diretamente na console usando o wget, a versão você pode escolher no endereço http://www.kernel.org/pub/linux/kernel/v2.6/ ou usar a sugerida no post. Execute:
  • wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.1.tar.bz2

    wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.tar.bz2
  • Desempacote o arquivo das fontes do Kernel na pasta /usr/src com o comando:
  • tar jxvf linux-2.6.19.1.tar.bz2 -C /usr/src

    tar jxvf linux-2.6.19.tar.bz2 -C /usr/src
  • Para se compilar o Kernel por padrão utiliza-se o local /usr/src/linux, ao desempacotar as fontes é criado uma pasta em /usr/src com o nome e versão do Kernel, para que futuramente você possa compilar outras versões dele a melhor maneira de resolver isto é criar um link simbólico. Para a versão de Kernel sugerida pelo post segue o comando para este criar o link simbólico:
  • ln -sf /usr/src/linux-2.6.19.1/ /usr/src/linux

    ln -sf /usr/src/linux-2.6.19/ /usr/src/linux

    Entre na pasta das fontes:

    cd /usr/src/linux
  • Certifique-se que não há “sujeira” de tentativas anteriores de compilação do Kernel com o comando:
  • make clean && make mrproper
  • Copie as configurações do Kernel atual para a pasta /usr/src/linux:
  • cp /boot/config-&(uname -r) .config
  • Proceda com a configuração do Kernel, o comando make menuconfig abrirá uma tela para que você personalize seu Kernel antes de compilar. Para demonstrar o funcionamento dele vamos apenas alterar o parâmetro Local version, este parâmetro inclui um texto personalizado no release do Kernel. Coloque a informação que desejar ou siga com a sugestão do post:
  • make menuconfig

    Na tela principal da configuração do Kernel, use as setas para selecionar General Setup e pressione [Enter]:

    make menuconfig 1

    Em General Setup selecione Local version – append to kernel release:

    make menuconfig 2

    Digite o texto a ser adicionado e pressione [TAB] para selecionar < Ok >:

    make menuconfig 3

    Observe entre parênteses o texto adicionado no parâmetro e selecione < Exit > usando o [TAB]:

    make menuconfig 4

    Para encerrar a configuração, selecione < Exit > novamente:

    make menuconfig 5

    Sempre ao sair das configurações do Kernel você vai precisar confirmar se quer ou não salvar as alterações. Selecione < Yes > para salvar:

    make menuconfig 6

  • Compile e construa o pacote RPM, isto pode demorar vários minutos:
  • make rpm

    Aguarde o fim da compilação e empacotamento, no final dentre as ultimas mensagens haverá uma que indica onde o pacote RPM foi gerado. A mensagem será parecia com esta:

    ...
    Gravou: /usr/src/redhat/RPMS/i386/kernel-2.6.19.1composta.el5-1.i386.rpm
    ...
  • Instale o novo Kernel a partir do pacote criado:
  • rpm -ivh /usr/src/redhat/RPMS/i386/kernel-2.6.19.1composta.el5-1.i386.rpm
  • Crie a imagem initrd para a nova versão do Kernel:
  • mkinitrd /boot/initrd-2.6.19.1-composta.el5.img 2.6.19.1-composta.el5
  • Para finalizar a compilação e instalação do novo Kernel, precisamos informar ao gerenciador de boot que ele deverá iniciar o sistema com o novo Kernel. No CentOS o gerenciador padrão é o Grub, para adicionar esta opção e colocá-la como padrão de boot, comece com o comando abaixo:
  • vi /boot/grub/grub.conf

    Neste arquivo vamos inserir as informações do novo Kernel, para fazer esta alteração sem problema, primeiro repita toda a configuração de boot do Kernel atual e depois apenas altere a versão nas linhas da configuração do bloco de cima:

    Exemplo de arquivo antes de qualquer alteração:

    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /boot/, eg.
    #          root (hd0,0)
    #          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
    #          initrd /initrd-version.img
    #boot=/dev/sda
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.18-238.el5)
            root (hd0,0)
            kernel /vmlinuz-2.6.18-238.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
            initrd /initrd-2.6.18-238.el5.img

    Repetimos o bloco de configuração de boot do Kernel atual:

    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /boot/, eg.
    #          root (hd0,0)
    #          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
    #          initrd /initrd-version.img
    #boot=/dev/sda
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.18-238.el5)
            root (hd0,0)
            kernel /vmlinuz-2.6.18-238.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
            initrd /initrd-2.6.18-238.el5.img
     
    title CentOS (2.6.18-238.el5)
            root (hd0,0)
            kernel /vmlinuz-2.6.18-238.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
            initrd /initrd-2.6.18-238.el5.img

    Altere apenas a versão no primeiro bloco de configuração:

    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /boot/, eg.
    #          root (hd0,0)
    #          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
    #          initrd /initrd-version.img
    #boot=/dev/sda
    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.19.1-composta.el5)
            root (hd0,0)
            kernel /vmlinuz-2.6.19.1-composta.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
            initrd /initrd-2.6.19.1-composta.el5.img
     
    title CentOS (2.6.18-238.el5)
            root (hd0,0)
            kernel /vmlinuz-2.6.18-238.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
            initrd /initrd-2.6.18-238.el5.img
  • Reinicie o computador, se tudo correu bem o novo Kernel será inicializado:
  • init 6

Vídeo Post: clique para assistir ao vídeo que testa este tutorial.

Post Resposta: Para tlkundrotas a partir do Formspring. Obrigado.
Sugira um post ou pergunte-me algo você também.

3 comentários sobre “Como compilar o Kernel no Linux CentOS”

  1. Pergunta enviada por: davemport

    Assisti seu vídeo e li sobre o post, para ficar mais facil de se entender. Estou tentando atualizar o kernel de uma distro baseada no centOS. Só que para tal feito preciso fazer tudo via terminal. Já consegui baixar o kernel e jogá-lo para dentro do hd via pen drive montado… Porém quando executo da msg de erro, preciso da biblioteca gcc. Baixei ela num site, própria para o centOS. Mas não consegui instalar tal arquivo. Qual o melhor comando para isso? Tentei o make e o install, mas sem chance…Obrigado pelo seu tempo! Thiago

    Thiago, sugiro utilizar pacotes RPM, se for uma distro baseada no CentOS 5 baixe deste link:

    http://mirror.centos.org/centos/5/os/i386/CentOS/

    Uma opção mais interessante é baixar o DVD do CentOS e adicioná-lo como repositório local do seu sistema, assim tu podes usar os comandos como descritos neste post, com exceção para o comando “wget” que terá de ser feito em outro computador com acesso a internet.

    Para adicionar o DVD do CentOS como repositório faça o seguinte:

    vi /etc/yum.repos.d/CentOS-Media.repo

    Adicione neste arquivo as linhas a seguir:

    [c5-media]
    name=CentOS-$releasever - Media
    baseurl=file:///media/CentOS/
            file:///media/cdrom/
            file:///media/cdrecorder/
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

    Caso já exista este arquivo, certifique-se que a opção enabled está igual a 1

    Depois instale os pré-requisitos para compilar o kernel com o comando a seguir:

    yum --disablerepo=\* --enablerepo=c5-media install gcc ncurses-devel rpm-build make wget

Deixe uma resposta