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

Re: Proposed handling of generated configuration files (Re: stop the "manage with debconf" madness)



* Matt Zimmerman

 > There was a more recent discussion about the same idea.  A summary of the
 > goals:
 >
 > - Don't try to parse every program's configuration file format
 >
 > - Notice that a non-conffile, autogenerated configuration file has been
 >   modified by the user, and don't lose their changes
 >
 > - Provide 3-way merge functionality to incorporate changes without losing
 >   modifications in the common case (I hear this is coming for conffiles as
 >   well)
 >
 > - Use debconf for prompting
 >
 > - Have all packages do this using a standard toolset, so that all prompting
 >   is consistent and well-translated, and certain defaults can be set
 >   globally (see the threads below for more discussion about this)

  Hey, you just described how how ucf can be used.  Here's a crash course on
 how to use it in package "fnord"'s maintainer scripts:

      fnord.config:
    db_input fnord/something_that_has_no_good_default_answer
    db_go

      fnord.postinst:
    db_get fnord/something_that_has_no_good_default_answer
    cat << _eof > /usr/share/fnord/managed-conffiles/fnord.cf
    # configuration file for fnord.

    setting_with_acceptable_default1 = quux
    setting_with_acceptable_default2 = zoot

    # this variable hasn't got any good default.
    variable_with_no_good_default = $RET
    _eof
    db_stop
    ucf /usr/share/fnord/managed-conffiles/fnord.cf /etc/fnord.cf < /dev/tty

  Lo and behold!  We've just achieved your goals, using tools already in
 the archive!

  If /usr/share/fnord/managed-conffiles/fnord.cf changes, because of
 a dpkg-reconfigure where the user gives another answer, or a upgrade
 where the template has been changed by the maintainer (or a combination),
 and the user has changed /etc/fnord.cf, ucf will pop up a question which
 closely resembles dpkg's counterpart:

    Configuration file `/void/home/tore/ucftest/cf'
     ==> File on system created by you or by a script.
     ==> File also in package provided by package maintainer.
       What would you like to do about it ?  Your options are:
        Y or I  : install the package maintainer's version
        N or O  : keep your currently-installed version
          D     : show the differences between the versions
    (...)

  Local modification will be kept, if the user wants them to be!  So
 there's no reason anyone to supply configuration files with comments
 such as "## don't edit this file; it belongs to the maintainer scrips!",
 even if the file is dynamically created.  The user doesn't need to know
 that whether or not not a conffile or a ucf-handled configuration file.

  But wait!  There's more! -- if you supply the --three-way option to ucf
 in your postinst, the rest of ucf's question looks like this:

        3 or T  : show a thre way difference between current, older,
                  and new versions of the file
          M     : Do a 3 way merge between current, older,
                  and new versions of the file [Very Experimental]

  Exactly what you wanted, yes?

-- 
Tore Anderson



Reply to: