PXE Server

De wiki.franca.unesp.br
Revisão de 15h33min de 30 de abril de 2026 por Guilherme (Discussão | contribs) (Created page with "= Servidor PXE Local com Netboot.xyz no Debian = Este guia detalha a implementação de um servidor de boot PXE local utilizando o '''netboot.xyz'''. A estrutura utiliza o Apa...")
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para: navegação, pesquisa

Servidor PXE Local com Netboot.xyz no Debian

Este guia detalha a implementação de um servidor de boot PXE local utilizando o netboot.xyz. A estrutura utiliza o Apache (HTTP) para transferência rápida de arquivos, TFTP para o boot inicial, Samba (SMB) para instalação automatizada do Windows e uma compilação customizada do iPXE para operar de forma 100% offline.

Pré-requisitos

Antes de começar, atualize seu servidor Debian e instale todos os pacotes necessários:

sudo apt update && sudo apt upgrade -y
sudo apt install -y apache2 tftpd-hpa samba wimtools genisoimage build-essential git liblzma-dev wget nano

Passo 1: Preparar o Servidor Web (Apache) e Baixar os Menus

Vamos criar a estrutura de pastas que vai hospedar as imagens e baixar os menus oficiais do netboot.xyz para o Apache local.

# Criar diretórios do netboot e das categorias de imagens
sudo mkdir -p /var/www/html/netboot
sudo mkdir -p /var/www/html/assets/{Windows,Linux,Utilitarios}

# Acessar a pasta do netboot e baixar os menus
cd /var/www/html/netboot
sudo wget https://github.com/netbootxyz/netboot.xyz/releases/latest/download/netboot.xyz.tar.gz

# Extrair e limpar
sudo tar -xzf netboot.xyz.tar.gz
sudo rm netboot.xyz.tar.gz

# Ajustar permissões para o Apache
sudo chown -R www-data:www-data /var/www/html/

Passo 2: Configurar o Servidor TFTP

O TFTP é responsável por entregar os primeiros megabytes do boot. No Debian, o pacote tftpd-hpa utiliza o diretório /srv/tftp por padrão.

# Garantir que o diretório exista
sudo mkdir -p /srv/tftp

# Reiniciar e habilitar o serviço
sudo systemctl restart tftpd-hpa
sudo systemctl enable tftpd-hpa

Passo 3: Compilar o iPXE Customizado

Para que o boot não dependa da internet, vamos compilar os arquivos de boot (EFI e BIOS) injetando um script que aponta diretamente para o IP do seu servidor Debian. Atenção: Substitua IP_DO_SEU_SERVIDOR pelo endereço IP real da sua máquina Debian.

cd ~
git clone https://github.com/ipxe/ipxe.git
cd ipxe/src

# Criar o script de redirecionamento (chainload)
cat <<EOF > boot.ipxe
#!ipxe
dhcp
chain http://IP_DO_SEU_SERVIDOR/netboot/menu.ipxe
EOF

# Compilar arquivo para máquinas antigas (Legacy/BIOS)
make bin/undionly.kpxe EMBED=boot.ipxe

# Compilar arquivo para máquinas novas (UEFI)
make bin-x86_64-efi/ipxe.efi EMBED=boot.ipxe

# Mover os arquivos gerados para o TFTP
sudo cp bin/undionly.kpxe /srv/tftp/
sudo cp bin-x86_64-efi/ipxe.efi /srv/tftp/

Passo 4: Configurar o Samba (Para Boot do Windows)

A instalação de Windows via rede exige mapeamento de disco na fase do Setup. O Samba compartilhará a pasta de arquivos do Windows. Edite o arquivo de configuração do Samba:

sudo nano /etc/samba/smb.conf

Vá até o final do arquivo e adicione as seguintes linhas:

[PXEWIN]
path = /var/www/html/assets/Windows
guest ok = yes
read only = yes
browseable = yes

Reinicie o Samba para aplicar:

sudo systemctl restart smbd
sudo systemctl enable smbd

Passo 5: Script de Automação para Extração do Windows

Este script extrai a ISO do Windows, baixa o injetor wimboot e modifica o boot.wim para montar o diretório Samba automaticamente e iniciar a instalação. Crie o arquivo do script:

cd ~
nano preparar_windows.sh

Cole o conteúdo abaixo. Não se esqueça de alterar a variável IP_SERVIDOR:

#!/bin/bash

# ==========================================
# CONFIGURAÇÕES - ALTERE O IP ABAIXO
# ==========================================
IP_SERVIDOR="192.168.1.100"
DESTINO="/var/www/html/assets/Windows"
# ==========================================

ARQUIVO_ISO=$1
NOME_PASTA=$2
PASTA_WINDOWS="$DESTINO/$NOME_PASTA"

if [ -z "$ARQUIVO_ISO" ] || [ -z "$NOME_PASTA" ]; then
echo "Uso: sudo ./preparar_windows.sh <caminho_da_iso> <nome_da_pasta>"
echo "Exemplo: sudo ./preparar_windows.sh /home/usuario/win10.iso Win10"
exit 1
fi

echo "1. Criando pasta $PASTA_WINDOWS..."
mkdir -p "$PASTA_WINDOWS"

