Devops - Debian Preseed

Les expériences de preseed peuvent donner des résultats et couacs différents selon le matériel et les versions de l’installeur Debian. Les indications ci-dessous ne sont pas optimales ni exactes.

Le fichier donné en example par Debian est périmé, il faut plutôt se référer à celui exhaustif fourni par Steve McIntyre.

Exemples de preseed :

(Non-)Alternatives au preseed

Fournir le preseed par le réseau

Normalement … pour indiquer qu’on souhaite fournir un fichier preseed, depuis le menu de l’installeur (un grub customisé), on tapote :

Testé avec une release de Debian 10.6, la touche ECHAP ne produit aucun effet.

Les installeurs récents ont aussi une option dans le menu pour les installations automatisées.

Résultat un peu troublant : il démarre l’installeur, peut planter sur la détection du réseau si absence de firmware non libre (même quand on n’utilise pas le wifi), et ne demande pas de saisir l’URL du fichier de preseed.

Une alternative est donc, toujours dans le menu de l’installeur, d’éditer la ligne censée procéder à l’installation automatisée, de repérer la ligne de la config de grub ayant la mention “auto=on”, et d’y intercaler l’URL sous la forme : url=ip.ip.ip.ip:port/nom_du_fichier_preseed.

Il semblerait aussi que le hostname renseigné ne soit pas pris en compte. Il est possible de l’ajouter à cette même ligne de boot : hostname=supernom.

Erreur de config réseau ?

Installation step failed
An installation step failed. You can try to run the failing item again from the menu, or skip it and choose something else. The failing step is: Detect network hardware

Il rappelle alors le menu avec l’étape qui correspond, et un second essai de détection fonctionne ! Je ne sais pas bien pourquoi…

Comment remplir le fichier preseed ?

Réponses aux questions plus classiques de l’installeur.

On désactive root, et on inscrit un mot de passe chiffré pour le compte utilisateur.

Le chiffrement d’un mot de passe peut se faire avec :

mkpasswd -m sha-512

Le partitionnement

Difficile à régler dès que l’on cherche à le faire finement.

On part sur l’option Debian chiffrée. Il faut mettre tous les confirm à true. On part sur un partitionnement intelligent automatique de Debian (pas besoin de décrire le schéma de partitions).

Les collections de paquets

Options minimales indiquées ici : https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=815344

Il semble que la ligne tasksel qui commence par d-i ne soit pas prise en compte.

Ici, cela installe les outils standards, et un serveur SSH

tasksel tasksel/first multiselect standard, ssh-server

Mais on peut la laisser vide pour une installation vraiment minimale :

tasksel tasksel/first multiselect

Les paquets supplémentaires

Ils peuvent s’installer avec :

d-i pkgsel/include string paquet1 paquet2 paquet3 ...

Une petite commande pour finir ?

Allez … d-i preseed/late_command string in-target commande1; commande2

Note: ça doit tenir sur une seule ligne. Je n’ai pas vérifier que ça fonctionnait !

Bonus

Petit script pour vérifier que les valeurs qu’on a renseignées (en péchotant sur le net) sont recensées dans la liste exhaustive de Steve McIntyre.

#!/bin/bash

mplxf=$(mktemp)
grep -e '^d-i' mplx.txt > "$mplxf"

while read ligne
do
	motif=$(echo "$ligne" | cut -d ' ' -f '1-2')
	grep -q "$motif" amd64-main-full.txt || echo "$motif non trouvé !"
done < $mplxf

Debug

Une piste toujours donnée ici : https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=815344

Fichier de seed

d-i debian-installer/language string fr
d-i debian-installer/country string FR
d-i debian-installer/locale select fr_FR
d-i keyboard-configuration/xkb-keymap select fr

d-i passwd/root-login boolean false
d-i passwd/user-fullname string fab
d-i passwd/username string fab
d-i passwd/user-password-crypted password $6$ooo1OR/atAzpAcoq$6Ndq8fWvqi8Jc689QrkebEmtbYU9X4z4uFwPGbBDTyhgYJdH1q02.9dbyFGPUTGeFJ4SAnfOwxqlkJmzHu.gv.

# non prises en compte si auto url=...
#d-i netcfg/enable boolean true
#d-i netcfg/choose_interface select enp37s0
#d-i netcfg/link_wait_timeout string 10
d-i hw-detect/load_firmware boolean false
d-i hw-detect/load_media boolean false

d-i netcfg/get_hostname string mplx
d-i netcfg/get_domain string mplx.ml

d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman-auto/init_automatically_partition select Guided
d-i partman-auto/automatically_partition select /dev/sda
d-i partman-auto/disk string /dev/sda
d-i partman-auto/select_disk select /dev/sda
d-i partman-auto/method string crypto
d-i partman-auto/choose_recipe select boot-crypto
d-i partman-auto-lvm/new_vg_name string mplx
d-i partman-auto-lvm/guided_size string max
d-i partman-auto-crypto/erase_disks boolean false
d-i partman-crypto/plain_warn_erase boolean false
d-i partman-crypto/crypto_warn_erase boolean false
d-i partman-crypto/confirm boolean true
d-i partman-crypto/confirm_nochanges boolean true
d-i partman-crypto/passphrase password monpetitpasstemp
d-i partman-crypto/passphrase-again password monpetitpasstemp
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nochanges boolean true
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-lvm/vgdelete_confirm boolean true
d-i partman-md/confirm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-partitioning/confirm_write_new_label boolean true

d-i base-installer/install-recommends boolean false
tasksel tasksel/first multiselect ssh-server

d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
d-i grub-installer/bootdev string default
d-i finish-install/reboot_in_progress note
d-i debian-installer/exit/halt boolean true

Devops : Ansible chont mes dents, Conteneurs, Debian Live Build, Debian Preseed, Debootstrap, Déploiement, PXE