5.1. Automatic handling of configuration files by dpkg
A package may contain a control information file called conffiles
. This file should be a list of filenames of configuration files needing automatic handling, separated by newlines. The filenames should be absolute pathnames, and the files referred to should actually exist in the package.
When a package is upgraded dpkg
will process the configuration files during the configuration stage, shortly before it runs the package’s postinst
script,
For each file it checks to see whether the version of the file included in the package is the same as the one that was included in the last version of the package (the one that is being upgraded from); it also compares the version currently installed on the system with the one shipped with the last version.
If neither the user nor the package maintainer has changed the file, it is left alone. If one or the other has changed their version, then the changed version is preferred - i.e., if the user edits their file, but the package maintainer doesn’t ship a different version, the user’s changes will stay, silently, but if the maintainer ships a new version and the user hasn’t edited it the new version will be installed (with an informative message). If both have changed their version the user is prompted about the problem and must resolve the differences themselves.
The comparisons are done by calculating the MD5 message digests of the files, and storing the MD5 of the file as it was included in the most recent version of the package.
When a package is installed for the first time dpkg
will install the file that comes with it, unless that would mean overwriting a file already on the file system.
However, note that dpkg
will not replace a conffile that was removed by the user (or by a script). This is necessary because with some programs a missing file produces an effect hard or impossible to achieve in another way, so that a missing file needs to be kept that way if the user did it.
Note that a package should not modify a dpkg
-handled conffile in its maintainer scripts. Doing this will lead to dpkg
giving the user confusing and possibly dangerous options for conffile update when the package is upgraded.