4.5. Preparando os arquivos para inicialização via rede usando TFTP

Caso sua máquina esteja conectada a uma rede local, é possível iniciá-la através da rede a partir de outra máquina usando o servidor TFTP. Se você tem a intenção de iniciar o sistema de instalação a partir de outra máquina, os arquivos de inicialização precisarão ser colocados em locais específicos naquela máquina, que precisará ser configurada para oferecer suporte à inicialização da sua máquina específica.

Você precisará configurar um servidor TFTP e, para muitas máquinas, um servidor DHCP, ou um servidor BOOTP.

O BOOTP é um protocolo IP que informa a um computador seu endereço IP e onde na rede será obtida a imagem de inicialização. O DHCP (Dynamic Host Configuration Protocol) é uma extensão mais flexível e retrocompatível do BOOTP. Alguns sistemas só podem ser configurados via DHCP.

O protocolo de Transferência Trivial de Arquivo (TFTP — Trivial File Transfer Protocol) é usado para servir uma imagem de inicialização ao cliente. Teoricamente, qualquer servidor, em qualquer plataforma que implementa estes protocolos, poderá ser usado. Nos exemplos desta seção, nós mostraremos comandos para o SunOS 4.x, SunOS 5.x (também conhecido como Solaris) e para o GNU/Linux.

[Nota] Nota

Para um servidor Debian GNU/Linux nós recomendados o pacote tftpd-hpa. Ele é escrito pelo mesmo autor do carregador de inicialização syslinux e portanto é menos provável que cause problemas. Uma boa alternativa é o pacote atftpd.

4.5.1. Configurando um servidor DHCP

Um servidor DHCP livre é o ISC dhcpd. Para o Debian GNU/Linux, o pacote isc-dhcp-server é recomendado. Aqui está um exemplo de configuração para este pacote (veja /etc/dhcp/dhcpd.conf):

option domain-name "exemplo.com";
option domain-name-servers ns1.exemplo.com;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
server-name "servername";

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.253;
  option routers 192.168.1.1;
}

host clientname {
  filename "/tftpboot.img";
  server-name "servername";
  next-server servername;
  hardware ethernet 01:23:45:67:89:AB;
  fixed-address 192.168.1.90;
}

Neste exemplo, existe somente um servidor servername que faz todo o trabalho do servidor DHCP, servidor TFTP e gateway de rede. Você precisará modificar as opções domain-name assim como o nome do servidor e endereço de hardware do cliente. A opção filename deve ter o nome do arquivo que será baixado via TFTP.

Após editar o arquivo de configuração dhcpd, reinice-o com /etc/init.d/isc-dhcp-server restart.

4.5.1.1. Habilitando a inicialização através de PXE no servidor DHCP

Aqui está outro exemplo para o dhcp.conf usando o método Pre-boot Execution Environment (PXE) do TFTP.

option domain-name "exemplo.com";

default-lease-time 600;
max-lease-time 7200;

allow booting;
allow bootp;

# The next paragraph needs to be modified to fit your case
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.253;
  option broadcast-address 192.168.1.255;
# the gateway address which can be different
# (access to the internet for instance)
  option routers 192.168.1.1;
# indicate the dns you want to use
  option domain-name-servers 192.168.1.3;
}

group {
  next-server 192.168.1.3;
  host tftpclient {
# tftp client hardware address
  hardware ethernet  00:10:DC:27:6C:15;
  filename "pxelinux.0";
 }
}

Note que para a inicialização via PXE, o nome do arquivo do cliente pxelinux.0 é o gerenciador de partida, e não a imagem do kernel (veja Seção 4.5.4, “Movendo as imagens TFTP para o local” abaixo).

4.5.2. Configurando um servidor BOOTP

Há dois servidores BOOTP disponíveis para GNU/Linux. O primeiro é o CMU bootpd. O outro é, na verdade, um servidor DHCP: ISC dhcpd. No Debian GNU/Linux eles estão disponíveis nos pacotes bootp e isc-dhcp-server respectivamente.

