Man page - debconf-devel(7)
Packages contains this manual
Available languages:
en fr es pt ru ro deManual
DEBCONF-DEVEL
NOMDESCRIPTION
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.