Installer Debian sur un NAS en mode 100% automatique
- Publié le
- ·5 min de lecture
Pourquoi automatiser l'installation ?
L'histoire classique : vous avez un NAS, tout fonctionne, et un jour paf - le disque système lâche. Vous vous retrouvez face à une question simple mais pénible : "bon, je fais comment maintenant?" Si vous réinstallez manuellement, comptez une bonne journée entre le téléchargement, les clics dans l'installeur, les paramétrages réseau, et les regrettes "ah mince, j'aurais dû cocher cette option".
Une installation 100% automatique, ça change tout. Boot, quelques minutes d'attente, et basta - le NAS est opérationnel. Pas de clics. Pas d'oublis. Juste reproductibilité.
C'est exactement ce que j'ai mis en place sur mon TerraMaster F4-424. J'ai balancé TOS (le système proprio de TerraMaster) et j'ai gravé Debian 13 Trixie avec un preseed personnalisé.
Le matériel
Le F4-424, c'est une belle petite machine pour jouer à l'administrateur système :
- 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
L'idée simple : Debian en UEFI sur la clé USB interne, et les 4 baies SATA dédiées aux données. C'est l'arrangement idéal.
Construire l'ISO personnalisée
La magie, c'est le preseed. Vous préparez un fichier de configuration qui répond à toutes les questions de l'installeur Debian, et vous l'injectez dans une ISO. Le script build.sh utilise xorriso pour ça. Les paramètres réseau (IP, gateway, DNS) sont externalisés dans un .env pour pouvoir changer facilement :
# .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
Et voilà le build.sh :
#!/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
Déjà fait ça une première fois ? Bienvenue dans l'inferno de xorriso et ses 17 paramètres obscurs.
Le fichier preseed
C'est le cœur. Le preseed, c'est juste du texte qui dit à l'installeur : "mets cette IP, utilise ce hostname, crée cet utilisateur, et puis c'est tout." Zéro interaction. Voilà les sections principales :
# 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
Petite note : le partitionnement cible /dev/sda avec une plage de 2-8 Go. Ça garantit qu'on ne va pas écraser par accident un disque de données en SATA. J'ai déjà vu pire. Pas chez moi, mais chez quelqu'un que je connais... qui a dû les prévenir.
Le bootstrap post-installation
Une fois Debian installée, le preseed exécute une late_command qui met en place les trucs essentiels :
- Clé SSH autorisée pour
nasadmin(plus de mot de passe) - Fix du shadow file (sinon le compte est pas vraiment utilisable)
- Activation de SSH en mode clé uniquement
- Service systemd custom qui va trigger 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
Et le service provision.service se réveille au premier boot, attend que le réseau soit connecté, puis lance Ansible. Voilà. C'est magique. Le NAS se configure tout seul.
Tester avant de déployer
Avant de commencer à flasher des clés USB (ce qui peut vite devenir galère si l'ISO a un bug), je teste toujours en VM d'abord. QEMU/KVM :
# 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
Ensuite, vous vérifiez que tout s'installe sans accroc. Connexion SSH depuis le host :
ssh -p 2222 nasadmin@localhost
Ça marche ? Super. Maintenant vous pouvez flasher l'ISO sur une vraie clé USB avec dd et la brancher dans le NAS.
Voilà.
L'automatisation, c'est pas du luxe - c'est de la reproductibilité. Si mon disque système lâche demain, j'ai juste besoin de 15 minutes pour avoir un NAS opérationnel. Et vu que tout est automatisé, je peux relancer ça des dizaines de fois sans me tromper. Ansible prend le relais après ça, et configure le reste - stockage, services, tout.
Article suivant
Configurer Neovim from scratch avec Lua et Lazy.nvim→