Man page - debconf-devel(7)

Packages contains this manual

Available languages:

en fr es pt ru ro de

Manual

DEBCONF-DEVEL

NOM
DESCRIPTION
LE SCRIPT DE CONFIGURATION
LE FICHIER TEMPLATES
QUESTIONS
MESSAGES PARTAGÉS
LE PROTOCOLE DEBCONF
BIBLIOTHÈQUES
LE SCRIPT POSTINST
AUTRES SCRIPTS
LOCALISATION
RÉCAPITULATION
DÉBOGAGE
PROGRAMMATION AVANCÉE AVEC DEBCONF
Manipulation du fichier de configuration
Permettre à l’utilisateur de revenir en arriùre
Éviter les boucles infinies
Choisir parmi plusieurs paquets liés
BIDOUILLES
VOIR AUSSI
AUTEUR
TRADUCTION

NOM

debconf - guide du développeur

DESCRIPTION

C’est un guide pour crĂ©er des paquets qui utilisent debconf.

Ce manuel suppose que vous connaissez bien debconf en tant qu’utilisateur et que vous ĂȘtes familier avec les bases de la construction des paquets Debian.

Ce manuel commence par expliquer les deux nouveaux fichiers ajoutĂ©s aux paquets Debian qui utilisent debconf. Puis il explique comment le protocole debconf fonctionne et vous indique les bibliothĂšques qui permettent de communiquer avec le protocole. Il traite les autres scripts d’administration oĂč debconf est typiquement utilisé : les scripts postinst et postrm. Ensuite, il passe Ă  des sujets plus pointus comme le partage des questionnaires debconf, le dĂ©bogage, d’autres techniques courantes et les piĂšges de la programmation avec debconf. Il se termine par une discussion sur les dĂ©fauts actuels de debconf.

LE SCRIPT DE CONFIGURATION

Debconf ajoute un script d’administration, le script config, au jeu de scripts pouvant ĂȘtre prĂ©sents dans un paquet Debian (les scripts postinst, preinst, postrm, prerm). Le script config doit poser toutes les questions nĂ©cessaires Ă  la configuration du paquet.

Remarque : il est un peu ennuyeux que dpkg considÚre le script postinst du paquet comme un script de « configuration » du paquet ; en effet, un paquet utilisant debconf est souvent pré-configuré, par son script config, avant que le script postinst soit lancé. Mais, bon !

Lorsque le script config est lancĂ©, deux paramĂštres lui sont passĂ©s ; il en va de mĂȘme pour le script postinst. Le premier est l’action Ă  effectuer et le second est la version du paquet actuellement installĂ©. Donc, comme pour un script postinst, vous pouvez utiliser dpkg --compare-versions sur $2 pour effectuer une action seulement en cas de mise Ă  niveau d’une version particuliĂšre du paquet ou d’autres actions de ce type.

Le script config peut ĂȘtre lancĂ© de l’une de ces trois façons :

1

Si un paquet est pré-configuré, avec dpkg-preconfigure, son script config est lancé avec les paramÚtres « configure » et « installed-version ».

2

Lorsque le script postinst d’un paquet est lancĂ©, debconf essaiera aussi de lancer le script config, avec les mĂȘmes paramĂštres que ceux qui sont passĂ©s lorsqu’il est prĂ©-configurĂ©. C’est nĂ©cessaire car le paquet n’a peut-ĂȘtre pas Ă©tĂ© prĂ©-configurĂ©, et donc le script config doit alors ĂȘtre lancĂ©. Veuillez consulter la section BIDOUILLES pour plus de prĂ©cisions.

3

Si un paquet est reconfiguré, avec dpkg-reconfigure, son script config est lancé et les paramÚtres « reconfigure » et le numéro de la version installée lui sont passés.

Notez que puisqu’une installation ou une mise Ă  niveau typique utilisant apt exĂ©cute les Ă©tapes 1 et 2, le script config sera lancĂ© deux fois. La seconde fois, il ne devrait rien faire (poser les questions deux fois de suite est ennuyeux) et il devrait ĂȘtre nettement idempotent. Par chance, debconf Ă©vite par dĂ©faut de rĂ©pĂ©ter les questions, donc c’est relativement facile Ă  effectuer.

Notez que le script config est lancĂ© avant que le paquet ne soit dĂ©paquetĂ©. Il ne devrait utiliser que des commandes disponibles dans les paquets essentiels. La seule dĂ©pendance qui est sĂ»re d’ĂȘtre satisfaite lorsque son script config est lancĂ© est une dĂ©pendance (Ă©ventuellement sur une version spĂ©cifique) sur debconf lui-mĂȘme.

Le script config ne devrait pas avoir besoin de modifier le systĂšme de fichiers. Il vĂ©rifie seulement l’état du systĂšme et pose des questions. Debconf conserve alors les rĂ©ponses, qui pourront ĂȘtre utilisĂ©es par le script postinst. Et inversement, le script postinst ne devrait presque jamais utiliser debconf pour poser des questions, mais devrait Ă  la place utiliser les rĂ©ponses aux questions posĂ©es par le script config.

LE FICHIER TEMPLATES

Un paquet qui utilise debconf voudra probablement poser quelques questions. Ces questions sont conservées sous une forme standard dans le fichier templates.

Comme le script config, le fichier templates est inclus dans la section control.tar.gz d’un paquet. Son format est semblable Ă  celui du fichier control Debian ; un ensemble de paragraphes sĂ©parĂ©s par des lignes vides, oĂč chaque paragraphe possĂšde une forme du type RFC 822 :

Template: toto/tata
Type: string
Default: toto
Description: Il s’agit d’un exemple de question
Ceci est la description longue
.
Veuillez noter que :
- comme dans une description de paquet Debian, un point seul définit un
nouveau paragraphe ;
- la plupart du texte est reformaté, mais le texte avec une indentation
double est gardĂ© tel quel, ainsi vous pouvez l’utiliser pour des listes,
comme celle-ci. Soyez prudent, comme il n’est pas reformatĂ©, s’il est
trop large, il s’affichera mal. Il vaut mieux l’utiliser pour des
éléments courts (donc ceci est un mauvais exemple).

Template: toto/titi
Type: boolean
Description: C’est clair n’est-ce pas ?
Ceci est une autre question, de type booléenne.

Pour des exemples concrets de fichiers templates, regardez /var/lib/dpkg/info/debconf.templates, ainsi que les autres fichiers .templates de ce répertoire.

Examinons chaque champ successivement :
Template

