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

Caso sua máquina esteja conectada a uma rede de área local, você poderá ser capaz de 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 máquinas CATS um servidor BOOTP , ou um servidor RARP , ou um servidor DHCP.

O Reverse Address Resolution Protocol (RARP) é o único método para dizer aos clientes qual endereço IP usar para si mesmo. Outro método é usar o protocolo 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.6.1. Configurando um servidor RARP

Para configurar o RARP, você precisará saber o endereço ethernet do cliente (e.g. o MAC address). Se não souber isto, você poderá inicie no modo "Rescue" (e.g., a partir do disquete de recuperação) e use o comando /sbin/ifconfig eth0.

Em sistemas usando o kernel do Linux 2.2.x, você precisará popular a tabela RARP do kernel. Para fazer isto execute os seguintes comandos:

/sbin/rarp -s client-hostname client-enet-addr

/usr/sbin/arp -s client-ip client-enet-addr

Você obterá

SIOCSRARP: Invalid argument

então provavelmente precisará carregar o módulo RARP do kernel ou senão recompilar o kernel para suportar RARP. Tente modprobe rarp e então tente o comando rarp denovo.

Em sistemas usando um kernel do Linux 2.4.x, não existe módulo RARP e você deverá ao invés disso usar o programa rarpd. O processo é idêntico ao usado sob o SunOS do seguinte parágrafo.

Sob o SunOS, você precisará ter certeza que o endereço de hardware Etehrent para o cliente está listado no banco de dados "ethers" (ou no arquivo /etc/ethers ou via NIS/NIS+) e no banco de dados "hosts". Então você precisará iniciar o daemon RARP. No SunOS 4, digite o comando (como root): /usr/etc/rarpd -a; no SunOS 5, use /usr/sbin/rarpd -a.

4.6.2. Configurando um servidor BOOTP

Existem dois servidores BOOTP disponívies para o GNU/Linux o CMU bootpd e o outro atualmente é o servidor DHCP, ISC dhcpd, que estão disponíveis nos pacotes bootp e dhcp na Debian GNU/Linux.

Para usar o CMU bootpd você deverá primeiro descomentar (ou adicionar) a linha relevante em /etc/inetd.conf. Na Debian GNU/Linux, você poderá executar update-inetd --enable bootps então o comando /etc/init.d/inetd reload para fazer isto. Em todo caso, a linha em questão deverá 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 criptico 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 Secção 4.6.5, “Mover 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 Secção 4.6.3, “Configurando um servidor DHCP”. Caso contrário, você será provavelmente capaz de adicionar a diretiva allow bootp no bloco de configuraçào de sub-rede de seu cliente e reiniciar o servidor dhcp dhcpd com o comando /etc/init.d/dhcpd restart.

4.6.3. Configurando um servidor DHCP

Quando este documento foi escrito, existia somente um servidor DHCP que é software livre, seu nome é ISC dhcpd. Na Debian GNU/Linux, ele está disponível no pacote dhcp. Aqui está um modelo de configuração deste pacote (normalmente /etc/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 somente um servidor "servername" que faz todo o trabalho do DHCP, servidor, 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/dhcpd restart.

4.6.3.1. Inicialização via PXE

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


option domain-name "example.com";

default-lease-time 6048;
max-lease-time 604800;

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 subnet-mask 255.255.255.0;
  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;
}

host tftpserver {
# tftp server ip address
  fixed-address 192.168.1.90;
# tftp server hardware address
  hardware ethernet 01:23:45:67:89:AB;
}

