<chapt id="kernel">Debian e o kernel.

<sect id="non-debian-kernel">Posso instalar e compilar um kernel sem alguma
configuração específica para o Debian?

<p>Sim. Mas você terá que entender a política do Debian em relação aos cabeçalhos.

<p>As bibliotecas C do Debian são construídas com  as versões <em>estáveis</em>
mais recentes dos cabeçalhos do <strong>kernel</strong>.

<p>Por exemplo, a versão Debian-1.2 usava a versão 5.4.13 dos cabeçalhos.
Esta prática contrasta com os pacotes fonte do kernel Linux, distribuídos
em todos os sites de FTP, que usam até mesmo as mais recentes versões dos
cabeçalhos. Os cabeçalhos do kernel, distribuídos com os fontes do kernel,
estão localizados em  <tt>/usr/include/linux/include/</tt>.

<p>Se você precisa compilar um programa com os cabeçalhos do kernel
que são mais atuais do que aqueles providos por <package>libc6-dev</package>,
então você terá que adicionar <tt>-I/usr/src/linux/include/</tt> na sua
linha de comando quando estiver compilando. Isto veio em um ponto, por exemplo,
com o empacotamento do "automounter daemon" (<package>amd</package>).
Quando novos kernels mudaram algo em relação ao tratamento interno a NFS,
o <tt>amd</tt> precisou saber sobre eles. Isto necessitou a inclusão dos
mais recentes cabeçalhos do kernel.

<sect id="customkernel">Que ferramentas o Debian oferece para a construção
de kernels personalizados?

<p>Usuários que desejarem (ou precisarem) construir um kernel
personalizado são incentivados a baixar o pacote
<package>kernel-package</package>. Este pacote contém
os scripts para construir o pacote do kernel, e oferece a capacidade de
criar um pacote imagem do kernel somente rodando o comando
  <example>make-kpkg kernel_image</example>
no diretório de mais alto nível dos fontes do kernel.
Ajuda é obtida executando o comando
  <example>make-kpkg --help</example>
e através da página de manual <manref name="make-kpkg" section="1">.

<p>Usuários devem baixar separadamente o código fonte do kernel mais
recente (ou de seu kernel preferido) do seu repositório Linux favorito,
a menos que um pacote kernel-source-versão esteja disponível (onde "version"
significa a versão do kernel).

<p>Instruções detalhadas sobre o uso do pacote <package>kernel-package</package>
são dadas no arquivo <file>/usr/share/doc/kernel-package/README.gz</file>. Resumidamente,
a pessoa deve:

<list>
  <item>Desempacotar os fontes do kernel, e dar <tt>cd</tt> para o
    diretório recém-criado.
  <item>Modificar a configuração do kernel usando um destes comandos:
    <list>
      <item><tt>make config</tt>  (para uma interface tty uma-linha-de-cada-vez).
      <item><tt>make menuconfig</tt>  (para uma interface de menus baseada em ncurses).
        Observe que, para usar esta opção, o pacote <package>libncurses5-dev</package>
        deve estar instalado.
      <item><tt>make xconfig</tt>  (para uma interface X11).
        Usar esta opção requer que os pacotes relevantes ao X e ao Tcl/Tk
        sejam instalados.
    </list>
    Qualquer dos passos acima gera um novo <tt>.config</tt> 
    no diretório do fonte do kernel.
  <item>Execute o comando: <tt>make-kpkg -rev Custom.N kernel_image</tt>,
    onde N é um número de revisão designado pelo usuário.
    O novo arquivo Debian assim formado teria revisão Custom.1, por exemplo,
    <tt>kernel-image-2.2.14_Custom.1_i386.deb</tt>
    para o kernel Linux 2.2.14.
  <item>Instale o pacote criado.
    <list>
    <item>Rode <tt>dpkg --install /usr/src/kernel-image-VVV_Custom.N.deb</tt>
      para instalar o kernel propriamente dito.  O script de instalação irá:
      <list>
        <item>executar o boot loader, LILO (se estiver instalado),
        <item>instalar o kernel personalizado em /boot/vmlinuz_VVV-Custom.N, 
        e configurar as ligações simbólicas apropriadas ao kernel mais recente.
        <item>sugerir ao usuário que crie um disquete de inicialização.  Este
        disquete conterá apenas o kernel.  Veja <ref id="custombootdisk">.
      </list>
    <item>Para usar um boot loader secundário como o <package>grub</package> ou
      <package>loadlin</package>, copie essa imagem para outros lugares
      (por exemplo, para /boot/grub ou para uma partição <tt>MS-DOS</tt>).
  </list>
</list>

<!-- TODO: check out a new source of details, this README isn't too useful,
I'm told (joy) -->
<sect id="custombootdisk">Como faço um disquete de inicialização personalizado?

<p>Essa tarefa é muito facilitada pelo pacote Debian <package>boot-floppies</package>,
normalmente encontrado na seção <tt>admin</tt> do repositório FTP do Debian.
Scripts de shell desse pacote produzem disquetes de inicialização no formato
<tt>SYSLINUX</tt>. Esses disquetes são formatados como <tt>MS-DOS</tt>
cujos MBRs foram alterados para inicializarem o Linux diretamente
(ou qualquer outro sistema operacional que tenha sido definido no
arquivo syslinux.cfg do disquete). Outros scripts desse pacote produzem
discos root de emergência e podem até reproduzir os "base disks"
(os discos do sistema básico).

<p>Você achará mais informações sobre isto no arquivo
<tt>/usr/doc/boot-floppies/README</tt> após instalar o pacote
<package>boot-floppies</package>.

<sect id="modules">Que ferramentas especiais o Debian oferece para lidar
com módulos?

<p>O pacote Debian <package>modconf</package> fornece um script shell
(<tt>/usr/sbin/modconf</tt>) que pode ser usado para personalizar a
configuração  dos módulos. Este script apresenta uma interface baseada
em menus, requisitando ao usuário detalhes sobre os drivers de dispositivos
carregáveis de seu sistema. As respostas são usadas para personalizar o
arquivo <tt>/etc/modules.conf</tt> que lista "aliases" (apelidos), e outros
argumentos (que devem ser usados em conjunto com vários módulos) através de
arquivos em <tt>/etc/modules</tt> (que lista os módulos que devem ser carregados
na hora do boot).

<p>Como os (novos) arquivos Configure.help, que agora estão disponíveis
para auxiliar a construção de kernels personalizados, o pacote
<package>modconf</package> vem com uma série de arquivos de ajuda
(em <tt>/usr/lib/modules_help/</tt>) que fornecem informações detalhadas
sobre os argumentos apropriados para cada um dos módulos.

<sect id="removeoldkernel">Posso desinstalar um kernel antigo de forma segura? Como?

<p>Sim. O script <tt>kernel-image-NNN.prerm</tt> verifica se o kernel
que você está usando atualmente é o mesmo que você está querendo
desinstalar. Portanto, você pode remover pacotes de kernel
indesejáveis usando este comando:

<example>dpkg --purge --force-remove-essential kernel-image-NNN</example>

(claro, substitua "NNN" com sua versão de kernel e número de revisão)
