31.8. Operação Diskless com PXE

Atualizado por Jean-François Dockès .
Reorganizado e aprimorado por Alex Dupre .

O Ambiente de execução de pré-inicialização da Intel® (PXE) permite que um sistema operacional inicialize pela rede. Por exemplo, um sistema FreeBSD pode inicializar através da rede e operar sem um disco local, usando sistemas de arquivos montados a partir de um servidor NFS. O suporte para PXE geralmente está disponível no BIOS. Para usar o PXE quando a máquina iniciar, selecione a opção Inicialização da rede na configuração do BIOS ou digite uma tecla de função durante a inicialização do sistema.

Para fornecer os arquivos necessários para um sistema operacional inicializar pela rede, uma configuração do PXE também requer o DHCP, TFTP configurado corretamente e Servidores NFS, onde:

Quando um computador PXE inicializa, ele recebe informações por meio do DHCP sobre onde obter o arquivo inicial do carregador de boot. Depois que o computador host recebe essa informação, ele faz o download do carregador de boot via TFTP e, em seguida, executa o carregador de boot. No FreeBSD, o arquivo do gerenciador de boot é o /boot/pxeboot. Depois que o /boot/pxeboot é executado, o kernel do FreeBSD é carregado e o resto da seqüência de inicialização do FreeBSD continua, como descrito em Capítulo 12, O processo de inicialização do FreeBSD.

Esta seção descreve como configurar estes serviços em um sistema FreeBSD para que outros sistemas possam inicializar o PXE a partir do FreeBSD. Consulte diskless(8) para obter maiores informações.

Cuidado:

Conforme descrito, o sistema que fornece esses serviços é inseguro. Ele deve ficar em uma área protegida de uma rede e não deve ser considerado confiável por outros hosts.

31.8.1. Configurando o ambiente PXE

Escrito por Craig Rodrigues .

As etapas mostradas nesta seção configuram os servidores internos de NFS e TFTP. A próxima seção demonstra como instalar e configurar o servidor DHCP. Neste exemplo, o diretório que conterá os arquivos usados pelos usuários do PXE é o /b/tftpboot/FreeBSD/install. É importante que este diretório exista e que o mesmo nome de diretório seja configurado no /etc/inetd.conf e no /usr/local/etc/dhcpd.conf.

Nota:

