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

Debconf problem



Hi,

I posted this question yesterday on -mentors, but since nobody answered,
it seems it isn't as trivial as I had hoped.

I have either some fundamental misunderstanding of how debconf or
maintainer scripts work, or there is an error in the descriptioin of how
debconf-using scripts should handle configuration files.  In
debconf-devel(7), the section "Config file handling" under "ADVANCED
PROGRAMING WITH DEBCONF" suggests the following config script:

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

        # Load config file, if it exists.
        if [ -e $CONFIGFILE ]; then
            . $CONFIGFILE || true

            # Store values from config file into
            # debconf db.
            db_set mypackage/foo FOO
            db_set mypackage/bar BAR
        fi

        # Ask questions.
        db_input medium mypackage/foo || true
        db_input medium mypackage/bar || true
        db_go || true

However, in case apt-utils is installed, this script will be run twice:
Once by dpkg-preconfigure, i.e. in the preinst stage, and once by
confmodule when the postinst script sources confmodule.  As far as I can
see, this will have a confusing effect.  Assume the configfile currently
contains

FOO=true

and the local admin wants to change this to 

FOO=false

using dpkg-reconfigure mypackage.  This is what is going to happen:

- The config script is run and sources $CONFIGFILE, FOO is set to true,
  mypackage/foo is set to true in the debconf database, too, and the
  question is asked.  The local admin answers to disable foo, and now
  mypackage/foo is set to false in the database.

- The postinst script is run, sources confmodule, which executes config
  again.  config sources the (yet unchanged) $CONFIGFILE, FOO is set to
  true, and again mypackage/foo is set to true in the debconf database.
  This time, however, debconf does not ask the question again, so "true"
  stays in the database.

- The postinst script is reexecuted by debconf, this time it really
  runs, queries the debconf database, gets the answer "true" for
  mypackage/foo, and does *not* change $CONFIGFILE.

Pleaase, tell me, where is my mistake?

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



Reply to: