9.3. Compilando e instalando um kernel customizado

Primeiramente, deixe-nos apresentar rapidamente o diretório de compilação do kernel. Todos os diretórios mencionados serão relativos ao diretório principal, /usr/src/sys, que também poderá ser acessado diretamente através de /sys. Há um número de subdiretórios que representam partes diferentes do kernel, mas os mais importantes, para nossos objetivos, são arch/conf, onde você editará sua configuração de kernel personalizado, e compile, que é a área de preparação onde seu kernel irá ser compilado. arch representa uma das arquiteturas suportadas pelo FreeBSD como i386, alpha, ou pc98 (uma ramo de desenvolvimento alternativo de hardware do PC, popular no Japão). Tudo que está dentro de um diretório de uma arquitetura específica diz respeito somente a esta arquitetura; o resto do código do FreeBSD é comum para todas as plataformas às quais ele poderá ser potencialmente convertido. Observe a organização lógica da estrutura de diretório, com cada dispositivo suportado, sistema de arquivos, e opções em seu próprio subdiretório. As versões do FreeBSD 5.X e superiores tem suporte para sparc64, e algumas outras arquiteturas em desenvolvimento.

Nota: Se não existir o diretório /usr/src/sys no seu sistema, então o fonte do kernel não foi instalado. A maneira mais fácil para fazer isso é rodando /stand/sysinstall como root, escolher Configure, Distributions, src, e então sys. Se você tiver alguma aversão ao sysinstall e possuir acesso a um FreeBSD CDROM ``oficiais'', então você poderá também instalar o fonte através da linha de comando:

# mount /cdrom
# mkdir -p /usr/src/sys
# ln -s /usr/src/sys /sys
# cat /cdrom/src/ssys.[a-d]* | tar -xzvf -

Depois, vá até o diretório arch/conf e copie o arquivo de configuração GENERIC com o nome que você quiser para o seu kernel. Por exemplo:

# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL

Tradicionalmente, este nome tem todas letras em maiúsculas, se você mantém múltiplas máquinas FreeBSD com diferentes hardware, é uma boa idéia nomeá-lo prefixando o hostname da sua máquina. Para a finalidade deste exemplo, será usado o nome MYKERNEL.

Dica: Guardar os arquivos de configuração do seu kernel diretamente abaixo do /usr/src pode ser uma má idéia. Se você tiver problemas poderá ser tentado a apenas apagar o /usr/src e iniciar tudo novamente. Cinco segundos depois disto feito, você poderá perceber que removeu o seu arquivo de configuração de kernel personalizado. Não edite diretamente o arquivo GENERIC, pois ele pode ser sobrescrito da próxima vez que você for atualizar a árvore do código fonte; suas modificações do kernel serão perdidas.

Você pode querer manter em outro local seu arquivo de configuração do kernel, e então criar um link simbólico deste arquivo para o diretório i386.

Por exemplo:

# cd /usr/src/sys/i386/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL   
# ln -s /root/kernels/MYKERNEL

Nota: Você deverá executar todos estes comandos sob a conta do root senão ocorrerão erros de permissão negada.

Agora, edite o MYKERNEL com seu editor de texto favorito. Se você for começar a configurar, provavelmente somente o vi esteja disponível, o qual é muito complexo para explicar aqui, mas é coberto em muitos livros indicados na bibliografia. Entretanto, o FreeBSD oferece um editor mais fácil chamado ee que, se você for um novato, deve ser o editor de sua escolha. Sinta-se livre para mudar as linhas de comentários, principalmente para identificar sua configuração e as alterações que diferenciam seu arquivo do GENERIC.

Se você tiver que compilar um kernel sobre SunOS™ ou qualquer outro Sistema Operacional BSD, muito destes arquivos serão muito familiar a você. Se você vier de outro sistema operacional tal como DOS, o arquivo de configuração GENERIC pode impressionar você, sendo assim siga as descrições do Arquivo de Configuração lentamente e com cuidado.

Nota: É importante você sempre verificar o arquivo /usr/src/UPDATING, antes de executar todas as etapas da atualização, No caso você pode sincronizar sua árvore de código com o código fonte do último projeto do FreeBSD. Neste arquivo todas as importantes alterações para atualiação do FreeBSD são digitadas. Ajuste sempre sua versão do código fonte do FreeBSD de acordo com /usr/src/UPDATING, pois estas notas são mais precisas para novas informações que o handbook.

Você deve agora compilar o código fonte do kernel. Estão aqui dois procedimentos que você pode usar para isto, e qual você usará, vai depender de como quer recompilar seu kernel, e a versão do FreeBSD que você está rodando.

Procedimento 1. Compilando um Kernel da Maneira ``Tradicional''

  1. Execute config(8) para gerar o código fonte do kernel.

    # /usr/sbin/config MYKERNEL
    
  2. Mude o diretório de configuração. Isto e mostrado após rodar o comando acima mencionado.

    # cd ../compile/MYKERNEL
    

    Para FreeBSD anterior a 5.0, usa-se preferivelmente:

    # cd ../../compile/MYKERNEL
    
  3. Compilando o kernel.

    # make depend
    # make
    
  4. Instalando o novo kernel.

    # make install
    

Procedimento 2. Compilando um Kernel da ``Nova'' maneira

  1. Mude de diretório para /usr/src.

    # cd /usr/src
    
  2. Compilando o kernel.

    # make buildkernel KERNCONF=MYKERNEL
    
  3. Instalando o novo kernel.

    # make installkernel KERNCONF=MYKERNEL
    

Nota: No FreeBSD 4.2 e anteriores troque KERNCONF= por KERNEL=. Após o 4.2-STABLE esta opção já foi atualizada, e antes de Fevereiro de 2001 o sistema não reconhece KERNCONF=.

Se você não atualizou seu código de alguma maneira (as formas possíveis incluem CVSup, CTM, ou anoncvs), então deve-se usar os comandos config, make depend, make, make install nesta sequência.

O novo kernel será copiado para o diretório do root como /kernel e o velho kernel será movido para /kernel.old. Agora, desligue o sistema e reinicie-o, para carregar seu novo kernel. Caso algo saia errado, há algumas instruções para resolver problemas no final deste capítulo. É interessante que você leia a seção de como recuperar o sistema caso seu novo kernel não carregue.

Nota: No FreeBSD 5.0, o kernel é instalados junto com os módulos em /boot/kernel, e os kernel velhos são colocados em /boot/kernel.old. Outros arquivos relacionados ao processo de carregamento, tal como o carregamento do sistema por meio do loader(8) e suas configurações são armazenadas também em /boot. Módulos personalizados de terceiros normalmente são colocados em /boot/modules, embora os usuários devam estar cientes que manter os módulos em sincronização com o kernel compilado é muito importante. Se os módulos pretendidos não rodarem com o kernel compilado, isso pode resultar em instabilidade ou inconformidades no sistema.

Nota: Se você adicionar qualquer dispositivo novo (tal como Placa de Som) e estiver rodando FreeBSD 4.X ou versões anteriores, pode ser necessário adicionar algum dispositivo de controle em seu diretório /dev antes que eles possam ser utilizados corretamente, Para mais informações, dê uma olhada na seção Criando dispositivos de controle posteriormente neste mesmo capítulo.

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.