Le nom du message, dans le champ « Template », est gĂ©nĂ©ralement prĂ©fixĂ© avec le nom du paquet. Ensuite, l’espace de nommage est trĂšs libre ; vous pouvez utiliser une simple disposition plane, ou dĂ©finir des « sous-rĂ©pertoires » contenant ces questions.

Type

Le type du message dĂ©termine le type d’objet devant ĂȘtre prĂ©sentĂ© Ă  l’utilisateur. Les types actuellement reconnus sont :

string

C’est un champ libre oĂč l’utilisateur peut taper n’importe quelle chaĂźne de caractĂšres.

password

Demande Ă  l’utilisateur un mot de passe. Utilisez-le avec prĂ©caution ; soyez conscient que le mot de passe que l’utilisateur indique sera Ă©crit dans la base de donnĂ©es de debconf. Vous devriez probablement effacer cette valeur de la base de donnĂ©es dĂšs que possible.

boolean

Un choix du type « vrai ou faux ».

select

Un choix entre des valeurs. Les choix doivent ĂȘtre spĂ©cifiĂ©s dans un champ nommĂ© « Choices ». Les valeurs sont sĂ©parĂ©es par des virgules et des espaces, comme ceci :

Choices: oui, non, peut-ĂȘtre

multiselect

Comme le type de donnĂ©es select, exceptĂ© que l’utilisateur peut choisir plusieurs Ă©lĂ©ments de la liste (ou n’en choisir aucun).

note

À la place d’une question, ce type de donnĂ©es indique une note qui peut ĂȘtre affichĂ©e Ă  l’utilisateur. Elle ne devrait ĂȘtre utilisĂ©e que pour des notes importantes que l’utilisateur doit absolument lire, car debconf va dĂ©ployer les grands moyens pour s’assurer que l’utilisateur la lira ; en arrĂȘtant l’installation et en attendant qu’il presse une touche. Il est prĂ©fĂ©rable de n’utiliser ceci que pour signaler des problĂšmes trĂšs sĂ©rieux et le type de donnĂ©es « error » est souvent plus appropriĂ©.

error

Ce type de donnĂ©es est utilisĂ© pour les messages d’erreur, comme des erreurs d’entrĂ©e invalide. Debconf posera une question de ce genre mĂȘme si la prioritĂ© est trop haute, ou si l’utilisateur l’a dĂ©jĂ  vue.

title

Ce type de donnĂ©es est utilisĂ© pour les titres, afin qu’ils soient positionnĂ©s avec la commande SETTITLE.

text

Ce type de donnĂ©es peut ĂȘtre utilisĂ© pour des portions de texte, comme des Ă©tiquettes, qui peuvent ĂȘtre utilisĂ©es pour des raisons cosmĂ©tiques dans l’affichage de certaines interfaces. D’autres interfaces ne l’utiliseront pas. Il n’y a pas de raison de l’utiliser pour l’instant, puisqu’aucune interface ne le gĂšre correctement. Il risque mĂȘme d’ĂȘtre supprimĂ© dans le futur.

Default

Le champ « Default » indique Ă  debconf la valeur par dĂ©faut. Pour multiselect, elle peut ĂȘtre une liste de choix sĂ©parĂ©s par des virgules semblable au champ « Choices ». Pour select, elle devrait ĂȘtre l’un des choix possibles. Pour Boolean, c’est « true » ou « false », alors que cela peut ĂȘtre n’importe quoi pour une chaĂźne de caractĂšres et est ignorĂ© pour les mots de passe.

Ne faites pas l’erreur de penser que le champ default contient la « valeur » de la question, ou qu’il puisse ĂȘtre utilisĂ© pour changer la valeur de la question. Il ne le fait pas, et ne le peut pas, il fournit seulement une valeur par dĂ©faut lorsqu’une question est affichĂ©e pour la premiĂšre fois. Pour fournir une valeur par dĂ©faut qui change Ă  la volĂ©e, vous devriez utiliser la commande SET pour changer la valeur de la question.

Description

Le champ « Description », comme la description d’un paquet Debian, est constituĂ© de deux parties : une description courte et une description longue. Notez que certaines interfaces debconf n’affichent pas la description longue, ou ne l’affichent que si l’utilisateur demande de l’aide. La description courte doit donc suffire Ă  la comprĂ©hension du message.

Si vous n’arrivez pas Ă  trouver une description longue, premiĂšrement, rĂ©flĂ©chissez-y plus longuement. Postez sur debian-devel. Demandez de l’aide. Prenez votre plus belle plume ! Car la description longue est importante. Si aprĂšs tout ça vous n’arrivez toujours pas Ă  proposer quelque chose, laissez-la vide. Cela n’apporte rien de recopier la description courte.

Le texte dans la description longue sera reformatĂ©, Ă  moins qu’il ne soit prĂ©fixĂ© avec une espace supplĂ©mentaire (aprĂšs l’espace requise). Vous pouvez le dĂ©couper en plusieurs paragraphes en les sĂ©parant par " ." sur une ligne.

QUESTIONS

Une question est une instance d’un message. En demandant Ă  debconf d’afficher une question, votre script config peut interagir avec l’utilisateur. Quand debconf charge un questionnaire (cela arrive Ă  chaque fois qu’un script postinst ou config est lancĂ©), il crĂ©e automatiquement la question Ă  partir du message. Il est possible de crĂ©er plusieurs questions indĂ©pendantes Ă  partir d’un mĂȘme message (en utilisant la commande REGISTER), mais c’est rarement nĂ©cessaire. Les messages sont des donnĂ©es statiques qui proviennent du fichier templates, alors que les questions sont utilisĂ©es pour conserver des donnĂ©es dynamiques, comme la valeur actuelle d’une question, ou si un utilisateur a dĂ©jĂ  vu une question, etc. Gardez bien Ă  l’esprit la diffĂ©rence entre un message et une question, mais ne vous inquiĂ©tez pas trop.

MESSAGES PARTAGÉS

Il est tout Ă  fait possible que des paquets partagent un message et une question. Tous les paquets doivent fournir une copie identique du message dans leur fichier templates. Cela peut ĂȘtre utile si un groupe de paquets a besoin de poser les mĂȘmes questions et que vous avez envie de ne dĂ©ranger les utilisateurs qu’une seule fois. Les messages partagĂ©s sont gĂ©nĂ©ralement placĂ©s dans le pseudo-rĂ©pertoire shared/ dans l’espace de nommage des questionnaires debconf.

LE PROTOCOLE DEBCONF

Les scripts config communiquent avec debconf en utilisant le protocole debconf. C’est un protocole simple orientĂ© ligne, semblable aux protocoles internet courants comme SMTP. Le script config envoie Ă  debconf une commande en l’écrivant sur la sortie standard. Il peut alors lire la rĂ©ponse de debconf depuis l’entrĂ©e standard.

