ISO customizada COM Interface Gráfica para instalação via pendrive
O preseed.cfg aqui postado utiliza o Cinnamon como interface gráfica.
Lembrando que o arquivo preseed.cfg no caso de ser embutido no initrd.gz precisa obrigatoriamente ter o nome de preseed.cfg, nos outros casos o arquivo pode ter outro nome contanto que tenha a extensão .cfg.
Ao terminar o procedimento descrito aqui você terá uma imagem ISO pronta para instalação via pendrive.
Modificando o preseed você personaliza (customiza) a instalação, cria uma ISO de acordo com os programas que você utiliza constantemente.
Nesta parte do preseed (veja o preseed completo mais adiante):
### Pacotes ###
tasksel tasksel/first multiselect standard, cinnamon-desktop, ssh-server
d-i pkgsel/include string sudo vim curl wget net-tools mousepad aptitude libu2f-udev gnome-terminal firefox-esr
é onde você configura qual interface gráfica será instalada, basta mudar, por exemplo, para o Gnome:
### Pacotes ###
tasksel tasksel/first multiselect standard, task-gnome-desktop, ssh-server <<< nesta linha você coloca o básico padrão do Debian
d-i pkgsel/include string sudo vim curl wget net-tools mousepad aptitude libu2f-udev gnome-terminal firefox-esr <<< nesta linha você coloca os programas/pacotes adicionais
Veja bem, essas são instalações limpas onde pacotes como Libre-office e Firefox não vem por padrão, portanto, você deve escrevê-los na linha ou instalar depois, caso queira.
Não tenho como abranger aqui todos os aspectos, você terá de se informar sobre preseed, mas verá que não é difícil, é um pouco trabalhoso, mas não é difícil.
Por exemplo, observe que o Google-Chrome não está em nenhuma das linhas, mas foi escrito no late_command (comandos pós-instalação) porque colocando o Chrome em uma das linhas "tasksel" ou "d-i pkgsel" a instalação falha com erro de "Falha na instalação de software" ou algo parecido. Essa foi uma das sugestões do parceirão Chat "Jarvis" GPT.
O preseed é xarope ao extremo nesse sentido de ordem de colocação, formatação e sintaxe.
Dependendo do pacote/programa você terá de ir na tentativa e no erro, porém, uma base forte é saber a ordem de instalação padrão do Debian, ou seja, basta observar em uma instalação com a interação do usuário o que vem primeiro: escolha do teclado, linguagem, rede, etc.
O preseed segue essa ordem e o que não estiver nessa ordem você coloca no late_command.
Para o Debian Bookworm que usa o Gnome 43, veja aqui pacotes para acrescentar na linha "d-i pkgsel":
https://people.debian.org/~fpeters/gnome/debian-gnome-43-status.html
https://wiki.debian.org/pt_BR/Gnome
Para o KDE veja aqui:
https://wiki.debian.org/pt_BR/KDE
INICIANDO
Após baixar a ISO no link recomendado, o qual repito aqui:
https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/
debian-12.11.0-amd64-netinst.iso
salve numa pasta de sua preferência e depois altere o caminho no script ou salve no mesmo diretório onde está o script build-custom-iso.sh.
Crie o arquivo:
sudo vim build-custom-iso.sh
Copie e cole o conteúdo:
#!/bin/bash
### Arquivo para ISO COM e SEM Interface Gráfica ###
Modifique a seu gosto (caso souber o que está fazendo) ##
set -e
### === VERIFICAÇÃO DE ROOT ===
if [ "$EUID" -ne 0 ]; then
echo "Este script deve ser executado como root (use sudo)."
exit 1
fi
### Altere para o teu ambiente ###
ISO_ORIGINAL_PATH="$(pwd)/debian-12.11.0-amd64-netinst.iso"
ISO_CUSTOM="debian-12.11.0-customCOM.iso"
WORKDIR="$(pwd)/iso-build"
PRESEED="$(pwd)/preseed.cfg"
### === INSTALAR PACOTES NECESSÁRIOS ===
echo "Instalando pacotes..."
apt update
##aptitude safe-upgrade -y
apt install -y xorriso rsync syslinux syslinux-common pxelinux wget cpio unzip debconf-utils
### Verificar dependencias ###
for cmd in xorriso rsync; do
command -v $cmd >/dev/null || { echo "Erro: $cmd não está instalado."; exit 1; }
done
### Preparar diretorios ###
mkdir -p "$WORKDIR"/iso-original "$WORKDIR"/iso-custom
cd "$WORKDIR"
### Verificar ISO original ###
if [ ! -f "$ISO_ORIGINAL_PATH" ]; then
echo "ISO original não encontrada: $ISO_ORIGINAL_PATH"
exit 1
fi
### Extrair ISO original preservando estrutura e symlinks ###
xorriso -osirrox on -indev "$ISO_ORIGINAL_PATH" -extract / iso-original
### Copiar conteudo para ISO customizada ###
rsync -aHAX iso-original/ iso-custom/
### Copiar preseed.cfg para raiz da ISO ###
cp "$PRESEED" iso-custom/preseed.cfg
### Criar symlink /cdrom -> . para o instalador localizar o preseed ###
rm -rf iso-custom/cdrom
ln -sf . iso-custom/cdrom
### Editar ISOLINUX (modo BIOS) ###
ISOLINUX_CFG="$WORKDIR/iso-custom/isolinux/txt.cfg"
GTK_CFG="$WORKDIR/iso-custom/isolinux/gtk.cfg"
MENU_CFG="$WORKDIR/iso-custom/isolinux/menu.cfg"
### Limpar entradas conflitantes ou duplicadas ###
sed -i '/^default /d' "$ISOLINUX_CFG"
sed -i '/^timeout/d' "$ISOLINUX_CFG"
sed -i '/^label auto$/,/^$/d' "$ISOLINUX_CFG"
# Remover qualquer definição de 'default' e 'menu default' do gtk.cfg
sed -i '/^default /d' "$GTK_CFG"
sed -i '/^\s*menu default\s*$/d' "$GTK_CFG"
### Substitui menu.cfg por nova versao com entrada personalizada no topo ###
cat > "$MENU_CFG" <<EOF
default auto
prompt 1
timeout 0
menu hshift 4
menu width 70
menu title Debian
GNU/Linux installer menu (BIOS mode)
label auto
menu label Auto install (kluster)
menu default
kernel /install.amd/vmlinuz
append auto=true file=/cdrom/preseed.cfg initrd=/install.amd/initrd.gz ---
include stdmenu.cfg
include gtk.cfg
include txt.cfg
EOF
### Editar GRUB (modo UEFI) ###
GRUB_CFG="$WORKDIR/iso-custom/boot/grub/grub.cfg"
### Remove qualquer definicao existente de timeout ###
sed -i '/^set timeout=/d' "$GRUB_CFG"
### Adiciona entrada de instalacao automatica no topo ###
TEMP_GRUB="$(mktemp)"
cat >> "$TEMP_GRUB" <<EOF
set timeout=-1
menuentry "Auto install (kluster)" {
set background_color=black
linux /install.amd/vmlinuz auto=true file=/cdrom/preseed.cfg ---
initrd /install.amd/initrd.gz
}
EOF
### Concatenar com o restante do grub.cfg ###
cat "$GRUB_CFG" >> "$TEMP_GRUB"
mv "$TEMP_GRUB" "$GRUB_CFG"
### Corrigir permissões de arquivos isolinux ###
chmod 644 iso-custom/isolinux/isolinux.bin
chmod 644 iso-custom/isolinux/boot.cat
### Gerar nova ISO com suporte a BIOS e UEFI ###
cd "$WORKDIR/iso-custom"
xorriso -as mkisofs \
-o "$WORKDIR/$ISO_CUSTOM" \
-isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
-c isolinux/boot.cat \
-b isolinux/isolinux.bin \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-eltorito-alt-boot \
-e boot/grub/efi.img \
-no-emul-boot \
-isohybrid-gpt-basdat \
-r -J -l -cache-inodes .
echo "ISO personalizada criada com sucesso: $WORKDIR/$ISO_CUSTOM"
Salve e saia.
Permita a execução:
sudo chmod +x build-custom-iso.sh
Dentro do diretório /home/seu_usuario/pasta estarão os arquivos build-custom-iso.sh, debian-12.11.0-amd64-netinst.iso e preseed.cfg.
Depois de rodar o script build-custom-iso.sh criará uma pasta chamada iso-build e dentro dela estarão duas pastas (iso-custom e iso-original) e também a imagem ISO final debian-12.11.0-customCOM.iso pronta para instalação.
Nas pastas iso-custom e iso-original estará o conteúdo descompactado da ISO modificada e da ISO original.
sudo ./build-custom-iso.sh
Caso quiser pode excluir as duas pastas iso-custom e iso-original e salvar somente a imagem ISO custom num pendrive inicializável.
O menu de instalação reconhecerá se é BIOS ou UEFI e ficará assim:
ou assim:
ARQUIVO PRESEED.CFG
sudo vim preseed.cfg
Coloque o conteúdo dentro:
#_preseed_V1
### Arquivo para ISO COM Interface Grafica ###
### Descomente as opcoes caso souber exatamente sem sombra nenhuma de duvida o que esta fazendo! ###
### Idioma / teclado ###
d-i debian-installer/locale string pt_BR.UTF-8
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/xkb-keymap select br
d-i time/zone string America/Sao_Paulo
### Rede com IP estatico - Altere ###
#d-i netcfg/disable_dhcp boolean true
##d-i netcfg/get_ipaddress string 192.168.1.X
##d-i netcfg/get_netmask string 255.255.255.0
##d-i netcfg/get_gateway string 192.168.1.X
d-i netcfg/get_nameservers string 1.1.1.1 9.9.9.9
##d-i netcfg/confirm_static boolean true
#d-i netcfg/get_hostname string no01
#d-i netcfg/get_domain string local
d-i netcfg/choose_interface select auto
### Configurar manualmente o hostname na instalacao ###
# Configurar automaticamente o dominio - DNS #
#d-i netcfg/get_hostname string cluster
#d-i netcfg/get_domain string cluster
#d-i netcfg/hostname string cluster
d-i netcfg/get_hostname seen false
d-i netcfg/get_domain string localdomain
d-i netcfg/get_domain seen true
### Espelho Debian fixo para evitar interacao - erro de release ###
d-i mirror/country string manual
d-i mirror/http/hostname string deb.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
### Concurso de popularidade - Não ###
popularity-contest popularity-contest/participate boolean false
### Usuario kluster com senha em grupo sudo ###
d-i passwd/user-fullname string Kluster User
d-i passwd/username string kluster
d-i passwd/user-password password cluster
d-i passwd/user-password-again password cluster
d-i passwd/user-default-groups string sudo
### Root também ativado ###
d-i passwd/root-password password cluster
d-i passwd/root-password-again password cluster
### Particionamento manual (usuario interage) ###
d-i partman-partitioning/confirm_write_new_label boolean true
### Pacotes ###
tasksel tasksel/first multiselect standard, cinnamon-desktop, ssh-server
d-i pkgsel/include string sudo vim curl wget net-tools mousepad aptitude libu2f-udev gnome-terminal firefox-esr
### GRUB ###
#d-i grub-installer/only_debian boolean true
#d-i grub-installer/with_other_os boolean true
d-i grub-installer/bootdev string /dev/sda
### Finalizacao ###
#d-i finish-install/reboot_in_progress note
### Personalizacoes com late_command ###
d-i preseed/late_command string \
in-target bash -c 'set -e; \
echo "deb [arch=amd64]
https://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list; \
wget -q -O -
https://dl.google.com/linux/linux_signing_key.pub | apt-key add -; \
sed -i 's/^allow-hotplug/auto/' /etc/network/interfaces; \
#echo "GRUB_CMDLINE_LINUX=\"net.ifnames=0 biosdevname=0\"" >> /etc/default/grub; \
#echo "net.ifnames=0 biosdevname=0" > /etc/kernel/cmdline || true; \
update-grub || true; \
update-initramfs -u || true; \
apt-get update || true; \
apt-get install -y sudo || true; \
apt-get install -y google-chrome-stable || true; \
mkdir -p /etc/sudoers.d; \
echo "kluster ALL=(ALL:ALL) ALL" > /etc/sudoers.d/kluster; \
chmod 0440 /etc/sudoers.d/kluster'
#echo \"auto lo\" > /etc/network/interfaces; \
#echo \"iface lo inet loopback\" >> /etc/network/interfaces; \
#echo \"\" >> /etc/network/interfaces; \
#echo \"auto eth0\" >> /etc/network/interfaces; \
#echo \"iface eth0 inet static\" >> /etc/network/interfaces; \
#echo \" address 192.168.1.X\" >> /etc/network/interfaces; \
#echo \" netmask 255.255.255.0\" >> /etc/network/interfaces; \
#echo \" gateway 192.168.1.X\" >> /etc/network/interfaces; \
#echo \" dns-nameservers 8.8.8.8 208.67.222.222\" >> /etc/network/interfaces'
Salve e saia.
O preseed acima instalará o Debian 12 com Cinnamon e já virá com o usuario "kluster" configurado com senha, sudo instalado, Google-chrome, além de outras configurações.
O Particionamento terá a intervenção do usuário, mas você pode configurar no preseed um particionamento automático, aliás, no preseed dá para configurar uma instalação totalmente automatizada sem intervenção nenhuma do usuário, como veremos adiante.
Na última página tem o preseed comentado com várias explicações.
Nesta parte:
### Pacotes ###
tasksel tasksel/first multiselect standard, cinnamon-desktop, ssh-server
d-i pkgsel/include string sudo vim curl wget net-tools mousepad aptitude libu2f-udev gnome-terminal firefox-esr
é onde você configura qual interface gráfica será instalada, basta mudar, por exemplo, para o Gnome:
### Pacotes ###
tasksel tasksel/first multiselect standard, task-gnome-desktop, ssh-server <<< nessa linha você coloca o básico padrão do Debian
d-i pkgsel/include string sudo vim curl wget net-tools mousepad aptitude libu2f-udev gnome-terminal firefox-esr <<< nessa linha você coloca os programas/pacotes adicionais
Veja bem, essas são instalações limpas onde pacotes como Libre-office e Firefox não vem por padrão, portanto, você deve escrevê-los na linha ou instalar depois, caso queira.
Por exemplo, observe que o Google-Chrome não está em nenhuma das linhas, mas foi escrito no late_command (comandos pós-instalação) porque colocando o Chrome em uma das linhas "tasksel" ou "d-i pkgsel" a instalação falha com erro de "Falha na instalação de software" ou algo parecido. Essa foi uma das sugestões do parceirão Chat "Jarvis" GPT.
O preseed é xarope ao extremo nesse sentido.
Dependendo do pacote/programa você terá de ir na tentativa e no erro.
Na página do Debian sobre o preseed, na teoria tudo funciona que é uma maravilha, mas na prática é diferente.
Para quem trabalha com redes, por exemplo, e cuida de vários laboratórios de informática, sabe a importância de instalações em massa personalizadas via rede.
Para o Debian Bookworm que usa o Gnome 43, veja aqui pacotes para acrescentar na linha "d-i pkgsel":
https://people.debian.org/~fpeters/gnome/debian-gnome-43-status.html
https://wiki.debian.org/pt_BR/Gnome
Para o KDE veja aqui:
https://wiki.debian.org/pt_BR/KDE