Provided by: sysconftool_0.21-1build1_amd64 bug

NAME

       sysconftool - format of configuration files installed by sysconftool

SYNOPSIS

          #
          ##VERSION: $Id$

          ##NAME: configname1:configname1version
          #
          # Description

          SETTING1=VALUE1

          ##NAME: configname2:configname2version
          #
          # Description

          SETTING2=VALUE2

          ...

DESCRIPTION

       This manual page describes the format of configuration files installed by
       sysconftool(1)[1]. This format is flexible enough to accommodate any kind of application
       configuration file format.  sysconftool makes four assumptions about the configuration
       file:

        1. It is a plain text file.

        2. Lines that begin with a single '#' character are comments that contain a description
           of the following configuration setting.

        3. Lines that do not begin with the '#' character contain the configuration setting
           described by the previous comment lines.

        4. Configuration settings are self contained, and completely independent, changing one
           configuration setting never requires that another, different, configuration setting
           must be changed too (perhaps any logical conflicts are automatically resolved by the
           application in a safe, fallback, manner)

       The additional information used by sysconftool is encoded as specially-formatted comment
       lines that begin with two '#' characters.

FILENAMES

       An application installs a default configuration file as "filename.dist", when the actual
       name of the configuration file is really "filename". If there is no existing filename,
       sysconftool simply copies filename.dist to filename, and calls it a day. Otherwise,
       sysconftool copies the existing filename to filename.bak and creates a new filename based
       on the contents of both files.

       sysconftool is designed to solve a common problem with application configuration. New
       versions of applications often include additional functionality that requires new
       configuration settings. Without the new configuration settings the application will not
       work, so new configuration files should be installed during the upgrade. However, when
       that happens, any changes to the existing configuration settings are lost.  sysconftool is
       designed to solve this dillemma, and merge old configuration settings with new ones.
       sysconftool is designed in a fail-safe way. Whenever there's a doubt as to what's The
       Right Thing To Do, sysconftool will use the configuration settings from the new file, that
       are supposedly known to be good, and leave it up to a physical being to sort out any
       conflicts and make any manual decisions.

FILE VERSIONING

       The following line should appear at the beginning of filename.dist:

              ##VERSION: version

       This doesn't have to be the very first line in filename.dist, but it should appear
       somewhere within the first twenty lines, right before the first configuration setting.
       "version" should be some kind of an identifier for this particular version of the
       configuration files. All that sysconftool cares about is that any change to the default
       configuration, in filename.dist, results in a different version. An excellent way to do
       this is to simply use the $Id$ RCS/CVS version identification strings, and have this
       little detail taken care of automatically.

       New revisions of an application should not necessarily have a new configuration file
       version. If the default application configuration settings have not changed from the
       previous release, version can remain the same.  version is copied from filename.dist to
       filename.

       If there's an existing filename, and it includes the same version identifier, sysconftool
       silently skips over this configuration file, and doesn't do anything, assuming that this
       configuration file has already been installed. Therefore, running sysconftool more than
       once (accidentally) will not break anything.

       If there's an existing filename, but it's version is different, sysconftool backs it up to
       filename.bak, then creates a new filename. If there's an existing filename, but it doesn't
       contain a recognizable "##VERSION: version" line, sysconftool assumes that the previous
       version of the application did not use the sysconftool tool. That's not a problem.
       filename is copied to filename.bak, and filename.dist gets installed as the new filename,
       allowing sysconftool to work with the next version of this configuration file.

CONFIGURATION SETTING VERSIONING

       Each configuration setting uses the following format in the configuration file:

              ##NAME: name:revision
              #
              # description

              setting

       sysconftool looks for a line that begins with "##NAME". This line gives the name and the
       revision of the following setting.  name must be unique within its configuration file (the
       same name can be used by different configuration files, sysconftool works with one file at
       a time).  revision is used by sysconftool to decide when the configuration setting can be
       safely carried over from an older configuration file, and when it is better to reinstall
       the default setting from the new configuration file.

       One or more comment lines - lines that begin with the '#' character - may follow "##NAME".
       The first line that does not begin with '#' is considered to be the first line that
       contains the value of the configuration setting, which lasts. The value can be spread over
       multiple lines. The configuration setting is considered to last until either the end of
       the file, or until the first following line that begins with another "##NAME".

       Aside from that, sysconftool does not care how the configuration setting is represented.
       It can be "NAME=VALUE", it can be "NAME: VALUE", or "NAME<tab>VALUE", it can even be a
       base64-encoded binary object, and it can always have leading or trailing blank lines.
       sysconftool merely looks at which lines begin with the '#' comment character. After the
       '##NAME:' line, sysconftool looks ahead until the first line that does not begin with '#',
       and that's the first line of the configuration setting. Then, sysconftool looks ahead
       until the next line that starts with a "##NAME:", which marks the end of this
       configuration setting.

       For this reason it is important that all commented description lines that follow '##NAME:'
       must begin with the '#' character. If a blank line follows the line with '##NAME:' it is
       assumed to be the start of the corresponding configuration setting. For example, this is
       correct:

              ##NAME: flag1:0
              #
              #
              # This is the first configuration flag
              #

              flag1=1

       This is not correct:

              ##NAME: flag1:0

              #
              # This is the first configuration flag
              #

              flag1=1