Les rĂ©ponses de debconf peuvent ĂȘtre scindĂ©es en deux parties : un code de retour numĂ©rique (le premier mot de la rĂ©ponse) et un code de retour Ă©tendu facultatif (le reste de la rĂ©ponse). Le code numĂ©rique utilise 0 pour indiquer un succĂšs et d’autres nombres pour indiquer divers types d’erreur. Pour plus de prĂ©cisions, veuillez consulter le tableau dans les spĂ©cifications debconf de la charte Debian.

Le code de retour Ă©tendu n’a gĂ©nĂ©ralement aucune forme particuliĂšre, vous pourrez donc, dans la plupart des cas, l’ignorer et vous ne devriez pas essayer de l’analyser dans un programme pour savoir ce que debconf est en train de faire. Les commandes comme GET sont des exceptions car elles retournent une valeur dans le code de retour Ă©tendu.

Vous voudrez gĂ©nĂ©ralement utiliser une bibliothĂšque spĂ©cifique Ă  un langage qui gĂšre l’aspect pratique des connexions et des communications avec debconf.

Maintenant, voici les commandes de ce protocole. Ce n’est pas une dĂ©finition complĂšte, veuillez consulter les spĂ©cifications debconf de la charte Debian pour plus d’informations.
VERSION nombre

Vous n’aurez, en gĂ©nĂ©ral, pas besoin d’utiliser cette commande. Elle Ă©change avec le protocole debconf le numĂ©ro de la version utilisĂ©e. La version actuelle du protocole est 2.0 et les versions de la sĂ©rie 2.x assureront la compatibilitĂ© ascendante. Vous pouvez spĂ©cifier le numĂ©ro de version du protocole que vous parlez et debconf retournera la version du protocole qu’il parle dans le code de retour Ă©tendu. Si la version que vous spĂ©cifiez est trop faible, debconf renverra un code de retour numĂ©rique Ă©gal à 30.

CAPB fonctionnalités

Vous n’aurez, en gĂ©nĂ©ral, pas besoin d’utiliser cette commande. Elle Ă©change avec debconf une liste des fonctionnalitĂ©s reconnues (sĂ©parĂ©es par des espaces). Des fonctionnalitĂ©s supportĂ©es par vous et debconf seront utilisĂ©es et debconf rĂ©pondra avec toutes les fonctionnalitĂ©s qu’il accepte.

Si « escape » ne fait pas partie de vos fonctionnalitĂ©s, debconf va attendre que les commandes que vous lui passez comportent des antislashes et des caractĂšres de retour Ă  la ligne Ă©chappĂ©s (comme \\ et \n respectivement) et va faire de mĂȘme pour ses rĂ©ponses. Ceci peut ĂȘtre utilisĂ© par exemple pour changer des chaĂźnes de caractĂšres multilignes en modĂšles, ou pour rĂ©cupĂ©rer des descriptions Ă©tendues multilignes de maniĂšre fiable en utilisant METAGET.

SETTITLE question

Utilisez la description courte du message comme titre de l’écran debconf pour la question indiquĂ©e. Le message devrait ĂȘtre de type titre. Vous n’aurez que rarement besoin de cette commande puisque debconf peut automatiquement gĂ©nĂ©rer un titre basĂ© sur le nom de votre paquet.

DĂ©finir le titre depuis un message signifie que les titres seront stockĂ©s Ă  la mĂȘme place que les autres questions posĂ©es par debconf. Elle permet aussi de traduire ces titres.

TITLE chaĂźne de caractĂšres

Utiliser la chaĂźne de caractĂšres comme titre de l’écran debconf. L’utilisation de la commande SETTITLE est prĂ©fĂ©rable car elle permet de traduire les titres affichĂ©s par debconf.

INPUT priorité question

Demande Ă  debconf de prĂ©parer l’affichage d’une question Ă  l’utilisateur. La question n’est pas affichĂ©e jusqu’à ce que la commande GO soit lancĂ©e ; cela permet de lancer plusieurs commandes INPUT en sĂ©rie, pour construire un jeu de questions qui pourraient toutes ĂȘtre posĂ©es sur un seul Ă©cran.

Le champ prioritĂ© indique Ă  debconf s’il est important que la question soit posĂ©e Ă  l’utilisateur ou non. Les prioritĂ©s sont :

low

ÉlĂ©ments peu importants dont la valeur par dĂ©faut convient dans la majoritĂ© des cas ; seuls ceux qui veulent tout contrĂŽler les voient ;

medium

ÉlĂ©ments normaux qui ont une valeur par dĂ©faut raisonnable ;

high

ÉlĂ©ments qui n’ont pas de valeur par dĂ©faut raisonnable ;

critical

ÉlĂ©ments qui peuvent probablement casser le systĂšme sans l’intervention de l’utilisateur.

Pour dĂ©cider si la question doit ĂȘtre affichĂ©e ou non, debconf se base sur sa prioritĂ©, si l’utilisateur l’a dĂ©jĂ  vue et l’interface qui va ĂȘtre utilisĂ©e. Si la question n’est pas Ă  afficher, debconf retournera un code de retour Ă©gal à 30.

GO

Cette commande demande Ă  debconf d’afficher les questions accumulĂ©es (depuis les commandes INPUT).

Si la fonctionnalitĂ© de sauvegarde est supportĂ©e et si l’utilisateur indique qu’il veut revenir Ă  une Ă©tape prĂ©cĂ©dente, debconf rĂ©pondra avec un code de retour Ă©gal à 30.

CLEAR

Élimine les questions accumulĂ©es (avec les commandes INPUT) sans les afficher.

BEGINBLOCK
ENDBLOCK

Certaines interfaces peuvent afficher plusieurs questions Ă  l’utilisateur en mĂȘme temps. Peut-ĂȘtre qu’à l’avenir une interface pourra regrouper ces questions en blocs sur l’écran. BEGINBLOCK et ENDBLOCK peuvent ĂȘtre placĂ©es autour de plusieurs commandes INPUT pour indiquer des blocs de questions (les blocs peuvent mĂȘme ĂȘtre emboĂźtĂ©s). Étant donnĂ© qu’aucune interface n’est encore aussi sophistiquĂ©e, ces commandes sont pour l’instant ignorĂ©es.

STOP

Cette commande dit Ă  debconf que vous avez fini de communiquer avec lui. En gĂ©nĂ©ral, debconf peut dĂ©tecter la fin de votre programme, cette commande n’est donc pas nĂ©cessaire.

GET question