The command examples below assume use of the sh(1) shell. csh(1) and tcsh(1) users will need to start a sh(1) shell or adapt the commands to csh(1) syntax.

  1. Crie o diretório raiz que irá conter uma instalação do FreeBSD para ser montado por NFS:

    # export NFSROOTDIR=/b/tftpboot/FreeBSD/install
    # mkdir -p ${NFSROOTDIR}
  2. Ative o servidor NFS adicionando esta linha ao /etc/rc.conf:

    nfs_server_enable="YES"
  3. Exporte o diretório raiz sem disco via NFS adicionando o seguinte ao /etc/exports:

    /b -ro -alldirs -maproot=root
  4. Inicie o servidor NFS:

    # service nfsd start
  5. Ative o inetd(8) adicionando a seguinte linha ao /etc/rc.conf:

    inetd_enable="YES"
  6. Descomente a seguinte linha no /etc/inetd.conf certificando-se de que ela não comece com um símbolo #:

    tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /b/tftpboot

    Nota:

    Algumas versões do PXE exigem a versão TCP do TFTP. Neste caso, remova o comentário da segunda linha tftp que contém stream tcp.

  7. Inicie o inetd(8):

    # service inetd start
  8. Instale o sistema básico em ${NFSROOTDIR}, seja descompactando os arquivos oficiais ou recompilando o kernel do FreeBSD e o userland (consulte Seção 23.5, “Atualizando o FreeBSD a partir do código fonte” para instruções mais detalhadas, mas não esqueça de adicionar DESTDIR=${NFSROOTDIR} ao executar os comandos make installkernel e make installworld.

  9. Teste que o servidor TFTP funciona e que pode baixar o gerenciador de boot que será obtido via PXE:

    # tftp localhost
    tftp> get FreeBSD/install/boot/pxeboot
    Received 264951 bytes in 0.1 seconds
  10. Edite o ${NFSROOTDIR}/etc/fstab e crie uma entrada para montar o sistema de arquivos raiz por meio do NFS:

    # Device                                         Mountpoint    FSType   Options  Dump Pass
    myhost.example.com:/b/tftpboot/FreeBSD/install       /         nfs      ro        0    0

    Substitua myhost.example.com pelo nome do host ou pelo endereço IP do servidor NFS. Neste exemplo, o sistema de arquivos raiz é montado como somente leitura para evitar que os clientes do NFS excluam potencialmente o conteúdo do sistema de arquivos raiz.

  11. Defina a senha de root no ambiente PXE para as máquinas clientes que serão inicializadas por PXE:

    # chroot ${NFSROOTDIR}
    # passwd
  12. Se necessário, ative o login do root via ssh(1) para as máquinas clientes que estão inicializando por PXE editando o ${NFSROOTDIR}/etc/ssh/sshd_config e habilitando o PermitRootLogin. Esta opção está documentada em sshd_config(5).

  13. Execute qualquer outra customização necessária do ambiente PXE no ${NFSROOTDIR}. Estas customizações podem incluir coisas como instalar pacotes ou editar o arquivo de senha com o vipw(8).

Ao inicializar de um volume raiz NFS, o /etc/rc detecta a inicialização do NFS e executa o /etc/rc.initdiskless. Neste caso, o /etc e /var precisam ser sistemas de arquivos montados em memória para que estes diretórios sejam graváveis mas o diretório raiz NFS seja apenas de leitura:

# chroot ${NFSROOTDIR}
# mkdir -p conf/base
# tar -c -v -f conf/base/etc.cpio.gz --format cpio --gzip etc
# tar -c -v -f conf/base/var.cpio.gz --format cpio --gzip var

Quando o sistema inicializar, os sistemas de arquivos em memória para o /etc e o /var serão criados e montados e o conteúdo dos arquivos cpio.gz será copiado para eles. Por padrão, esses sistemas de arquivos têm uma capacidade máxima de 5 megabytes. Se seus arquivos não couberem, o que geralmente é o caso do /var quando pacotes binários foram instalados, solicite um tamanho maior colocando o número de setores de 512 bytes necessários (por exemplo, 5 megabytes é 10240 setores) nos arquivos ${NFSROOTDIR}/conf/base/etc/md_size e ${NFSROOTDIR}/conf/base/var/md_size para os sistemas de arquivos /etc e o /var respectivamente.

31.8.2. Configurando o servidor DHCP

O servidor DHCP não precisa ser a mesma máquina que o servidor TFTP e NFS, mas ele precisa estar acessível na rede.

O DHCP não faz parte do sistema básico do FreeBSD, mas pode ser instalado usando o port ou pacote net/isc-dhcp43-server.

Uma vez instalado, edite o arquivo de configuração, /usr/local/etc/dhcpd.conf. Configure as diretivas next-server, filename e root-path conforme mostrado neste exemplo:

subnet 192.168.0.0 netmask 255.255.255.0 {
   range 192.168.0.2 192.168.0.3 ;
   option subnet-mask 255.255.255.0 ;
   option routers 192.168.0.1 ;
   option broadcast-address 192.168.0.255 ;
   option domain-name-servers 192.168.35.35, 192.168.35.36 ;
   option domain-name "example.com";

   # IP address of TFTP server
   next-server 192.168.0.1 ;

   # path of boot loader obtained via tftp
   filename "FreeBSD/install/boot/pxeboot" ;

   # pxeboot boot loader will try to NFS mount this directory for root FS
   option root-path "192.168.0.1:/b/tftpboot/FreeBSD/install/" ;

}

A diretiva next-server é usada para especificar o endereço IP do servidor TFTP.

A diretiva filename define o caminho para o /boot/pxeboot. Um nome de arquivo relativo é usado, significando que /b/tftpboot não está incluído no caminho.

A diretiva root-path define o caminho para o sistema de arquivos raiz a ser montado por NFS.

Depois que as edições forem salvas, ative o DHCP no momento da inicialização adicionando a seguinte linha ao /etc/rc.conf:

dhcpd_enable="YES"

Então inicie o serviço DHCP:

# service isc-dhcpd start

31.8.3. Depurando problemas de PXE

Uma vez que todos os serviços estejam configurados e iniciados, os clientes de PXE devem poder carregar automaticamente o FreeBSD pela rede. Se um determinado cliente não conseguir se conectar, quando a máquina cliente inicializar, entre no menu de configuração da BIOS e confirme se ela está configurada para inicializar a partir da rede.

Esta seção descreve algumas dicas de solução de problemas para isolar a origem do problema de configuração, caso nenhum cliente seja capaz de inicializar o PXE.

  1. Use o pacote ou port net/wireshark para depurar o tráfego de rede envolvido durante o processo de inicialização do PXE, que está ilustrado no diagrama abaixo.

    Figura 31.1. Processo de inicialização PXE com o sistema de arquivos raiz montado por NFS
    Processo de inicialização PXE com o sistema de arquivos raiz montado por NFS

    1

    O cliente transmite uma mensagem DHCPDISCOVER.

    2

    O servidor DHCP responde com as informações de endereço IP, next-server, filename e root-path.

    3

    O cliente envia uma solicitação TFTP para o next-server, solicitando acesso ao filename.

    4

    O servidor TFTP responde e envia o filename para o cliente.

    5

    O cliente executa o filename, que é o pxeboot(8), o qual então carrega o kernel. Quando o kernel é executado, o sistema de arquivos raiz especificado por root-path é montado sobre o NFS.


  2. No servidor TFTP, leia o /var/log/xferlog para garantir que o pxeboot esteja sendo recuperado do local correto. Para testar esta configuração de exemplo:

    # tftp 192.168.0.1
    tftp> get FreeBSD/install/boot/pxeboot
    Received 264951 bytes in 0.1 seconds

    As seções de BUGS do tftpd(8) e tftp(1) documenta algumas limitações com o TFTP.

  3. Certifique-se de que o sistema de arquivos raiz possa ser montado via NFS. Para testar esta configuração de exemplo:

    # mount -t nfs 192.168.0.1:/b/tftpboot/FreeBSD/install /mnt

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.