Para usar o CMU bootpd você deverá primeiro descomentar (ou adicionar) a linha relevante em /etc/inetd.conf. No Debian GNU/Linux, você pode executar update-inetd --enable bootps e depois executar /etc/init.d/inetd reload. Apenas para o caso de seu servidor BOOTP não estar sendo executado no Debian, a linha em questão deveria ser parecida com:

bootps  dgram  udp  wait  root  /usr/sbin/bootpd  bootpd -i -t 120

Agora, você deverá criar um arquivo /etc/bootptab. Ele terá o mesmo tipo de formato criptográfico e familiar dos bons e velhos arquivos printcap, termcap e disktab do BSD. Veja a página de manual do bootptab para mais informações. Para o CMU bootpd você precisará conhecer o endereço de hardware (MAC) do cliente. Aqui está um exemplo de arquivo /etc/bootptab:

client:\
  hd=/tftpboot:\
  bf=tftpboot.img:\
  ip=192.168.1.90:\
  sm=255.255.255.0:\
  sa=192.168.1.1:\
  ha=0123456789AB:

Você precisará mudar, no mínimo, a opção ha, que especifica o endereço de hardware do cliente. A opção bf especifica o arquivo que o cliente deverá baixar via TFTP; veja Seção 4.5.4, “Movendo as imagens TFTP para o local” para mais detalhes.

Em contraste, a configuração de um BOOTP com o ISC dhcpd é realmente fácil, por que ele trata clientes BOOTP como casos moderamente especiais de clientes DHCP. Algumas arquiteturas requerem uma configuração complexa para a inicialização de clientes via BOOTP. Caso a sua seja uma destas, leia a seção Seção 4.5.1, “Configurando um servidor DHCP”. Caso contrário, você provavelmente será capaz de adicionar a diretiva allow bootp no bloco de configuração de sub-rede contendo o seu cliente em /etc/dhcp/dhcpd.conf e reiniciar o dhcpd com o comando /etc/init.d/isc-dhcp-server restart.

4.5.3. Habilitando o servidor TFTP

Para ter um servidor TFTP funcionando, primeiro você deverá certificar-se de que o tftpd está habilitado.

No caso do tftpd-hpa há duas formas de executar o serviço. Uma é iniciá-lo sob demanda através do daemon inetd do sistema, a outra é configurá-lo para ser executado como um daemon independente. Qual dos dois métodos será usado é definido quando o pacote é instalado e pode ser modificado reconfigurando-o.

[Nota] Nota

Historicamente, servidores TFTP usavam /tftpboot como diretório para servir imagens. No entanto, pacotes Debian GNU/Linux podem usar outros diretórios para serem compatíveis com o Filesystem Hierarchy Standard (Padrão de Hierarquia de Sistemas de Arquivos). Por exemplo, o tftpd-hpa por padrão usa /srv/tftp. Você pode ter que ajustar os exemplos de configuração apresentados nesta seção.

Todas as alternativas in.tftpd disponíveis no Debian deveriam, por padrão, registrar nos logs do sistema todas as requisições TFTP. Algumas delas dão suporte ao argumento -v para aumentar o nível de detalhes (verbose). É recomendado verificar estas mensagens de log em caso de problemas de inicialização pois elas são um bom ponto de partida para diagnosticar a causa dos erros.

4.5.4. Movendo as imagens TFTP para o local

Como próximo passo, coloque a imagem de inicialização TFTP que você precisa, como encontrada no Seção 4.2.1, “Onde encontrar as imagens de instalação” no diretório de imagens de inicialização do tftpd. Você pode ter que fazer um link deste arquivo para o arquivo que o tftpd usará para inicializar um cliente em particular. Infelizmente, o nome do arquivo é determinado pelo cliente TFTP e não existem padrões rígidos.

Para a inicialização usando o PXE, tudo que você precisa já está configurado no arquivo netboot/netboot.tar.gz. Simplesmente descompacte este arquivo no diretório de imagem de inicialização do tftpd. Certifique-se de que seu servidor DHCP está configurado para passar o arquivo pxelinux.0 para o tftpd como o nome de arquivo para inicialização.