AprĂšs avoir utilisĂ© INPUT et GO pour afficher une question, vous pouvez utiliser cette commande pour rĂ©cupĂ©rer la valeur indiquĂ©e par l’utilisateur. Cette valeur est renvoyĂ©e dans le code de retour Ă©tendu.

SET question valeur

Cette commande positionne la valeur d’une question et peut ĂȘtre utilisĂ©e pour remplacer la valeur par dĂ©faut avec une valeur que votre programme calcule Ă  la volĂ©e.

RESET question

Cela remet la question à sa valeur par défaut (comme il est spécifié dans le champ « Default » de son message).

SUBST question clé valeur

Des questions peuvent avoir des substitutions incluses dans leurs champs « Description » et « Choices » (l’utilisation de substitutions dans les champs « Choices » fait un peu bidouillage, un meilleur mĂ©canisme sera dĂ©veloppĂ©). Ces substitutions ressemblent Ă  « ${key} ». Quand les questions sont affichĂ©es, les substitutions sont remplacĂ©es par leurs valeurs. Cette commande peut ĂȘtre utilisĂ©e pour fixer la valeur d’une substitution. Cela peut ĂȘtre utile si vous avez besoin d’afficher Ă  l’utilisateur des messages que vous ne pouvez pas mettre dans le fichier templates.

N’essayez pas d’utiliser SUBST pour changer la valeur par dĂ©faut d’une question ; cela ne fonctionnera pas puisqu’il y a la commande SET prĂ©vue Ă  cet effet.

FGET question marque

Une marque peut ĂȘtre associĂ©e Ă  une question. Les marques peuvent avoir une valeur « true » ou « false ». Cette commande renvoie la valeur de la marque.

FSET question marque valeur

Cela fixe la valeur de la marque d’une question. La valeur est soit « true » soit « false ».

La marque « seen » est courante. Elle n’est normalement positionnĂ©e que si un utilisateur a dĂ©jĂ  vu la question. Habituellement, debconf affiche Ă  l’utilisateur seulement les questions dont la marque « seen » est positionnĂ©e Ă  « false » (ou si vous reconfigurez un paquet). Quelquefois vous voulez que l’utilisateur revoie une question -- dans ce cas vous pouvez positionner la marque « seen » Ă  false pour forcer debconf Ă  l’afficher Ă  nouveau.

METAGET question champ

Cela renvoie la valeur d’un champ d’une question associĂ©e Ă  un message (le champ Description, par exemple).

REGISTER message question

Cela crĂ©e une nouvelle question qui est liĂ©e Ă  un message. Par dĂ©faut, chaque message possĂšde une question du mĂȘme nom qui lui est associĂ©e. Toutefois, on peut associer autant de questions que l’on veut Ă  un message et cela permet de crĂ©er beaucoup de questions.

UNREGISTER question

Cela retire une question de la base de données.

PURGE

Appelez cette commande dans votre script postrm lorsque votre paquet est purgé. Il retire toutes les questions concernant votre paquet de la base de données de debconf.

X_LOADTEMPLATEFILE /path/to/templates [owner]

Cette extensions charge le fichier de modÚle spécifié dans la base de données de debconf. Le propriétaire assume que le paquet est en cours de configuration avec debconf.

Voici un exemple simple du protocole debconf en action.

INPUT medium debconf/frontend
30 question skipped
FSET debconf/frontend seen false
0 false
INPUT high debconf/frontend
0 question will be asked
GO
[ debconf affiche ici une question à l’utilisateur. ]
0 ok
GET no/such/question
10 no/such/question doesn’t exist
GET debconf/frontend
0 Dialog

BIBLIOTHÈQUES

Comme parler directement à debconf via son protocole représente trop de travail, il existe quelques bibliothÚques pour vous épargner cette tùche ingrate.

Pour la programmation shell, il y a la bibliothĂšque /usr/share/debconf/confmodule que vous pouvez inclure en dĂ©but d’un script shell ; vous pourrez communiquer avec debconf de façon presque naturelle en utilisant la version en minuscules des commandes du protocole debconf qui sont prĂ©fixĂ©es de « db_ » (par ex. « db_input » et « db_go »). Pour plus de prĂ©cisions veuillez consulter confmodule (3).

Les programmeurs Perl peuvent utiliser le module perl Debconf::Client::ConfModule (3pm) et les programmeurs Python peuvent utiliser le module python debconf.

Le reste de ce manuel utilisera la bibliothùque /usr/share/debconf/confmodule dans des scripts shell à titre d’exemple. Voici un exemple de script config utilisant cette bibliothùque, il pose seulement une question :

#!/bin/sh
set -e
. /usr/share/debconf/confmodule
db_set mypackage/reboot-now false
db_input high mypackage/reboot-now || true
db_go || true

Remarquez l’utilisation de « || true » pour Ă©viter que le script ne meurt si debconf dĂ©cide qu’il ne peut pas afficher une question, ou si l’utilisateur essaie de revenir en arriĂšre. Dans ces situations, debconf renvoie un code de retour non nul et puisque set -e est positionnĂ© dans ce script shell, un code de retour non interceptĂ© le fera abandonner.

Et voici le script postinst correspondant, qui utilise la rĂ©ponse Ă  la question de l’utilisateur pour voir si le systĂšme doit ĂȘtre redĂ©marrĂ© (un exemple plutĂŽt stupide) :

#!/bin/sh
set -e
. /usr/share/debconf/confmodule
db_get mypackage/reboot-now
if [ "$RET" = true ]; then
shutdown -r now
fi

Remarquez l’utilisation de la variable $RET pour rĂ©cupĂ©rer le code de retour Ă©tendu de la commande GET, qui contient la rĂ©ponse de l’utilisateur Ă  la question.

LE SCRIPT POSTINST

La derniĂšre section avait un exemple de script postinst qui utilise debconf pour rĂ©cupĂ©rer la valeur d’une question et agir selon elle. Voici quelques remarques Ă  garder Ă  l’esprit lors de l’écriture des scripts postinst qui utilisent debconf :

*

évitez de poser des questions dans le script postinst. Le script config devrait poser ces questions à sa place en utilisant debconf, pour que la pré-configuration fonctionne par la suite ;

*

incluez toujours /usr/share/debconf/confmodule au dĂ©but de votre script postinst, mĂȘme si vous ne lancez aucune des commandes db_*. C’est nĂ©cessaire pour s’assurer que le script config sera bien lancĂ© (veuillez consulter la section BIDOUILLES pour plus de dĂ©tails) ;

*

Ă©vitez d’afficher quelque chose sur la sortie standard dans votre script postinst, puisque cela peut perturber debconf ; le script postinst ne devrait de toute façon pas ĂȘtre bavard. L’affichage sur la sortie d’erreur est autorisĂ©, si vous le devez ;

