If your port installs configuration files to
(or
elsewhere) do not simply list them in the
PREFIX
/etcpkg-plist
. That will cause
pkg_delete(1) to remove the files carefully edited by
the user, and a re-installation will wipe them out.
Instead, install sample file(s) with a
suffix. Then copy the sample file to the real configuration
file name, if it does not already exist. On deinstall
delete the configuration file, but only if it is identical
to the filename
.sample.sample
file.
You need to handle this both in the port
Makefile
, and in the
pkg-plist
(for installation from the
package).
Example of the Makefile
part:
For each configuration file, create the following three
lines in pkg-plist
:
The order of these lines is important. On deinstallation,
the sample file is compared to the actual configuration file.
If these files are identical, no changes have been made by the
user and the actual file can be safely deleted. Because the
sample file must still exist for the comparison, the
@unexec
line comes before the sample
configuration file name. On installation, if an actual
configuration file is not already present, the sample file is
copied to the actual file. The sample file must be present
before it can be copied, so the @exec
line
comes after the sample configuration file name.
To debug any issues, temporarily remove the
-s
flag to cmp(1) for more
output.
See pkg_create(1) for more information on
%D
and related substitution markers.
If there is a very good reason not to install a working
configuration file by default, leave the
@exec
line out of
pkg-plist
and add a
message pointing out
that the user must copy and edit the file before the software
will work.
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.