B.5. Options complexes

B.5.1. Exécuter des commandes pendant l'installation

Une option très puissante offerte par les outils de préconfiguration est la possibilité de lancer des commandes ou des scripts à certains moments de l'installation.

Lorsque le système de fichiers du système cible est monté, il est accessible dans /target. Si un CD d'installation est utilisé, une fois monté, il est accessible dans /cdrom.

# La préconfiguration de l'installation n'est pas sécurisée. Rien dans 
# l'installateur ne vérifie que des dépassements de tampon ou des
# exploitations quelconques des valeurs données dans ce fichier n'ont pas lieu.
# N'utilisez que les fichiers dont vous connaissez la provenance !
# Pour tout dire, et parce que c'est en général utile, voici un
# moyen d'exécuter automatiquement une commande dans l'installateur.

# La première commande est exécutée aussi tôt que possible, juste après
# la lecture du fichier.
#d-i preseed/early_command string anna-install some-udeb
# Cette commande est exécutée juste avant que le partitionneur ne commence.
# Il peut être utile de préconfigurer le partitionneur en fonction de l'état
# des disques
# (qui ne sont peut-être pas visibles quand preseed/early_command est exécutée).
#d-i partman/early_command \
#       string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
# Cette commande est exécutée juste avant que l'installation ne se termine,
# mais quand le répertoire /target est encore utilisable. Vous pouvez exécuter
# un chroot dans /target et utiliser cet environnement directement ; ou bien vous
# pouvez utiliser les commandes apt-install et in-target pour installer des
# paquets et lancer des commandes dans le répertoire target.
#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh

B.5.2. Changer les valeurs par défaut avec la préconfiguration

Il est possible de changer la réponse par défaut à une question tout en maintenant l'interrogation. Pour cela, le drapeau seen doit être remis à « false » après avoir modifié la valeur de la réponse.

d-i foo/bar string value
d-i foo/bar seen false

Il suffit de déclarer le paramètre preseed/interactive=true au moment de l'amorçage pour obtenir le même effet pour toutes les questions. Cela peut servir à tester le fichier de préconfiguration.

Le propriétaire « d-i » est utilisé uniquement pour les variables dont se sert l'installateur. Pour des variables appartenant à des paquets installés sur le système cible, il faut utiliser le nom du paquet. Consultez la note Section B.2.2, « Utiliser les paramètres d'amorçage pour préconfigurer des questions ».

Si vous utilisez les paramètres d'amorçage pour la préconfiguration, l'opérateur « ?= » demande à l'installateur de poser la question correspondante, c'est-à-dire, foo/bar?=valeur (ou propriétaire:foo/bar?=valeur). Cela n'aura un effet que sur les paramètres qui correspondent à des questions qui sont réellement affichées pendant l'installation et non pas sur les paramètres « internes ».

Il est possible d'obtenir davantage d'informations de débogage en utilisant le paramètre DEBCONF_DEBUG=5. Ainsi, debconf affichera beaucoup plus de détails sur la configuration actuelle de chaque variable et sur sa progression lors de l'exécution des scripts d'installation de chaque paquet.

B.5.3. Chaîner les fichiers de préconfiguration

Vous pouvez inclure dans ce fichier d'autres fichiers de préconfiguration. Toutes les valeurs de ces fichiers annuleront les valeurs préexistantes définies par des fichiers précédemment chargés. Vous pouvez par exemple mettre la configuration du réseau dans un fichier et certaines configurations plus spécifiques dans un autre fichier.

# Vous pouvez indiquer plus d'un fichier, en les séparant par des espaces ; 
# tous seront chargés. Ces fichiers peuvent à leur tour contenir d'autres 
# directives de préconfiguration ou d'inclusion. Notez que si les fichiers
# sont relatifs, ils seront pris dans le répertoire où se trouve le fichier
# qui les inclut.
#d-i preseed/include string x.cfg

# L'installateur peut vérifier la somme de contrôle des fichiers de
# préconfiguration avant de les utiliser. Pour le moment, cette somme doit
# être de type md5sum. Il faut lister les sommes de contrôle dans le même ordre
# que les fichiers à inclure. 
#d-i preseed/include/checksum string 5da499872becccfeda2c4872f9171c3d

# D'une manière plus souple, cela exécute des commandes de l'interpréteur
# et si le résultat donne les noms de ces fichiers, ils sont inclus. 
#d-i preseed/include_command \
#      string if [ "`hostname`" = bob ]; then echo bob.cfg; fi

# Plus encore, cela télécharge un programme et l'exécute. Le programme peut
# utiliser des commandes comme debconf-set pour manipuler la base de données de debconf.
# Il est possible de lister plusieurs scripts, séparés par des espaces.
# Il faut remarquer que si les fichiers sont indiqués de façon relative, ils
# seront cherchés dans le répertoire qui contient le fichier de préconfiguration qui les
# a lancés.
#d-i preseed/run string foo.sh

Il est aussi possible de chaîner une préconfiguration de type initrd ou file avec une préconfiguration de type network. Pour cela, il faut déclarer preseed/url dans les fichiers précédents. La préconfiguration network sera exécutée quand le réseau fonctionnera. Soyez prudent car il y aura deux exécutions distinctes de la préconfiguration. Cela signifie que vous pouvez exécuter à nouveau la commande preseed/early, la seconde fois après la mise en œuvre du réseau.