*

si votre script postinst lance un démon, soyez sûr de dire à debconf de STOPper à la fin, car debconf peut avoir du mal à détecter la fin du script postinst ;

*

faites accepter à votre script postinst un premier paramÚtre « reconfigure ». Il peut le traiter comme « configure ». Cela sera utilisé dans une version ultérieure de debconf pour permettre aux scripts postinst de savoir quand ils sont reconfigurés.

AUTRES SCRIPTS

En plus des scripts config et postinst, vous pouvez utiliser debconf dans tout autre script d’administration. En gĂ©nĂ©ral, vous utiliserez debconf dans votre script postrm, pour appeler la commande PURGE quand votre paquet est purgĂ©, pour vider ses entrĂ©es dans la base de donnĂ©es de debconf. En fait, cela est automatiquement configurĂ© pour vous par dh_installdebconf (1) .

Un emploi plus sophistiquĂ© de debconf serait de l’utiliser dans le script postrm lors de la purge de votre paquet, pour poser une question concernant la suppression de quelque chose. Ou peut-ĂȘtre avez-vous besoin de l’utiliser dans les scripts preinst ou prerm pour quelque raison que ce soit. Toutes ces utilisations fonctionneront, bien qu’elles impliqueront probablement de poser une question et d’agir en fonction de la rĂ©ponse dans le mĂȘme programme, plutĂŽt que de sĂ©parer les deux actions comme dans les scripts config et postinst.

Notez que si votre paquet n’utilise debconf que dans le script postrm, vous devriez faire en sorte que le script postinst de votre paquet inclue /usr/share/debconf/confmodule, pour que debconf puisse charger votre fichier templates dans sa base de donnĂ©es. Le questionnaire sera alors disponible lorsque votre paquet sera purgĂ©.

Vous pouvez aussi utiliser debconf dans d’autres programmes indĂ©pendants. Le seul problĂšme est que debconf n’est pas conçu pour ĂȘtre un systĂšme d’enregistrement et ne peut pas ĂȘtre utilisĂ© comme tel. La philosophie d’Unix est prĂ©servĂ©e, les programmes sont configurĂ©s Ă  l’aide de fichiers dans /etc, et non pas par une sombre base de donnĂ©es debconf (ce n’est qu’un cache et il peut se volatiliser). RĂ©flĂ©chissez donc longuement avant d’utiliser debconf dans un programme indĂ©pendant.

Cela peut prendre un sens dans certains cas, comme dans le programme apt-setup qui utilise debconf pour interroger l’utilisateur de maniĂšre cohĂ©rente avec le reste de la procĂ©dure d’installation de Debian et qui agit immĂ©diatement avec les rĂ©ponses pour configurer le fichier sources.list.

LOCALISATION

Debconf accepte la localisation des fichiers templates. Cela est accompli en ajoutant d’autres champs contenant les traductions. Tous les champs peuvent ĂȘtre traduits. Par exemple, vous pourriez avoir envie de traduire la description en espagnol. CrĂ©ez simplement un champ nommĂ© « Description-es » contenant la traduction. Si un champ traduit n’est pas disponible, debconf utilise le champ anglais.

En plus du champ « Description », vous devriez traduire le champ « Choices » d’un message de type select ou multiselect. Il faut lister les choix traduits dans l’ordre dans lequel ils apparaissent dans le champ « Choices » principal. Vous ne devriez pas avoir besoin de traduire le champ « Default » d’une question de type select ou multiselect et la valeur de la question sera automatiquement retournĂ©e en anglais.

Vous trouverez sĂ»rement plus facile de gĂ©rer les traductions si vous les conservez dans des fichiers sĂ©parĂ©s ; un fichier par traduction. Par le passĂ©, les programmes debconf-getlang (1) et debconf-mergetemplate (1) Ă©taient utilisĂ©s pour gĂ©rer les fichiers debian/templates.ll. Cela a Ă©tĂ© rendu obsolĂšte par le paquet po-debconf (7), qui permet de traiter les traductions des questionnaires debconf avec des fichiers .po comme les autres traductions. Vos traducteurs vous remercieront pour l’utilisation de ce nouveau mĂ©canisme performant.

Pour plus de prĂ©cisions sur po-debconf, consultez sa page de manuel. Si vous utilisez debhelper, la conversion vers po-debconf est aussi simple que de lancer la commande debconf-gettextize (1) une fois et d’ajouter une dĂ©pendance de construction (« Build-Depends ») sur po-debconf et sur debhelper (>= 4.1.13).

RÉCAPITULATION

Donc vous avez un script config, un fichier templates, un script postinst qui utilisent debconf, etc. RĂ©unir tous ces scripts dans un paquet Debian n’est pas difficile. Vous pouvez le faire Ă  la main ou utiliser dh_installdebconf (1) qui fusionne vos questions-modĂšles traduites, copie les fichiers Ă  la bonne place pour vous et peut mĂȘme gĂ©nĂ©rer l’appel Ă  PURGE qui devrait ĂȘtre placĂ© dans votre script postrm. Assurez-vous que votre paquet dĂ©pende de debconf (>= 0.5), puisque les anciennes versions n’étaient pas compatibles avec tout ce qui est dĂ©crit dans ce manuel. Et c’est terminé !

Mais vous ne pouvez pas encore tester, déboguer et utiliser debconf pour des choses plus intéressantes que de poser de simples questions. Pour cela, veuillez continuer à lire.

DÉBOGAGE

Vous avez donc un paquet qui est supposĂ© utiliser debconf, mais il ne fonctionne pas trĂšs bien. Peut-ĂȘtre que debconf ne pose pas la question que vous avez configurĂ©e. Ou peut-ĂȘtre que quelque chose d’étrange arrive ; il entre dans une boucle infinie, ou pire encore. Heureusement, debconf possĂšde beaucoup de possibilitĂ©s de dĂ©bogage.
DEBCONF_DEBUG

La premiĂšre chose Ă  portĂ©e de main est la variable d’environnement DEBCONF_DEBUG. Si vous positionnez et exportez DEBCONF_DEBUG=developer, debconf affichera sur la sortie d’erreur standard (« stderr ») une copie du protocole debconf lorsque votre programme s’exĂ©cute. Elle ressemblera Ă  quelque chose comme ceci -- la faute est flagrante :

debconf (developer): <-- input high debconf/frontand
debconf (developer): --> 10 "debconf/frontand" doesn’t exist
debconf (developer): <-- go
debconf (developer): --> 0 ok

