Je suis sur mon NAS via SSH (sans terminal interactif particulier, juste un ssh root@host "command"). Je veux installer gdisk sur Debian 12. Banal :
$ ssh root@nas "apt-get install -y gdisk"
La commande ne rend jamais la main. 32 minutes plus tard, je perds patience et regarde côté NAS :
$ ps -ef | grep -E 'apt|dpkg|grub'
root 479 bash -c apt-get install -y gdisk
root 480 apt-get install -y gdisk
root 533 /usr/bin/dpkg --status-fd 29 --configure --pending
root 534 /usr/bin/perl ... /var/lib/dpkg/info/grub-pc.postinst configure
root 548 /bin/bash /var/lib/dpkg/info/grub-pc.postinst configure
grub-pc.postinst est bloqué. Pourquoi ? Il pose une question debconf : « sur quels disques installer GRUB ? ». En mode interactif, c’est un dialogue ncurses. Sans tty, debconf bascule en mode Readline puis échoue silencieusement et attend.
Le -y d’apt accepte les changements de package, mais n’affecte pas debconf.
Solution
Avant l’install
Pré-charger les réponses debconf :
echo 'grub-pc grub-pc/install_devices multiselect /dev/sda, /dev/sdb' \
| debconf-set-selections
DEBIAN_FRONTEND=noninteractive apt-get install -y gdisk
Si déjà bloqué
Tuer les process bloqués et reprendre proprement :
pkill -9 -f 'grub-pc.postinst'
pkill -9 -f 'dpkg --status-fd'
# Réponse debconf préchargée
echo 'grub-pc grub-pc/install_devices multiselect /dev/sda, /dev/sdb' \
| debconf-set-selections
# Reprendre la config dpkg en mode non-interactif
DEBIAN_FRONTEND=noninteractive dpkg --configure -a
Pour les futures installations en SSH non-interactif
Dans /etc/apt/apt.conf.d/00-noninteractive + export DEBIAN_FRONTEND=noninteractive dans .bashrc.
Pourquoi grub-pc et pas un autre
grub-pc.postinst veut savoir où installer GRUB BIOS legacy à chaque update. Sur un PC desktop, l’install initial répond et debconf garde. Mais sur un fresh debootstrap ou install sur nouveau système, debconf n’a pas de valeur stockée → demande interactive → blocage sans tty.
Autres pièges similaires : tzdata, keyboard-configuration, dictionaries-common, iptables-persistent.
Lessons learned
apt install -yn’évite pas debconf. Toujours combiner avecDEBIAN_FRONTEND=noninteractive.- Pré-charger debconf via
debconf-set-selectionspour les packages connus (grub-pc, tzdata, postfix…). - Surveiller
pscôté distant si apt traîne >60s : probablement un postinst bloqué. pkill -9 -f 'grub-pc.postinst'+dpkg --configure -adébloque proprement, pas besoin de réinstaller.- Scripts de provisioning : toujours
DEBIAN_FRONTEND=noninteractiveau début.