group {
 next-server 192.168.1.3;
 host tftpclient {
# tftp client hardware address
  hardware ethernet  00:10:DC:27:6C:15;
  filename "/tftpboot/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 Secção 4.6.5, “Mover as imagens TFTp para o Local” abaixo).

4.6.4. Ativando o servidor TFTP

Para ter o servidor TFTP pronto, você terá primeiro que ter certeza que o tftpd está ativado. Ele normalmente é ativado tendo a seguinte linha no seu arquivo /etc/inetd.conf:


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

Olhe neste arquivo e lembre-se do diretório que é usado como argumento para o in.tftpd; você irá precisa dele mais abaixo. O argumento -l permite que alguns tipos de versões do in.tftpd registrem todas as requisições para os logs do sistema; isto é mais útil para diagnosticar erros de inicialização. 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 (para a potato/2.2 e sistemas mais novos use /etc/init.d/inetd reload); em outras máquinas, encontre o ID do processo do inetd e execute o comando kill -HUP inetd-pid.

Para usar o método Pre-boot Execution Environment (PXE) na inicialização TFTP, você somente precisará de um servidor TFTP com o suporte a tsize. Em um servidor Debian GNU/Linux o tftp-hpa se qualifica.

4.6.5. Mover as imagens TFTp para o Local

Como próximo passo, coloque a imagem de inicialização TFTP que precisa, como encontrada no Secção 4.2.3, “Onde encontrar os arquivos de Instalação” no diretório de imagens de inicialização do tftpd. Geralmente este diretório será /tftpboot. Você tera 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 client e TFTP e não existem padrões rígidos.

Freqüentemente, o arquivo que o cliente TFTP irá procurar é client-ip-in-hexclient-architecture. Para computar client-ip-in-hex, pegue cada byte do endereço IP do cliente e transforme-o em notação hexadecimal. Se tiver uma máquina por perto com o programa bc, você poderá usa-lo. Primeiro digite o comando obase=16 para ajustar a base para hex, então entre com componentes individuais do IP do cliente um de cada vez. Como em client-arquitetura, tente alguns valores.

Para a inicialização usando o PXE, você poderá usar o gerenciador de inicialização incluído com o syslinux: pxelinux.0. O gerenciador de partida deverá ser copiado na pasta /tftpboot. Então crie um subdiretório dentro de /tftpboot com o nome /tftpboot/pxelinux.cfg e dentro daquele diretório crie um arquivo texto chamado default. Aqui está um exemplo do conteúdo do arquivo default:


default lanlinux
prompt 1

label lanlinux
  kernel tftpboot.img
  append load initrd=root.bin devfs=nomount

devfs=nomount é importante, porque sem ele você poderá ter problemas durante a montagem do sistema de arquivos root.bin assim que o kernel inicializar.

Finalmente, copie o arquivo tftpboot.img e root.bin do arquivo ftp da Debian para a pasta /tftpboot, onde o gerenciador de partida procurará por eles.

4.6.6. Instalação via TFTP em sistemas com pouca memória

Em alguns sistemas, o disco RAM de instalação padrão, combinado com os requerimentos de memória da imagem de inicialização do TFTP, não cabem na memória. Neste caso, você ainda poderá instalar usando o TFTP, você terá que ir através do passo adicional de montagem do sistema de arquivos raíz via NFS pela rede também. Este tipo de configuração também é apropriada para clientes sem discos (diskless) ou sem dados (dataless).

Primeiro, siga todos os passos acima descritos em Secção 4.6, “Preparando os arquivos para inicialização via rede usando TFTP”.

  1. Copie a imagem do kernel do Linux para seu servidor TFTP usando a imagem a.out para a arquitetura que estiver inicializando.

  2. Descompacte o arquivo raíz tar em seu servidor NFS (pode ser o mesmo sistema que seu servidor TFTP):

    
    # cd /tftpboot
    # tar xvzf root.tar.gz
    
    

    Tenha certeza de utilizar o comando tar da GNU (ao invés de outros programas, como o do SunOS, que manipula os dispositivos de forma incorreta como texto plano).

  3. Exporte seu diretório /tftpboot/debian-sparc-root com acesso root para seus clientes. E.g., adicione a seguinte linha ao seu arquivo /etc/exports (sintaxe do GNU/Linux, deverá ser similar no SunOS):

    
    /tftpboot/debian-sparc-root cliente(rw,no_root_squash)
    
    

    NOTA: "cliente" é o nome de estação ou endereço IP reconhecido pelo servidor para o sistema que deseja inicializar.

  4. Crie um link simbólico do endereço IP do seu cliente em notação pontuada para o arquivo debian-sparc-root no diretório /tftpboot directory. Por exemplo, caso o endereço IP do cliente seja 192.168.1.3, faça

    
    # ln -s debian-sparc-root 192.168.1.3
    
    

4.6.7. Instalando com o TFTP e NFS root

A instalação com TFTP e NFS raíz é similar a Secção 4.6.6, “Instalação via TFTP em sistemas com pouca memória” porque você não precisará carregar o disco RAM mais mas inicializará através do seu novo sistema de arquivos NFS criado. Você precisará então substituir o link simbólico para a imagem tftpboot por um link simbólico apontando para uma imagem de kernel (por exemplo, linux-a.out).

O RARP/TFTP requer que todos os daemons estejam sendo executados no mesmo servidor (a estação de trabalho que estiver enviando requisições TFTP de volta para o servidor que respondeu a requisição RARP anterior).