31.8. Operação Diskless com PXE
Anterior | Capítulo 31. Rede Avançada | Próxima

## 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:

- Parâmetros iniciais, como endereço de IP, nome e localização do arquivo de inicialização executável, nome do servidor e caminho do root são obtidos do servidor DHCP.

- O arquivo do carregador do sistema operacional é inicializado usando TFTP.

- Os sistemas de arquivos são carregados usando o NFS.

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`.

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

   | O cliente transmite uma mensagem `DHCPDISCOVER`.
   | O servidor DHCP responde com as informações de endereço IP, `next-server`, `filename` e `root-path`.
   | O cliente envia uma solicitação TFTP para o `next-server`, solicitando acesso ao `filename`.
   | O servidor TFTP responde e envia o `filename` para o cliente.
   | 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

Anterior | Acima | Próxima
31.7. Agregação de links e failover | Principal | 31.9. IPv6

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>.