Lors d’un dĂ©bogage, l’interface readline de debconf est trĂšs utile (d’aprĂšs l’auteur), car les questions ne masquent pas cet affichage, toute la sortie du dĂ©bogage est facilement prĂ©servĂ©e et enregistrĂ©e.

DEBCONF_C_VALUES

Si cette variable d’environnement est dĂ©finie Ă  « true », l’interface graphique affichera les valeurs dans les champs « Choices-C » (s’ils sont prĂ©sents) des modĂšles select et multi-select au lieu des valeurs comprĂ©hensibles.

debconf-communicate

debconf-communicate (1) est un autre programme utile. Lancez-le et vous pourrez parler le protocole debconf brut Ă  debconf. C’est une bonne maniĂšre d’essayer des choses Ă  la volĂ©e.

debconf-show

Si un utilisateur rapporte un problĂšme, debconf-show (1) peut ĂȘtre utilisĂ© pour lister les questions de votre paquet, en affichant leurs valeurs et en indiquant si l’utilisateur les a dĂ©jĂ  vues.

.debconfrc

Pour Ă©viter le cycle ennuyeux construction/installation/dĂ©bogage, il peut ĂȘtre utile de charger vos questionnaires avec debconf-loadtemplate (1) et de lancer votre script config Ă  la main avec la commande debconf (1). NĂ©anmoins, vous devez toujours le faire en tant que superutilisateur, d’accord ? Pas terrible ! Et idĂ©alement vous souhaiteriez ĂȘtre en mesure de voir Ă  quoi ressemble une installation toute fraĂźche de votre paquet avec une base de donnĂ©es debconf propre.

Il s’avĂšre que si vous configurez un fichier ˜/.debconfrc pour un utilisateur normal, pointant vers un config.dat et un template.dat propres Ă  l’utilisateur, vous pouvez charger les questionnaires et lancer tous les scripts config que vous voulez, sans avoir besoin d’un accĂšs super-utilisateur. Si vous voulez commencer avec une base de donnĂ©es propre, supprimez simplement les fichiers *.dat.

Pour plus de dĂ©tails pour mettre cela en place, voyez debconf.conf (5) , et remarquez que /etc/debconf.conf fait un bon modĂšle pour un fichier ˜/.debconfrc personnel.

PROGRAMMATION AVANCÉE AVEC DEBCONF

Manipulation du fichier de configuration

Beaucoup d’entre vous ont l’air de vouloir utiliser debconf pour aider Ă  la gestion des fichiers de configuration contenus dans vos paquets. Peut-ĂȘtre qu’il n’y a pas de bonne valeur par dĂ©faut Ă  inclure dans votre paquet, vous voulez donc utiliser debconf pour interroger l’utilisateur et Ă©crire un fichier de configuration basĂ© sur ses rĂ©ponses. Cela semble assez facile Ă  faire, mais lorsque vous considĂ©rez les mises Ă  niveau, que faire lorsque quelqu’un modifie le fichier de configuration que vous gĂ©nĂ©rez, et dpkg-reconfigure, et...

Il y a beaucoup de maniĂšres de le faire, la plupart d’entre-elles ne sont pas correctes et vous serez souvent ennuyĂ© par des rapports de bogue. Voici une maniĂšre correcte de le faire. Cela suppose que votre fichier config n’est composĂ© que d’une sĂ©rie de variables de shell positionnĂ©es, avec des commentaires entre elles, vous pouvez simplement inclure le fichier pour le « charger ». Si vous avez un format plus compliquĂ©, sa lecture (et son Ă©criture) devient un peu plus dĂ©licate.

Votre script config ressemblera à quelque chose comme ça :

#!/bin/sh
CONFIGFILE=/etc/foo.conf
set -e
. /usr/share/debconf/confmodule

# charge le fichier de configuration, s’il existe.
if [ -e $CONFIGFILE ]; then
. $CONFIGFILE || true

# Enregistrer les valeurs du fichier de configuration
# dans la base de données de debconf
db_set mypackage/toto "$FOO"
db_set mypackage/titi "$BAR"
fi

# Poser les questions.
db_input medium mypackage/toto || true
db_input medium mypackage/titi || true
db_go || true

Et le script postinst ressemblera à quelque chose comme ceci :

#!/bin/sh
CONFIGFILE=/etc/foo.conf
set -e
. /usr/share/debconf/confmodule

# GĂ©nĂ©rer un fichier de configuration, s’il n’en existe pas.
# Une alternative est d’effectuer une copie dans un fichier
# modĂšle depuis un autre endroit.
if [ ! -e $CONFIGFILE ]; then
echo "# Fichier de configuration pour mon paquet" > $CONFIGFILE
echo "TOTO=" >> $CONFIGFILE
echo "TITI=" >> $CONFIGFILE
fi

# Substituer les valeurs par celles de la base
# de données de debconf. Des optimisations
# évidentes sont possibles ici. Le cp avant
# le sed permet de s’assurer que l’on ne dĂ©truit
# pas le systĂšme des droits du fichier config.
db_get mypackage/foo
TOTO="$RET"
db_get mypackage/bar
TITI="$RET"
cp -a -f $CONFIGFILE $CONFIGFILE.tmp

# Si l’administrateur a supprimĂ© ou commentĂ© des variables mais
# les a ensuite définies via debconf, ajouter (à nouveau) au
# fichier de configuration (conffile).
test -z "$TOTO" || grep -Eq ’ˆ *TOTO=’ $CONFIGFILE || \
echo "TOTO=" >> $CONFIGFILE
test -z "$TITI" || grep -Eq ’ˆ *TITI=’ $CONFIGFILE || \
echo "TITI=" >> $CONFIGFILE

sed -e "s/ˆ *TOTO=.*/TOTO=\"$TOTO\"/" \
-e "s/ˆ *TITI=.*/TITI=\"$TITI\"/" \
< $CONFIGFILE > $CONFIGFILE.tmp
mv -f $CONFIGFILE.tmp $CONFIGFILE

Examinez comment ces deux scripts gĂšrent tous les cas. Sur une nouvelle installation, les questions sont posĂ©es par le script config et un nouveau fichier de configuration est gĂ©nĂ©rĂ© par le script postinst. Pendant les mises Ă  niveau et les reconfigurations, le fichier config est lu, et ses valeurs sont utilisĂ©es pour modifier les valeurs dans la base de donnĂ©es de debconf : les modifications manuelles de l’administrateur ne sont donc pas perdues. Les questions sont posĂ©es Ă  nouveau (et peuvent ĂȘtre affichĂ©es ou non). Puis le script postinst remplace les valeurs dans le fichier config, en laissant le reste du fichier inchangĂ©.

