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 localhost
tftp>get FreeBSD/install/boot/pxeboot
Received 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 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.
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-server192.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.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.
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>.