echo "2. Montando a ISO e copiando os arquivos..."
mkdir -p /mnt/iso_temp
mount -o loop "$ARQUIVO_ISO" /mnt/iso_temp
cp -r /mnt/iso_temp/* "$PASTA_WINDOWS/"
umount /mnt/iso_temp
rm -rf /mnt/iso_temp

echo "3. Baixando o arquivo wimboot oficial..."
if [ ! -f "$DESTINO/wimboot" ]; then
wget -qO "$DESTINO/wimboot" https://github.com/ipxe/wimboot/releases/latest/download/wimboot
fi

echo "4. Criando script de auto-conexao (startnet.cmd)..."
cat <<EOF > startnet.cmd
wpeinit
@echo Aguardando rede...
ping -n 5 127.0.0.1 >nul
@echo Conectando ao servidor $IP_SERVIDOR...
net use z: \\\\$IP_SERVIDOR\\PXEWIN\\$NOME_PASTA /user:nobody ""
z:\\setup.exe
EOF

echo "5. Injetando o script dentro do boot.wim..."
wimupdate "$PASTA_WINDOWS/sources/boot.wim" 2 <<EOF
add startnet.cmd /Windows/System32/startnet.cmd
EOF
rm startnet.cmd

echo "6. Ajustando permissoes..."
chmod -R 777 "$PASTA_WINDOWS"

echo "CONCLUIDO! Arquivos preparados com sucesso."

Dê permissão de execução:

chmod +x preparar_windows.sh

Como usar:

sudo ./preparar_windows.sh /caminho/para/imagem-windows.iso Win11

Passo 6: Preparando as Imagens Linux (Live CD)

Para o Linux funcionar como Live CD sem perder a conexão de rede: Extraia a ISO do Linux (ex: Ubuntu). Copie os arquivos vmlinuz (Kernel) e initrd (geralmente encontrados na pasta casper ou boot) para /var/www/html/assets/Linux/. Copie a ISO inteira do Linux também para /var/www/html/assets/Linux/ubuntu.iso.

Passo 7: Configurando o Menu Customizado

Edite o arquivo que gerencia o menu local do netboot:

sudo nano /var/www/html/netboot/custom.ipxe

Substitua tudo pelo código abaixo (altere o IP_DO_SEU_SERVIDOR):

#!ipxe

# --- MENU PRINCIPAL ---
:custom_menu
clear custom_choice
menu Menu PXE Local - Debian
item --gap Selecione uma Categoria:
item menu_windows Instaladores Windows
item menu_linux Distribuicoes Linux (Live)
item menu_utils Ferramentas e Utilitarios
item --gap
item return Voltar ao Menu Anterior

choose custom_choice || goto custom_exit
goto ${custom_choice}


# --- SUBMENU WINDOWS ---
:menu_windows
clear win_choice
menu Instaladores Windows
item win11 Windows 11 (Automatizado)
item --gap
item custom_menu [ Voltar ]
choose win_choice || goto custom_menu
goto ${win_choice}

:win11
kernel http://IP_DO_SEU_SERVIDOR/assets/Windows/wimboot
initrd http://IP_DO_SEU_SERVIDOR/assets/Windows/Win11/boot/bcd bcd
initrd http://IP_DO_SEU_SERVIDOR/assets/Windows/Win11/boot/boot.sdi boot.sdi
initrd http://IP_DO_SEU_SERVIDOR/assets/Windows/Win11/sources/boot.wim boot.wim
boot || goto custom_menu


# --- SUBMENU LINUX ---
:menu_linux
clear lin_choice
menu Distribuicoes Linux
item ubuntu_live Ubuntu Live CD
item --gap
item custom_menu [ Voltar ]
choose lin_choice || goto custom_menu
goto ${lin_choice}

:ubuntu_live
kernel http://IP_DO_SEU_SERVIDOR/assets/Linux/vmlinuz
initrd http://IP_DO_SEU_SERVIDOR/assets/Linux/initrd
imgargs vmlinuz initrd=initrd ip=dhcp url=http://IP_DO_SEU_SERVIDOR/assets/Linux/ubuntu.iso
boot || goto custom_menu


# --- SUBMENU UTILITÁRIOS ---
:menu_utils
clear util_choice
menu Ferramentas e Utilitarios
item hirens Hirens BootCD PE
item --gap
item custom_menu [ Voltar ]
choose util_choice || goto custom_menu
goto ${util_choice}

:hirens
sanboot http://IP_DO_SEU_SERVIDOR/assets/Utilitarios/hirens.iso || goto custom_menu


# --- SAÍDA ---
:custom_exit
exit

Passo 8: Configuração do Servidor DHCP (Roteador/Firewall)

Para que os clientes da rede saibam onde buscar o boot, vá no seu servidor DHCP (Roteador, pfSense, Mikrotik, Windows Server) e configure as Opções de PXE: Next-Server (Servidor TFTP): IP do seu Servidor Debian. Boot Filename (Arquivo de Boot):

    • Para máquinas UEFI: ipxe.efi
    • Para máquinas Legacy/BIOS: undionly.kpxe

Acesse o Boot via Rede (F12) nos computadores clientes, entre na opção Custom Menu do painel do netboot e utilize o seu sistema de boot de forma totalmente local!