Permettre à l’utilisateur de revenir en arriùre

Peu de choses sont plus frustrantes, quand vous utilisez un systÚme comme debconf, que de répondre à une question posée, puis de passer à un autre écran avec une nouvelle question, de réaliser alors que vous avez fait une erreur dans la derniÚre question et que vous voulez y retourner mais vous découvrez que vous ne le pouvez pas.

Puisque debconf est conduit par votre script config, il ne peut revenir seul Ă  une question prĂ©cĂ©dente, mais avec un petit coup de pouce de votre part, il peut le faire. La premiĂšre Ă©tape est que votre script config fasse savoir Ă  debconf qu’il est capable de gĂ©rer le fait que l’utilisateur presse un bouton de retour en arriĂšre. Vous utiliserez la commande CAPB pour le faire en passant backup en paramĂštre.

Puis, aprĂšs chaque commande GO, vous devez essayer de voir si l’utilisateur a demandĂ© Ă  revenir en arriĂšre (debconf renvoie un code de retour 30) et si c’est le cas, revenir Ă  la question prĂ©cĂ©dente.

Il existe plusieurs maniĂšres d’écrire des structures de contrĂŽle pour que votre programme puisse revenir aux questions antĂ©rieures lorsque c’est nĂ©cessaire. Vous pouvez Ă©crire du code spaghetti plein de goto. Ou vous pouvez crĂ©er plusieurs fonctions et les utiliser de maniĂšre rĂ©cursive. Mais peut-ĂȘtre que la façon la plus correcte et la plus simple est de construire une machine Ă  Ă©tats. Voici le squelette d’une machine Ă  Ă©tats que vous pouvez remplir et amĂ©liorer.

#!/bin/sh
set -e
. /usr/share/debconf/confmodule
db_capb backup

STATE=1
while true; do
case "$STATE" in
1)
# Deux questions sans rapport.
db_input medium ma/question || true
db_input medium mon/autre_question || true
;;
2)
# Ne poser cette question que si la
# réponse à la premiÚre question était oui.
db_get ma/question
if [ "$RET" = "true" ]; then
db_input medium ma/question_dependante || true
fi
;;
*)
# Le cas par défaut est atteint quand $STATE est plus
# grand que le dernier état implémenté, et provoque la
# sortie de la boucle. Ceci requiert que les état soient
# numérotés à partir de 1, successivement, et sans trou,
# puisque l’on entrera dans le cas par dĂ©faut s’il y a un
# trou dans la numérotation
break # quitte la boucle "while"
;;
esac

if db_go; then
STATE=$((STATE + 1))
else
STATE=$((STATE - 1))
fi
done

if [ $STATE -eq 0 ]; then
# L’utilisateur a demandĂ© Ă  revenir Ă  la premiĂšre
# question. Ce cas est problĂ©matique. L’installation
# normale des paquets avec dpkg et apt n’est pas
# capable de revenir en arriĂšre vers les questions
# d’autres paquets, Ă  l’heure oĂč ceci est Ă©crit, donc
# cela va provoquer la sortie, laissant les paquets non
# configurés - ce qui est probablement la meilleure
# façon de gérer la situation.
exit 10
fi

Notez que si tout ce que fait votre script config est de poser quelques questions sans rapport les unes avec les autres, il n’y a pas besoin d’une machine Ă  Ă©tats. Posez simplement toutes les questions et GO ; debconf fera de son mieux pour les prĂ©senter toutes sur un Ă©cran et l’utilisateur n’aura pas besoin de revenir en arriĂšre.

Éviter les boucles infinies

Une chose trĂšs agaçante peut arriver avec debconf si vous avez une boucle dans votre script. Supposez que vous demandiez une entrĂ©e et que vous la validiez, ou que vous effectuiez une boucle si elle n’est pas valable :

ok=''
do while [ ! "$ok" ];
db_input low toto/titi || true
db_go || true
db_get toto/titi
if [ "$RET" ]; then
ok=1
fi
done

Cela parait correct au premier coup d’Ɠil. Mais pensez Ă  ce qui va arriver si la valeur de toto/titi est "" lorsque l’on entre dans cette boucle et que l’utilisateur a fixĂ© la prioritĂ© Ă  high, ou s’il utilise une interface non interactive et qu’on ne lui demande donc aucune entrĂ©e. La valeur de toto/titi n’est pas changĂ©e par db_input et donc le test Ă©choue et boucle. Et boucle...

Une solution Ă  ce problĂšme est de s’assurer qu’avant l’entrĂ©e dans la boucle, la valeur de toto/titi est positionnĂ©e Ă  quelque chose qui permettra de passer le test de la boucle. Donc par exemple si la valeur par dĂ©faut de toto/titi est « 1 », vous pourrez passer la commande RESET toto/titi juste avant d’entrer dans la boucle.

Une autre solution serait de vĂ©rifier la valeur du code de retour de la commande INPUT. Si c’est 30, l’utilisateur ne verra alors pas la question qui lui est posĂ©e et vous devriez sortir de la boucle.

Choisir parmi plusieurs paquets liés

Parfois, un ensemble de paquets liĂ©s peuvent ĂȘtre installĂ©s et vous voulez demander Ă  l’utilisateur lequel doit ĂȘtre utilisĂ© par dĂ©faut. Les dictionnaires, ispell ou les gestionnaires de fenĂȘtres sont des exemples de tels jeux de paquets.

Bien qu’il pourrait ĂȘtre possible de simplement demander « Ce paquet doit-il ĂȘtre celui par dĂ©faut ? » pour chaque paquet de l’ensemble, cela aboutit Ă  un grand nombre de questions rĂ©pĂ©titives si plusieurs de ces paquets sont installĂ©s. Avec debconf, il est possible d’afficher une liste de tous les paquets de l’ensemble et d’autoriser l’utilisateur Ă  choisir l’un d’entre eux. Et voici comment.

Utilisez un message partagé par tous les paquets de cet ensemble. Quelque chose comme ceci :

Template: shared/window-manager
Type: select
Choices: ${choices}
Description: Choisissez une gestionnaire de fenĂȘtres par dĂ©faut
Veuillez choisir le gestionnaire de fenĂȘtres qui sera dĂ©marrĂ© par dĂ©faut
lors du lancement de X.
Description: Select the default window manager.
Select the window manager that will be started by
default when X starts.

Chaque paquet devrait inclure une copie de ce message. Puis il devrait inclure du code comme ceci dans son script config :

db_metaget shared/window-manager owners
OWNERS=$RET
db_metaget shared/window-manager choices
CHOICES=$RET