CONFIGURATION FILE CREATION

       A new configuration file, "filename", is created from its previous version, "filename.bak"
       and the new default configuration file, "filename.dist", using the following, simple,
       two-step process.

        1. sysconftool begins with filename.dist in hand. This makes sure that sysconftool begins
           with a good, known, default configuration file.

        2. sysconftool then takes each configuration setting in filename.dist, then searches
           filename.bak. If it finds a configuration setting that has an identical "name" and
           "version", then the corresponding configuration setting value is taken from
           filename.bak, replacing the default in filename.dist. After all configuration settings
           in filename.dist are looked up (and potentially replaced), what's left becomes the new
           filename.

THE END RESULT

       The above process is a logical description. The actual technical implementation is
       slightly different (for example, filename is not backed up to filename.bak until the new
       configuration file has been already created), but is logically equivalent to this process.
       This process carries a number of consequences that must be considered.

       If a new application revision needs a new configuration setting, it will get a new name
       and version. Since filename.dist is used as a starting point for the new configuration
       file, the new configuration file will include the new configuration setting. When a
       configuration setting is removed, it will disappear from the new configuration file for
       the same exact reason.

CONFIGURATION SETTING VERSION

       sysconftool looks at both name and version. A configuration setting with the same name but
       different versions are seen by sysconftool as completely different settings. The existence
       of version allows a finer-grained control of configuration upgrades, as described below.

       sysconftool copies setting values with the same name and version from the old
       configuration file to the new configuration file. However, the associated descriptive
       comments are not copied, and are taken from the new filename.dist. Therefore, if a new
       version of the configuration file contains an updated or an embellished description of a
       particular setting, it will be included in the new configuration file, but the existing
       configuration value will be preserved! Generally, if a configuration setting does not
       change its meaning or function, its name and version should remain the same. Its comments
       can be edited to fix a typo, or revised in a more substantive fashion.  Name and version
       should only be changed if there's a functional change in the configuration setting.

       What to do with name and version after a functional change depends on the nature and the
       magnitude of the change. The nature and the magnitude of the change must be considered not
       only with respect to the most recent revision of the application, but to all the previous
       revisions as well. When in doubt, go based upon the largest change in magnitude, in order
       to guarantee a functional default setting, from filename.dist, and leave it up to a living
       being to manually figure it out.

       If only the default value of a setting should be changed for new application installation,
       but the existing installations can continue to use the existing value of the setting, both
       the name and version should be left alone. Existing configuration settings will be
       preserved, and new installations will get the new default. The descriptive comment of this
       setting can be updated too (see above).

       This should be done only as long as ALL previous values of this configuration setting will
       ALWAYS be valid in the new application revision. If some possible values of this
       configuration setting will no longer be valid, version should be changed.  sysconftool
       does not care how name and version are formatted. Both are opaque labels. The only
       requirements is for the label to be different. The difference between changing version and
       changing both name and version is this:

       If there's an old configuration setting with the same name but different version,
       sysconftool will still use the new, safe, default value from filename.dist, however
       sysconftool will also append an additional comment, on its own accord, reminding the
       reader that this configuration value has been reset, and the reader should consider
       whether to manually restore the configuration value from the old configuration.

MISCELLANEA

       When sysconftool decides to keep an existing setting, with the same name and value, it
       will also insert a short comment to that effect, reminding the reader to check the default
       in filename.dist.

SEE ALSO

       sysconftool(1)[1].

AUTHORS

       Double Precision, Inc.

NOTES

        1. sysconftool(1)
           [set $man.base.url.for.relative.links]/sysconftool.1.html