Preboot Execution Environment (Português) - ArchWiki

Jump to content
From ArchWiki
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.

Categories:

- Installation process (Português)
- Networking (Português)
- Boot process (Português)

Hidden category:

- Pages or sections flagged with Template:Out of date