if [ "$OWNERS" != "$CHOICES" ]; then
db_subst shared/window-manager choices $OWNERS
db_fset shared/window-manager seen false
fi

db_input medium shared/window-manager || true
db_go || true

Une petite explication est nĂ©cessaire. Pour l’instant votre script est lancĂ©, debconf a dĂ©jĂ  lu tous les questionnaires des paquets qui vont ĂȘtre installĂ©s. Puisque tous ces paquets ont une question en commun, debconf enregistre ce fait dans le champ owners. Par une Ă©trange coĂŻncidence, le format du champ owners est le mĂȘme que celui du champ choices (une liste de valeurs sĂ©parĂ©es par virgule et espace).

La commande METAGET peut ĂȘtre utilisĂ©e pour rĂ©cupĂ©rer la liste des propriĂ©taires (« owners ») et la liste des choix. S’ils sont diffĂ©rents, un nouveau paquet est alors installĂ©. Utilisez alors la commande SUBST pour modifier la liste des choix afin qu’elle soit identique Ă  celle des propriĂ©taires et posez la question.

Lorsqu’un paquet est supprimĂ©, vous voudrez probablement voir si ce paquet est le choix actuellement sĂ©lectionnĂ© et s’il l’est, demander Ă  l’utilisateur de sĂ©lectionner un autre paquet pour le remplacer.

Cela peut ĂȘtre accompli en ajoutant quelque chose comme ceci dans le script prerm de tous les paquets liĂ©s (en remplaçant <paquet> par le nom du paquet) :

if [ -e /usr/share/debconf/confmodule ]; then
. /usr/share/debconf/confmodule
# Je ne veux plus de cette question.
db_unregister shared/window-manager

# Regarde si la question partagée existe toujours.
if db_get shared/window-manager; then
db_metaget shared/window-manager owners
db_subst shared/window-manager choices $RET
db_metaget shared/window-manager value
if [ "<paquet>" = "$RET" ] ; then
db_fset shared/window-manager seen false
db_input high shared/window-manager || true
db_go || true
fi

# Maintenant faites ce que le script postinst faisait
# pour mettre Ă  jour le lien symbolique du gestionnaire de
# fenĂȘtre.
fi
fi

BIDOUILLES

Debconf n’est pas encore entiĂšrement intĂ©grĂ© Ă  dpkg (mais je veux changer ça), cela demande donc actuellement quelques bidouilles peu propres.

Le pire de ces bidouillages est le lancement du script config. Le fonctionnement actuel est de lancer le script config lorsque le paquet est prĂ©-configurĂ©. Puis, lorsque le script postinst s’exĂ©cute, il lance debconf. Debconf remarque qu’il va ĂȘtre utilisĂ© par le script postinst, il s’arrĂȘte et lance le script config. Cela ne fonctionne que si votre script postinst charge l’une des bibliothĂšques debconf, les scripts postinst doivent toujours prendre soin de les charger. Nous espĂ©rons nous attaquer Ă  cela plus tard en ajoutant un support explicite de debconf dans dpkg. Le programme debconf (1) est une Ă©tape dans ce sens.

Une bidouille similaire est de lancer debconf lorsqu’un script config, postinst, ou d’autres programmes qui l’utilisent commence. AprĂšs tout, ils espĂšrent avoir la possibilitĂ© de communiquer avec debconf d’une façon correcte. Pour l’instant, la maniĂšre dont cela est accompli est que lorsqu’un tel script charge une bibliothĂšque debconf (comme /usr/share/debconf/confmodule) et que debconf n’est pas dĂ©jĂ  lancĂ©, il est dĂ©marrĂ© et une nouvelle copie du script est rĂ©-exĂ©cutĂ©e. Le seul rĂ©sultat perceptible est que vous avez besoin de mettre la ligne qui charge une bibliothĂšque debconf au tout dĂ©but du script, ou des choses Ă©tranges arriveront. Nous espĂ©rons examiner ça plus tard en changeant l’invocation de debconf et le changer en un dĂ©mon provisoire.

La façon dont debconf trouve quels fichiers templates charger et quand les charger ressemble vraiment Ă  une bidouille. Lorsque les scripts config, preinst et postinst invoquent debconf, il trouvera automatiquement l’emplacement du fichier templates et le chargera. Les programmes indĂ©pendants qui utilisent debconf forceront debconf Ă  rechercher les fichiers templates dans /usr/share/debconf/templates/nomduprog.templates. Et si un le script postrm veut utiliser debconf au moment de la purge, les questionnaires ne seront pas disponibles Ă  moins que debconf ait une opportunitĂ© de les charger dans son script postinst. Cela n’est pas trĂšs propre mais presque inĂ©vitable. Dans le futur, certains de ces programmes pourraient malgrĂ© tout avoir la possibilitĂ© d’utiliser debconf-loadtemplate Ă  la main.

Le comportement historique de /usr/share/debconf/confmodule de jouer avec les descripteurs de fichier et de configurer un descripteur de fichier spĂ©cial (« fd #3 ») qui communique avec debconf, peut causer toutes sortes de trouble lorsqu’un dĂ©mon est lancĂ© par un script postinst, puisque le dĂ©mon cesse de communiquer avec debconf et que debconf ne peut pas savoir quand le script se termine. La commande STOP peut ĂȘtre utilisĂ©e pour ceci. Nous envisagerons plus tard de faire passer la communication avec debconf Ă  travers une socket ou un autre mĂ©canisme que les entrĂ©es et sorties standard.

Debconf positionne DEBCONF_RECONFIGURE=1 avant de lancer les scripts postinst, donc un script postinst voulant Ă©viter des opĂ©rations coĂ»teuses lorsqu’il est reconfigurĂ© peut regarder cette variable. C’est une bidouille car la meilleure chose Ă  faire serait de lui passer $1 = "reconfigure", mais le faire sans casser tous les scripts postinsts qui utilisent debconf est difficile. Le projet de migration pour cette bidouille est d’encourager les gens Ă  Ă©crire des scripts postinst qui acceptent "reconfigure" et, une fois qu’ils le feront tous, commencer Ă  passer ce paramĂštre.

VOIR AUSSI

debconf (7) est le guide de l’utilisateur de debconf.

La spécification debconf dans la charte Debian est une définition canonique du protocole debconf. /usr/share/doc/debian-policy/debconf_specification.txt.gz

debconf.conf (5) contient beaucoup d’informations, y compris des informations sur les pilotes de la base de donnĂ©es.

AUTEUR

Joey Hess <joeyh@debian.org>

TRADUCTION

Julien Louis <ptitlouis@sysif.net>, 2005
Cyril Brulebois <kibi@debian.org>, 2006

Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le paquet debconf.