Installer Debian sur un NAS en mode 100% automatique

Installer Debian sur un NAS en mode 100% automatique

·5 min de lecture·Mis à jour le 6 janvier 2026

Pourquoi automatiser l'installation

Le jour où le disque système lâche, une réinstallation manuelle coûte une journée entre téléchargement, clics dans l'installeur, paramétrage réseau et options oubliées.

Une installation 100 % automatique change ça : on boote, on attend quelques minutes, le NAS est opérationnel. Zéro clic, zéro oubli, et une reproductibilité totale.

Le matériel de référence ici, un TerraMaster F4-424 sur lequel TOS a été remplacé par Debian 13 Trixie :

  • CPU : Intel N95 (Alder Lake-N, 4 cores, jusqu'à 3.4 GHz)
  • RAM : 8 Go DDR5
  • Réseau : 2x 2.5GbE Realtek RTL8125
  • Stockage : contrôleur ASMedia ASM1166 avec 6 ports SATA
  • Boot : clé USB interne de 4 Go

Debian en UEFI sur la clé USB interne, les 4 baies SATA dédiées aux données : la séparation système/stockage reste nette.

Construire l'ISO personnalisée

Le principe : un fichier preseed qui répond à toutes les questions de l'installeur Debian, injecté dans une ISO reconstruite avec xorriso. Les paramètres réseau sont externalisés dans un .env pour rester modifiables :

# .env - configuration de l'ISO
PRESEED_IP=192.168.1.50
PRESEED_GATEWAY=192.168.1.1
PRESEED_DNS=192.168.1.1
PRESEED_HOSTNAME=nas
PRESEED_DOMAIN=home.lan
#!/bin/bash
set -euo pipefail
source .env

# Extraction de l'ISO netinst Debian 13
mkdir -p ./iso-extract
xorriso -osirrox on -indev debian-13-amd64-netinst.iso -extract / ./iso-extract

# Injection du preseed
cp preseed.cfg ./iso-extract/

# Configuration GRUB pour boot automatique
cat > ./iso-extract/boot/grub/grub.cfg << 'GRUB'
set timeout=3
menuentry "Debian Auto Install" {
    linux /install.amd/vmlinuz auto=true priority=critical \
        preseed/file=/cdrom/preseed.cfg
    initrd /install.amd/initrd.gz
}
GRUB

# Reconstruction de l'ISO UEFI bootable
xorriso -as mkisofs \
    -o debian-nas-auto.iso \
    -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 \
    ./iso-extract

Les dix-sept paramètres de xorriso -as mkisofs ne sont pas intuitifs : ils reconstituent une ISO hybride UEFI+BIOS, et la moindre omission produit une image qui ne boote pas.

Le fichier preseed

Le preseed dit à l'installeur quelle IP configurer, quel hostname utiliser, quel utilisateur créer. Zéro interaction :

# preseed.cfg - extrait des sections principales

# Locale et clavier
d-i debian-installer/locale string fr_FR.UTF-8
d-i keyboard-configuration/xkb-keymap select fr(latin9)
d-i time/zone string Europe/Paris

# Réseau statique
d-i netcfg/choose_interface select auto
d-i netcfg/disable_autoconfig boolean true
d-i netcfg/get_ipaddress string 192.168.1.50
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string 192.168.1.1
d-i netcfg/get_nameservers string 192.168.1.1
d-i netcfg/get_hostname string nas
d-i netcfg/get_domain string home.lan
d-i netcfg/confirm_static boolean true

# Partitionnement - cible le disque USB interne (2-8 Go)
d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string regular
d-i partman-auto/choose_recipe select atomic
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true

# Comptes utilisateurs
d-i passwd/root-login boolean true
d-i passwd/user-fullname string NAS Admin
d-i passwd/username string nasadmin

# Packages minimaux
tasksel tasksel/first multiselect standard
d-i pkgsel/include string sudo openssh-server python3 python3-apt \
    ca-certificates bash-completion
d-i pkgsel/upgrade select full-upgrade

Point important : le partitionnement cible /dev/sda avec une plage de taille de 2-8 Go, ce qui garantit qu'un disque de données SATA ne sera jamais écrasé par accident.

Le bootstrap post-installation

Une fois Debian installée, le preseed exécute une late_command qui met en place l'essentiel : clé SSH autorisée pour nasadmin (plus de mot de passe), correction du shadow file, activation de SSH en mode clé uniquement, et un service systemd qui déclenchera Ansible au premier boot.

# late_command dans le preseed
d-i preseed/late_command string \
    in-target mkdir -p /home/nasadmin/.ssh; \
    in-target sh -c 'echo "ssh-ed25519 AAAA... admin@workstation" \
        > /home/nasadmin/.ssh/authorized_keys'; \
    in-target chown -R nasadmin:nasadmin /home/nasadmin/.ssh; \
    in-target chmod 700 /home/nasadmin/.ssh; \
    in-target chmod 600 /home/nasadmin/.ssh/authorized_keys; \
    in-target cp /target/tmp/provision.service \
        /target/etc/systemd/system/provision.service; \
    in-target systemctl enable provision.service

Le service provision.service se réveille au premier boot, attend que le réseau soit connecté, puis lance Ansible.

Tester avant de déployer

Avant de flasher une clé USB, un test en VM évite les allers-retours :

# Disque virtuel de 4 Go
qemu-img create -f qcow2 test-nas.qcow2 4G

# Lancer la VM
qemu-system-x86_64 \
    -m 2048 \
    -enable-kvm \
    -bios /usr/share/ovmf/OVMF.fd \
    -cdrom debian-nas-auto.iso \
    -drive file=test-nas.qcow2,format=qcow2 \
    -nic user,hostfwd=tcp::2222-:22

Puis vérification par SSH depuis l'hôte :

ssh -p 2222 nasadmin@localhost

Si la connexion passe, l'ISO peut être flashée sur une vraie clé USB avec dd.

Bilan

L'automatisation, c'est de la reproductibilité : si le disque système lâche, quinze minutes suffisent pour retrouver un NAS opérationnel, et la procédure se relance autant de fois que nécessaire sans risque d'erreur. Ansible prend le relais ensuite pour le stockage et les services.

PartagerLinkedInXBluesky

Articles similaires