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.
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.
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.
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.
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}
Ative o servidor NFS adicionando esta linha ao /etc/rc.conf:
nfs_server_enable="YES"
Exporte o diretório raiz sem disco via NFS adicionando o seguinte ao /etc/exports:
/b -ro -alldirs -maproot=root
Inicie o servidor NFS:
#service nfsd start
Ative o inetd(8) adicionando a seguinte linha ao /etc/rc.conf:
inetd_enable="YES"
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
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.
Inicie o inetd(8):
#service inetd start
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= ao executar os comandos ${NFSROOTDIR}make installkernel e make installworld.
Teste que o servidor TFTP funciona e que pode baixar o gerenciador de boot que será obtido via PXE:
#tftp localhosttftp>get FreeBSD/install/boot/pxebootReceived 264951 bytes in 0.1 seconds
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 0Substitua 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.
Defina a senha de root no ambiente PXE para as máquinas clientes que serão inicializadas por PXE:
#chroot ${NFSROOTDIR}#passwd
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).
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.
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
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.
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.

| O cliente transmite uma mensagem |
| O servidor DHCP responde com as informações de endereço IP, |
| O cliente envia uma solicitação TFTP para o |
| O servidor TFTP responde e envia o |
| O cliente executa o |
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.1tftp>get FreeBSD/install/boot/pxebootReceived 264951 bytes in 0.1 seconds
As seções de BUGS do tftpd(8) e tftp(1) documenta algumas limitações com o TFTP.
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>.