Introdução
Automatizar instalações do Debian via rede (iPXE) pode poupar horas de trabalho, especialmente em ambientes com dezenas ou centenas de máquinas. Apesar do Preseed ser um recurso poderoso do instalador Debian, ele sofre com problemas de compatibilidade e formatação, especialmente ao lidar com particionamentos manuais e hardware legado.
Este artigo apresenta uma solução estável e compatível com máquinas novas e antigas, utilizando:
-
Boot por iPXE
-
Imagem netboot ISO do Debian (http://ftp.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/), escolha netboot.tar.gz
-
Preseed embutido diretamente no
initrd.gz
Instalação ideal para cluster e redes, podendo ser adaptada para instalações individuais
⚠️ Problemas Comuns com Preseed
Alguns dos obstáculos que encontrei ao tentar uma instalação sem intervenção via Preseed incluem:
-
Falhas silenciosas causadas por tabulações ou espaços extras no particionamento (
expert_recipe
); -
A partição swap sendo ignorada se colocada fora de ordem;
-
Problemas com compatibilidade em hardware mais antigo, principalmente com discos IDE ou BIOS legados;
-
preseed.cfg
sendo ignorado mesmo que especificado via kernel boot line.
✅ Solução: Preseed Embutido no Initrd
A maneira mais confiável que encontrei foi embutir o preseed.cfg
diretamente no initrd.gz
, garantindo que o instalador sempre o carregue — independentemente da forma como o sistema boota.
📁 Estrutura do preseed.cfg
O preseed.cfg
utilizado cobre:
-
Localização, teclado, fuso horário
-
Configuração de rede e hostname fixo
-
Usuário root e padrão com senha
-
Particionamento totalmente automatizado com
expert_recipe
detalhado -
Instalação de pacotes
-
Comandos pós-instalação
🔧 Particionamento: pontos críticos
O
expert_recipe
é extremamente sensível à formatação.
Algumas observações práticas:
-
Não use tabulações, apenas espaços simples;
-
Jamais deixe espaços em branco no final das linhas;
-
A ordem das partições importa — por exemplo, a swap deve vir após
/boot
e antes de/ (raiz)
; No esquema de particionamento não pode ter comentários entre as linhas da string expert_recipe, aliás, não pode ter nada além do esquema de particionamento;
-
Um erro mínimo de formatação e/ou sintaxe pode resultar em falha silenciosa do instalador.
🛠️ Script: embed-preseed.sh
Esse script extrai, modifica e reempacota o initrd.gz
, embutindo o preseed.cfg
de forma confiável:
#!/bin/bash
set -e
# === CONFIGURAÇÕES ===
BOOT_DIR="/var/www/html/boot/debian-installer/amd64"
WORK_DIR="/tmp/initrd-work"
PRESEED_SOURCE="/var/www/html/boot/preseed.cfg"
OUTPUT_INITRD="$BOOT_DIR/initrd-custom.gz"
# === CHECAGENS INICIAIS ===
INITRD_ORIGINAL="$BOOT_DIR/initrd.gz"
if [ ! -f "$INITRD_ORIGINAL" ]; then
echo "❌ Arquivo initrd.gz não encontrado em: $INITRD_ORIGINAL"
exit 1
fi
if [ ! -f "$PRESEED_SOURCE" ]; then
echo "❌ Arquivo preseed.cfg não encontrado em: $PRESEED_SOURCE"
exit 1
fi
echo "📦 Preparando diretório de trabalho..."
rm -rf "$WORK_DIR"
mkdir -p "$WORK_DIR"
cd "$WORK_DIR"
echo "🧩 Fazendo backup do initrd original..."
cp "$INITRD_ORIGINAL" "${INITRD_ORIGINAL}.bak"
echo "🔓 Extraindo initrd.gz..."
gzip -dc "$INITRD_ORIGINAL" | cpio -id --quiet
echo "📄 Copiando preseed.cfg para raiz do initrd..."
cp "$PRESEED_SOURCE" ./preseed.cfg
echo "🗜️ Reempacotando initrd com preseed embutido..."
##find . | cpio --quiet -o -H newc | gzip -9 > "$OUTPUT_INITRD"
find . | cpio --quiet -o -H newc --owner=0:0 | gzip -9 > "$OUTPUT_INITRD"
echo "✅ Novo initrd com preseed embutido foi criado com sucesso!"
echo "📍 Local: $OUTPUT_INITRD"
echo
echo "💡 Use esta linha no seu script iPXE:"
echo " initrd http://<IP_DO_SERVIDOR>/boot/debian-installer/amd64/initrd-custom.gz"
Como usar
Nenhum comentário:
Postar um comentário