4.3. Preparar Ficheiros para arranque pela Rede via TFTP

Se a sua máquina está ligada a uma rede local, pode ser capaz de a arrancar através da rede a partir de outra máquina, utilizando TFTP. Se tenciona iniciar a instalação do sistema a partir de outra máquina, será necessário colocar os ficheiros de arranque numa localização específica dessa máquina, e a máquina configurada para suportar o arranque da sua máquina especifica.

Precisa configurar o servidor TFTP, e para muitas máquinas, um servidor DHCP , ou um servidor BOOTP.

BOOTP é um protocolo IP que informa o computador do seu endereço IP e em que local da rede pode obter uma imagem de arranque. O DHCP (Dynamic Host Configuration Protocol) é mais flexível, compatível com extensões anteriores do BOOTP. Alguns sistemas apenas podem ser configurados via DHCP.

O Trivial File Transfer Protocol (TFTP) é utilizado para servir a imagem de arranque para o cliente. Teoricamente, qualquer servidor, em qualquer plataforma, que implemente estes protocolos, pode ser utilizado. Nos exemplos desta sessão, iremos disponibilizar comandos para for SunOS 4.x, SunOS 5.x (a.k.a. Solaris), e GNU/Linux.

4.3.1. Configurar o servidor BOOTP

Estão disponíveis dois servidores BOOTP para GNU/Linux. O primeiro é o CMU bootpd. O outro é na verdade um servidor DHCP: o ISC dhcpd. Em Debian GNU/Linux estes estão contidos respectivamente nos pacotes bootp e dhcp3-server.

Para utilizar o CMU bootpd, primeiro você tem de retirar o comentário (ou adicionar) da linha relevante em /etc/inetd.conf. Em Debian GNU/Linux, você pode executar update-inetd --enable bootps, para o fazer. No caso do seu servidor BOOTP não correr em Debian, a linha em questão deve parecer-se com:

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

Agora, você tem de criar um ficheiro /etc/bootptab. Este tem o mesmo tipo de formato familiar e críptico do bom velho BSD printcap, termcap, e disktab. Para mais informações veja a página do manual de bootptab. Para o CMU bootpd, você vai necessitar saber o endereço de hardware (MAC) do cliente. Aqui está um /etc/bootptab de exemplo:

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

Você tem de alterar pelo menos a opção “ha”, que especifica o endereço de hardware do cliente. A opção “bf” especifica o ficheiro que o cliente deve obter via TFTP; para mais detalhes veja a Secção 4.3.4, “Mover Imagens TFTP Para o Lugar”.

Por contraste, configurar BOOTP com ISC dhcpd é realmente fácil, porque trata os clientes BOOTP como casos moderadamente especiais de clientes DHCP. Algumas arquitecturas requerem uma configuração complexa para iniciarem clientes via BOOTP. Se o seu caso é um desses, leia a secção Secção 4.3.2, “Configurar um servidor DHCP”. Nesse caso, irá provavelmente ser capaz de conseguir com simplesmente adicionando a directiva allow bootp para o bloco de configuração para a subnet que contém o cliente, e reiniciar dhcpd com /etc/init.d/dhcpd3-server restart.

4.3.2. Configurar um servidor DHCP

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

option domain-name "example.com";
option domain-name-servers ns1.example.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 um servidor servername que executa todo o trabalho de servidor DHCP, de servidor TFTP e gateway de rede. Vai precisar quase de certeza de alterar as opções de domain-name, tal como o nome do servidor e o endereço de hardware do cliente. A opção filename deve ser o nome do ficheiro obtido via TFTP.

Após ter editado o ficheiro de configuração dhcpd, reinicie-o com /etc/init.d/dhcpd3-server restart.

4.3.3. Disponibilizar o Servidor TFTP

Para ter o servidor TFTP pronto a funcionar, deve primeiro certificar-se que é permitido executar tftpd. Usualmente, isto é permitido tendo algo como a seguinte linha em /etc/inetd.conf:

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

Os pacotes Debian em geral irão configurá-lo correctamente, por omissão, quando são instalados.

Nota

Historicamente os servidores TFTP utilizavam /tftpboot como directório para servir imagens. No entanto, os pacotes Debian GNU/Linux podem utilizar outros directórios para estarem de acordo com o Filesystem Hierarchy Standard. Por exemplo, tftpd-hpa por omissão utiliza /var/lib/tftpboot. Poderá ter de ajustar de acordo os exemplos de configuração nesta secção.

Procure em /etc/inetd.conf e lembre-se do directório que é utilizada como argumento do in.tftpd[3]; vai necessitar disso abaixo. Se teve de alterar o /etc/inetd.conf, terá de notificar o processo em execução inetd que o ficheiro foi alterado. Numa máquina Debian, execute /etc/init.d/inetd reload; noutras máquinas, procure o ID do processo de inetd, e execute kill -HUP inetd-pid.

4.3.4. Mover Imagens TFTP Para o Lugar

Em seguida, coloque a imagem de arranque do TFTP que necessita, conforme encontrada na Secção 4.2.1, “Onde Encontrar Imagens de Instalação”, no directório de imagem de arranque tftpd. Terá de fazer um link a partir desse ficheiro para o ficheiro que o tftpd irá utilizar para iniciar um cliente em particular. Infelizmente, o nome do ficheiro é determinado pelo cliente TFTP, e não existem standards sólidos.

4.3.4.1. Imagens TFTP DECstation

Para DECstations, existem ficheiros tftpimage para cada subarquitectura, que contém o kernel e o instalador num ficheiro. A convenção do nome é subarchitecture/netboot-boot.img. Copie o ficheiro tftpimage que quer utilizar para /tftpboot/tftpboot.img, se trabalhar com o exemplo de configurações BOOTP/DHCP descritas acima.

O firmware DECstation arranca por TFTP com o comando boot #/tftp, onde # é o número do dispositivo TurboChannel do qual vai iniciar. Na maioria das DECstation é “3”. Se servidor BOOTP/DHCP não fornecer o nome do ficheiro ou necessitar de passar parâmetros adicionais, podem ser adicionados com a seguinte sintaxe:

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

Algumas revisões de firmware DECstation mostram um problema relacionado com o arranque a partir da rede: a transferência começa, mas após algum tempo ela pára com um a.out err. Isto pode derivar de várias razões:

  1. O firmware não responde a pedidos ARP durante a transferência TFTP. Isto leva a um timeout e a transferência pára. A solução é adicionar o MAC address da placa de Ethernet na DECstation estaticamente para a tabela ARP do servidor TFTP. Isto é feito executando arp -s IP-address MAC-address como root na máquina que actua como servidor TFTP. O MAC-address da DECstation pode ser visto executando cnfg no prompt de DECstation firmware.

  2. O firmware tem um tamanho limite nos ficheiros que podem iniciar por TFTP.

Existem também revisões de firmware que não podem ser iniciadas via TFPT. Uma visão geral sobre as diferentes revisões podem ser encontradas nas páginas web NetBSD: http://www.netbsd.org/Ports/pmax/board-list.html#proms.



[3] O argumento -l permite que algumas versões do in.tftpd registem todos os pedidos aos logs de sistema; isto é útil para diagnosticar erros de arranque.