[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Paketkonfiguration



Jochen Schulz <ml@well-adjusted.de> wrote:

> Frank Küster:
>> Jochen Schulz <ml@well-adjusted.de> wrote:
>> 
>> > In einem .deb können Fragen und mögliche Antworten definiert sein. Bei
>> > der Installation wird debconf dann benutzt, um die Antworten zu erhalten
>> > (das muß nicht zwingend ein interaktiver Vorgang sein). Das
>> > entsprechende Skript (IIRC preinst) wertet diese Antworten dann aus und
>> > schreibt entsprechende Konfigurationsdateien. 
>> 
>> Nein; das config-Skript ist dafür da, die Fragen zu stellen, und
>> i.d.R. werden dann im postinst-Skript die Antworten umgesetzt.
>
> Ah, danke für die Korrektur. Ich wollte nur betonen, daß das
> entsprechende Skript nicht selbst die Fragen stellt, sondern debconf
> dafür aufruft.

Jein.  Debconf ist nur eine "Datenbank" bzw. "Datenbanksprache".  Man
muss schon in einem Skript dafür sorgen, dass die debconf-Fragen eine
nach der anderen gestellt werden, oder eben nicht.  Ein typischer
Schnipsel sieht so aus:

# and ask the user to check if this selection is ok
db_input low tex-common/managedlsr || true
db_go

#
# get the answer of the users, ie what files should really be group writeable
db_get tex-common/managedlsr && SELECTED_LSR="$RET" || true
if [ -n "$SELECTED_LSR" ]; then
    #
    # we check wether all the group writeable files belong to the same group
    # if yes, we suggest this group and ask the groupname question,
    # otherwise we ignore this and do *not* play around with groups.
    iscommongroup=-1
    for i in $SELECTED_LSR ; do
      eval tmp=${i}group
      if [ "X$iscommongroup" = "X-1" ] ; then
         iscommongroup=$tmp
      else
         if [ ! $tmp = $iscommongroup ] ; then
            iscommongroup=""
         fi
      fi
    done
    db_set tex-common/groupname "$iscommongroup" || true
    if [ -n $iscommongroup ] ; then
      #
      # here we could be more intelligent and check wether the choosen group
      # actually exist, and if not, reask again!
      #
      db_input low tex-common/groupname || true
      db_go
    fi
...

Es wird also eine Frage gestellt ("db_input; db_go"), die Antwort
abgefrag ("db_get"), mit dem Ergebnis weitergearbeitet (welchen Gruppen
gehören die in der ersten Frage angekreuzten Dateien? - die Variablen
${i}group wurden schon vorher zugewiesen) und anhand dessen dann
entschieden, ob die nächste Frage gestellt werden soll.

Dies geschieht i.d.R. im config-Skript; aber dass das so ist hat nichts
mit den Interna von debconf zu tun, sondern mit der Debian Policy.
Technisch gesehen kann man debconf genauso dafür verwenden, in einem
Programm das der Benutzer aufruft Fragen zu stellen und
Konfigurationsdateien oder irgendetwas anderes zu schreiben.

Gruß, Frank
-- 
Frank Küster
Inst. f. Biochemie der Univ. Zürich
Debian Developer



Reply to: