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

Caso sua máquina esteja conectada a uma rede de área local, é possível inicia-la através da rede a partir de outra máquina usando o servidor TFTP. Se tem a intenção de iniciar o sistema de instalação para outra arquitetura, os arquivos de inicialização precisarão ser colocados em localizações específicas da máquina e a máquina configurada para suportar inicialização em 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 um computador de 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, compatível com versões mais antigas do BOOTP. Alguns sistemas somente podem ser configurados via DHCP.

O protocolo Trivial File Transfer Protocol (TFTP) é usado para servidor uma imagem de inicialização ao cliente. Teoricamente, qualquer servidor, em qualquer plataforma que implementa estes protocolos poderá ser usados. Nos exemplos desta seção, nós mostraremos comando para o SunOS 4.x, SunOS 5.x (a.k.a. Solaris), e para o GNU/Linux.

4.3.1. Configurando um servidor BOOTP

Existem dois servidores BOOTP disponíveis para o 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 dhcp3-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ê poderá executar update-inetd --enable bootps então o comando /etc/init.d/inetd reload para fazer isto. Apenas para o caso de seu servidor BOOTP não estar “rodando” Debian, a linha em questão deveria se parecer com:

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

Agora, você deverá criar um arquivo /etc/bootptab. Este terá a mesma quantidade de formato críptico e familiar como o bom e antigo printcap do BSD, termcap, e disktab. 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ê pelo menos precisará mudar 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.3.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 causa que ele trata clientes BOOTP de uma forma especial como clientes DHCP. Algumas arquiteturas requerem uma configuração complexa para a inicialização dos clientes via BOOTP. Caso a sua seja uma destas, leia a seção Seção 4.3.2, “Configurando um servidor DHCP”. Neste caso, você será provavelmente capaz de adicionar a diretiva allow bootp no bloco de configuração de sub-rede de seu cliente e reiniciar o dhcpd com o comando /etc/init.d/dhcpd3-server restart.

4.3.2. Configurando um servidor DHCP

Um servidor DHCP livre é o ISC dhcpd. Para o Debian GNU/Linux, o pacote dhcp3-server é recomendado. Aqui está um exemplo de configuração para este pacote (veja /etc/dhcp3/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/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/dhcpd3-server restart.

4.3.3. Ativando o servidor TFTP

Para ter um servidor TFTP funcionando, primeiro deverá ter certeza que o tftpd está ativado. Ele normalmente é ativado através da seguinte linha no seu arquivo /etc/inetd.conf:

tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd /tftpboot

Os pacotes da Debian geralmente configurarão isto corretamente por padrão quando forem instalados.

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 a Filesystem Hierarchy Standard (Padrão de Hierarquia de Diretórios). Por exemplo, tftpd-hpa por padrão usa /var/lib/tftpboot. Você pode ter que ajustar os exemplos de configuração nesta seção.

Olhe em /etc/inetd.conf e lembre-se do diretório que foi usado como argumento do in.tftpd[3]; você precisará disto abaixo. Se você tiver que mudar o /etc/inetd.conf, você terá que notificar o processo em execução inetd de que o arquivo foi modificado. Em máquinas Debian, execute /etc/init.d/inetd reload; em outras máquinas, encontre o ID do processo do inetd e execute o comando kill -HUP inetd-pid.

4.3.4. Movendo as imagens TFTP para o Local

Como próximo passo, coloque a imagem de inicialização TFTP que precisa, como encontrada no Seção 4.2.1, “Aonde achar 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 em cliente em particular. Infelizmente, o nome do arquivo é determinado pelo cliente TFTP e não existem padrões rígidos.

4.3.4.1. Imagens TFTP do DECstation

Para as DECstations, existem arquivos tftpimage para cada sub-arquitetura, que contém ambos os kernels e o programa de instalação em um arquivo. A convenção de nomes é subarquitetura/netboot-boot.img. Copie o arquivo tftpimage que deseja usar para /tftpboot/tftpboot.img caso você utilize o exemplo BOOTP/DHCP descritos acima.

A firmware do DECstation é inicializada pelo TFTP com o comando boot#/tftp, onde # é o número do dispositivo TurboChannel que será inicializado. Na maioria das DECstations este número é o “3”. Se o servidor BOOTP/DHCP não fornecer o nome de arquivo ou você precisar passar parâmetros adicionais, eles poderão ser opcionalmente adicionados com a seguinte sintaxe:

boot #/tftp/filename param1=value1 param2=value2 ...

Diversas revisões da firmware da DECstation mostram um problema relacionado com a inicialização via rede: a transferência inicia, mas após algum tempo ela para com o erro a.out err. Isto pode ter diversas razões:

  1. A firmware não responde a uma requisição ARP durante uma transferência TFTP. Isto leva a um timeout de ARP e a transferência é interrompida. A solução é adicionar o endereço MAC da placa ethernet na DECstation estaticamente para a tabela ARP do servidor de TFTP. Isto é feito rodando arp -s IP-address MAC-address como root na máquina que atua como servidor TFTP. O endereço MAC da DECstation pode ser lido entrando com o comando cnfg no aviso da firmware da DECstation.

  2. A firmware tem o limite de tamanho nos arquivos que podem ser inicializados através do TFTP.

Existem também revisões de firmware que não permitem inicializações através do TFTP. Uma visão sobre as diferentes revisões de firmware podem ser encontradas nas páginas web do NetBSD: http://www.netbsd.org/Ports/pmax/board-list.html#proms.



[3] O argumento -l habilita algumas versões do in.tftpd a registrar todas as requisições para os logs do sistema; isto é útil para diagnosticar erros de inicialização.