| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- .TH dpkg\-maintscript\-helper 1 "2011-08-14" "Debian Project" "dpkg suite"
- .SH NAME
- dpkg\-maintscript\-helper \- works around known dpkg limitations in maintainer scripts
- .
- .SH SYNOPSIS
- .B dpkg\-maintscript\-helper
- .IR command " [" parameter "...] \fB\-\-\fP " maint-script-parameter ...
- .
- .SH COMMANDS AND PARAMETERS
- .P
- \fBrm_conffile\fP \fIconffile\fP [\fIlastversion\fP [\fIpackage\fP]]
- .P
- \fBmv_conffile\fP \fIoldconffile\fP \fInewconffile\fP [\fIlastversion\fP [\fIpackage\fP]]
- .
- .SH DESCRIPTION
- .P
- This program is designed to be run within maintainer scripts to achieve
- some tasks that dpkg can't (yet) handle natively either because of design
- decisions or due to current limitations.
- .P
- Many of those tasks require coordinated actions from several maintainer
- scripts (\fBpreinst\fP, \fBpostinst\fP, \fBprerm\fP, \fBpostrm\fP). To
- avoid mistakes the same call simply needs to be put in all scripts and the
- program will automatically adapt its behaviour based on the environment
- variable \fBDPKG_MAINTSCRIPT_NAME\fP and on the maintainer scripts arguments
- that you have to forward after a double dash.
- .
- .SH CONFFILE RELATED TASKS
- .P
- When upgrading a package, dpkg will not automatically remove a conffile (a
- configuration file for which dpkg should preserve user changes) if it is
- not present in the newer version. There are two principal reasons for
- this; the first is that the conffile could've been dropped by accident and
- the next version could restore it, users wouldn't want their changes
- thrown away. The second is to allow packages to transition files from a
- dpkg\-maintained conffile to a file maintained by the package's maintainer
- scripts, usually with a tool like debconf or ucf.
- .P
- This means that if a package is intended to rename or remove a conffile,
- it must explicitly do so and \fBdpkg\-maintscript\-helper\fP can be used
- to implement graceful deletion and moving of conffiles within maintainer
- scripts.
- .
- .SS REMOVING A CONFFILE
- .P
- If a conffile is completely removed, it should be removed from disk,
- unless the user has modified it. If there are local modifications, they
- should be preserved. If the package upgrades aborts, the newly obsolete
- conffile should not disappear.
- .P
- All of this is implemented by putting the following shell snippet in the
- \fBpreinst\fP, \fBpostinst\fP and \fBpostrm\fP maintainer scripts:
- .P
- dpkg\-maintscript\-helper rm_conffile \\
- \fIconffile\fP \fIlastversion\fP \fIpackage\fP \-\- "$@"
- .P
- \fIconffile\fP is the filename of the conffile to remove.
- \fIlastversion\fP is the last version of the package that contained the
- conffile (or the last version of the package that did not take care to
- remove the obsolete conffile if this was not immediately implemented).
- If \fIlastversion\fP is empty or omitted, then the operation is tried
- on every upgrade. \fIpackage\fP is the package name, it's optional as it will
- default to $DPKG_MAINTSCRIPT_PACKAGE (this variable is set by dpkg to the
- name of the package acted upon). All the parameters of the maintainer
- scripts have to be forwarded to the program after "\-\-".
- .P
- Current implementation: in the \fBpreinst\fP, it checks if the conffile
- was modified and renames it either to \fIconffile\fP\fB.dpkg\-remove\fP (if not
- modified) or to \fIconffile\fP\fB.dpkg\-backup\fP (if modified). In the
- \fBpostinst\fP, the latter file is renamed to \fIconffile\fP\fB.dpkg\-bak\fP
- and kept for reference as it contains user modifications but the former will
- be removed. If the package upgrade aborts, the \fBpostrm\fP reinstalls the
- original conffile. During purge, the \fBpostrm\fP will also delete the
- \fB.dpkg\-bak\fP file kept up to now.
- .
- .SS RENAMING A CONFFILE
- .P
- If a conffile is moved from one location to another, you need to make sure
- you move across any changes the user has made. This may seem a simple
- change to the \fBpreinst\fP script at first, however that will result in
- the user being prompted by dpkg to approve the conffile edits even though
- they are not responsible of them.
- .P
- Graceful renaming can be implemented by putting the following shell
- snippet in the \fBpreinst\fP, \fBpostinst\fP and \fBpostrm\fP maintainer
- scripts:
- .P
- dpkg\-maintscript\-helper mv_conffile \\
- \fIoldconffile\fP \fInewconffile\fP \fIlastversion\fP \fIpackage\fP \-\- "$@"
- .P
- \fIoldconffile\fP and \fInewconffile\fP are the old and new name of the
- conffile to rename. \fIlastversion\fP is the last version of the package
- that contained the conffile with the old name. If \fIlastversion\fP is
- empty or omitted, then the operation is tried on every upgrade (note: it's
- safer to give the version and have the operation tried only once). \fIpackage\fP
- is the package name, it's optional as it will default to
- $DPKG_MAINTSCRIPT_PACKAGE (this variable is set by dpkg to the name of the
- package acted upon). All the parameters of the maintainer scripts have to
- be forwarded to the program after "\-\-".
- .P
- Current implementation: the \fBpreinst\fP checks if the conffile has been
- modified, if yes it's left on place otherwise it's renamed to
- \fIoldconffile\fP\fB.dpkg\-remove\fP. On configuration, the \fBpostinst\fP
- removes \fIoldconffile\fP\fB.dpkg\-remove\fP and renames \fIoldconffile\fP
- to \fInewconffile\fP if \fIoldconffile\fP is still available. On
- abort\-upgrade/abort\-install, the \fBpostrm\fP renames
- \fIoldconffile\fP\fB.dpkg\-remove\fP back to \fIoldconffile\fP if required.
- .
- .SH INTEGRATION IN PACKAGES
- .P
- Given that \fBdpkg\-maintscript\-helper\fP is used in the \fBpreinst\fP,
- using it unconditionally requires a pre-dependency to ensure that the
- required version of dpkg has been unpacked before. The required version
- depends on the command used, for \fBrm_conffile\fP and \fBmv_conffile\fP
- it is 1.15.7.2:
- .P
- \fBPre\-Depends:\fP dpkg (>= 1.15.7.2)
- .P
- But in many cases the operation done by the program is not critical for
- the package, and instead of using a pre-dependency we can call the
- program only if we know that the required command is supported by
- the currently installed dpkg:
- .P
- if dpkg\-maintscript\-helper supports \fIcommand\fP; then
- dpkg\-maintscript\-helper \fIcommand\fP ...
- fi
- .
- .SH AUTHORS
- Copyright \(co 2010 Rapha\[:e]l Hertzog
- .br
- Copyright \(co 2008 Joey Hess
- .br
- Copyright \(co 2007 Guillem Jover
- .br
- Copyright \(co 2005 Scott James Remnant
- .sp
- This is free software; see the GNU General Public Licence version 2 or
- later for copying conditions. There is NO WARRANTY.
|