man debconf (Conventions) - système de configuration des paquets Debian
NOM
debconf - système de configuration des paquets Debian
DESCRIPTION
Debconf est un système de configuration pour les paquets Debian. Il existe une commande rarement utilisée nommée debconf, documentée dans debconf(1)
Debconf fournit une interface cohérente pour la configuration des paquets et donne à l'utilisateur le choix entre plusieurs interfaces. Il peut configurer des paquets avant qu'ils ne soient installés, ce qui permet à des installations et des mises à niveau importantes de demander toutes les informations nécessaires au préalable, et de vous laisser faire ce que vous voulez pendant que les paquets s'installent. Debconf vous permet, si vous êtes pressé, de sauter les questions les moins importantes au moment de l'installation d'un paquet (en y revenant plus tard).
Préconfiguration des paquets
Debconf peut configurer les paquets avant même qu'ils ne soient installés sur votre système. Ainsi, toutes les questions des paquets vous seront posées au début de l'installation ce qui permettra à l'installation de continuer pendant que vous êtes en train de prendre un café.
Si vous utilisez apt (version 0.5 ou supérieure) et que vous avez installé apt-utils, chaque paquet installé par apt sera automatiquement préconfiguré. Ceci est contrôlé via /etc/apt/apt.conf.d/70debconf
Quelquefois vous voudrez préconfigurer un paquet vous-même, quand vous l'installez sans apt. Vous pouvez utiliser dpkg-preconfigure(8) pour ce faire. Donnez-lui seulement le nom du paquet que vous voulez préconfigurer. Vous aurez besoin d'installer apt-utils pour que cela fonctionne.
Reconfiguration des paquets
Supposons que vous ayez installé un paquet et que vous ayez répondu aux questions de debconf, mais maintenant que vous l'utilisez de temps en temps, vous réalisiez que vous voulez revenir sur quelques-unes de vos réponses et les changer. Autrefois, il fallait faire une réinstallation quand vous étiez dans cette situation ; mais quand vous réinstallez le paquet, debconf semble se souvenir que vous avez déjà répondu aux questions et ne vous les pose pas à nouveau (c'est voulu).
Heureusement, debconf facilite la reconfiguration des paquets qui l'utilisent. Supposez que vous voulez reconfigurer debconf lui-même. Exécutez simplement, en tant que superutilisateur : dpkg-reconfigure debconf
Il vous posera toutes les questions que vous avez vues lors de la première installation de debconf. Il peut aussi vous poser d'autres questions, puisqu'il vous pose même les questions de priorité basse qui ont pu être sautées quand le paquet a été installé. Vous pouvez aussi bien l'utiliser avec n'importe quel autre paquet utilisant debconf.
Interfaces
Une fonctionnalité remarquable de debconf est qu'il possède plusieurs interfaces et l'on peut en changer à loisir. Voici les interfaces disponibles :
- dialog
- Interface par défaut : elle utilise les programmes whiptail(1) ou dialog(1) pour afficher les questions. Elle fonctionne en mode texte.
- readline
- C'est l'interface la plus traditionnelle. Elle ressemble à la configuration Debian classique : une série de questions, imprimées sur la console en mode texte et des invites affichées avec la bibliothèque readline. Elle reconnaît même le complètement avec « tab ». Le paquet libterm-readline-gnu-perl est fortement recommandé si vous choisissez d'utiliser cette interface ; le module readline par défaut a vraiment des lacunes. Pour utiliser cette interface, vous aurez besoin d'installer le paquet perl-modules.
Cette interface a quelques commandes spéciales. « Page préc. » (ou ctrl-u) reviendra à la question précédente (si cela est géré par le paquet utilisant debconf) et « Page suiv. » (ou ctrl-v) passera à la question suivante.
C'est la meilleure interface pour les administrateurs à distance travaillant par une connexion lente, ou pour ceux qui sont à l'aise avec Unix.
- non-interactive
- C'est l'anti-interface. Elle n'interagit jamais avec vous et utilise les réponses par défaut pour toutes les questions. Elle enverra parfois un courriel à root avec les messages que le paquet voulait afficher, mais c'est tout ! À part ça, elle est silencieuse et discrète, c'est une interface parfaite pour des installations automatiques. Si vous utilisez cette interface et si vous voulez que les réponses aux questions ne soient pas celles par défaut, vous aurez besoin de renseigner d'abord la base de données de debconf ; pour plus de détails, voir la section ci-dessous sur l'installation de paquets sans surveillance.
- gnome
- C'est une interface homme-machine X moderne utilisant les bibliothèques gtk et gnome. Bien sûr, elle nécessite une variable DISPLAY valable pour fonctionner ; si elle ne peut pas fonctionner, debconf se rabattra sur d'autres interfaces. Remarquez que cette interface nécessite que vous ayez installé le paquet libgnome2-perl.
- kde
- L'interface homme-machine fournie est simple et écrite avec la bibliothèque Qt. Elle ressemble beaucoup à l'environnement de bureau KDE. Vous aurez bien sûr besoin que la variable DISPLAY soit définie et que le paquet libqt-perl soit installé pour pouvoir utiliser cette interface. Notez que si tous les pré-requis ne sont pas présents, l'interface redeviendra dialog.
- editor
- C'est pour ces fanatiques qui veulent tout faire à l'aide d'un éditeur de texte. Elle lance votre éditeur sur un fichier qui ressemble à un fichier de configuration Unix, et vous modifiez le fichier qui sert à communiquer avec debconf. L'auteur de debconf préfère ne pas commenter les circonstances qui ont conduit à l'écriture de cette interface.
- web
- Cette interface agit comme un serveur web auquel vous vous connectez avec votre navigateur web, pour parcourir les questions et y répondre. Elle est très prometteuse, mais un peu rugueuse pour l'instant. Quand cette interface se met en route, elle indiquera le lieu où vous devrez pointer votre navigateur web. Pour des raisons de sécurité, vous devez exécuter votre navigateur web sur la machine que vous configurez.
Gardez à l'esprit que ce n'est pas une interface sécurisée. Tous ceux qui ont accès à l'ordinateur en cours de configuration peuvent aussi accéder au serveur web et configurer certaines choses alors que cette interface tourne. C'est plus une preuve de concept qu'autre chose.
Vous pouvez changer l'interface par défaut qu'utilise debconf en le reconfigurant. D'un autre côté, si vous voulez juste changer l'interface pour un instant, vous pouvez positionner la variable d'environnement DEBIAN_FRONTEND avec le nom de l'interface à utiliser. Par exemple : DEBIAN_FRONTEND=readline apt-get install slrn
Les commandes dpkg-reconfigure(8) et dpkg-preconfigure(8) permettent aussi de leur passer --frontend= en paramètre, suivi de l'interface que vous voulez qu'elles utilisent.
Notez que toutes les interfaces ne fonctionneront pas en toute circonstance. Si le démarrage d'une interface échoue pour quelque raison que ce soit, debconf affichera un message expliquant pourquoi et se rabattra sur l'interface la plus proche.
Priorités
Pouvoir donner des priorités aux questions que vous pose debconf est une fonctionnalité agréable. Si vous ne voulez pas être ennuyé par les questions sans importance, vous pouvez configurer debconf pour qu'il ne vous pose que les questions les plus importantes. D'un autre côté, si vous aimez tout contrôler, vous pouvez lui faire afficher toutes les questions. Chaque question a une priorité. Par ordre croissant d'importance :
- low
- Questions peu importantes dont les valeurs par défaut suffisent dans la majorité des cas.
- medium
- Questions normales avec des valeurs par défaut raisonnables.
- high
- Questions qui n'ont pas de valeurs par défaut convenables.
- critical
- Questions que vous avez vraiment besoin de voir (ou autre).
Seules les questions avec une priorité supérieure ou égale à la priorité que vous avez choisie seront affichées. Vous pouvez fixer la valeur de la priorité en reconfigurant debconf, ou temporairement en passant l'option --priority= suivie de la valeur voulue aux commandes dpkg-reconfigure(8) et dpkg-preconfigure(8), ou en positionnant la variable d'environnement DEBIAN_PRIORITY.
Base de données principale
Debconf utilise une base de données sous-jacente plutôt flexible et potentiellement compliquée pour garder les réponses déjà données aux questions. Le fichier /etc/debconf.conf est utilisé pour configurer cette base de données. Si vous avez besoin de configurer quelque chose de compliqué, comme faire lire à debconf une base de données distante pour obtenir les valeurs par défaut, annulées par des variables locales, lisez la page de manuel debconf.conf(5) pour tous les détails croustillants. La base de données principale se trouve généralement dans /var/cache/debconf/.
Installation des paquets sans surveillance
Si vous avez beaucoup de machines à gérer, vous aurez sûrement besoin de faire une installation ou une mise à niveau sans surveillance, alors que les réponses par défaut à certaines questions de configuration ne sont pas acceptables. Il y a beaucoup de manières pour faire cela ; toutes impliquent la configuration d'une base de données que debconf utilisera pour obtenir les réponses par défaut que vous voulez.
Avant de lire cette section, vous devriez vraiment lire debconf.conf(5) car vous avez besoin de comprendre le fonctionnement de la base de données de debconf.
Le plus simple pour configurer la base de données est d'installer les paquets sur une machine et de répondre aux questions comme d'habitude. Vous pouvez aussi utiliser dpkg-preconfigure(8) pour configurer un ensemble de paquets sans réellement les installer. Vous pouvez même décider d'écrire une base de données debconf à la main, comme un simple texte...
Une fois que vous avez la base de données, vous devez trouver comment faire pour que les systèmes distants l'utilisent. Cela dépend bien sûr de la configuration de ces systèmes et de la base de données qu'ils doivent utiliser.
Si vous utilisez la base de données LDAP de debconf, un seul serveur LDAP peut répondre à toutes les questions d'installation des paquets d'un réseau complet de machines Debian.
Mais peut-être utilisez-vous quelque chose d'un peu plus facile à configurer, comme par exemple, la base de données de configuration de debconf par défaut, ou ne voulez-vous tout simplement pas que vos systèmes distants utilisent LDAP continuellement. Dans ce cas, la meilleure approche est de configurer temporairement les systèmes distants pour qu'ils ajoutent votre base de données sous leurs propres bases, de manière à ce qu'ils obtiennent les valeurs par défaut de celle-ci. Debconf offre deux variables d'environnement, DEBCONF_DB_FALLBACK et DEBCONF_DB_OVERRIDE, pour le faire à la volée et simplement. Ici, un exemple d'utilisation :
cat /var/cache/debconf/config.dat | \ ssh root@cible "DEBIAN_FRONTEND=noninteractive \ DEBCONF_DB_FALLBACK=Pipe apt-get upgrade"
Cela fait que debconf sur l'hôte distant lit les données passées dans le tube à travers la connexion SSH et les interprète comme une base de données debconf en mode texte. Il n'utilise cette base de données qu'en dernier lieu -- c'est une base de données en lecture seule, où l'on cherche les réponses que la base principale du système ne peut fournir.
Une autre manière d'utiliser la variable d'environnement DEBCONF_DB_FALLBACK :
ssh -R 389:ldap:389 root@cible \ "DEBCONF_DB_FALLBACK='LDAP{host:localhost}' apt-get upgrade"
ssh est utilisé ici pour configurer une connexion LDAP dans un tunnel et lancer debconf. On indique à debconf d'utiliser le serveur LDAP comme base de données de secours. Remarquez l'utilisation de « {host:localhost} » pour configurer l'accès de debconf à la base de données LDAP fournissant le champ « host » avec la valeur « localhost ».
Encore une autre méthode :
scp config.dat root@cible: ssh root@cible "DEBCONF_DB_FALLBACK='File{/root/config.dat}' apt-get upgrade
Ici, vous copiez la base de données avec scp, puis ssh, et vous faites utiliser à debconf la base de données que vous avez copiée. Cela illustre un raccourci que vous pouvez utiliser dans les paramètres de DEBCONF_DB_FALLBACK -- si le nom n'est pas indiqué, celui par défaut est « filename ».
Il y a un problème avec l'utilisation des paramètres de DEBCONF_DB_FALLBACK : alors que la base de données de secours peut fournir des réponses à des questions que les autres bases de données debconf n'ont jamais vues, on ne l'interroge qu'en dernier lieu : après les autres bases de données. Si vous avez besoin d'annuler temporairement une valeur existante sur l'hôte distant, vous devriez plutôt utiliser la variable DEBCONF_DB_OVERRIDE. Comme DEBCONF_DB_FALLBACK, elle configure une base de données temporaire, mais cette base de données est consultée avant les autres et peut être utilisée pour remplacer les valeurs existantes.
Développer pour debconf
Les développeurs de paquet et ceux qui veulent construire des paquets qui utilisent debconf devraient lire debconf-devel(7).
Brièvement, debconf communique avec des scripts de maintenance ou d'autres programmes via les entrée et sortie standard, en utilisant un langage orienté ligne de commandes semblable à ce qui est utilisé par les protocoles usuels de l'internet comme SMTP. Les programmes utilisent ce protocole pour demander à debconf d'afficher les questions et de récupérer les réponses de l'utilisateur. Les questions elles-mêmes sont définies dans des fichiers séparés, appelés « questionnaires », dont le format n'est pas très différent de celui d'un fichier de contrôle de Debian.
Les paquets Debian qui utilisent debconf fournissent généralement un questionnaire et un script de « configuration » (exécuté pour préconfigurer le paquet) dans la partie métadonnées du paquet.
ENVIRONNEMENT
- DEBIAN_FRONTEND
- Utilisée pour changer temporairement l'interface debconf utilisée. Voir plus haut.
- DEBIAN_PRIORITY
- Utilisée pour changer temporairement la priorité que les questions doivent avoir (au minimum) pour être affichées par debconf. Voir plus haut.
- DEBCONF_DEBUG
- Active l'affichage du débogage sur la sortie standard d'erreur. Elle peut être fixée par le nom d'un mécanisme ou par une expression rationnelle qui correspond au nom d'un mécanisme (comme « .* » pour afficher toutes les informations de débogage). Les noms de mécanisme incluent :
- user
- Informations de débogage intéressantes pour un utilisateur de debconf.
- developer
- Informations de débogage intéressantes pour un développeur de paquet.
- db
- Informations de débogage concernant la base de données sous-jacente.
- DEBCONF_NOWARNINGS
- Positionnez-la à « yes » pour désactiver certains avertissements que debconf pourrait afficher. Elle ne supprime pas l'affichage des erreurs fatales.
- DEBCONF_TERSE
- Positionnez-la à « yes » pour activer le mode concis dans lequel les interfaces debconf suppriment autant que possible le bavardage.
- DEBCONF_DB_FALLBACK
- Ajouter une base de données en plus de celles utilisées habituellement, elle est donc utilisée en secours pour obtenir les informations de configuration. Voir la section « Installation des paquets sans surveillance » plus haut. Si la valeur de la variable est le nom d'une base de données existante dans debconf.conf, la base de données sera alors utilisée. Néanmoins, la variable d'environnement peut être utilisée pour configurer une base de données à la volée, en donnant le type de la base de données et des paramètres optionnels (champ:valeur) après le type et entre accolades. Les espaces sont utilisées pour séparer les champs, vous ne pourrez donc pas spécifier de valeur de champ contenant des espaces.
La ligne suivante demande l'utilisation de fallbackdb dans debconf.conf : DEBCONF_DB_FALLBACK=fallbackdb
Alors que cette ligne configure une nouvelle base de données de type fichier, donne un nom de fichier à utiliser et désactive toute sauvegarde : DEBCONF_DB_FALLBACK=File{Filename:/root/config.dat Backup:no}
En résumé, cette ligne configure une base de données de type Fichier avec un nom de fichier : DEBCONF_DB_FALLBACK=File{/root/config.dat}
Remarquez que si la base de données de secours est configurée à la volée, elle sera utilisable en lecture seule par défaut.
- DEBCONF_DB_OVERRIDE
- Ajouter une base de données avant celles utilisées normalement, elle peut donc remplacer les valeurs des autres. La valeur de la variable fonctionne de la même manière que pour DEBCONF_DB_FALLBACK.
- DEBCONF_DB_REPLACE
- Utiliser une base de données particulière au lieu des bases de données utilisées normalement. Cela peut être utile pour des tests avec une base de données séparée sans avoir à créer de fichier debconf.conf séparé, ou pour éviter de verrouiller les bases de données normales.
- DEBCONF_SYSTEMRC
- Si cette variable d'environnement est définie, debconf ignorera le fichier ~/.debconfrc de l'utilisateur et utilisera à la place le fichier de configuration du système.
- DEBCONF_FORCE_DIALOG
- Si cette variable d'environnement est définie, debconf utilisera de préférence dialog à whiptail pour l'interface dialog.
- DEBCONF_FORCE_XDIALOG
- Si cette variable d'environnement est définie, debconf utilisera de préférence Xdialog à whiptail pour l'interface dialog.
- DEBCONF_NONINTERACTIVE_SEEN
- Positionné à "true", cela positionne le drapeau « seen » pour les questions posées dans l'interface non-interactive.
BOGUES
Probablement beaucoup, il y a beaucoup de code ici.
Si vous présentez un rapport de bogue, assurez-vous d'inclure les informations suivantes :
- *
- l'interface debconf que vous utilisiez lorsque le problème est survenu ;
- *
- ce que vous avez fait pour déclencher le problème ;
- *
- le texte complet des messages d'erreur. Si vous pouvez reproduire le bogue, faites-le avec DEBCONF_DEBUG='.*' définie et exportée. Cela accélère beaucoup le débogage.
VOIR AUSSI
debconf.conf(5), debconf-devel(7), dpkg-preconfigure(8), dpkg-reconfigure(8), debconf(1),
AUTEUR
Joey Hess <joeyh@debian.org>
TRADUCTION
Julien Louis <ptitlouis@sysif.net>, 2005 Cyril Brulebois <>, 2006