diff options
Diffstat (limited to 'doc/diversions.text')
-rw-r--r-- | doc/diversions.text | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/doc/diversions.text b/doc/diversions.text new file mode 100644 index 000000000..8cfec095a --- /dev/null +++ b/doc/diversions.text @@ -0,0 +1,131 @@ +(These messages have been edited to conform to the terminology +eventually decided on.) + +------- start of digest (2 messages) (RFC 934 encapsulation) ------- +Resent-Message-Id: <m0tcceI-0002c6C@chiark.chu.cam.ac.uk> +Resent-From: ijackson (Ian Jackson) +Resent-To: ian +From: ian@chiark.chu.cam.ac.uk (Ian Jackson) +To: Debian developers list <debian-devel@pixar.com> +Subject: `diverting' dpkg for a particular file +Date: Wed, 17 Jan 96 18:31 GMT + +I'm almost finished with the implementation of a feature for dpkg that +will allow the sysadmin or package maintainer to prevent dpkg from +overwriting a particular file. + +Instead, whenever dpkg finds a package containing that file it +`redirects' the reference to an alternative name. + +Eg, if you were to `divert' /usr/sbin/smail to /usr/sbin/smail.real +then any package containing /usr/sbin/smail would have the file placed +as /usr/sbin/smail.real instead. The feature will work during package +removal, as well. + +There's provision for a single package to be named which is allowed to +provide a version of the file which will installed under the original +name. + +This feature shouldn't be mixed with the conffiles update mechanism, +as this is unlikely to produce useful results and likely to produce +confusion on the part of the user at the very least and possibly on +the part of dpkg too :-). + +No package should contain a file whose name is the diverted name of +another file; dpkg will spot this and balk if such a package is +installed when the diversion is in place, or if a diversion is set up +which involves overwriting an existing file whether managed by dpkg +or not (this latter check only happens if dpkg-divert is given the +--rename option which makes it actually rename any copy of the file +found in the filesystem). + +Only one diversion for a particular file is allowed, and you can't +divert A to B and then B to C. + +[...] + +This feature is intended to be used sparingly; a system administrator +can use it to keep a locally-installed version of a piece of system +software that has to live in a particular place. + +A package should preferably only use it if the package's main function +is to replace the file in question (whether or not the diverted - ie, +replaced, in this case - version of the file needs to be available); +otherwise a sysadmin might find that the feature wasn't available to +them when they wanted to install their own version of the file because +a package had already done so. + +It's possible that I might introduce a facility that would allow +*requests* for redirection of files to be redirected themselves, by +using a special 2nd-level redirection option. + +Ian. +------------------------------ +To: debian-devel@Pixar.com +Subject: Re: `overriding' dpkg for a particular file + +[...] +Forgive me for being perhaps rather baseic, but here are two examples, +diagrammatically: + +1. Administrator wants to replace a Debian-provided program with + their own version, or wants to put a wrapper around it: + ____________________ + smail.deb___________ / \ + | ... | |\____________________/| + | /usr/sbin/smail --+----. | | + | ... | \ | / | + |___________________| \ | /usr | + \ | /usr/sbin | + `-------> /usr/sbin/smail.real | + .-------> /usr/sbin/smail | + ~/stuff/smail/wrapper.c / | | + ~/stuff/smail/wrapper ----' \____________________/ + + # dpkg-divert --divert /usr/sbin/smail.real /usr/sbin/smail + # cp ~fred/stuff/smail/wrapper /usr/sbin/smail + +2. Package maintainer wants to provide an `improved' version of a + file in another package. + + fileutils.deb_______ ____________________ + | ... | / \ + | /bin/ls ----------+----. |\____________________/| + | ... | \ | | + |___________________| \ | / | + \ | /bin | + colour-ls.deb_______ `-------> /bin/ls.mono | + | ... | .--------> /bin/ls | + | /bin/ls ----------+------' | | + | ... | \____________________/ + |...................| + |preinst: | + | dpkg-divert --divert /bin/ls.mono \ + | --package colour-ls /bin/ls + |...................| + |postrm: | + | dpkg-divert --remove --divert /bin/ls.mono \ + | --package colour-ls /bin/ls + |___________________| + +We need a name that applies to `/usr/sbin/smail.real' and +`/bin/ls.mono', the filenames, in both situations, and another name +to apply to `/usr/sbin/smail' and `/bin/ls'. + +Raul Miller writes ("Re: `overriding' dpkg for a particular file"): +[...] +> Also, it would be nice to see either some documentation or some sort +> of warning about the case where the file is a directory. + +If the file is a directory there will be no good effect. This is +because the redirection would affect only the entry for the directory +itself in the packages whose instances if it were being redirected, +and would not affect any of the files in it. + +The most likely result is that dpkg will fail to install the package +because one of the directories where it has files doesn't exist. It +would probably create the `diverted' name of the directory, fail, and +then clean it up. + +Ian. +------- end ------- |