Preboot Execution Environment (Português)

Status de tradução:
Esse artigo é uma tradução de
Preboot Execution Environment
. Data da última tradução: 2020-06-23. Você pode ajudar a sincronizar a tradução, se houver
alterações
na versão em inglês.
Artigos relacionados
Sistema sem disco
Do
Wikipédia
:
O Ambiente de Pré-execução (PXE ou "pixie", ambos do inglês: Preboot eXecution Environment) é um ambiente para inicializar computadores usando a interface da placa de rede sem a dependência da disponibilidade de dispositivos de armazenamento (como disco rígidos) ou algum sistema operacional instalado.
Neste guia, o PXE é usado para inicializar a mídia de instalação com uma opção-rom apropriada que ofereça suporte ao PXE no destino. Isso funciona bem quando você já possui um servidor configurado.
Preparação
Obtenha a mídia de instalação oficial mais recente da
página de instalação
.
Em seguida, monte a imagem:
# mkdir -p /mnt/archiso
# mount -o loop,ro archlinux-
data_lançamento
-x86_64.iso /mnt/archiso
sendo
data_lançamento
a data de lançamento no nome do arquivo ISO como, por exemplo,
2020.03.01
.
Configuração do servidor
Você precisará configurar um DHCP (para atribuir endereços e anunciar a configuração),
TFTP
(para transferir pxelinux, kernel e initramfs) e um dos serviços para transferência do sistema de arquivos raiz:
servidor HTTP
, NFS ou NBD.
No momento, o Arch ISO possui suporte apenas à inicialização PXE no estilo do BIOS. Veja
FS#50188
para mais informações.
Arch Netboot
possui suporte a inicialização no estilo UEFI se você precisar. Porém, o resto dessa página tem foco na ISO.
Rede
Ative sua interface de rede cabeada e atribua-lhe um endereço adequado para sua rede.
# ip link set eth0 up
# ip addr add 192.168.0.1/24 dev eth0
DHCP + TFTP
Você precisará de um servidor DHCP e TFTP para configurar a rede no destino da instalação e facilitar a transferência de arquivos entre o servidor PXE e o cliente; O
dnsmasq
faz as duas coisas e é extremamente fácil de configurar.
Instale
o pacote
dnsmasq
.
Configure o
dnsmasq
:
# /etc/dnsmasq.conf
port=0
interface=eth0
bind-interfaces
dhcp-range=192.168.0.50,192.168.0.150,12h
dhcp-boot=/arch/boot/syslinux/lpxelinux.0
dhcp-option-force=209,boot/syslinux/archiso.cfg
dhcp-option-force=210,/arch/
dhcp-option-force=66,192.168.0.1
enable-tftp
tftp-root=/mnt/archiso
Inicie
dnsmasq.service
.
Transferindo o sistema de arquivos raiz do archiso
Graças aos ganchos de initcpio
archiso_pxe_http
,
archiso_pxe_nfs
e
archiso_pxe_nbd
no
archiso
, é possível inicializar usando HTTP, NFS ou NBD. O tempo de inicialização é aproximadamente o mesmo nos três métodos, mas o método HTTP permite assistir a um estado de download do airootfs.sfs em porcentagens.
HTTP
Entre todas as alternativas, o darkhttpd é de longe o mais trivial de configurar (e o mais leve).
Primeiro,
instale
o pacote
darkhttpd
.
Então, inicie o
darkhttpd
usando
/mnt/archiso
como raiz de documentos:
# darkhttpd /mnt/archiso
darkhttpd/1.8, copyright (c) 2003-2011 Emil Mikulic.
listening on: http://0.0.0.0:80/
Atenção
É importante que o servidor esteja executando na porta
80
. Se você iniciar
darkhttpd
sem acesso root, o padrão será
8080
. O cliente tentará acessar a porta 80 e a inicialização falhará.
NFS
Você precisará configurar um
servidor NFS
com uma exportação na raiz da mídia de instalação montada, que seria
/mnt/archiso
caso você tenha seguido
#Preparação
. Depois de configurar o servidor, adicione a seguinte linha ao seu arquivo
/etc/exports
:
/etc/exports
/mnt/archiso 192.168.0.0/24(ro,no_subtree_check)
Se o servidor já estiver em execução, reexporte os sistemas de arquivos com
exportfs -r -a -v
.
As configurações padrão no instalador esperam encontrar o NFS em
/run/archiso/bootmnt
, então você precisará editar as opções de inicialização. Para fazer isso, pressione Tab na opção apropriada do menu de inicialização e edite a opção
archiso_nfs_srv
de acordo:
archiso_nfs_srv=${pxeserver}:/mnt/archiso
Alternativamente, você pode usar
/run/archiso/bootmnt
para todo o processo.
Após o carregamento do kernel, a imagem de inicialização do Arch copiará o sistema de arquivos raiz via NFS para o host de inicialização. Isso pode demorar um pouco. Quando isso for concluído, você deverá ter um sistema em execução.
NBD
Instale
o pacote
nbd
e configure-o:
/etc/nbd-server/config
[generic]
[archiso]
    readonly = true
    exportname = /srv/archlinux-
