If the port installs configuration files to
PREFIX/etc
(or elsewhere) do
not list them in
pkg-plist
. That will cause
pkg delete
to remove files that have been carefully
edited by the user, and a re-installation will wipe them
out.
Instead, install sample files with a
extension. The filename
.sample@sample
macro automates this,
see Section 7.6.7, “@sample
file
” for what it does
exactly. For each sample file, add a line to
pkg-plist
:
@sample etc/orbit.conf.sample
If there is a very good reason not to install a working
configuration file by default, only list the sample filename in
pkg-plist
, without the @sample
part, and add a message pointing out that the
user must copy and edit the file before the software will
work.
When a port installs its configuration in a subdirectory
of ${PREFIX}/etc
, use
ETCDIR
, which defaults to
${PREFIX}/etc/${PORTNAME}
, it can be
overridden in the ports Makefile
if there
is a convention for the port to use some other directory. The
%%ETCDIR%%
macro will be used in its
stead in pkg-plist
.
The sample configuration files should always have the
.sample
suffix. If for some historical
reason using the standard suffix is not possible, use
this construct:
@unexec if cmp -s %D/etc/orbit.conf-dist %D/etc/orbit.conf; then rm -f %D/etc/orbit.conf; fi etc/orbit.conf-dist @exec if [ ! -f %D/etc/orbit.conf ] ; then cp -p %D/%F %B/orbit.conf; fi
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(8) for more information on
%D
and related substitution markers.
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 <[email protected]>.
Send questions about this document to <[email protected]>.