data_lançamento
-x86_64.iso
sendo
data_lançamento
a data de lançamento no nome do arquivo ISO como, por exemplo,
2020.03.01
.
Inicie
nbd.service
.
Servidor PXE existente
Se você já possui um servidor PXE com uma configuração de sistema
PXELINUX
(por exemplo, uma combinação de DHCP e
TFTP
), pode adicionar os seguintes itens de menu ao seu arquivo
/tftpboot/pxelinux.cfg/default
para inicializar o Arch através do seu método preferido:
LABEL archlinux
        MENU LABEL Arch Linux x86_64
        LINUX
/caminho/extração/Arch/ISO
/arch/boot/x86_64/vmlinuz
        INITRD
/caminho/extração/Arch/ISO
/arch/boot/intel_ucode.img,
/caminho/extração/Arch/ISO
/arch/boot/amd_ucode.img,
/caminho/extração/Arch/ISO
/arch/boot/x86_64/archiso.img
        APPEND archisobasedir=arch archiso_http_srv=
http://servidorhttp/caminho/extração/Arch/ISO
/
        SYSAPPEND 3
        TEXT HELP
        Arch Linux 2018.09.01 x86_64
        ENDTEXT
Você pode substituir
archiso_http_srv
por
archiso_nfs_srv
para NFS ou
archiso_nbd_srv
para NBD (consulte exemplos de uso no arquivo
arch/boot/syslinux/archiso_pxe.cfg
que resido na ISO do Arch). Seja qual for o método escolhido, você deve passar o parâmetro
ip=
para instruir o kernel a abrir a interface de rede antes de tentar montar a mídia de instalação na rede. É necessário passar
BOOTIF=
quando houver várias interfaces com fio no lado do cliente e/ou você desejar que o resolv.conf já esteja configurado no archiso inicializado. Você pode usar
máscara de sysappend
3 (que é 1+2) para passar esses parâmetros automaticamente. Para obter os parâmetros de inicialização disponíveis, consulte
README.bootparams
.
Instalação
Para esta parte, você precisará descobrir como informar o cliente para tentar uma inicialização do PXE; no canto da tela, junto com as mensagens normais de postagem, geralmente haverá alguma dica sobre qual tecla pressionar para tentar inicializar o PXE primeiro. Em um IBM x3650, o
F12
exibe um menu de inicialização, cuja primeira opção é
Network
; em um Dell PE 1950/2950, pressionar
F12
entra na inicialização do PXE diretamente.
Inicialização
Examinar
journald
no servidor PXE fornecerá algumas informações adicionais sobre o que exatamente está acontecendo durante os estágios iniciais do processo de inicialização do PXE:
# journalctl -u dnsmasq.service -f
dnsmasq-dhcp[2544]: DHCPDISCOVER(eth1) 00:1a:64:6a:a2:4d 
dnsmasq-dhcp[2544]: DHCPOFFER(eth1) 192.168.0.110 00:1a:64:6a:a2:4d 
dnsmasq-dhcp[2544]: DHCPREQUEST(eth1) 192.168.0.110 00:1a:64:6a:a2:4d 
dnsmasq-dhcp[2544]: DHCPACK(eth1) 192.168.0.110 00:1a:64:6a:a2:4d 
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/pxelinux.0 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/whichsys.c32 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe_choose.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/ifcpu64.c32 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe_both_inc.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_head.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe32.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_pxe64.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/archiso_tail.cfg to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/vesamenu.c32 to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/syslinux/splash.png to 192.168.0.110
Depois de carregar o
pxelinux.0
e o
archiso.cfg
via TFTP, esperamos que você seja apresentado a um menu de inicialização
syslinux
com várias opções, onde é possível selecionar
Boot Arch Linux (x86_64) (HTTP)
.
Em seguida, o kernel e o initramfs (apropriados para a arquitetura que você selecionou) serão transferidos, novamente via TFTP:
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/x86_64/vmlinuz to 192.168.0.110
dnsmasq-tftp[2544]: sent /mnt/archiso/arch/boot/x86_64/archiso.img to 192.168.0.110
Se tudo correr bem, você deverá ver a atividade no darkhttpd vinda do destino PXE; nesse ponto, o kernel seria carregado no destino PXE e no init:
1348347586 192.168.0.110 "GET /arch/aitab" 200 678 "" "curl/7.27.0"
1348347587 192.168.0.110 "GET /arch/x86_64/root-image.fs.sfs" 200 107860206 "" "curl/7.27.0"
1348347588 192.168.0.110 "GET /arch/x86_64/usr-lib-modules.fs.sfs" 200 36819181 "" "curl/7.27.0"
1348347588 192.168.0.110 "GET /arch/any/usr-share.fs.sfs" 200 63693037 "" "curl/7.27.0"
Após o download do sistema de arquivos raiz via HTTP, você acabará no prompt normal de raiz do sistema ativo
zsh
.
Pós-inicialização
A menos que você deseje que todo o tráfego seja roteado através do servidor PXE (que não funcionará de qualquer maneira, a menos que você
configure corretamente
, você pode querer
parar
dnsmasq.service
e obter uma nova concessão no alvo da instalação, conforme apropriado para a disposição da sua rede.
Você também pode matar
darkhttpd
; o alvo já baixou o sistema de arquivos raiz, portanto, não é mais necessário. Enquanto você está nisso, também pode desmontar a imagem de instalação:
# umount /mnt/archiso
Neste ponto, você pode seguir o
guia de instalação
.
Sistemas com pouca memória
A opção
copytoram
do
initramfs
pode ser usada para controlar se o sistema de arquivos raiz deve ser copiado para RAM na sua totalidade na inicialização antecipada.
É altamente recomendável deixar essa opção em branco e só deve ser desativada se for totalmente necessário (sistemas com menos de ~256MB de memória física). Acrescente
copytoram=n
à sua linha do kernel, se desejar.
Nota
Como isso requer squashfs em montagem de loop a partir de um sistema de arquivos remoto montado,
copytoram=n
e
archiso_pxe_http
são mutuamente exclusivos.
Compartilhando internet com clientes PXE
Se sua rede para clientes PXE for privada (por exemplo, 192.168.1.0/24) e você desejar que eles possam acessar a Internet (por exemplo, para instalação de pacotes), configure o mascaragem/NAT de origem corretamente. Seu servidor PXE deve ter uma interface de rede separada conectada à Internet. Você pode usar esse comando para passar pela Internet para os clientes:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
Para tornar essa regra persistente após a reinicialização, execute o seguinte comando:
iptables-save -f /etc/iptables/iptables.rules
e
habilite
iptables.service
.
Consulte
Simple stateful firewall#Setting up a NAT gateway
e
Internet sharing#Enable NAT
para mais informações.
Solução de problemas
Bug ao renomear interface DHCP
FS#36749
faz com que a
renomeação previsível da interface de rede
padrão falhe e, em seguida, o cliente DHCP falhe por causa disso. Uma solução alternativa é adicionar o parâmetro de inicialização do kernel
net.ifnames=0
para desativar os nomes de interface previsíveis.
VirtualBox não consegue inicializar enquanto a máquina física consegue
Ao usar o
VirtualBox
para testar sua configuração, a máquina virtual pode ficar travada em:
Probing EDD (edd=off to disable)... ok
Mas a inicialização por PXE com uma máquina real funciona bem. O problema pode ser porque você configurou vários núcleos de CPU para a máquina cliente e definiu o tipo como
Other
e a versão como
Other/Unknown (64 bit)
. Então, o VirtualBox não sabe qual interface de paravirtualização usar por padrão.
Adicionar o
parâmetro do kernel
loglevel=7
permite que você veja que máquina realmente estava travada em:
[    0.063697] smp: Bringing up secondary CPUs...
[    0.103768] x86: Booting SMP configuration:
Para resolver isso, use um núcleo da CPU ou acesse
Máquina > Configurações > Sistema > Aceleração
e defina uma das seguintes interfaces de paravirtualização:
Mínima
,
Hyper-V
ou
KVM
.
VirtualBox cai no shell do EFI
This article or section is out of date.
Reason:
Isso ainda é um problema? VirtualBox possui suporte a inicialização EFI desde a versão 6.1, de acordo com
VirtualBox (Português)#Instalação no modo EFI
. (Discuss in
talk:PXE
)
Atualmente, o VirtualBox não oferece suporte à inicialização PXE no modo UEFI. Veja
isto
. Você pode tentar o
QEMU
. Como alternativa, você pode usar o
VMware
Workstation 15.0.2 (ele suporta inicialização UEFI PXE) ou apenas um hardware real.