diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/ChangeLog | 147 | ||||
-rw-r--r-- | doc/Makefile.am | 110 | ||||
-rw-r--r-- | doc/Makefile.in | 93 | ||||
-rw-r--r-- | doc/changelog | 58 | ||||
-rw-r--r-- | doc/deb-old.5 | 2 | ||||
-rw-r--r-- | doc/developer-keys.pgp | bin | 32541 -> 0 bytes | |||
-rw-r--r-- | doc/internals.sgml | 552 | ||||
-rw-r--r-- | doc/lout.li | 1123 | ||||
-rw-r--r-- | doc/manuals-version | 4 | ||||
-rw-r--r-- | doc/obsolete/dependency-ordering.txt | 97 | ||||
-rw-r--r-- | doc/obsolete/descriptions.txt | 112 | ||||
-rw-r--r-- | doc/obsolete/disappear-replace.txt | 44 | ||||
-rw-r--r-- | doc/obsolete/diversions.txt (renamed from doc/obsolete/diversions.text) | 0 | ||||
-rw-r--r-- | doc/obsolete/dpkg.texi | 101 | ||||
-rw-r--r-- | doc/obsolete/dselect-methods.txt | 124 | ||||
-rw-r--r-- | doc/obsolete/essential-flag.txt | 43 | ||||
-rw-r--r-- | doc/obsolete/maintainer-script-args.txt | 173 | ||||
-rw-r--r-- | doc/obsolete/version-ordering.txt | 59 | ||||
-rw-r--r-- | doc/obsolete/virtual-dependencies.txt | 105 | ||||
-rw-r--r-- | doc/policy.sgml | 1619 | ||||
-rw-r--r-- | doc/programmer.sgml | 3370 | ||||
-rw-r--r-- | doc/texinfo.debian_mapping | 18 | ||||
-rw-r--r-- | doc/texinfo.dtd | 94 | ||||
-rw-r--r-- | doc/texinfo.texi_mapping | 120 |
24 files changed, 1102 insertions, 7066 deletions
diff --git a/doc/ChangeLog b/doc/ChangeLog new file mode 100644 index 000000000..336bc0ae7 --- /dev/null +++ b/doc/ChangeLog @@ -0,0 +1,147 @@ +debian-manuals (2.1.2.2) frozen unstable; + + * Fixed even more typographical and grammatical errors in Policy and + Programmer's manual + * Corrected the contact email addresses again. + * Added a paragraph to Policy 6.3 on taking over an old package (Guy Maor) + * Added a paragraph to Programmer 4.2.14 on listing distributions to load + a package into. (Guy Maor) + * Further clarification of use of absolute pathnames in scripts in + Programmer 6.1. + + -- David Morris <bweaver@worf.netins.net> Tue, 3 Dec 1996 23:28:04 -0600 + +debian-manuals (2.1.2.1) frozen unstable; + + * Many editorial and formatting revisions with suggestions from Ian Jackson, + Guy Maor and others + * correction of chiark address in Policy 6.2 + * footnote in Programmers chapter 2 pointing to deb(5) manpage for + description of deb file format. + * addition of more dpkg examples in Programmer chapter 2 + * Replace paragraph in Policy 4.1 outlining compiling parameters for + shared libraries. + * Added paragraph in Programmer 6.1 on paths in maintainer scripts + (Bug #2481) + * Cleaned up language and formatting of Programmer's 12.2, shlibs + * Corrected contact addresses for listmaster and override-change + + -- David Morris <bweaver@worf.netins.net> Wed, 27 Nov 1996 08:17:16 -0600 + +debian-manuals (2.1.2.0) frozen unstable; + + * Mostly editorial changes in Policy Manual. + * Added summary of distribution criteria to Introduction + * Added section headings for copyright criteria + * Fixed typos (Bugs #4485, #4622) + * Added paragraph in Compilation Options related to use of shared and + static libraries. (Bug #5299) + * Paragraph added about where to find PGP and other export restricted + packages in section on Procedure + * Change in List administrator and in the contact address for becoming + a package maintainer + * A paragraph added related to who to contact for package maintainer changes. + * Changed where to send upload announcements: uploads destined for unstable, + frozen, or experimental go to debian-devel-changes. + + * Made some mostly editorial changes to Programmers Manual. + * Added a recommendation to debmake in Introduction. + * A further interpretation of the various Distributions is added with + the intent of helping people decide which one to choose. (section 4.2.14) + * Section 12 on Shared Libraries expanded with further technical information + on various shlib files + * Section in 2.2 on format of shlib file moved to new subsection within 12. + * Paragraph on adding a symlink without version number added to Shared + Library Section (Guy Maor, Bug #5299) + + -- David Morris <bweaver@worf.netins.net> Fri, 22 Nov 1996 23:41:39 -0600 + +debian-manuals (2.1.1.0) unstable; + + * Hard links are forbidden in source packages (they didn't work anyway, + and can't easily be made to work reliably). + * Do not use dpkg-divert or update-alternatives without consultation. + + * Do not need to declare dependencies on Essential packages. + * Restrictions on Pre-Depends stated in policy manual. + * debian/substvars file is now almost always auto-generated. + * Shared libraries must be installed stripped. + * Essential and Pre-Depends put together in policy manual. + + * Explained component-wise (file-wise) vs. package-wise dependencies. + + -- Ian Jackson <ian@chiark.greenend.org.uk> Thu, 12 Sep 1996 01:00:41 +0100 + +debian-manuals (2.1.0.0) unstable; + + * Upstream changelog must be installed too (was just recommended). + + * Modification to use dpkg-shlibdeps added to conversion instructions. + * Packages which are buggy and orphaned but which are preserved for + compatibility go in contrib. + + * Programmers' manual source package section refers to conversion + instructions in policy manual. + * Make it clear that recommending a non-free or contrib package puts a + package in contrib. + + -- Ian Jackson <ian@chiark.chu.cam.ac.uk> Sun, 1 Sep 1996 17:47:18 +0100 + +debian-manuals (2.0.1.0) unstable; + + * varargs.h and libtermcap are obsolete - use stdarg.h and ncurses. + * Shared library link/library ordering corrected (aargh). + * When to byte-compile Elisp files. + * Missing final newlines not represented by dpkg-source. + + * Must post upload announcements to debian-changes. + * Moved some sections into new `configuring and building' chapter. + * Typo fixes. + + -- Ian Jackson <ian@chiark.chu.cam.ac.uk> Sat, 31 Aug 1996 20:07:22 +0100 + +debian-manuals (2.0.0.0) unstable; + + * Footnote added OK'ing copyrights which require name changes. + * More detail about changelog format names. + + * Problematic licence restrictions are formatted as lists. + * Mentioned 822-date utility as way to generate RFC822 format dates. + * Typos corrected. + * Released. + + -- Ian Jackson <ian@chiark.chu.cam.ac.uk> Mon, 26 Aug 1996 14:27:34 +0100 + +debian-manuals (0.2.1.1) unstable; + + * Can't overwrite directories in one package with files in another. + + -- Ian Jackson <ian@chiark.chu.cam.ac.uk> Sat, 24 Aug 1996 18:44:54 +0100 + +debian-manuals (0.2.1.0) unstable; + + * Policy says when and how to include original source in upload. + + * Need -sa on dpkg-genchanges/dpkg-buildpackage when converting. + + * Use minor patchlevel for meaning changes which don't affect packages. + * More verbosity about netiquette. + * Reorganised participation and upload policy: merged with mailing lists. + + -- Ian Jackson <ian@chiark.chu.cam.ac.uk> Fri, 23 Aug 1996 12:48:09 +0100 + +debian-manuals (0.2.0.1) experimental; + + * Said that system administrators' manual does not exist. + + -- Ian Jackson <ian@chiark.chu.cam.ac.uk> Fri, 23 Aug 1996 04:05:36 +0100 + +debian-manuals (0.2.0.0) experimental; + + * Draft releases. + + -- Ian Jackson <ian@chiark.chu.cam.ac.uk> Wed, 21 Aug 1996 15:07:53 +0100 + +Local variables: +mode: debian-changelog +End: diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 000000000..8c0350258 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,110 @@ +## Process this file with automake to produce a Makefile.in + +AUTOMAKE_OPTIONS = 1.1 foreign + +## Directory definitions + +docdir = $(prefix)/doc +pkgdocdir = $(docdir)/@PACKAGE@ + +## Automake variables + +man_MANS = deb.5 deb-old.5 deb-control.5 +pkgdoc_DATA = +EXTRA_DIST = database-structure.fig changelog \ + manuals-version \ + $(SGMLFILES) $(man_MANS) \ + texinfo.dtd \ + texinfo.texi_mapping texinfo.debian_mapping + +HTMLDOCSTAMPS = internals.html-stamp +HTMLDIRS = internals.html +SGMLFILES = internals.sgml +HARDCOPY = internals.ps internals.dvi + +CLEANFILES = $(srcdir)/manuals-version.new +DISTCLEANFILES = +INFOFILES = internals.info + +## Rules + +SUFFIXES = .html-stamp .sgml .ps .fig .monops + +.PHONY: all install-data-local uninstall-local dist-hook clean-local + +all: $(HTMLDOCSTAMPS) $(HARDCOPY) $(INFOFILES) + +$(srcdir)/manuals-version: $(top_srcdir)/debian/changelog + v=`dpkg-parsechangelog -l$< | sed -n 's/^Version: //p'` && \ + echo "<!entity manuals-version \"$$v\">" >$@.new + echo "<!entity dpkg-version \"$(VERSION)\">" >>$@.new + (cmp -s $@.new $@ || mv -f $@.new $@) && rm -f $@.new + +internals.sgmls: internals.sgml texinfo.dtd manuals-version + nsgmls $< > $@ || ($(RM) $@ && false) + +internals.texi: internals.sgmls texinfo.texi_mapping + sgmlsasp $(srcdir)/texinfo.texi_mapping < $< > $@ || ($(RM) $@ && false) + perl -pi -e 's/printindex FN/printindex fn/' $@ || ($(RM) $@ && false) + +internals.ps: internals.dvi + dvips -t letter -o $@ $^ + +internals.dvi: internals.texi + texi2dvi $^ + +internals.info: internals.texi + makeinfo $^ + +internals.html-stamp: internals.texi + -$(RM) -r $*.html* + mkdir $*.html + (cd $*.html && texi2html -monolithic ../$<) + ln -s internals.html $*.html/index.html + touch $@ + +database-structure.ps: database-structure.fig + fig2dev -L ps -c -l _ -P <$< >ps + mv -f ps $@ + +database-structure.monops: database-structure.ps + perl -pe 's:^/(col[0-7]) \{[01 ]*1[01 ]* setrgbcolor\}\ + bind def$$::/$$1 {} bind def:' $< >ps + mv -f ps $@ + +install-data-local: $(HTMLDOCSTAMPS) + $(mkinstalldirs) $(pkgdocdir) + $(INSTALL_DATA) $(top_srcdir)/debian/changelog $(pkgdocdir)/changelog + $(INSTALL_DATA) $(srcdir)/changelog $(pkgdocdir)/changelog.manuals + set -e; for f in $^; do \ + g=`echo $$f | sed -e 's/-stamp$$//'`; \ + cp -r $$g $(pkgdocdir)/`basename $$g`; \ + done + +uninstall-local: + -$(RM) $(pkgdocdir)/changelog.manuals $(pkgdocdir)/changelog + -cd $(pkgdocdir) && rm -rf $(HTMLDIRS) + +dist-hook: $(HTMLDOCSTAMPS) $(HARDCOPY) internals.sgmls internals.texi internals.info + cp -p $^ $(distdir) + for f in `echo $^ | tr ' \t' '\n\n' | sed -ne 's:.html-stamp::gp'`; do set -e; \ + $(RM) -r $(distdir)/`basename $$f.html`; \ + mkdir $(distdir)/`basename $$f.html`; \ + cp -p $$f.html/* $(distdir)/`basename $$f.html`; \ + done + $(RM) -r $(distdir)/obsolete + cp -rp $(srcdir)/obsolete $(distdir)/ + cp -p $(HARDCOPY) $(distdir)/ + +maintainer-clean-local: doc-clean + $(RM) manuals-version + -$(RM) $(srcdir)/Makefile.in + +doc-clean: + -$(RM) *.{aux,cp,dvi,fn,ky,log,pg,toc,tp,vr,bak} + -$(RM) internals.{FN,fns,sgmls,texi,info*} + -$(RM) -r {packaging,internals}.{texi,html-stamp,text,ps,lout} + -$(RM) -r {packaging,internals}.html + -$(RM) manuals-version* + +## End of file. diff --git a/doc/Makefile.in b/doc/Makefile.in deleted file mode 100644 index 381f98c99..000000000 --- a/doc/Makefile.in +++ /dev/null @@ -1,93 +0,0 @@ -# Copyright (C) 1994 Ian Murdock <imurdock@debian.org> -# Copyright (C) 1994,1995 Ian Jackson <ijackson@nyx.cs.du.edu> -# -# This is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2, -# or (at your option) any later version. -# -# This is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with dpkg; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -srcdir = @srcdir@ -VPATH = @srcdir@ - -prefix = @prefix@ -infodir = $(prefix)/info -mandir = $(prefix)/man -man5dir = $(mandir)/man5 -man5 = 5 -docdir = $(prefix)/doc -dpkgdocdir = $(docdir)/dpkg - -DIST = Makefile.in $(SRC) $(MAN) - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -MAKEINFO = makeinfo -TEXI2DVI = texi2dvi - -SGMLDOCSTAMPS= programmer.html-stamp policy.html-stamp - -# Files folded into manuals -OBSOLETEDOCS= descriptions.txt upgrades+errors.txt \ - maintainer-script-args.txt virtual-dependencies.txt \ - auto-deconfiguration.txt dependency-ordering.txt \ - disappear-replace.txt diversions.text \ - essential-flag.txt version-ordering.txt - -all: $(DPKGDOCS) $(SGMLDOCSTAMPS) - -manuals-version: changelog Makefile - v=`dpkg-parsechangelog -lchangelog | sed -n 's/^Version: //p'` && \ - echo "<!entity manuals-version \"$$v\">" >$@.new - d=`pwd | sed -e 's,/doc$$,,; s,^.*dpkg-\([0-9.]*\),\1,'` && \ - echo "<!entity dpkg-version \"$$d\">" >>$@.new - mv $@.new $@ - -%.html-stamp: %.sgml manuals-version - rm -rf $*.html - debiandoc2html $< - touch $@ - -guidelines.info: guidelines.texi - $(MAKEINFO) $(srcdir)/guidelines.texi - -database-structure.ps: database-structure.fig - fig2dev -L ps -c -l _ -P <database-structure.fig >ps - mv ps database-structure.ps - -database-structure.monops: database-structure.ps - perl -pe 's:^/(col[0-7]) \{[01 ]*1[01 ]* setrgbcolor\}\ - bind def$$:/$$1 {} bind def:' database-structure.ps >ps - mv ps database-structure.monops - -clean: - rm -f $(SGMLDOCSTAMPS) - rm -f database-structure.ps database-structure.monops ps - rm -f *.{aux,cp,dvi,fn,ky,log,pg,toc,tp,vr,bak} - rm -f guidelines.info* - rm -rf {programmer,policy}.{html*,sasp*,text*,ps*,lout*} - -distclean: - rm -f Makefile *.orig *~ *.~* ./#*# - -install: all - $(INSTALL_DATA) deb.5 $(man5dir)/deb.$(man5) - $(INSTALL_DATA) deb-old.5 $(man5dir)/deb-old.$(man5) - $(INSTALL_DATA) deb-control.5 $(man5dir)/deb-control.$(man5) - set -e; for f in $(SGMLDOCSTAMPS) ; do \ - g=`echo $$f | sed -e 's/-stamp$$//'` ; \ - cp -r $$g $(dpkgdocdir)/$$g ; \ - done - $(INSTALL_DATA) developer-keys.pgp $(dpkgdocdir)/. - $(INSTALL_DATA) ../debian/changelog $(dpkgdocdir)/changelog.dpkg - $(INSTALL_DATA) changelog $(dpkgdocdir)/changelog.manuals diff --git a/doc/changelog b/doc/changelog index c16a1edba..336bc0ae7 100644 --- a/doc/changelog +++ b/doc/changelog @@ -1,3 +1,61 @@ +debian-manuals (2.1.2.2) frozen unstable; + + * Fixed even more typographical and grammatical errors in Policy and + Programmer's manual + * Corrected the contact email addresses again. + * Added a paragraph to Policy 6.3 on taking over an old package (Guy Maor) + * Added a paragraph to Programmer 4.2.14 on listing distributions to load + a package into. (Guy Maor) + * Further clarification of use of absolute pathnames in scripts in + Programmer 6.1. + + -- David Morris <bweaver@worf.netins.net> Tue, 3 Dec 1996 23:28:04 -0600 + +debian-manuals (2.1.2.1) frozen unstable; + + * Many editorial and formatting revisions with suggestions from Ian Jackson, + Guy Maor and others + * correction of chiark address in Policy 6.2 + * footnote in Programmers chapter 2 pointing to deb(5) manpage for + description of deb file format. + * addition of more dpkg examples in Programmer chapter 2 + * Replace paragraph in Policy 4.1 outlining compiling parameters for + shared libraries. + * Added paragraph in Programmer 6.1 on paths in maintainer scripts + (Bug #2481) + * Cleaned up language and formatting of Programmer's 12.2, shlibs + * Corrected contact addresses for listmaster and override-change + + -- David Morris <bweaver@worf.netins.net> Wed, 27 Nov 1996 08:17:16 -0600 + +debian-manuals (2.1.2.0) frozen unstable; + + * Mostly editorial changes in Policy Manual. + * Added summary of distribution criteria to Introduction + * Added section headings for copyright criteria + * Fixed typos (Bugs #4485, #4622) + * Added paragraph in Compilation Options related to use of shared and + static libraries. (Bug #5299) + * Paragraph added about where to find PGP and other export restricted + packages in section on Procedure + * Change in List administrator and in the contact address for becoming + a package maintainer + * A paragraph added related to who to contact for package maintainer changes. + * Changed where to send upload announcements: uploads destined for unstable, + frozen, or experimental go to debian-devel-changes. + + * Made some mostly editorial changes to Programmers Manual. + * Added a recommendation to debmake in Introduction. + * A further interpretation of the various Distributions is added with + the intent of helping people decide which one to choose. (section 4.2.14) + * Section 12 on Shared Libraries expanded with further technical information + on various shlib files + * Section in 2.2 on format of shlib file moved to new subsection within 12. + * Paragraph on adding a symlink without version number added to Shared + Library Section (Guy Maor, Bug #5299) + + -- David Morris <bweaver@worf.netins.net> Fri, 22 Nov 1996 23:41:39 -0600 + debian-manuals (2.1.1.0) unstable; * Hard links are forbidden in source packages (they didn't work anyway, diff --git a/doc/deb-old.5 b/doc/deb-old.5 index df6a017a0..d415281dc 100644 --- a/doc/deb-old.5 +++ b/doc/deb-old.5 @@ -15,7 +15,7 @@ changed since Debian 0.93 and the new format is being phased in. The old format is described here. Please see .BR deb (5) -for details of the old format. +for details of the new format. .SH FORMAT The file is two lines of format information as ASCII text, followed by two concatenated gzipped ustar files. diff --git a/doc/developer-keys.pgp b/doc/developer-keys.pgp Binary files differdeleted file mode 100644 index 84587e742..000000000 --- a/doc/developer-keys.pgp +++ /dev/null diff --git a/doc/internals.sgml b/doc/internals.sgml new file mode 100644 index 000000000..994abb5f3 --- /dev/null +++ b/doc/internals.sgml @@ -0,0 +1,552 @@ +<!doctype texinfo system "texinfo.dtd" [ +<!entity % manuals-version-def system "manuals-version"> +%manuals-version-def; +]> + +<texinfo> + +<setfilename>internals.info</> + +<titlepage> +<title>dpkg Internals Manual</title> +<author>Klee Dienes</author> +<date>Version &manuals-version; (dpkg &dpkg-version;)</date> +<abstract> +This manual describes the internal structure of the <code/dpkg/ package +management system. +</abstract> +</titlepage> + +<chapter>Copyright + +<p> +Copyright ©1997 Klee Dienes <samp/<klee@@mit.edu>/. + +<p> +This manual is free software; you may redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +<p> +This is distributed in the hope that it will be useful, but +<em>without any warranty</em>; without even the implied warranty of +merchantability or fitness for a particular purpose. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License with +your Debian GNU/Linux system, in <file>/usr/doc/copyright/GPL</>, or +with the <code/dpkg/ source package as the file <file>COPYING</>. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. + +</chapter> + +<chapter>Build Notes + +<section>Automake + +<p> +This chapter by Tom Lees <tom&at;lpsg.demon.co.uk> on Tue, 4 Mar 1997 +21:34:57 +0000, with subsequent modifications by Klee Dienes <klee&at;debian.org> + +<p> +This chapter contains general notes about the conversion to +<code/automake/. If you plan on doing anything with <code/dpkg/, you +should probably read all of this file first. You have been warned. + +<p> +The current version of automake used is version <code/automake-1.1n/, +which is currently a beta version. It has several significant +advantages over the released version, including: + +<itemize> +<item>it supports emacs lisp properly +<item>It supports libtool properly +<item>it includes the aclocal utility +</itemize> + +<p> +The <code/aclocal/ utility is a very useful program which will automatically +build an <file/aclocal.m4/ file from the <file/configure.in/ file to include the +appropriate macros. + +<p> +<code/automake-1.1n/ can be retreived from +<file>ftp://ftp.cygnus.com/pub/tromey</file> + +<p> +This doesn't affect anything other than rebuilding the <file/Makefile.in/ files +from the sources. + +<p> +Probably the main difference which is noticable is that instead of +using proprietary directory names, it now supports <code/configure +--sharedstatedir/, and <code/configure --localstatedir/. To set these +to the Debian defaults, you should use <code>./configure +--localstatedir=/etc --sharedstatedir=/var/lib</>. + +<p> +I have also customized the canonicalizing macros found in +<code/autoconf-2.12/ to include the old way of finding the <code/dpkg/ +``architecture'', i.e. to be a bit more smart. Instead of it trying to +determine the architecture only, I changed it to use the `host', +`build', and `target' system types. The target CPU type is checked +against the archtable to find the architecture on which dpkg will run. + +<p> +It uses <code/gcc --print-libgcc-file-name/ to find out the build +architecture if possible (used later to determine ELF or <code/a.out/ +format), and also uses <code/dpkg --print-architecture/ if possible to +modify the <samp/cpu/ field before it passes on the target alias to +config.sub. If you want to specify the architecture, you should now +use "--target=", rather than <code/--with-arch/, which was essentially +a hack anyway. The old <code/--with-arch/ is still there, but it is +somewhat less functional. I have also moved the <code/DPKG_CACHED_/ +macros into dpkg.m4 to make configure.in a bit more readable. + +<p> +I also converted to libtool 0.7 (which can be found in the Debian +distribution now). Essentially, this means that all the dpkg tools can +be compiled against a shared <samp/libdpkg/ without much hassle (in +fact, it is the default). You do not need to install libtool to use +this feature (it works like autoconf), and generally, it should not be +needed much at all. + +<p> +The new <samp/dist/ targets will build a distribution including all +files built by the <code/debiandoc2html/, <code/debiandoc2ps/, etc., +which are included in the distribution so that people may build <code/dpkg/ +without these (especially useful to porters). + +<p> +A target <samp/make debian/ has been added, which will build the +Debian files from a working directory (does a <samp/make dist/ +first). Now all we need is a modified dpkg-source so that the +<file/dpkg-1.4.0.8.tar.gz/ GNU-distribution file can be used as part +of the Debian dsitribution. I'm working on this, but it doesn't work +too well at the moment (find it in examples). + +<p> +I removed the <samp/make portable/ target - it doesn't do anything useful. + +<p> +I have added <samp/make uninstall/ targets to aid non-Debian users who simply +want to try out certain Debian packages, and the "dist" targets are also +useful to build a "distribution" of the dpkg tool. Note that since automake +automatically includes dependencies into the Makefiles in a distribution, +if you want to modify the C files, it would be advisable to get and install +automake, and then re-run it in the base dpkg distribution directory, so that +automatic dependency generation will be switched back on, and any +dependencies which change will be taken account of. The "make maintainer-clean" +targets will remove all files which any of the following utilities create: + +<itemize> +<item>automake +<item>autoconf +<item>aclocal +<item>autoheader +<item>gettextize +<item>libtoolize +</itemize> + +<p> +If you want to modify any of the sources, I recommend that you do the following +first (after having installed the appropriate utilities, of course):- + +<itemize> +<item> +make maintainer-clean +<item> +aclocal +<item> +autoheader +<item> +autoconf +<item> +gettextize +<item> +libtoolize (do not let automake run this, as it will cause it not to +include the libtool files in the dist targets) +<item> +for i in COPYING INSTALL; do ln -s /usr/share/automake/$i .; done +<item> +automake +</itemize> + +<p> +I have also incorporated the patches originally made by Galen +Hazelwood to internationalize dpkg using GNU gettext - see the file +"NOTES.intl" for more information about this. + +<p> +Other minor changes are: + +<itemize> +<item> +The version number is now determined from debian/changelog, not from +the directory name. +<item> +Creation of version.h now handled from configure script, not Makefile. +<item> +include/dpkg.h is now generated from include/dpkg.h.in by a sed +script, inserting the appropriate directory definitions - so now it +supports changing the dpkg directories (can install in /usr/local) +<item> +Updated the COPYING (1 very minor change) and INSTALL files to those +distributed with automake-1.1l +<item> +Since the shared libdpkg is now installed, I also made +include/Makefile install dpkg.h and dpkg-db.h into /usr/include by +default +</itemize> + +Questions: + +<itemize> +<item> +Should I use <samp/localstatedir/ and <samp/sharedstatedir/ instead of +<samp/sysconfdir/ and <samp/datadir/? +</itemize> + +</section> + +<section>Internationalization + +<p> +This section by Galen Hazelwood. + +<p> +Dpkg is, to say the least, generous in its error reporting. The vast +majority of the output strings are error messages of one kind or another. +And if you feel that you've stumbled into the Department of Redundancy +Department, you would be absolutely correct. Many of the error messages +in dpkg.pot are duplicates, used at different points in the program. + +<p> +To avoid swamping the translators completely, I made some executive decisions +on what kinds of strings to translate. All the strings sent to debug() are +left alone, on the grounds that these are for dpkg developers, and not for +the general public. Most interal error messages were very cryptic, and +would probably confuse the translators when seen just sitting there in +the dpkg.pot file, and are also left alone. (I did mark some of the more +verbose ones for translation.) + +<p> +If others disagree with me about the necessity of translating these strings, +it's easy enough to just go through and mark them later. + +<p> +I added the startup gettext code to the main routine in dselect, which was +necessary as many of the strings in lib are translated. Dselect is otherwise +unchanged. + +<p> +Changes: + +<itemize> +<item> +The files in intl and po were taken from gettext 0.10.26, by way of +the gettextize program. I altered the makefiles to remove the VERSION +symbol, which is only used in targets which dpkg does not support. +<item> +aclocal.m4 was stolen from the textutils package, configure.in was +altered to use these new tests, symbols were added to acconfig.h, and +the two new directories were added to Makefile.in. +<item> +The dpkg, dpkg-deb, md5sum, split, and dselect Makefiles now look for +headers in ../intl, and try to link with whatever i18n libraries +configure finds. They also now define LOCALEDIR in CFLAGS. +<item> +include/dpkg.h has the necessary NLS boilerplate, and the only file +which dosen't include this (md5sum/md5sum.c) had it added directly. +<item> +The most intrusive change is due to a disagreement between xgettext +and the dpkg coding style. Although xgettext understands string +constant concatenation, it can't handle the case where preprocessor +symbols are used as well. The dpkg code uses this a lot, especially +in cases like this: +<example> +ohshite("error reading from " BACKEND " pipe"); +</example> +where BACKEND is defined as "dpkg-deb". Because xgettext can't handle +this, I have changed this usage in all cases to something like: +<example> +ohshite(_("error reading from dpkg-deb pipe"); +</example> +This isn't very kind to Ian, I know. But what can I do? +</itemize> + +</section> + +</chapter> + +<chapter>Code Internals + +<section>Structure Definitons + +<subsection>versionrevision +<p> +<example> +struct versionrevision @{ + unsigned long epoch; + char *version; + char *revision; +@}; +</example> + +<p> +The <tt/versionrevision/ structure is used to store a Debian version specification +</subsection> + +</section> + +<section>Functions + +<subsection>Parsing translation tables +<p> +Each of these tables is used to associate a set of strings with a +corresponding set of integers. + +Current tables are: + +<p> +<example> +const struct namevalue booleaninfos[]; +</example> + +<p> +Maps boolean strings (<code/"yes"/,<code/"no"/) to their binary values. + +<subsubsection><code/priorityinfos[]/ + +<p> +<example> +const struct namevalue priorityinfos[]; +</example> + +<p> +Maps priority strings to and from values of +type <code/enum pkgpriority/. +Current priority values are: + +<table> +<item><code/required/</item> +required +<item><code/important/</item> +important +<item><code/standard/</item> +standard +<item><code/recommended/</item> +recommended +<item><code/optional/</item> +optional +<item><code/extra/</item> +extra +<item><code/contrib/</item> +contrib +<item><code/other/</item> +other +<item><code/unknown/</item> +unknown +<item><code/base/</item> +This is obsolete, but is accepted as an alias for <code/required/. +</table> +</subsubsection> + +<subsubsection><code/statusinfos[]/ + +<p> +<example> +const struct namevalue statusinfos[]; +</example> + +Maps package status strings to values of type <code/enum ???/. + +Package status strings are: + +"not-installed" "unpacked" "half-configured" "installed" +"half-installed" "config-files" "postinst-failed" "removal-failed" +</subsubsection> + +<subsubsection><code/eflaginfos[]/ + +<p> +<example> +const struct namevalue eflaginfos[]; +</example> +</subsubsection> + +<subsubsection><code/wantinfos[]/ + +<p> +<example> +const struct namevalue wantinfos[]; +</example> +</subsubsection> + +<subsubsection><code/nicknames[]/ + +<p> +<example> +const struct nickname nicknames[]; +</example> + +Maps obsolete control fields to their current versions. + +</subsubsection> + +</subsection> + +<subsection>Parsing functions + +<subsubsection><code/parseerr/ +<findex/parseerr()/ + +<p> +<example> +void parseerr +(FILE *file, const char *filename, int lno, + FILE *warnto, int *warncount, const struct pkginfo *pigp, + int warnonly, const char *fmt, ...); +</example> + +Report an error parsing a control data stream. Checks <var/file/ for +error status on <var/file/, printing an error message to stderr and +exiting with error status if an error is present on the stream. +Formats the variable arguments according to the <code/printf/-style +string in <var/fmt/, preceding the result with <var/filename/, +<var/lno/, and <var/pigp/ (if not NULL). If <var/warnonly/ is 0, +writes the result to stderr and exits with error status. Otherwise, +increments <var/warncount/ and returns normally. +</subsubsection> + +<subsubsection><code/illegal_packagename/ +<findex/illegal_packagename()/ + +<p> +<example> +const char *illegal_packagename +(const char *p, const char **ep) +</example> + +Checks the package name at <var/p/ for proper syntax. Returns NULL in +case of success, setting <var/*ep/ to point after the last character +in the package name, including any trailing whitespace (as defined by +isspace()). In case of error, returns the error message as a pointer +to a static buffer. +</subsubsection> + +<subsubsection><code/informativeversion/ +<findex/informativeversion()/ + +<p> +<example> +int informativeversion(const struct versionrevision *version) +</example> + +<p> +Returns true if and only if the <code/versionrevision/ is non-empty; +otherwise returns false. +</subsubsection> + +<subsubsection><code/varbufversion/ +<findex/varbufversion()/ + +<p> +<example> +void varbufversion +(struct varbuf *vb, + const struct versionrevision *version, + enum versiondisplayepochwhen vdew); +</example> + +Writes a human-readable representation of <var/version/ to <var/vb/. +Possible values of <var/vdew/: + +<table> +<item><tt/vdew_never/</item> +never include epoch +<item><tt/vdew_nonambig/</item> +include epoch string if non-zero +<item><tt/vdew_always/</item> +always include epoch string +</table> +</subsubsection> + +<subsubsection><code/versiondescribe/ +<findex/versiondescribe()/ + +<p> +<example> +const char *versiondescribe +(const struct versionrevision *version, + enum versiondisplayepochwhen vdew); +</example> + +<p> +Return a human-readable representation of <var/version/ as a pointer +to a static buffer. If the version structure is empty, return +<code/"<none>"/. Static buffers are allocated from a set of 10 +in round-robin fashion (they will be re-used after 10 successive calls +to <code/versiondescribe/). +</subsubsection> + +<subsubsection><code/parseversion/ +<findex/parseversion()/ + +<p> +<example> +const char *parseversion +(struct versionrevision *rversion, const char *string); +</example> + +<p> +Parse the contents of <var/string/ into <var/rversion/. If +successful, returns NULL, otherwise returns a pointer to a static +error string. +</subsubsection> + +<subsubsection><code/parsemustfield/ +<findex/parsemustfield()/ + +<p> +<example> +void parsemustfield +(FILE *file, const char *filename, int lno, + FILE *warnto, int *warncount, + const struct pkginfo *pigp, int warnonly, + char **value, const char *what); +</example> +</subsubsection> + +<subsubsection><code/skip_slash_dotslash/ +<findex/skip_slash_dotslash()/ + +<p> +<example> +const char *skip_slash_dotslash (const char *p); +</example> +</subsubsection> + +<subsubsection><code/convert_string/ +<findex/convert_string()/ + +<p> +<example> +static int convert_string +(const char *filename, int lno, const char *what, int otherwise, + FILE *warnto, int *warncount, const struct pkginfo *pigp, + const char *startp, const struct namevalue *nvip, + const char **endpp) +</example> +</subsubsection> + +</subsection> + +</section> + +<contents> +<printindex name="fn"> + +</texinfo> diff --git a/doc/lout.li b/doc/lout.li deleted file mode 100644 index 04dfdb4cc..000000000 --- a/doc/lout.li +++ /dev/null @@ -1,1123 +0,0 @@ -00symbol 1 @DocumentLayout @TheoremCounterMarker -00symbol 10 @DocumentLayout @FigureCounterMarker -00symbol 11 @DocumentLayout @TablePrefixMarker -00symbol 12 @DocumentLayout @TableCounterMarker -00symbol 13 @PageMarker -00symbol 14 @DocumentLayout @FootNoteCounterMarker -00symbol 15 @DocumentLayout @Runner -00symbol 16 @DocumentLayout @NumberMarker -00symbol 17 @DocumentLayout listitem -00symbol 18 @DocumentLayout @FootNote -00symbol 19 @OptGall -00symbol 2 @DocumentLayout @DefinitionCounterMarker -00symbol 3 @DocumentLayout @ClaimCounterMarker -00symbol 4 @DocumentLayout @PropositionCounterMarker -00symbol 5 @DocumentLayout @LemmaCounterMarker -00symbol 6 @DocumentLayout @CorollaryCounterMarker -00symbol 7 @DocumentLayout @ExampleCounterMarker -00symbol 8 @DocumentLayout @NumDispCounterMarker -00symbol 9 @DocumentLayout @FigurePrefixMarker -1&3278.policy.lout.1 0 00001 0 policy.lout -1&3278.programmer.lout.1 0 00349 0 programmer.lout -10&4161.policy.lout.1 0 00010 1602 policy.lout -10&4161.programmer.lout.1 0 00350 1638 programmer.lout -11&4334.policy.lout.1 0 00011 1720 policy.lout -11&4334.programmer.lout.1 0 00351 1760 programmer.lout -12&4342.policy.lout.1 0 00012 1836 policy.lout -12&4342.programmer.lout.1 0 00352 1880 programmer.lout -13&1655.policy.lout.1 0 00034 4442 policy.lout -13&1655.policy.lout.10 0 00176 17809 policy.lout -13&1655.policy.lout.11 0 00180 17809 policy.lout -13&1655.policy.lout.12 0 00184 17809 policy.lout -13&1655.policy.lout.13 0 00188 17809 policy.lout -13&1655.policy.lout.14 0 00192 17809 policy.lout -13&1655.policy.lout.15 0 00196 17809 policy.lout -13&1655.policy.lout.16 0 00210 23905 policy.lout -13&1655.policy.lout.17 0 00214 23905 policy.lout -13&1655.policy.lout.18 0 00218 23905 policy.lout -13&1655.policy.lout.19 0 00222 23905 policy.lout -13&1655.policy.lout.2 0 00038 4442 policy.lout -13&1655.policy.lout.20 0 00226 23905 policy.lout -13&1655.policy.lout.21 0 00230 23905 policy.lout -13&1655.policy.lout.22 0 00234 23905 policy.lout -13&1655.policy.lout.23 0 00238 23905 policy.lout -13&1655.policy.lout.24 0 00242 23905 policy.lout -13&1655.policy.lout.25 0 00246 23905 policy.lout -13&1655.policy.lout.26 0 00250 23905 policy.lout -13&1655.policy.lout.27 0 00254 23905 policy.lout -13&1655.policy.lout.28 0 00258 23905 policy.lout -13&1655.policy.lout.29 0 00262 23905 policy.lout -13&1655.policy.lout.3 0 00042 4442 policy.lout -13&1655.policy.lout.30 0 00266 23905 policy.lout -13&1655.policy.lout.31 0 00270 23905 policy.lout -13&1655.policy.lout.32 0 00274 23905 policy.lout -13&1655.policy.lout.33 0 00278 23905 policy.lout -13&1655.policy.lout.34 0 00285 89259 policy.lout -13&1655.policy.lout.35 0 00289 89259 policy.lout -13&1655.policy.lout.36 0 00293 89259 policy.lout -13&1655.policy.lout.37 0 00297 89259 policy.lout -13&1655.policy.lout.38 0 00301 89259 policy.lout -13&1655.policy.lout.39 0 00305 89259 policy.lout -13&1655.policy.lout.4 0 00152 17809 policy.lout -13&1655.policy.lout.40 0 00309 89259 policy.lout -13&1655.policy.lout.41 0 00313 89259 policy.lout -13&1655.policy.lout.42 0 00317 89259 policy.lout -13&1655.policy.lout.43 0 00321 89259 policy.lout -13&1655.policy.lout.5 0 00156 17809 policy.lout -13&1655.policy.lout.6 0 00160 17809 policy.lout -13&1655.policy.lout.7 0 00164 17809 policy.lout -13&1655.policy.lout.8 0 00168 17809 policy.lout -13&1655.policy.lout.9 0 00172 17809 policy.lout -13&1655.programmer.lout.1 0 00353 6890 programmer.lout -13&1655.programmer.lout.10 0 00354 6890 programmer.lout -13&1655.programmer.lout.100 0 00355 117524 programmer.lout -13&1655.programmer.lout.101 0 00356 117524 programmer.lout -13&1655.programmer.lout.102 0 00357 117524 programmer.lout -13&1655.programmer.lout.103 0 00358 128121 programmer.lout -13&1655.programmer.lout.104 0 00359 128121 programmer.lout -13&1655.programmer.lout.105 0 00360 128121 programmer.lout -13&1655.programmer.lout.11 0 00361 15938 programmer.lout -13&1655.programmer.lout.12 0 00362 15938 programmer.lout -13&1655.programmer.lout.13 0 00363 15938 programmer.lout -13&1655.programmer.lout.14 0 00364 15938 programmer.lout -13&1655.programmer.lout.15 0 00365 18049 programmer.lout -13&1655.programmer.lout.16 0 00366 18049 programmer.lout -13&1655.programmer.lout.17 0 00367 18049 programmer.lout -13&1655.programmer.lout.18 0 00368 18049 programmer.lout -13&1655.programmer.lout.19 0 00369 18049 programmer.lout -13&1655.programmer.lout.2 0 00370 6890 programmer.lout -13&1655.programmer.lout.20 0 00371 18049 programmer.lout -13&1655.programmer.lout.21 0 00372 22306 programmer.lout -13&1655.programmer.lout.22 0 00373 22306 programmer.lout -13&1655.programmer.lout.23 0 00374 22306 programmer.lout -13&1655.programmer.lout.24 0 00375 22306 programmer.lout -13&1655.programmer.lout.25 0 00376 22306 programmer.lout -13&1655.programmer.lout.26 0 00377 22306 programmer.lout -13&1655.programmer.lout.27 0 00378 22306 programmer.lout -13&1655.programmer.lout.28 0 00379 25795 programmer.lout -13&1655.programmer.lout.29 0 00380 25795 programmer.lout -13&1655.programmer.lout.3 0 00381 6890 programmer.lout -13&1655.programmer.lout.30 0 00382 25795 programmer.lout -13&1655.programmer.lout.31 0 00383 25795 programmer.lout -13&1655.programmer.lout.32 0 00384 25795 programmer.lout -13&1655.programmer.lout.33 0 00385 25795 programmer.lout -13&1655.programmer.lout.34 0 00386 25795 programmer.lout -13&1655.programmer.lout.35 0 00387 31375 programmer.lout -13&1655.programmer.lout.36 0 00388 31375 programmer.lout -13&1655.programmer.lout.37 0 00389 31375 programmer.lout -13&1655.programmer.lout.38 0 00390 31375 programmer.lout -13&1655.programmer.lout.39 0 00391 31375 programmer.lout -13&1655.programmer.lout.4 0 00392 6890 programmer.lout -13&1655.programmer.lout.40 0 00393 31375 programmer.lout -13&1655.programmer.lout.41 0 00394 31375 programmer.lout -13&1655.programmer.lout.42 0 00395 31375 programmer.lout -13&1655.programmer.lout.43 0 00396 31375 programmer.lout -13&1655.programmer.lout.44 0 00397 36795 programmer.lout -13&1655.programmer.lout.45 0 00398 36795 programmer.lout -13&1655.programmer.lout.46 0 00399 47127 programmer.lout -13&1655.programmer.lout.47 0 00400 47127 programmer.lout -13&1655.programmer.lout.48 0 00401 47127 programmer.lout -13&1655.programmer.lout.49 0 00402 47127 programmer.lout -13&1655.programmer.lout.5 0 00403 6890 programmer.lout -13&1655.programmer.lout.50 0 00404 47127 programmer.lout -13&1655.programmer.lout.51 0 00405 47127 programmer.lout -13&1655.programmer.lout.52 0 00406 47127 programmer.lout -13&1655.programmer.lout.53 0 00407 47127 programmer.lout -13&1655.programmer.lout.54 0 00408 47127 programmer.lout -13&1655.programmer.lout.55 0 00409 47127 programmer.lout -13&1655.programmer.lout.56 0 00410 47127 programmer.lout -13&1655.programmer.lout.57 0 00411 47127 programmer.lout -13&1655.programmer.lout.58 0 00412 54014 programmer.lout -13&1655.programmer.lout.59 0 00413 54014 programmer.lout -13&1655.programmer.lout.6 0 00414 6890 programmer.lout -13&1655.programmer.lout.60 0 00415 54014 programmer.lout -13&1655.programmer.lout.61 0 00416 54014 programmer.lout -13&1655.programmer.lout.62 0 00417 54014 programmer.lout -13&1655.programmer.lout.63 0 00418 54014 programmer.lout -13&1655.programmer.lout.64 0 00419 54014 programmer.lout -13&1655.programmer.lout.65 0 00420 54014 programmer.lout -13&1655.programmer.lout.66 0 00421 54014 programmer.lout -13&1655.programmer.lout.67 0 00422 54014 programmer.lout -13&1655.programmer.lout.68 0 00423 54014 programmer.lout -13&1655.programmer.lout.69 0 00424 54014 programmer.lout -13&1655.programmer.lout.7 0 00425 6890 programmer.lout -13&1655.programmer.lout.70 0 00426 54014 programmer.lout -13&1655.programmer.lout.71 0 00427 54014 programmer.lout -13&1655.programmer.lout.72 0 00428 54014 programmer.lout -13&1655.programmer.lout.73 0 00429 54014 programmer.lout -13&1655.programmer.lout.74 0 00430 54014 programmer.lout -13&1655.programmer.lout.75 0 00431 54014 programmer.lout -13&1655.programmer.lout.76 0 00432 54014 programmer.lout -13&1655.programmer.lout.77 0 00433 89803 programmer.lout -13&1655.programmer.lout.78 0 00434 89803 programmer.lout -13&1655.programmer.lout.79 0 00435 89803 programmer.lout -13&1655.programmer.lout.8 0 00436 6890 programmer.lout -13&1655.programmer.lout.80 0 00437 89803 programmer.lout -13&1655.programmer.lout.81 0 00438 89803 programmer.lout -13&1655.programmer.lout.82 0 00439 89803 programmer.lout -13&1655.programmer.lout.83 0 00440 89803 programmer.lout -13&1655.programmer.lout.84 0 00441 89803 programmer.lout -13&1655.programmer.lout.85 0 00442 89803 programmer.lout -13&1655.programmer.lout.86 0 00443 89803 programmer.lout -13&1655.programmer.lout.87 0 00444 89803 programmer.lout -13&1655.programmer.lout.88 0 00445 111402 programmer.lout -13&1655.programmer.lout.89 0 00446 111402 programmer.lout -13&1655.programmer.lout.9 0 00447 6890 programmer.lout -13&1655.programmer.lout.90 0 00448 111402 programmer.lout -13&1655.programmer.lout.91 0 00449 111402 programmer.lout -13&1655.programmer.lout.92 0 00450 111402 programmer.lout -13&1655.programmer.lout.93 0 00451 111402 programmer.lout -13&1655.programmer.lout.94 0 00452 111402 programmer.lout -13&1655.programmer.lout.95 0 00453 111402 programmer.lout -13&1655.programmer.lout.96 0 00454 111402 programmer.lout -13&1655.programmer.lout.97 0 00455 116385 programmer.lout -13&1655.programmer.lout.98 0 00456 116385 programmer.lout -13&1655.programmer.lout.99 0 00457 117524 programmer.lout -13&582.policy.lout.1 0 00019 2989 policy.lout -13&582.policy.lout.10 0 00079 10050 policy.lout -13&582.policy.lout.11 0 00085 10474 policy.lout -13&582.policy.lout.12 0 00090 10817 policy.lout -13&582.policy.lout.13 0 00094 11242 policy.lout -13&582.policy.lout.14 0 00098 11585 policy.lout -13&582.policy.lout.15 0 00106 12867 policy.lout -13&582.policy.lout.16 0 00110 13210 policy.lout -13&582.policy.lout.17 0 00117 14303 policy.lout -13&582.policy.lout.18 0 00125 15546 policy.lout -13&582.policy.lout.19 0 00129 15971 policy.lout -13&582.policy.lout.2 0 00023 3550 policy.lout -13&582.policy.lout.20 0 00133 16314 policy.lout -13&582.policy.lout.21 0 00141 17466 policy.lout -13&582.policy.lout.22 0 00146 17809 policy.lout -13&582.policy.lout.23 0 00197 22857 policy.lout -13&582.policy.lout.24 0 00204 23905 policy.lout -13&582.policy.lout.25 0 00279 89259 policy.lout -13&582.policy.lout.3 0 00025 4102 policy.lout -13&582.policy.lout.4 0 00028 4442 policy.lout -13&582.policy.lout.5 0 00043 6301 policy.lout -13&582.policy.lout.6 0 00049 7245 policy.lout -13&582.policy.lout.7 0 00057 7666 policy.lout -13&582.policy.lout.8 0 00066 8660 policy.lout -13&582.policy.lout.9 0 00071 9082 policy.lout -13&582.programmer.lout.1 0 00458 3061 programmer.lout -13&582.programmer.lout.10 0 00459 15506 programmer.lout -13&582.programmer.lout.11 0 00460 15938 programmer.lout -13&582.programmer.lout.12 0 00461 18049 programmer.lout -13&582.programmer.lout.13 0 00462 21955 programmer.lout -13&582.programmer.lout.14 0 00463 22306 programmer.lout -13&582.programmer.lout.15 0 00464 25795 programmer.lout -13&582.programmer.lout.16 0 00465 31375 programmer.lout -13&582.programmer.lout.17 0 00466 36795 programmer.lout -13&582.programmer.lout.18 0 00467 39415 programmer.lout -13&582.programmer.lout.19 0 00468 40814 programmer.lout -13&582.programmer.lout.2 0 00469 3634 programmer.lout -13&582.programmer.lout.20 0 00470 42360 programmer.lout -13&582.programmer.lout.21 0 00471 43468 programmer.lout -13&582.programmer.lout.22 0 00472 45126 programmer.lout -13&582.programmer.lout.23 0 00473 45559 programmer.lout -13&582.programmer.lout.24 0 00474 45910 programmer.lout -13&582.programmer.lout.25 0 00475 46343 programmer.lout -13&582.programmer.lout.26 0 00476 46694 programmer.lout -13&582.programmer.lout.27 0 00477 47127 programmer.lout -13&582.programmer.lout.28 0 00478 54014 programmer.lout -13&582.programmer.lout.29 0 00479 89803 programmer.lout -13&582.programmer.lout.3 0 00480 4194 programmer.lout -13&582.programmer.lout.30 0 00481 111402 programmer.lout -13&582.programmer.lout.31 0 00482 116385 programmer.lout -13&582.programmer.lout.32 0 00483 117524 programmer.lout -13&582.programmer.lout.33 0 00484 121000 programmer.lout -13&582.programmer.lout.34 0 00485 121351 programmer.lout -13&582.programmer.lout.35 0 00486 121784 programmer.lout -13&582.programmer.lout.36 0 00487 122135 programmer.lout -13&582.programmer.lout.37 0 00488 123417 programmer.lout -13&582.programmer.lout.38 0 00489 123768 programmer.lout -13&582.programmer.lout.39 0 00490 124201 programmer.lout -13&582.programmer.lout.4 0 00491 5264 programmer.lout -13&582.programmer.lout.40 0 00492 124552 programmer.lout -13&582.programmer.lout.41 0 00493 124985 programmer.lout -13&582.programmer.lout.42 0 00494 125336 programmer.lout -13&582.programmer.lout.43 0 00495 125769 programmer.lout -13&582.programmer.lout.44 0 00496 126120 programmer.lout -13&582.programmer.lout.45 0 00497 126553 programmer.lout -13&582.programmer.lout.46 0 00498 126904 programmer.lout -13&582.programmer.lout.47 0 00499 127337 programmer.lout -13&582.programmer.lout.48 0 00500 127688 programmer.lout -13&582.programmer.lout.49 0 00501 128121 programmer.lout -13&582.programmer.lout.5 0 00502 5693 programmer.lout -13&582.programmer.lout.50 0 00503 129729 programmer.lout -13&582.programmer.lout.6 0 00504 6890 programmer.lout -13&582.programmer.lout.7 0 00505 12936 programmer.lout -13&582.programmer.lout.8 0 00506 13285 programmer.lout -13&582.programmer.lout.9 0 00507 15157 programmer.lout -13&ch-alternatives 0 00508 125769 programmer.lout -13&ch-binarypkg 0 00051 7245 policy.lout -13&ch-binarypkg 0 00509 5264 programmer.lout -13&ch-conffiles 0 00510 124985 programmer.lout -13&ch-controlfields 0 00511 39415 programmer.lout -13&ch-conversion 0 00206 23905 policy.lout -13&ch-descriptions 0 00512 117524 programmer.lout -13&ch-developer 0 00143 17466 policy.lout -13&ch-diversions 0 00513 126120 programmer.lout -13&ch-mailinglists 0 00199 22857 policy.lout -13&ch-maintainerscripts 0 00514 47127 programmer.lout -13&ch-methif 0 00515 128121 programmer.lout -13&ch-pkgcopyright 0 00030 4442 policy.lout -13&ch-relationships 0 00516 121784 programmer.lout -13&ch-scope 0 00027 4102 policy.lout -13&ch-scope 0 00517 4194 programmer.lout -13&ch-sharedlibs 0 00518 126553 programmer.lout -13&ch-sourcepkg 0 00127 15546 policy.lout -13&ch-sourcepkg 0 00519 12936 programmer.lout -13&ch-sysvinit 0 00520 126904 programmer.lout -13&ch-versions 0 00521 46343 programmer.lout -13&last.page 0 00348 89259 policy.lout -13&last.page 0 00522 129729 programmer.lout -13&s-bincreating 0 00523 5264 programmer.lout -13&s-changesfiles 0 00148 17809 policy.lout -13&s-conflicts 0 00524 123417 programmer.lout -13&s-controlarea 0 00525 5693 programmer.lout -13&s-controlfile 0 00526 6890 programmer.lout -13&s-copyrightfile 0 00084 10050 policy.lout -13&s-depsyntax 0 00527 121784 programmer.lout -13&s-dpkgchangelog 0 00528 18049 programmer.lout -13&s-f-Architecture 0 00529 40814 programmer.lout -13&s-f-Binary 0 00530 43468 programmer.lout -13&s-f-Changes 0 00531 45559 programmer.lout -13&s-f-Conffiles 0 00532 45559 programmer.lout -13&s-f-Config-Version 0 00533 45559 programmer.lout -13&s-f-Date 0 00534 45126 programmer.lout -13&s-f-Description 0 00535 42360 programmer.lout -13&s-f-Distribution 0 00536 45126 programmer.lout -13&s-f-Essential 0 00537 42360 programmer.lout -13&s-f-Filename 0 00538 45559 programmer.lout -13&s-f-Files 0 00539 43468 programmer.lout -13&s-f-Format 0 00540 45559 programmer.lout -13&s-f-Installed-Size 0 00541 43468 programmer.lout -13&s-f-Maintainer 0 00542 40814 programmer.lout -13&s-f-Package 0 00543 39415 programmer.lout -13&s-f-Size 0 00544 45559 programmer.lout -13&s-f-Source 0 00545 42360 programmer.lout -13&s-f-Standards-Version 0 00546 45126 programmer.lout -13&s-f-Status 0 00547 45559 programmer.lout -13&s-f-Urgency 0 00548 45126 programmer.lout -13&s-f-Version 0 00549 40814 programmer.lout -13&s-f-classification 0 00550 42360 programmer.lout -13&s-instchangelog 0 00083 10050 policy.lout -13&s-mail 0 00109 12867 policy.lout -13&s-mscriptsinstact 0 00551 47127 programmer.lout -13&s-replaces 0 00552 124201 programmer.lout -13&s-sourcearchives 0 00553 25795 programmer.lout -13&s-sourcetools 0 00554 12936 programmer.lout -13&s-sourcetree 0 00555 15506 programmer.lout -13&s-srcsubstvars 0 00556 22306 programmer.lout -13&s-virtual 0 00557 123768 programmer.lout -13&s13.1 0 00558 126904 programmer.lout -13&s13.2 0 00559 126904 programmer.lout -13&s13.3 0 00560 127337 programmer.lout -13&s13.4 0 00561 127337 programmer.lout -13&s13.5 0 00562 127337 programmer.lout -13&s13.6 0 00563 127688 programmer.lout -13&s14.1 0 00564 128121 programmer.lout -13&s14.2 0 00565 128121 programmer.lout -13&s3.1 0 00052 7245 policy.lout -13&s3.1.1 0 00053 7245 policy.lout -13&s3.1.1 0 00566 12936 programmer.lout -13&s3.1.2 0 00054 7245 policy.lout -13&s3.1.2 0 00567 12936 programmer.lout -13&s3.1.3 0 00055 7245 policy.lout -13&s3.1.3 0 00568 13285 programmer.lout -13&s3.1.3.1 0 00056 7245 policy.lout -13&s3.1.3.2 0 00060 7666 policy.lout -13&s3.1.4 0 00061 7666 policy.lout -13&s3.1.4 0 00569 13285 programmer.lout -13&s3.1.5 0 00062 7666 policy.lout -13&s3.1.5 0 00570 15157 programmer.lout -13&s3.1.6 0 00068 8660 policy.lout -13&s3.1.6 0 00571 15157 programmer.lout -13&s3.1.7 0 00572 15157 programmer.lout -13&s3.11 0 00113 13210 policy.lout -13&s3.12 0 00119 14303 policy.lout -13&s3.13 0 00121 14303 policy.lout -13&s3.2 0 00069 8660 policy.lout -13&s3.2.1 0 00070 8660 policy.lout -13&s3.2.1 0 00573 15506 programmer.lout -13&s3.2.2 0 00073 9082 policy.lout -13&s3.2.2 0 00574 15938 programmer.lout -13&s3.2.2.1 0 00575 18049 programmer.lout -13&s3.2.3 0 00074 9082 policy.lout -13&s3.2.3.1 0 00576 21955 programmer.lout -13&s3.2.4 0 00081 10050 policy.lout -13&s3.2.4.1 0 00082 10050 policy.lout -13&s3.2.5 0 00577 22306 programmer.lout -13&s3.2.6 0 00578 25795 programmer.lout -13&s3.2.7 0 00087 10474 policy.lout -13&s3.2.8 0 00088 10474 policy.lout -13&s3.2.9 0 00089 10474 policy.lout -13&s3.3 0 00092 10817 policy.lout -13&s3.4 0 00093 10817 policy.lout -13&s3.4 0 00579 31375 programmer.lout -13&s3.4.1 0 00580 31375 programmer.lout -13&s3.5 0 00096 11242 policy.lout -13&s3.6 0 00097 11242 policy.lout -13&s3.7 0 00100 11585 policy.lout -13&s3.8 0 00101 11585 policy.lout -13&s3.9 0 00108 12867 policy.lout -13&s4.1 0 00128 15546 policy.lout -13&s4.1 0 00581 39415 programmer.lout -13&s4.2 0 00131 15971 policy.lout -13&s4.2 0 00582 39415 programmer.lout -13&s4.2.24 0 00583 45910 programmer.lout -13&s4.2.6 0 00584 42360 programmer.lout -13&s4.3 0 00132 15971 policy.lout -13&s4.4 0 00136 16314 policy.lout -13&s4.5 0 00137 16314 policy.lout -13&s5.1 0 00144 17466 policy.lout -13&s5.2 0 00145 17466 policy.lout -13&s6.1 0 00585 47127 programmer.lout -13&s6.3 0 00586 54014 programmer.lout -13&s6.4 0 00587 111402 programmer.lout -13&s6.5 0 00588 111402 programmer.lout -13&s7.1 0 00589 117524 programmer.lout -13&s7.2 0 00590 117524 programmer.lout -13&s7.3 0 00591 121000 programmer.lout -13&s8.2 0 00592 121784 programmer.lout -13&s8.2.1 0 00593 123417 programmer.lout -13&s8.2.2 0 00594 123417 programmer.lout -13&s8.5.1 0 00595 124201 programmer.lout -13&s8.5.2 0 00596 124201 programmer.lout -13&s8.6 0 00597 124201 programmer.lout -13&s9.1 0 00598 124985 programmer.lout -13&s9.2 0 00599 125336 programmer.lout -14&2495.policy.lout.1 0 00020 3340 policy.lout -14&2495.policy.lout.10 0 00067 8961 policy.lout -14&2495.policy.lout.11 0 00072 9302 policy.lout -14&2495.policy.lout.12 0 00077 9617 policy.lout -14&2495.policy.lout.13 0 00080 10353 policy.lout -14&2495.policy.lout.14 0 00086 10696 policy.lout -14&2495.policy.lout.15 0 00091 11121 policy.lout -14&2495.policy.lout.16 0 00095 11464 policy.lout -14&2495.policy.lout.17 0 00099 11889 policy.lout -14&2495.policy.lout.18 0 00104 12434 policy.lout -14&2495.policy.lout.19 0 00107 13089 policy.lout -14&2495.policy.lout.2 0 00024 3982 policy.lout -14&2495.policy.lout.20 0 00111 13514 policy.lout -14&2495.policy.lout.21 0 00115 13870 policy.lout -14&2495.policy.lout.22 0 00118 14525 policy.lout -14&2495.policy.lout.23 0 00123 15113 policy.lout -14&2495.policy.lout.24 0 00126 15850 policy.lout -14&2495.policy.lout.25 0 00130 16193 policy.lout -14&2495.policy.lout.26 0 00134 16618 policy.lout -14&2495.policy.lout.27 0 00139 17033 policy.lout -14&2495.policy.lout.28 0 00142 17688 policy.lout -14&2495.policy.lout.29 0 00147 18113 policy.lout -14&2495.policy.lout.3 0 00026 4322 policy.lout -14&2495.policy.lout.30 0 00198 23079 policy.lout -14&2495.policy.lout.31 0 00202 23472 policy.lout -14&2495.policy.lout.32 0 00205 24209 policy.lout -14&2495.policy.lout.33 0 00280 89481 policy.lout -14&2495.policy.lout.4 0 00029 4743 policy.lout -14&2495.policy.lout.5 0 00044 6521 policy.lout -14&2495.policy.lout.6 0 00047 6813 policy.lout -14&2495.policy.lout.7 0 00050 7546 policy.lout -14&2495.policy.lout.8 0 00058 7886 policy.lout -14&2495.policy.lout.9 0 00064 8228 policy.lout -14&2495.programmer.lout.1 0 00600 3416 programmer.lout -14&2495.programmer.lout.10 0 00601 13160 programmer.lout -14&2495.programmer.lout.11 0 00602 13590 programmer.lout -14&2495.programmer.lout.12 0 00603 14259 programmer.lout -14&2495.programmer.lout.13 0 00604 14708 programmer.lout -14&2495.programmer.lout.14 0 00605 15381 programmer.lout -14&2495.programmer.lout.15 0 00606 15813 programmer.lout -14&2495.programmer.lout.16 0 00607 16164 programmer.lout -14&2495.programmer.lout.17 0 00608 18357 programmer.lout -14&2495.programmer.lout.18 0 00609 21506 programmer.lout -14&2495.programmer.lout.19 0 00610 22181 programmer.lout -14&2495.programmer.lout.2 0 00611 4070 programmer.lout -14&2495.programmer.lout.20 0 00612 22614 programmer.lout -14&2495.programmer.lout.21 0 00613 26021 programmer.lout -14&2495.programmer.lout.22 0 00614 30926 programmer.lout -14&2495.programmer.lout.23 0 00615 31683 programmer.lout -14&2495.programmer.lout.24 0 00616 36346 programmer.lout -14&2495.programmer.lout.25 0 00617 37021 programmer.lout -14&2495.programmer.lout.26 0 00618 38966 programmer.lout -14&2495.programmer.lout.27 0 00619 39723 programmer.lout -14&2495.programmer.lout.28 0 00620 40362 programmer.lout -14&2495.programmer.lout.29 0 00621 41040 programmer.lout -14&2495.programmer.lout.3 0 00622 4418 programmer.lout -14&2495.programmer.lout.30 0 00623 41456 programmer.lout -14&2495.programmer.lout.31 0 00624 41908 programmer.lout -14&2495.programmer.lout.32 0 00625 42668 programmer.lout -14&2495.programmer.lout.33 0 00626 43016 programmer.lout -14&2495.programmer.lout.34 0 00627 43694 programmer.lout -14&2495.programmer.lout.35 0 00628 44222 programmer.lout -14&2495.programmer.lout.36 0 00629 44674 programmer.lout -14&2495.programmer.lout.37 0 00630 45434 programmer.lout -14&2495.programmer.lout.38 0 00631 45785 programmer.lout -14&2495.programmer.lout.39 0 00632 46218 programmer.lout -14&2495.programmer.lout.4 0 00633 4816 programmer.lout -14&2495.programmer.lout.40 0 00634 46569 programmer.lout -14&2495.programmer.lout.41 0 00635 47002 programmer.lout -14&2495.programmer.lout.42 0 00636 47353 programmer.lout -14&2495.programmer.lout.43 0 00637 54322 programmer.lout -14&2495.programmer.lout.44 0 00638 90029 programmer.lout -14&2495.programmer.lout.45 0 00639 110950 programmer.lout -14&2495.programmer.lout.46 0 00640 111710 programmer.lout -14&2495.programmer.lout.47 0 00641 116611 programmer.lout -14&2495.programmer.lout.48 0 00642 117832 programmer.lout -14&2495.programmer.lout.49 0 00643 120548 programmer.lout -14&2495.programmer.lout.5 0 00644 5569 programmer.lout -14&2495.programmer.lout.50 0 00645 121226 programmer.lout -14&2495.programmer.lout.51 0 00646 121659 programmer.lout -14&2495.programmer.lout.52 0 00647 122010 programmer.lout -14&2495.programmer.lout.53 0 00648 122443 programmer.lout -14&2495.programmer.lout.54 0 00649 122965 programmer.lout -14&2495.programmer.lout.55 0 00650 123643 programmer.lout -14&2495.programmer.lout.56 0 00651 124076 programmer.lout -14&2495.programmer.lout.57 0 00652 124427 programmer.lout -14&2495.programmer.lout.58 0 00653 124860 programmer.lout -14&2495.programmer.lout.59 0 00654 125211 programmer.lout -14&2495.programmer.lout.6 0 00655 5917 programmer.lout -14&2495.programmer.lout.60 0 00656 125644 programmer.lout -14&2495.programmer.lout.61 0 00657 125995 programmer.lout -14&2495.programmer.lout.62 0 00658 126428 programmer.lout -14&2495.programmer.lout.63 0 00659 126779 programmer.lout -14&2495.programmer.lout.64 0 00660 127212 programmer.lout -14&2495.programmer.lout.65 0 00661 127563 programmer.lout -14&2495.programmer.lout.66 0 00662 127996 programmer.lout -14&2495.programmer.lout.67 0 00663 128347 programmer.lout -14&2495.programmer.lout.68 0 00664 130037 programmer.lout -14&2495.programmer.lout.7 0 00665 6442 programmer.lout -14&2495.programmer.lout.8 0 00666 7195 programmer.lout -14&2495.programmer.lout.9 0 00667 12488 programmer.lout -14&2521.policy.lout.1 0 00046 6521 policy.lout -14&2521.policy.lout.2 0 00063 7886 policy.lout -14&2521.policy.lout.3 0 00076 9302 policy.lout -14&2521.policy.lout.4 0 00103 11889 policy.lout -14&2521.policy.lout.5 0 00114 13514 policy.lout -14&2521.policy.lout.6 0 00122 14525 policy.lout -14&2521.policy.lout.7 0 00138 16618 policy.lout -14&2521.policy.lout.8 0 00201 23079 policy.lout -14&2521.programmer.lout.1 0 00668 4418 programmer.lout -14&2521.programmer.lout.10 0 00669 39723 programmer.lout -14&2521.programmer.lout.11 0 00670 41040 programmer.lout -14&2521.programmer.lout.12 0 00671 41456 programmer.lout -14&2521.programmer.lout.13 0 00672 42668 programmer.lout -14&2521.programmer.lout.14 0 00673 43694 programmer.lout -14&2521.programmer.lout.15 0 00674 44222 programmer.lout -14&2521.programmer.lout.16 0 00675 90029 programmer.lout -14&2521.programmer.lout.17 0 00676 117832 programmer.lout -14&2521.programmer.lout.18 0 00677 122443 programmer.lout -14&2521.programmer.lout.2 0 00678 5917 programmer.lout -14&2521.programmer.lout.3 0 00679 7195 programmer.lout -14&2521.programmer.lout.4 0 00680 13590 programmer.lout -14&2521.programmer.lout.5 0 00681 14259 programmer.lout -14&2521.programmer.lout.6 0 00682 18357 programmer.lout -14&2521.programmer.lout.7 0 00683 26021 programmer.lout -14&2521.programmer.lout.8 0 00684 31683 programmer.lout -14&2521.programmer.lout.9 0 00685 37021 programmer.lout -15&1954.policy.lout.2 0 00347 108761 policy.lout -15&1954.policy.lout.3 0 00022 3460 policy.lout -15&1954.policy.lout.4 0 00346 108668 policy.lout -15&1954.programmer.lout.2 0 00686 130425 programmer.lout -15&1954.programmer.lout.3 0 00687 3540 programmer.lout -15&1954.programmer.lout.4 0 00688 130328 programmer.lout -15&policy.lout_1 0 00021 3460 policy.lout -15&policy.lout_10 0 00327 108668 policy.lout -15&policy.lout_11 0 00328 108668 policy.lout -15&policy.lout_12 0 00329 108668 policy.lout -15&policy.lout_13 0 00330 108668 policy.lout -15&policy.lout_14 0 00331 108668 policy.lout -15&policy.lout_15 0 00332 108668 policy.lout -15&policy.lout_16 0 00333 108668 policy.lout -15&policy.lout_17 0 00334 108668 policy.lout -15&policy.lout_18 0 00335 108668 policy.lout -15&policy.lout_19 0 00336 108668 policy.lout -15&policy.lout_20 0 00337 108668 policy.lout -15&policy.lout_21 0 00338 108668 policy.lout -15&policy.lout_22 0 00339 108668 policy.lout -15&policy.lout_23 0 00340 108668 policy.lout -15&policy.lout_24 0 00341 108668 policy.lout -15&policy.lout_25 0 00342 108668 policy.lout -15&policy.lout_26 0 00343 108668 policy.lout -15&policy.lout_27 0 00344 108668 policy.lout -15&policy.lout_28 0 00345 108668 policy.lout -15&policy.lout_5 0 00322 108668 policy.lout -15&policy.lout_6 0 00323 108668 policy.lout -15&policy.lout_7 0 00324 108668 policy.lout -15&policy.lout_8 0 00325 108668 policy.lout -15&policy.lout_9 0 00326 108668 policy.lout -15&programmer.lout_1 0 00689 3540 programmer.lout -15&programmer.lout_10 0 00690 130328 programmer.lout -15&programmer.lout_11 0 00691 130328 programmer.lout -15&programmer.lout_12 0 00692 130328 programmer.lout -15&programmer.lout_13 0 00693 130328 programmer.lout -15&programmer.lout_14 0 00694 130328 programmer.lout -15&programmer.lout_15 0 00695 130328 programmer.lout -15&programmer.lout_16 0 00696 130328 programmer.lout -15&programmer.lout_17 0 00697 130328 programmer.lout -15&programmer.lout_18 0 00698 130328 programmer.lout -15&programmer.lout_19 0 00699 130328 programmer.lout -15&programmer.lout_20 0 00700 130328 programmer.lout -15&programmer.lout_21 0 00701 130328 programmer.lout -15&programmer.lout_22 0 00702 130328 programmer.lout -15&programmer.lout_23 0 00703 130328 programmer.lout -15&programmer.lout_24 0 00704 130328 programmer.lout -15&programmer.lout_25 0 00705 130328 programmer.lout -15&programmer.lout_26 0 00706 130328 programmer.lout -15&programmer.lout_27 0 00707 130328 programmer.lout -15&programmer.lout_28 0 00708 130328 programmer.lout -15&programmer.lout_29 0 00709 130328 programmer.lout -15&programmer.lout_30 0 00710 130328 programmer.lout -15&programmer.lout_31 0 00711 130328 programmer.lout -15&programmer.lout_32 0 00712 130328 programmer.lout -15&programmer.lout_33 0 00713 130328 programmer.lout -15&programmer.lout_34 0 00714 130328 programmer.lout -15&programmer.lout_35 0 00715 130328 programmer.lout -15&programmer.lout_36 0 00716 130328 programmer.lout -15&programmer.lout_37 0 00717 130328 programmer.lout -15&programmer.lout_38 0 00718 130328 programmer.lout -15&programmer.lout_39 0 00719 130328 programmer.lout -15&programmer.lout_40 0 00720 130328 programmer.lout -15&programmer.lout_41 0 00721 130328 programmer.lout -15&programmer.lout_42 0 00722 130328 programmer.lout -15&programmer.lout_43 0 00723 130328 programmer.lout -15&programmer.lout_44 0 00724 130328 programmer.lout -15&programmer.lout_45 0 00725 130328 programmer.lout -15&programmer.lout_46 0 00726 130328 programmer.lout -15&programmer.lout_47 0 00727 130328 programmer.lout -15&programmer.lout_48 0 00728 130328 programmer.lout -15&programmer.lout_49 0 00729 130328 programmer.lout -15&programmer.lout_5 0 00730 130328 programmer.lout -15&programmer.lout_50 0 00731 130328 programmer.lout -15&programmer.lout_51 0 00732 130328 programmer.lout -15&programmer.lout_52 0 00733 130328 programmer.lout -15&programmer.lout_53 0 00734 130328 programmer.lout -15&programmer.lout_6 0 00735 130328 programmer.lout -15&programmer.lout_7 0 00736 130328 programmer.lout -15&programmer.lout_8 0 00737 130328 programmer.lout -15&programmer.lout_9 0 00738 130328 programmer.lout -16&1306.policy.lout.1 0 00031 4863 policy.lout -16&1306.policy.lout.10 0 00173 20538 policy.lout -16&1306.policy.lout.11 0 00177 20924 policy.lout -16&1306.policy.lout.12 0 00181 21310 policy.lout -16&1306.policy.lout.13 0 00185 21696 policy.lout -16&1306.policy.lout.14 0 00189 22083 policy.lout -16&1306.policy.lout.15 0 00193 22470 policy.lout -16&1306.policy.lout.16 0 00207 24330 policy.lout -16&1306.policy.lout.17 0 00211 25241 policy.lout -16&1306.policy.lout.18 0 00215 25797 policy.lout -16&1306.policy.lout.19 0 00219 26166 policy.lout -16&1306.policy.lout.2 0 00035 5369 policy.lout -16&1306.policy.lout.20 0 00223 26535 policy.lout -16&1306.policy.lout.21 0 00227 31188 policy.lout -16&1306.policy.lout.22 0 00231 35574 policy.lout -16&1306.policy.lout.23 0 00235 39888 policy.lout -16&1306.policy.lout.24 0 00239 44296 policy.lout -16&1306.policy.lout.25 0 00243 48828 policy.lout -16&1306.policy.lout.26 0 00247 53553 policy.lout -16&1306.policy.lout.27 0 00251 53922 policy.lout -16&1306.policy.lout.28 0 00255 59072 policy.lout -16&1306.policy.lout.29 0 00259 64483 policy.lout -16&1306.policy.lout.3 0 00039 5827 policy.lout -16&1306.policy.lout.30 0 00263 69640 policy.lout -16&1306.policy.lout.31 0 00267 74577 policy.lout -16&1306.policy.lout.32 0 00271 79521 policy.lout -16&1306.policy.lout.33 0 00275 84380 policy.lout -16&1306.policy.lout.34 0 00282 89692 policy.lout -16&1306.policy.lout.35 0 00286 90802 policy.lout -16&1306.policy.lout.36 0 00290 91171 policy.lout -16&1306.policy.lout.37 0 00294 94284 policy.lout -16&1306.policy.lout.38 0 00298 97420 policy.lout -16&1306.policy.lout.39 0 00302 100591 policy.lout -16&1306.policy.lout.4 0 00149 18234 policy.lout -16&1306.policy.lout.40 0 00306 103557 policy.lout -16&1306.policy.lout.41 0 00310 106632 policy.lout -16&1306.policy.lout.42 0 00314 107021 policy.lout -16&1306.policy.lout.43 0 00318 107874 policy.lout -16&1306.policy.lout.5 0 00153 18618 policy.lout -16&1306.policy.lout.6 0 00157 19002 policy.lout -16&1306.policy.lout.7 0 00161 19386 policy.lout -16&1306.policy.lout.8 0 00165 19770 policy.lout -16&1306.policy.lout.9 0 00169 20154 policy.lout -16&1306.programmer.lout.1 0 00739 7319 programmer.lout -16&1306.programmer.lout.10 0 00740 12093 programmer.lout -16&1306.programmer.lout.100 0 00741 115339 programmer.lout -16&1306.programmer.lout.101 0 00742 115716 programmer.lout -16&1306.programmer.lout.103 0 00743 116736 programmer.lout -16&1306.programmer.lout.104 0 00744 117113 programmer.lout -16&1306.programmer.lout.105 0 00745 117957 programmer.lout -16&1306.programmer.lout.106 0 00746 118510 programmer.lout -16&1306.programmer.lout.107 0 00747 119333 programmer.lout -16&1306.programmer.lout.108 0 00748 119895 programmer.lout -16&1306.programmer.lout.109 0 00749 128472 programmer.lout -16&1306.programmer.lout.11 0 00750 16289 programmer.lout -16&1306.programmer.lout.110 0 00751 128897 programmer.lout -16&1306.programmer.lout.111 0 00752 129326 programmer.lout -16&1306.programmer.lout.12 0 00753 16740 programmer.lout -16&1306.programmer.lout.13 0 00754 17134 programmer.lout -16&1306.programmer.lout.14 0 00755 17655 programmer.lout -16&1306.programmer.lout.15 0 00756 18482 programmer.lout -16&1306.programmer.lout.16 0 00757 18934 programmer.lout -16&1306.programmer.lout.17 0 00758 19391 programmer.lout -16&1306.programmer.lout.18 0 00759 19785 programmer.lout -16&1306.programmer.lout.19 0 00760 20295 programmer.lout -16&1306.programmer.lout.2 0 00761 7769 programmer.lout -16&1306.programmer.lout.20 0 00762 20689 programmer.lout -16&1306.programmer.lout.21 0 00763 22739 programmer.lout -16&1306.programmer.lout.22 0 00764 23133 programmer.lout -16&1306.programmer.lout.23 0 00765 23585 programmer.lout -16&1306.programmer.lout.24 0 00766 24042 programmer.lout -16&1306.programmer.lout.25 0 00767 24494 programmer.lout -16&1306.programmer.lout.26 0 00768 24949 programmer.lout -16&1306.programmer.lout.27 0 00769 25343 programmer.lout -16&1306.programmer.lout.28 0 00770 26656 programmer.lout -16&1306.programmer.lout.29 0 00771 27266 programmer.lout -16&1306.programmer.lout.3 0 00772 8219 programmer.lout -16&1306.programmer.lout.30 0 00773 27876 programmer.lout -16&1306.programmer.lout.31 0 00774 28486 programmer.lout -16&1306.programmer.lout.32 0 00775 29096 programmer.lout -16&1306.programmer.lout.33 0 00776 29706 programmer.lout -16&1306.programmer.lout.34 0 00777 30316 programmer.lout -16&1306.programmer.lout.35 0 00778 31808 programmer.lout -16&1306.programmer.lout.36 0 00779 32297 programmer.lout -16&1306.programmer.lout.37 0 00780 32930 programmer.lout -16&1306.programmer.lout.38 0 00781 33423 programmer.lout -16&1306.programmer.lout.39 0 00782 33897 programmer.lout -16&1306.programmer.lout.4 0 00783 9538 programmer.lout -16&1306.programmer.lout.40 0 00784 34561 programmer.lout -16&1306.programmer.lout.41 0 00785 35006 programmer.lout -16&1306.programmer.lout.42 0 00786 35438 programmer.lout -16&1306.programmer.lout.43 0 00787 35913 programmer.lout -16&1306.programmer.lout.44 0 00788 37146 programmer.lout -16&1306.programmer.lout.45 0 00789 38453 programmer.lout -16&1306.programmer.lout.46 0 00790 47478 programmer.lout -16&1306.programmer.lout.47 0 00791 47952 programmer.lout -16&1306.programmer.lout.48 0 00792 48460 programmer.lout -16&1306.programmer.lout.49 0 00793 48968 programmer.lout -16&1306.programmer.lout.5 0 00794 10035 programmer.lout -16&1306.programmer.lout.50 0 00795 49491 programmer.lout -16&1306.programmer.lout.51 0 00796 50017 programmer.lout -16&1306.programmer.lout.52 0 00797 50541 programmer.lout -16&1306.programmer.lout.53 0 00798 51161 programmer.lout -16&1306.programmer.lout.54 0 00799 51919 programmer.lout -16&1306.programmer.lout.55 0 00800 52384 programmer.lout -16&1306.programmer.lout.56 0 00801 52890 programmer.lout -16&1306.programmer.lout.57 0 00802 53412 programmer.lout -16&1306.programmer.lout.58 0 00803 54447 programmer.lout -16&1306.programmer.lout.59 0 00804 55188 programmer.lout -16&1306.programmer.lout.6 0 00805 10427 programmer.lout -16&1306.programmer.lout.60 0 00806 55654 programmer.lout -16&1306.programmer.lout.61 0 00807 56119 programmer.lout -16&1306.programmer.lout.62 0 00808 56626 programmer.lout -16&1306.programmer.lout.63 0 00809 57149 programmer.lout -16&1306.programmer.lout.64 0 00810 57637 programmer.lout -16&1306.programmer.lout.65 0 00811 58159 programmer.lout -16&1306.programmer.lout.66 0 00812 58681 programmer.lout -16&1306.programmer.lout.68 0 00813 59607 programmer.lout -16&1306.programmer.lout.69 0 00814 59231 programmer.lout -16&1306.programmer.lout.7 0 00815 10819 programmer.lout -16&1306.programmer.lout.70 0 00816 62563 programmer.lout -16&1306.programmer.lout.71 0 00817 65519 programmer.lout -16&1306.programmer.lout.72 0 00818 65895 programmer.lout -16&1306.programmer.lout.73 0 00819 71553 programmer.lout -16&1306.programmer.lout.75 0 00820 77587 programmer.lout -16&1306.programmer.lout.76 0 00821 77211 programmer.lout -16&1306.programmer.lout.77 0 00822 81659 programmer.lout -16&1306.programmer.lout.78 0 00823 85731 programmer.lout -16&1306.programmer.lout.79 0 00824 90154 programmer.lout -16&1306.programmer.lout.8 0 00825 11309 programmer.lout -16&1306.programmer.lout.81 0 00826 92505 programmer.lout -16&1306.programmer.lout.82 0 00827 92129 programmer.lout -16&1306.programmer.lout.83 0 00828 96157 programmer.lout -16&1306.programmer.lout.84 0 00829 99809 programmer.lout -16&1306.programmer.lout.85 0 00830 100270 programmer.lout -16&1306.programmer.lout.86 0 00831 100680 programmer.lout -16&1306.programmer.lout.87 0 00832 101098 programmer.lout -16&1306.programmer.lout.88 0 00833 101474 programmer.lout -16&1306.programmer.lout.89 0 00834 104492 programmer.lout -16&1306.programmer.lout.9 0 00835 11701 programmer.lout -16&1306.programmer.lout.90 0 00836 107554 programmer.lout -16&1306.programmer.lout.91 0 00837 111835 programmer.lout -16&1306.programmer.lout.92 0 00838 112421 programmer.lout -16&1306.programmer.lout.93 0 00839 112859 programmer.lout -16&1306.programmer.lout.94 0 00840 113488 programmer.lout -16&1306.programmer.lout.96 0 00841 114161 programmer.lout -16&1306.programmer.lout.97 0 00842 114537 programmer.lout -16&1306.programmer.lout.99 0 00843 114963 programmer.lout -16&1655.policy.lout.1 0 00033 4863 policy.lout -16&1655.policy.lout.10 0 00175 20538 policy.lout -16&1655.policy.lout.11 0 00179 20924 policy.lout -16&1655.policy.lout.12 0 00183 21310 policy.lout -16&1655.policy.lout.13 0 00187 21696 policy.lout -16&1655.policy.lout.14 0 00191 22083 policy.lout -16&1655.policy.lout.15 0 00195 22470 policy.lout -16&1655.policy.lout.16 0 00209 24330 policy.lout -16&1655.policy.lout.17 0 00213 25241 policy.lout -16&1655.policy.lout.18 0 00217 25797 policy.lout -16&1655.policy.lout.19 0 00221 26166 policy.lout -16&1655.policy.lout.2 0 00037 5369 policy.lout -16&1655.policy.lout.20 0 00225 26535 policy.lout -16&1655.policy.lout.21 0 00229 31188 policy.lout -16&1655.policy.lout.22 0 00233 35574 policy.lout -16&1655.policy.lout.23 0 00237 39888 policy.lout -16&1655.policy.lout.24 0 00241 44296 policy.lout -16&1655.policy.lout.25 0 00245 48828 policy.lout -16&1655.policy.lout.26 0 00249 53553 policy.lout -16&1655.policy.lout.27 0 00253 53922 policy.lout -16&1655.policy.lout.28 0 00257 59072 policy.lout -16&1655.policy.lout.29 0 00261 64483 policy.lout -16&1655.policy.lout.3 0 00041 5827 policy.lout -16&1655.policy.lout.30 0 00265 69640 policy.lout -16&1655.policy.lout.31 0 00269 74577 policy.lout -16&1655.policy.lout.32 0 00273 79521 policy.lout -16&1655.policy.lout.33 0 00277 84380 policy.lout -16&1655.policy.lout.34 0 00284 89692 policy.lout -16&1655.policy.lout.35 0 00288 90802 policy.lout -16&1655.policy.lout.36 0 00292 91171 policy.lout -16&1655.policy.lout.37 0 00296 94284 policy.lout -16&1655.policy.lout.38 0 00300 97420 policy.lout -16&1655.policy.lout.39 0 00304 100591 policy.lout -16&1655.policy.lout.4 0 00151 18234 policy.lout -16&1655.policy.lout.40 0 00308 103557 policy.lout -16&1655.policy.lout.41 0 00312 106632 policy.lout -16&1655.policy.lout.42 0 00316 107021 policy.lout -16&1655.policy.lout.43 0 00320 107874 policy.lout -16&1655.policy.lout.5 0 00155 18618 policy.lout -16&1655.policy.lout.6 0 00159 19002 policy.lout -16&1655.policy.lout.7 0 00163 19386 policy.lout -16&1655.policy.lout.8 0 00167 19770 policy.lout -16&1655.policy.lout.9 0 00171 20154 policy.lout -16&1655.programmer.lout.1 0 00844 7319 programmer.lout -16&1655.programmer.lout.10 0 00845 12093 programmer.lout -16&1655.programmer.lout.100 0 00846 118510 programmer.lout -16&1655.programmer.lout.101 0 00847 119333 programmer.lout -16&1655.programmer.lout.102 0 00848 119895 programmer.lout -16&1655.programmer.lout.103 0 00849 128472 programmer.lout -16&1655.programmer.lout.104 0 00850 128897 programmer.lout -16&1655.programmer.lout.105 0 00851 129326 programmer.lout -16&1655.programmer.lout.11 0 00852 16289 programmer.lout -16&1655.programmer.lout.12 0 00853 16740 programmer.lout -16&1655.programmer.lout.13 0 00854 17134 programmer.lout -16&1655.programmer.lout.14 0 00855 17655 programmer.lout -16&1655.programmer.lout.15 0 00856 18482 programmer.lout -16&1655.programmer.lout.16 0 00857 18934 programmer.lout -16&1655.programmer.lout.17 0 00858 19391 programmer.lout -16&1655.programmer.lout.18 0 00859 19785 programmer.lout -16&1655.programmer.lout.19 0 00860 20295 programmer.lout -16&1655.programmer.lout.2 0 00861 7769 programmer.lout -16&1655.programmer.lout.20 0 00862 20689 programmer.lout -16&1655.programmer.lout.21 0 00863 22739 programmer.lout -16&1655.programmer.lout.22 0 00864 23133 programmer.lout -16&1655.programmer.lout.23 0 00865 23585 programmer.lout -16&1655.programmer.lout.24 0 00866 24042 programmer.lout -16&1655.programmer.lout.25 0 00867 24494 programmer.lout -16&1655.programmer.lout.26 0 00868 24949 programmer.lout -16&1655.programmer.lout.27 0 00869 25343 programmer.lout -16&1655.programmer.lout.28 0 00870 26656 programmer.lout -16&1655.programmer.lout.29 0 00871 27266 programmer.lout -16&1655.programmer.lout.3 0 00872 8219 programmer.lout -16&1655.programmer.lout.30 0 00873 27876 programmer.lout -16&1655.programmer.lout.31 0 00874 28486 programmer.lout -16&1655.programmer.lout.32 0 00875 29096 programmer.lout -16&1655.programmer.lout.33 0 00876 29706 programmer.lout -16&1655.programmer.lout.34 0 00877 30316 programmer.lout -16&1655.programmer.lout.35 0 00878 31808 programmer.lout -16&1655.programmer.lout.36 0 00879 32297 programmer.lout -16&1655.programmer.lout.37 0 00880 32930 programmer.lout -16&1655.programmer.lout.38 0 00881 33423 programmer.lout -16&1655.programmer.lout.39 0 00882 33897 programmer.lout -16&1655.programmer.lout.4 0 00883 9538 programmer.lout -16&1655.programmer.lout.40 0 00884 34561 programmer.lout -16&1655.programmer.lout.41 0 00885 35006 programmer.lout -16&1655.programmer.lout.42 0 00886 35438 programmer.lout -16&1655.programmer.lout.43 0 00887 35913 programmer.lout -16&1655.programmer.lout.44 0 00888 37146 programmer.lout -16&1655.programmer.lout.45 0 00889 38453 programmer.lout -16&1655.programmer.lout.46 0 00890 47478 programmer.lout -16&1655.programmer.lout.47 0 00891 47952 programmer.lout -16&1655.programmer.lout.48 0 00892 48460 programmer.lout -16&1655.programmer.lout.49 0 00893 48968 programmer.lout -16&1655.programmer.lout.5 0 00894 10035 programmer.lout -16&1655.programmer.lout.50 0 00895 49491 programmer.lout -16&1655.programmer.lout.51 0 00896 50017 programmer.lout -16&1655.programmer.lout.52 0 00897 50541 programmer.lout -16&1655.programmer.lout.53 0 00898 51161 programmer.lout -16&1655.programmer.lout.54 0 00899 51919 programmer.lout -16&1655.programmer.lout.55 0 00900 52384 programmer.lout -16&1655.programmer.lout.56 0 00901 52890 programmer.lout -16&1655.programmer.lout.57 0 00902 53412 programmer.lout -16&1655.programmer.lout.58 0 00903 54447 programmer.lout -16&1655.programmer.lout.59 0 00904 55188 programmer.lout -16&1655.programmer.lout.6 0 00905 10427 programmer.lout -16&1655.programmer.lout.60 0 00906 55654 programmer.lout -16&1655.programmer.lout.61 0 00907 56119 programmer.lout -16&1655.programmer.lout.62 0 00908 56626 programmer.lout -16&1655.programmer.lout.63 0 00909 57149 programmer.lout -16&1655.programmer.lout.64 0 00910 57637 programmer.lout -16&1655.programmer.lout.65 0 00911 58159 programmer.lout -16&1655.programmer.lout.66 0 00912 58681 programmer.lout -16&1655.programmer.lout.67 0 00913 59231 programmer.lout -16&1655.programmer.lout.68 0 00914 59607 programmer.lout -16&1655.programmer.lout.69 0 00915 62563 programmer.lout -16&1655.programmer.lout.7 0 00916 10819 programmer.lout -16&1655.programmer.lout.70 0 00917 65519 programmer.lout -16&1655.programmer.lout.71 0 00918 65895 programmer.lout -16&1655.programmer.lout.72 0 00919 71553 programmer.lout -16&1655.programmer.lout.73 0 00920 77211 programmer.lout -16&1655.programmer.lout.74 0 00921 77587 programmer.lout -16&1655.programmer.lout.75 0 00922 81659 programmer.lout -16&1655.programmer.lout.76 0 00923 85731 programmer.lout -16&1655.programmer.lout.77 0 00924 90154 programmer.lout -16&1655.programmer.lout.78 0 00925 92129 programmer.lout -16&1655.programmer.lout.79 0 00926 92505 programmer.lout -16&1655.programmer.lout.8 0 00927 11309 programmer.lout -16&1655.programmer.lout.80 0 00928 96157 programmer.lout -16&1655.programmer.lout.81 0 00929 99809 programmer.lout -16&1655.programmer.lout.82 0 00930 100270 programmer.lout -16&1655.programmer.lout.83 0 00931 100680 programmer.lout -16&1655.programmer.lout.84 0 00932 101098 programmer.lout -16&1655.programmer.lout.85 0 00933 101474 programmer.lout -16&1655.programmer.lout.86 0 00934 104492 programmer.lout -16&1655.programmer.lout.87 0 00935 107554 programmer.lout -16&1655.programmer.lout.88 0 00936 111835 programmer.lout -16&1655.programmer.lout.89 0 00937 112421 programmer.lout -16&1655.programmer.lout.9 0 00938 11701 programmer.lout -16&1655.programmer.lout.90 0 00939 112859 programmer.lout -16&1655.programmer.lout.91 0 00940 113488 programmer.lout -16&1655.programmer.lout.92 0 00941 114161 programmer.lout -16&1655.programmer.lout.93 0 00942 114537 programmer.lout -16&1655.programmer.lout.94 0 00943 114963 programmer.lout -16&1655.programmer.lout.95 0 00944 115339 programmer.lout -16&1655.programmer.lout.96 0 00945 115716 programmer.lout -16&1655.programmer.lout.97 0 00946 116736 programmer.lout -16&1655.programmer.lout.98 0 00947 117113 programmer.lout -16&1655.programmer.lout.99 0 00948 117957 programmer.lout -16&2521.policy.lout.1 0 00048 7015 policy.lout -16&2521.policy.lout.2 0 00065 8430 policy.lout -16&2521.policy.lout.3 0 00078 9820 policy.lout -16&2521.policy.lout.4 0 00105 12637 policy.lout -16&2521.policy.lout.5 0 00116 14073 policy.lout -16&2521.policy.lout.6 0 00124 15316 policy.lout -16&2521.policy.lout.7 0 00140 17236 policy.lout -16&2521.policy.lout.8 0 00203 23675 policy.lout -16&2521.programmer.lout.1 0 00949 5026 programmer.lout -16&2521.programmer.lout.10 0 00950 40574 programmer.lout -16&2521.programmer.lout.11 0 00951 41668 programmer.lout -16&2521.programmer.lout.12 0 00952 42120 programmer.lout -16&2521.programmer.lout.13 0 00953 43228 programmer.lout -16&2521.programmer.lout.14 0 00954 44434 programmer.lout -16&2521.programmer.lout.15 0 00955 44886 programmer.lout -16&2521.programmer.lout.16 0 00956 111162 programmer.lout -16&2521.programmer.lout.17 0 00957 120760 programmer.lout -16&2521.programmer.lout.18 0 00958 123177 programmer.lout -16&2521.programmer.lout.2 0 00959 6652 programmer.lout -16&2521.programmer.lout.3 0 00960 12698 programmer.lout -16&2521.programmer.lout.4 0 00961 14470 programmer.lout -16&2521.programmer.lout.5 0 00962 14919 programmer.lout -16&2521.programmer.lout.6 0 00963 21717 programmer.lout -16&2521.programmer.lout.7 0 00964 31137 programmer.lout -16&2521.programmer.lout.8 0 00965 36557 programmer.lout -16&2521.programmer.lout.9 0 00966 39177 programmer.lout -17&1655.policy.lout.1 0 00032 5108 policy.lout -17&1655.policy.lout.10 0 00174 20784 policy.lout -17&1655.policy.lout.11 0 00178 21170 policy.lout -17&1655.policy.lout.12 0 00182 21556 policy.lout -17&1655.policy.lout.13 0 00186 21943 policy.lout -17&1655.policy.lout.14 0 00190 22330 policy.lout -17&1655.policy.lout.15 0 00194 22717 policy.lout -17&1655.policy.lout.16 0 00208 24559 policy.lout -17&1655.policy.lout.17 0 00212 25470 policy.lout -17&1655.policy.lout.18 0 00216 26026 policy.lout -17&1655.policy.lout.19 0 00220 26395 policy.lout -17&1655.policy.lout.2 0 00036 5614 policy.lout -17&1655.policy.lout.20 0 00224 28715 policy.lout -17&1655.policy.lout.21 0 00228 33368 policy.lout -17&1655.policy.lout.22 0 00232 37754 policy.lout -17&1655.policy.lout.23 0 00236 42068 policy.lout -17&1655.policy.lout.24 0 00240 46476 policy.lout -17&1655.policy.lout.25 0 00244 51008 policy.lout -17&1655.policy.lout.26 0 00248 53782 policy.lout -17&1655.policy.lout.27 0 00252 56374 policy.lout -17&1655.policy.lout.28 0 00256 61524 policy.lout -17&1655.policy.lout.29 0 00260 66935 policy.lout -17&1655.policy.lout.3 0 00040 6072 policy.lout -17&1655.policy.lout.30 0 00264 72092 policy.lout -17&1655.policy.lout.31 0 00268 77029 policy.lout -17&1655.policy.lout.32 0 00272 81973 policy.lout -17&1655.policy.lout.33 0 00276 86832 policy.lout -17&1655.policy.lout.34 0 00283 89921 policy.lout -17&1655.policy.lout.35 0 00287 91031 policy.lout -17&1655.policy.lout.36 0 00291 92683 policy.lout -17&1655.policy.lout.37 0 00295 95796 policy.lout -17&1655.policy.lout.38 0 00299 98932 policy.lout -17&1655.policy.lout.39 0 00303 102103 policy.lout -17&1655.policy.lout.4 0 00150 18479 policy.lout -17&1655.policy.lout.40 0 00307 105069 policy.lout -17&1655.policy.lout.41 0 00311 106861 policy.lout -17&1655.policy.lout.42 0 00315 107250 policy.lout -17&1655.policy.lout.43 0 00319 108104 policy.lout -17&1655.policy.lout.5 0 00154 18863 policy.lout -17&1655.policy.lout.6 0 00158 19247 policy.lout -17&1655.policy.lout.7 0 00162 19631 policy.lout -17&1655.policy.lout.8 0 00166 20015 policy.lout -17&1655.policy.lout.9 0 00170 20399 policy.lout -17&1655.programmer.lout.1 0 00967 7568 programmer.lout -17&1655.programmer.lout.10 0 00968 12344 programmer.lout -17&1655.programmer.lout.100 0 00969 118744 programmer.lout -17&1655.programmer.lout.101 0 00970 119567 programmer.lout -17&1655.programmer.lout.102 0 00971 120129 programmer.lout -17&1655.programmer.lout.103 0 00972 128723 programmer.lout -17&1655.programmer.lout.104 0 00973 129148 programmer.lout -17&1655.programmer.lout.105 0 00974 129577 programmer.lout -17&1655.programmer.lout.11 0 00975 16539 programmer.lout -17&1655.programmer.lout.12 0 00976 16990 programmer.lout -17&1655.programmer.lout.13 0 00977 17384 programmer.lout -17&1655.programmer.lout.14 0 00978 17905 programmer.lout -17&1655.programmer.lout.15 0 00979 18732 programmer.lout -17&1655.programmer.lout.16 0 00980 19184 programmer.lout -17&1655.programmer.lout.17 0 00981 19641 programmer.lout -17&1655.programmer.lout.18 0 00982 20035 programmer.lout -17&1655.programmer.lout.19 0 00983 20545 programmer.lout -17&1655.programmer.lout.2 0 00984 8018 programmer.lout -17&1655.programmer.lout.20 0 00985 20939 programmer.lout -17&1655.programmer.lout.21 0 00986 22989 programmer.lout -17&1655.programmer.lout.22 0 00987 23383 programmer.lout -17&1655.programmer.lout.23 0 00988 23835 programmer.lout -17&1655.programmer.lout.24 0 00989 24292 programmer.lout -17&1655.programmer.lout.25 0 00990 24744 programmer.lout -17&1655.programmer.lout.26 0 00991 25199 programmer.lout -17&1655.programmer.lout.27 0 00992 25593 programmer.lout -17&1655.programmer.lout.28 0 00993 27014 programmer.lout -17&1655.programmer.lout.29 0 00994 27624 programmer.lout -17&1655.programmer.lout.3 0 00995 8468 programmer.lout -17&1655.programmer.lout.30 0 00996 28234 programmer.lout -17&1655.programmer.lout.31 0 00997 28844 programmer.lout -17&1655.programmer.lout.32 0 00998 29454 programmer.lout -17&1655.programmer.lout.33 0 00999 30064 programmer.lout -17&1655.programmer.lout.34 0 01000 30674 programmer.lout -17&1655.programmer.lout.35 0 01001 32057 programmer.lout -17&1655.programmer.lout.36 0 01002 32546 programmer.lout -17&1655.programmer.lout.37 0 01003 33179 programmer.lout -17&1655.programmer.lout.38 0 01004 33672 programmer.lout -17&1655.programmer.lout.39 0 01005 34146 programmer.lout -17&1655.programmer.lout.4 0 01006 9787 programmer.lout -17&1655.programmer.lout.40 0 01007 34811 programmer.lout -17&1655.programmer.lout.41 0 01008 35256 programmer.lout -17&1655.programmer.lout.42 0 01009 35688 programmer.lout -17&1655.programmer.lout.43 0 01010 36163 programmer.lout -17&1655.programmer.lout.44 0 01011 37396 programmer.lout -17&1655.programmer.lout.45 0 01012 38703 programmer.lout -17&1655.programmer.lout.46 0 01013 47728 programmer.lout -17&1655.programmer.lout.47 0 01014 48202 programmer.lout -17&1655.programmer.lout.48 0 01015 48710 programmer.lout -17&1655.programmer.lout.49 0 01016 49218 programmer.lout -17&1655.programmer.lout.5 0 01017 10284 programmer.lout -17&1655.programmer.lout.50 0 01018 49741 programmer.lout -17&1655.programmer.lout.51 0 01019 50267 programmer.lout -17&1655.programmer.lout.52 0 01020 50791 programmer.lout -17&1655.programmer.lout.53 0 01021 51411 programmer.lout -17&1655.programmer.lout.54 0 01022 52169 programmer.lout -17&1655.programmer.lout.55 0 01023 52634 programmer.lout -17&1655.programmer.lout.56 0 01024 53140 programmer.lout -17&1655.programmer.lout.57 0 01025 53662 programmer.lout -17&1655.programmer.lout.58 0 01026 54697 programmer.lout -17&1655.programmer.lout.59 0 01027 55438 programmer.lout -17&1655.programmer.lout.6 0 01028 10676 programmer.lout -17&1655.programmer.lout.60 0 01029 55904 programmer.lout -17&1655.programmer.lout.61 0 01030 56369 programmer.lout -17&1655.programmer.lout.62 0 01031 56876 programmer.lout -17&1655.programmer.lout.63 0 01032 57399 programmer.lout -17&1655.programmer.lout.64 0 01033 57887 programmer.lout -17&1655.programmer.lout.65 0 01034 58409 programmer.lout -17&1655.programmer.lout.66 0 01035 58931 programmer.lout -17&1655.programmer.lout.67 0 01036 59463 programmer.lout -17&1655.programmer.lout.68 0 01037 61134 programmer.lout -17&1655.programmer.lout.69 0 01038 64090 programmer.lout -17&1655.programmer.lout.7 0 01039 11068 programmer.lout -17&1655.programmer.lout.70 0 01040 65751 programmer.lout -17&1655.programmer.lout.71 0 01041 68773 programmer.lout -17&1655.programmer.lout.72 0 01042 74431 programmer.lout -17&1655.programmer.lout.73 0 01043 77443 programmer.lout -17&1655.programmer.lout.74 0 01044 79672 programmer.lout -17&1655.programmer.lout.75 0 01045 83744 programmer.lout -17&1655.programmer.lout.76 0 01046 87816 programmer.lout -17&1655.programmer.lout.77 0 01047 90386 programmer.lout -17&1655.programmer.lout.78 0 01048 92361 programmer.lout -17&1655.programmer.lout.79 0 01049 94380 programmer.lout -17&1655.programmer.lout.8 0 01050 11558 programmer.lout -17&1655.programmer.lout.80 0 01051 98032 programmer.lout -17&1655.programmer.lout.81 0 01052 100041 programmer.lout -17&1655.programmer.lout.82 0 01053 100502 programmer.lout -17&1655.programmer.lout.83 0 01054 100912 programmer.lout -17&1655.programmer.lout.84 0 01055 101330 programmer.lout -17&1655.programmer.lout.85 0 01056 103032 programmer.lout -17&1655.programmer.lout.86 0 01057 106050 programmer.lout -17&1655.programmer.lout.87 0 01058 109112 programmer.lout -17&1655.programmer.lout.88 0 01059 112068 programmer.lout -17&1655.programmer.lout.89 0 01060 112654 programmer.lout -17&1655.programmer.lout.9 0 01061 11950 programmer.lout -17&1655.programmer.lout.90 0 01062 113092 programmer.lout -17&1655.programmer.lout.91 0 01063 113721 programmer.lout -17&1655.programmer.lout.92 0 01064 114393 programmer.lout -17&1655.programmer.lout.93 0 01065 114769 programmer.lout -17&1655.programmer.lout.94 0 01066 115195 programmer.lout -17&1655.programmer.lout.95 0 01067 115572 programmer.lout -17&1655.programmer.lout.96 0 01068 115949 programmer.lout -17&1655.programmer.lout.97 0 01069 116969 programmer.lout -17&1655.programmer.lout.98 0 01070 117346 programmer.lout -17&1655.programmer.lout.99 0 01071 118191 programmer.lout -18&2521.policy.lout.1 0 00045 6641 policy.lout -18&2521.policy.lout.2 0 00059 8006 policy.lout -18&2521.policy.lout.3 0 00075 9423 policy.lout -18&2521.policy.lout.4 0 00102 12010 policy.lout -18&2521.policy.lout.5 0 00112 13635 policy.lout -18&2521.policy.lout.6 0 00120 14646 policy.lout -18&2521.policy.lout.7 0 00135 16739 policy.lout -18&2521.policy.lout.8 0 00200 23200 policy.lout -18&2521.programmer.lout.1 0 01072 4542 programmer.lout -18&2521.programmer.lout.10 0 01073 39848 programmer.lout -18&2521.programmer.lout.11 0 01074 41165 programmer.lout -18&2521.programmer.lout.12 0 01075 41317 programmer.lout -18&2521.programmer.lout.13 0 01076 42793 programmer.lout -18&2521.programmer.lout.14 0 01077 43819 programmer.lout -18&2521.programmer.lout.15 0 01078 43998 programmer.lout -18&2521.programmer.lout.16 0 01079 90530 programmer.lout -18&2521.programmer.lout.17 0 01080 120385 programmer.lout -18&2521.programmer.lout.18 0 01081 122568 programmer.lout -18&2521.programmer.lout.2 0 01082 6041 programmer.lout -18&2521.programmer.lout.3 0 01083 8851 programmer.lout -18&2521.programmer.lout.4 0 01084 13715 programmer.lout -18&2521.programmer.lout.5 0 01085 13928 programmer.lout -18&2521.programmer.lout.6 0 01086 21165 programmer.lout -18&2521.programmer.lout.7 0 01087 26146 programmer.lout -18&2521.programmer.lout.8 0 01088 34393 programmer.lout -18&2521.programmer.lout.9 0 01089 37766 programmer.lout -19&@DocumentBody.28 0 00281 89602 policy.lout -19&@DocumentBody.28 0 01090 130162 programmer.lout -2&3336.policy.lout.1 0 00002 171 policy.lout -2&3336.policy.lout.2 0 00013 1953 policy.lout -2&3336.programmer.lout.1 0 01091 175 programmer.lout -2&3336.programmer.lout.2 0 01092 2001 programmer.lout -3&3391.policy.lout.1 0 00003 348 policy.lout -3&3391.policy.lout.2 0 00014 2130 policy.lout -3&3391.programmer.lout.1 0 01093 356 programmer.lout -3&3391.programmer.lout.2 0 01094 2182 programmer.lout -4&3445.policy.lout.1 0 00004 515 policy.lout -4&3445.policy.lout.2 0 00015 2297 policy.lout -4&3445.programmer.lout.1 0 01095 527 programmer.lout -4&3445.programmer.lout.2 0 01096 2353 programmer.lout -5&3500.policy.lout.1 0 00005 694 policy.lout -5&3500.policy.lout.2 0 00016 2476 policy.lout -5&3500.programmer.lout.1 0 01097 710 programmer.lout -5&3500.programmer.lout.2 0 01098 2536 programmer.lout -6&3554.policy.lout.1 0 00006 861 policy.lout -6&3554.policy.lout.2 0 00017 2643 policy.lout -6&3554.programmer.lout.1 0 01099 881 programmer.lout -6&3554.programmer.lout.2 0 01100 2707 programmer.lout -7&3609.policy.lout.1 0 00007 1036 policy.lout -7&3609.policy.lout.2 0 00018 2818 policy.lout -7&3609.programmer.lout.1 0 01101 1060 programmer.lout -7&3609.programmer.lout.2 0 01102 2886 programmer.lout -8&1400.policy.lout.1 0 00008 1207 policy.lout -8&1400.programmer.lout.1 0 01103 1235 programmer.lout -9&4153.policy.lout.1 0 00009 1485 policy.lout -9&4153.programmer.lout.1 0 01104 1517 programmer.lout diff --git a/doc/manuals-version b/doc/manuals-version index 1020fd06f..db2968290 100644 --- a/doc/manuals-version +++ b/doc/manuals-version @@ -1,2 +1,2 @@ -<!entity manuals-version "2.1.1.0"> -<!entity dpkg-version "1.4.0"> +<!entity manuals-version ""> +<!entity dpkg-version "1.4.1"> diff --git a/doc/obsolete/dependency-ordering.txt b/doc/obsolete/dependency-ordering.txt deleted file mode 100644 index f3f679408..000000000 --- a/doc/obsolete/dependency-ordering.txt +++ /dev/null @@ -1,97 +0,0 @@ -To: Debian developers list <debian-devel@pixar.com> -Subject: Note about the default for virtal package dependencies - -As I wrote some time ago (see below), ordering is significant in the -Depends and Recommended fields - in the absence of other information -dselect will suggest to the user that they select the first named -package in a list of options. - -However, there is no way to specify the `order' of several packages -which all Provide the same thing, when that thing is listed as a -Dependency. - -Eg, if we have: - Package: glibcdoc - Recommended: info-browser - - Package: info - Provides: info-browser - - Package: emacs - Provides: info-browser - -then (if emacs and info are both in the same Class) dselect's choice -will be essentially random. - -It is important to think about this problem, and to consider whether -to list one the the packages explicitly. - -For example, - Package: glibcdoc - Recommended: info | info-browser - -will do the same as the above, except that it will ensure that `info' -is the package which dselect will suggest to the user they also select -if the user has neither it nor Emacs and asks to select glibcdoc. - -This is not necessary if one of the packages has a more fundamental -Class - see the details below. - -Ian. - -------- Start of forwarded message ------- -To: Debian developers list <debian-devel@pixar.com> -Subject: Ordering is significant in Depends: and Recommends: - -For dselect, the ordering of alternative packages in a Depends: or -Recommended: line is significant. - -When an unsatisfied dependency (Depends or Recommended) or a conflict -is detected dselect will go into a `recursive package list', where the -user gets to choose how to resolve the problem. - -Usually dselect will suggest to the user that they select the package -with the most `fundamental' class (eg, it will prefer Base packages to -Optional ones), or the one that they `most wanted' to select in some -sense. - -However, in the absence of other information dselect will prefer -packages listed earlier in the unsatisfied entry in the Depends or -Recommended field. - -NB: this doesn't apply to constructions of the form: - Package: auctex - Depends: emacs, tex -which specifies that auctex depends on *both* emacs and tex. In this -case dselect will suggest to the user that they select both packages. - -It applies to constructions of the form: - Package: a2gs - Recommended: gs_x | gs_both | gs_svga -Here, dselect will prefer gs_x because it is listed earlier. (In the -future I may make it more clever - it may be able to notice, to -continue the example, that the dependencies of gs_x are not yet -satisfied while those of gs_svga, are, and thus prefer the latter, or -in a different situation to notice that gs_both has extra dependencies -which are satisfied, and thus prefer it to gs_x and gs_svga. More -thought is needed in this area.) - -One final example. In the more complicated construction: - Package: trn - Depends: smail | sendmail, inn | inewsinn -dselect will prefer smail because it is a Standard package, and -Sendmail is only Optional, and will prefer inewsinn because it is -Recommended and inn is only Optional. So, the default (if none of the -other packages were selected) would be to select smail and inewsinn. - -However, if inewsinn were moved to Optional this would change, and inn -would be preferred whenever the issue arose after the change. - -Optional fields have the same structure as Depends and Recommended -fields, but they will not arrange for the packages they list to be -suggested for selection, though they will be offered to the user. - -Ian M: can this go in an appendix to the Guidelines ? - -Ian. -------- End of forwarded message ------- diff --git a/doc/obsolete/descriptions.txt b/doc/obsolete/descriptions.txt deleted file mode 100644 index fdc302b1a..000000000 --- a/doc/obsolete/descriptions.txt +++ /dev/null @@ -1,112 +0,0 @@ -To: Debian developers list <debian-devel@pixar.com> -Subject: Package maintainers please look at your Description fields. - -dselect will be much more useful when more packages are more -informative in the Description they provide in their control file. - -So, when you next release a package, could you please check whether -the `control' file has a good description of the package, formatted as -described below ? - -A small amount of effort here on the part of package maintainers will -improve the looks of things quite a bit, I think. - -BTW, a number of packages have been indenting continuation lines in -their Description fields thus: - Description: gnomovision - Gnomovision is .... - further blurb ... -Please don't do this. According to the scheme described below (which -I've now implemented), dselect interprets the extra indentation to -mean `preformatted' text, and doesn't wordwrap it. - -Ian. - - -The format of the Description field is as follows: - -Description: <single line synopsis> - <extended description over several lines> - -The extended description has several kinds of line: - - - those starting with a single space are part of a paragraph. -Successive lines of this form will be word-wrapped when displayed. -The leading space will usually be stripped off. - - - those starting with two or more spaces. These will be displayed -verbatim. If the display cannot be panned horizontally the displaying -program will linewrap them `hard' (ie, without taking account of word -breaks). If it can they will be allowed to trail off to the right. -None, one or two initial spaces may be deleted, but the number of -spaces deleted from each line will be the same (so that you can have -indenting work right, for example). - - - those containing a single space followed by a single full stop -character. These are rendered as blank lines. This is the ONLY way -to get a blank line - see below. - - - those containing a space, a full stop and some more characters. -These are for future expansion. Don't use them. - -IMPORTANT and not so important TIPS: - -* ALWAYS START EXTENDED DESCRIPTION LINES WITH AT LEAST ONE WHITESPACE -CHARACTER. Fields in the control file and in the Packages file are -separated by field names starting in the first column, just as in -RFC822. Forgetting the whitespace will cause dpkg-deb (>=0.93.23) to -produce a syntax error when trying to build the package. If you force -it to build anyway dpkg will refuse to install the resulting mess. - -* DO NOT INCLUDE ANY COMPLETELY EMPTY LINES. These separate different -records in the Packages file, and are forbidden in control files. See -the previous paragraph for what happens if you get this wrong. - -* The single line synopsis should be kept brief - certainly under 80 -characters. My current working half-dselect displays the first 49 -characters if you're using an 80-column terminal. - -* Don't include the package name in the synopsis line. The display -software knows how to display this already, and you don't need to -state it. - -* The extended description should describe what the package does, and -what component it forms of any larger subsystem of which it is a part. - -* Put important information first, both in the synopis and extended -description. Sometimes only the first part of the synopsis or of the -description will be displayed. You can assume that there will usually -be a way to see the whole extended description. - -* You may include information about dependencies and so forth in the -extended description, if you wish. - -* Don't use tab characters. Their effect is not predictable. - -Example control file for Smail: - -Package: smail -Version: 3.1.29.1 -Package_Revision: 8 -Maintainer: Ian Jackson <iwj10@cus.cam.ac.uk> -Recommended: pine | elm | emacs | mh | mailx -Optional: metamail -Depends: cron -Conflicts: sendmail -Description: Electronic mail transport system. - Smail is the recommended mail transport agent (MTA) for Debian. - . - An MTA is the innards of the mail system - it takes messages from - user-friendly mailer programs and arranges for them to be delivered - locally or passed on to other systems as required. - . - In order to make use of it you must have one or more user level - mailreader programs such as elm, pine, mailx or Emacs (which has Rmail - and VM as mailreaders) installed. If you wish to send messages other - than just to other users of your system you must also have appropriate - networking support, in the form of IP or UUCP. - --- -Ian Jackson, at home. ijackson@nyx.cs.du.edu or iwj10@cus.cam.ac.uk -+44 1223 575512 Escoerea on IRC. http://www.cl.cam.ac.uk/users/iwj10/ -2 Lexington Close, Cambridge, CB4 3LS, England. Urgent: iwj@cam-orl.co.uk diff --git a/doc/obsolete/disappear-replace.txt b/doc/obsolete/disappear-replace.txt deleted file mode 100644 index 8335a0ea4..000000000 --- a/doc/obsolete/disappear-replace.txt +++ /dev/null @@ -1,44 +0,0 @@ -From ian Tue Apr 18 23:30:04 1995 -X-VM-v5-Data: ([nil nil nil nil nil nil nil nil nil] - [nil nil nil nil nil nil nil nil nil nil nil nil "^To:" nil nil nil nil nil nil nil] - nil) -X-VM-Summary-Format: "%3n %a %2d %3m %-19.19F %s\n" -X-VM-Labels: nil -X-VM-VHeader: ("Resent-" "From:" "Sender:" "To:" "Apparently-To:" "Cc:" "Subject:" "Date:") nil -X-VM-Bookmark: 5 -To: Debian developers list <debian-devel@pixar.com> -Subject: Handling of base packages - -I propose to implement the following scheme to enable obsolete base -packages to disappear, and to allow files in the base packages to move -between one package and another. - -1. When a package is installed, and contains files that are already -marked as belonging to some other package, the older package will have -the files that have been overwritten removed from its file list. - -2. When a package ceases to contain any files due to the action of -point 1 above, its postrm script is run with the argument `disappear' -(in place of `remove', `purge' or whatever). It will then be moved -into the `purge ok not-installed' state, so that it will cease to -appear in dpkg and dselect lists. Its conffiles will be ignored, -*not* purged. The prerm will *not* be run as the packaging system -doesn't know what files are in a package until it unpacks it. - -This will all happen during the `unpack' phase of the replacing -package. - -3. If a base system package which is being installed conflicts with -another base system package which is currently installed on the -system, the currently installed one will be removed first (the prerm -will be run with `replace <package> <version>' as arguments, then the -package will be removed, then the postrm will be run, likewise with -`replace'). If the replacement fails the removal will be aborted, -involving running the old packages' scripts with `abort-replace'. - -4. Base system packages may not be removed except under 2. or 3. -above. (There will be a --force-remove-base flag to allow foolhardy -users to go ahead anyway.) - -Ian. - diff --git a/doc/obsolete/diversions.text b/doc/obsolete/diversions.txt index ade33af5f..ade33af5f 100644 --- a/doc/obsolete/diversions.text +++ b/doc/obsolete/diversions.txt diff --git a/doc/obsolete/dpkg.texi b/doc/obsolete/dpkg.texi deleted file mode 100644 index b9530d6a5..000000000 --- a/doc/obsolete/dpkg.texi +++ /dev/null @@ -1,101 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c %**start of header -@setfilename dpkg.info -@settitle The @code{dpkg} Package Maintenance System -@c %**end of header - -@ifinfo -@format -START-INFO-DIR-ENTRY -* dpkg: (dpkg). The @code{dpkg} package maintenance system. -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@setchapternewpage off - -@ifinfo -This file documents the @code{dpkg} package maintenance system. - -Copyright (C) 1994 Ian A. Murdock - -Permission is granted to make and distribute verbatim copies of this -document provided the copyright notice and this permission notice are -preserved on all copies. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries a copying permission -notice identical to this one, except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). -@end ignore - -Permission is granted to copy and distribute modified versions of this -document under the conditions for verbatim copying, provided that the -entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - -Permission is granted to copy and distribute translations of this document -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by The Debian Linux Association. -@end ifinfo - -@titlepage -@title The @code{dpkg} Package Maintenance System -@author Ian A. Murdock -@page - -@vskip 0pt plus 1filll -Copyright @copyright{} 1994 Ian A. Murdock - -Permission is granted to make and distribute verbatim copies of this -document provided the copyright notice and this permission notice are -preserved on all copies. - -Permission is granted to copy and distribute modified versions of this -document under the conditions for verbatim copying, provided that the -entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - -Permission is granted to copy and distribute translations of this document -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by The Debian Linux Association. -@end titlepage - -@node Top, Overview, (dir), (dir) - -@top Introduction -@menu -* Overview:: An overview of the @code{dpkg} package - maintenance system. -* Installation:: How to install a package with @code{dpkg}. -* Removal:: How to remove a package with @code{dpkg}. -* Information:: How to obtain information about both - installed and not-yet-installed packages. -* Extension:: How to extend @code{dpkg} to support new - package formats. -* Guidelines:: Guidelines for creating and maintaining - packages for Debian GNU/Linux. -@end menu - -@node Overview -@chapter Overview - -@node Installation -@chapter Package Installation - -@node Removal -@chapter Package Removal - -@node Information -@chapter Package Information - -@node Guidelines -@chapter Debian GNU/Linux Guidelines - -@node Extension -@chapter How to Extend @code{dpkg} to Support New Package Formats - -@bye diff --git a/doc/obsolete/dselect-methods.txt b/doc/obsolete/dselect-methods.txt deleted file mode 100644 index d90e73058..000000000 --- a/doc/obsolete/dselect-methods.txt +++ /dev/null @@ -1,124 +0,0 @@ -From ian Sun May 14 18:21:53 +0100 1995 -To: Debian developers list <debian-devel@pixar.com> -Subject: dselect installation method scripts - -Below is a (somewhat amended) repost of the posting I made a little -while ago about the interface between dselect and the installation -scripts it can run to extract packages. - -Carl Streeter has some hard disk scripts that look fairly good (I -haven't tested them). Anyone else looking to write such scripts -should see his code (Carl, can you upload them please ?). - -Howevever, there are a few points to note: - * Each set of scripts can support several `options' as they're called -- this saves having different code for the CD-ROM, hard disk, &c -methods. - * You have to supply a /usr/[local]/lib/dpkg/methods/<method>/names -file listing the options - see below. - -dselect *will* look in /usr/local/lib/dpkg/methods as well as -/usr/lib. Put your scripts there until you send them to me for -inclusion in dpkg. - -Details if the installation method handling is below, and in -method-scripts.txt; an example `test' method that just shows you how -to write a `names' file and how dselect reacts is available as: - -ab2022c57a1198838034c5f87ea501b1 dselect-example-test-method.tar --rw-rw-r-- 1 ian ian 10240 May 14 18:19 dselect-example-test-method.tar - -NB that the code in dselect to select and call installation scripts is -ALPHA ! - -Ian. - -Each `installation method' will have three scripts: - - * Setup installation parameters. - * Update list of available packages. - * Unpack. - -Which set of scripts is to be used is selectable by the user, from the -`[S]etup' menu option. Basically, the user hits `Setup', gets -presented with a menu of choices and picks one. - -This (a) sets that `choice' to be the default installation method and -(b) runs the `setup' script for that choice. - -The setup script should prompt the user for parameters like the site -to NFS-mount or FTP from, the directory to use, or the directory or -filesystem where the .deb files can be found, or the tape or floppy -device to install from. It should store the responses under -/var/lib/dpkg/methods - see below. - -The update script should obtain a list of available packages if -possible (this is the Packages file from the FTP sites), and copy it -to /var/lib/dpkg/available. Be careful not to overwrite the available -file if something goes wrong - I'd suggest copying to `available.new' -and renaming. If no available list is available :-) it should print a -message saying so. - -The unpack script should feed all the available .deb files to - dpkg --unpack --no-also-select -(the --auto option may also be useful here). In the future there will -be a mechanism to allow (for example) a floppy-based installation -scheme to tell the user which packages are still to be processed; in -the meantime you should just keep going until the user says `stop'. - -If any of these scripts needs to display a message for the user, it -should wait for the user to hit `return' before exiting so that -dselect doesn't immediately rewrite the screen. - -If a script gives a non-zero exit status dselect will print a message -about it and prompt the user for an acknowledgement. If it exits with -a zero exit status then dselect will immediately go back into curses -and any message that the script printed just before exiting will not -be visible. - -The scripts will be kept in /usr/lib/dpkg/methods/. Each method -should have a directory under methods, containing: - `names' - a list of `user-visible options', see below. - `setup', `update', `unpack' - executable programs. - `desc.<option>' - description file. - -A method may provide several options on the `main menu' with different -behaviour. For example, there might be a generic get-packages-by-FTP -method which might provide entries in the main menu for installation -directly from one of the Debian mirror sites as well as for -installation from a user-specified site. - -The `setup', `update' and `unpack' will be invoked with three -arguments. - -The first argument is the directory with the dpkg status information, -usually /var/lib/dpkg. They should $1/methods/<method-name> to store -their data (remember that the user can give a --admindir option to -dselect). - -The second and third argument are the name of the method and the -option within that method, respectively. This information is provided -by dselect (from the user's choice of installation option). - -`names' will be formatted as a list of lines, each containing: - <sequence> <option> <summary> - -<sequence> is a two-digit number that will be used much like rc.d -prefixes to control the order in the main menu. If in doubt use 50. - -<option> is a name which will be passed to `setup', `update' and -`unpack' as their third argument (see above). - -<summary> is the menu entry string. - -Each option may have an extended description in `desc.<option>'. This -should be formatted like a Description: field entry *shifted one -character to the left*. - -/var/lib/dpkg/methods will exist, and a method may use a -/var/lib/dpkg/methods/<method> directory or file (or <method>.* files) -to store its state. - -<method> and <option> must follow the rules for C identifiers. - --- Ian Jackson 14th May 1995 diff --git a/doc/obsolete/essential-flag.txt b/doc/obsolete/essential-flag.txt deleted file mode 100644 index 34e821135..000000000 --- a/doc/obsolete/essential-flag.txt +++ /dev/null @@ -1,43 +0,0 @@ -From ian Thu Jul 6 21:14:08 +0100 1995 -X-VM-v5-Data: ([nil nil nil nil nil nil nil nil nil] - [nil nil nil nil nil nil nil nil nil nil nil nil "^To:" nil nil nil nil nil nil nil] - nil) -In-Reply-To: <m0sTw2a-00063aC@mongo.pixar.com> -References: <m0sTw2a-00063aC@mongo.pixar.com> -To: debian-devel@pixar.com -Subject: Re: non-uninstallable packages - -Bruce Perens writes ("non-uninstallable packages"): -> Assume that a package, such as one in the base, is supposed to be -> non-uninstallable because it is a critical system component. We should -> specify that in an unambiguous form, rather than indicating it by -> specifying "Class: base" in the control file. -> -> I suggest yet another control file field, called "Flags: ". This is -> followed by a comma-delimited set of flags. An example might be: -> Flags: no-uninstall -> -> Another alternative would be to add control-file fields for each flag. -> In this case, the field would appear as: -> Allow-uninstall: no -> ...and the default would be "yes". - -I think you're right. Bill spotted that we were trying to overload -the `Class' field. - -I don't think there's any need for a generic `Flags:' field; a simple -extra field is fine, unless we're going to have an awful lot of -boolean flags applying to packages (any attribute with a value is -better handled using a field of its own anyway). - -I propose to call the new field `Essential', with allowable values -`yes' and `no' and a default of `no'. - -This will be clearer all round, I think, than attempting to describe -dpkg behaviour in the field name. - -If I don't have to make an emergency bugfix release of dpkg first this -will be in the next version. I'll modify dselect too. - -Ian. - diff --git a/doc/obsolete/maintainer-script-args.txt b/doc/obsolete/maintainer-script-args.txt deleted file mode 100644 index a1cd3c75c..000000000 --- a/doc/obsolete/maintainer-script-args.txt +++ /dev/null @@ -1,173 +0,0 @@ -Richard Kettlewell has asked me to document this, so here is a brief -summary. More documentation will probably have to wait until someone -has time ... - -... hmm, it has turned out not to be so brief, and I've spent the last -hour or so writing it. Perhaps someone can use it as the basis for a -spec or a manpage or something. - -In all cases version numbers are <version>-<revision>, if the package -has both, or just <version>. `upgrade' is used even when the new -version number looks lower than the old. - -*** SUMMARY - listing of possible scripts with arguments: - - <new preinst> install - <new preinst> install <old-version> - <new preinst> upgrade <old-version> - <old preinst> abort-upgrade <new-version> - - <postinst> configure - <old postinst> abort-upgrade <new version> - <conflictor's postinst> abort-remove in-favour <package> <new version> - <deconfigured's postinst> abort-deconfigure \ - in-favour <package-being-installed-but-failed> <version> - removing <conflicting-package> <version> - - <prerm> remove - <old prerm> upgrade <new version> - <new prerm> failed-upgrade <old-vppersion> - <conflictor's prerm> remove in-favour <package> <new version> - <deconfigured's prerm> deconfigure \ - in-favour <package-being-installed> <version> \ - removing <conflicting-package> <version> - - <postrm> remove - <postrm> purge - <old postrm> upgrade <new-version> - <new postrm> failed-upgrade <old-version> - <new postrm> abort-install - <new postrm> abort-install <old-version> - <new postrm> abort-upgrade <old-version> - <disappearer's postrm> disappear <overwriter> <new version> - -*** INSTALLATION (unpack): - -The procedure on installation/upgrade/overwrite/disappear (ie, when -running dpkg --unpack, or the unpack stage of dpkg --install) is as -follows. In each case if an error occurs the actions in are general -run backwards - this means that the maintainer scripts are run with -different arguments in reverse order. These are the `error unwind' -calls listed below. - -1a. If a version the package is already installed, call - <old prerm> upgrade <new version> -1b. If this gives an error (ie, a non-zero exit status), dpkg will -attempt instead: - <new prerm> failed-upgrade <old-version> - ... error unwind, for both the above cases: - <old postinst> abort-upgrade <new version> - -2. If a `conflicting' package is being removed at the same time: -2a. If any packages depended on that conflicting package and ---auto-deconfigure is specified, call, for each such package: - <deconfigured's prerm> deconfigure \ - in-favour <package-being-installed> <version> \ - removing <conflicting-package> <version> - ... error unwind: - <deconfigured's postinst> abort-deconfigure \ - in-favour <package-being-installed-but-failed> <version> - removing <conflicting-package> <version> -The deconfigured packages are marked as requiring configuration, so -that if --install is used they will be configured again if possible. -2b. To prepare for removal of the conflicting package, call: - <conflictor's prerm> remove in-favour <package> <new version> - ... error unwind: - <conflictor's postinst> abort-remove in-favour <package> <new version> - -3a. If the package is being upgraded, call - <new preinst> upgrade <old-version> -3b. otherwise, if the package had some configuration files from a -previous version installed (ie, it is in the conffiles-only state): - <new preinst> install <old-version> -3c. otherwise (ie, the package was completely purged): - <new preinst> install - ... error unwind versions, respectively: - <new postrm> abort-upgrade <old-version> - <new postrm> abort-install <old-version> - <new postrm> abort-install - -4. The new package's files are unpacked, overwriting any that may be -on the system already, for example any from the old package or from -another package (backups of the old files are left around, and if -anything goes wrong dpkg will attempt to put them back as part of the -error unwind). - -5a. If the package is being upgraded, call - <old postrm> upgrade <new-version> -5b. If this fails, dpkg will attempt: - <new postrm> failed-upgrade <old-version> - ... error unwind, for both cases: - <old preinst> abort-upgrade <new-version> - -This is the point of no return - if dpkg gets this far, it won't back -off past this point if an error occurs. This will leave the package -in a fairly bad state, which will require a successful reinstallation -to clear up, but it's when dpkg starts doing things that are -irreversible. - -6. Any files which were in the old version of the package but not in - the new are removed. -7. The new file list replaces the old. -8. The new maintainer scripts replace the old. - -9. Any packages all of whose files have been overwritten during the -installation, and which aren't required for dependencies, are -considered to have been removed. For each such package, -9a. dpkg calls: - <disappearer's postrm> disappear <overwriter> <new version> -9b. The package's maintainer scripts are removed. -9c. It is noted in the status database as being in a sane state, -namely not installed (any conffiles it may have are ignored). -Note that disappearing packages don't have their prerm called, because -dpkg doesn't know in advance that the package is going to vanish. - -10. Any files in the package we're unpacking that are also listed in -the file lists of other packages are removed from those lists. (This -will lobotomise the file list of the `conflicting' package if there is -one.) - -11. The backup files made at 4. are deleted. -12. The new package's status is now sane, and recorded as `unpacked'. - -Here is another point of no return - if the conflicting package's -removal fails we don't unwind the rest of the installation; the -conflicting package is left in a half-removed limbo. - -13. If there was a conflicting package we go and do the removal -actions, starting from point 2. of the removal, below. - - -*** CONFIGURATION: - -When we configure a package (this happens with dpkg --install, or with ---configure), we first update the conffiles and then call: - <postinst> configure -(I'm planning to make available as an argument the version of the most -recent successfully-configured version of the package.) - -No attempt is made to unwind after errors during configuration. - - -*** REMOVAL: - -1. <prerm> remove - -2. The package's files are removed (except conffiles). - -3. <postrm> remove - -4. All the maintainer scripts except the postrm are removed. - -If we aren't purging the package we stop here. Note that packages -which have no postrm and no conffiles are automatically purged when -removed, as there is no difference except for the dpkg status. - -5. The conffiles and any backup files (~-files, #*# files, %-files, -.dpkg-{old,new,tmp}, &c &c &c) are removed. - -6. <postrm> purge - -7. The package's file list is removed. - -No attempt is made to unwind after errors during removal. diff --git a/doc/obsolete/version-ordering.txt b/doc/obsolete/version-ordering.txt deleted file mode 100644 index 7bbda6304..000000000 --- a/doc/obsolete/version-ordering.txt +++ /dev/null @@ -1,59 +0,0 @@ -(This has been edited to conform to the intent in dpkg 1.0.16. - When recent versions of dpkg compare versions they break the Version - into an upstream version and debian revision first, by splitting the - Version at the last hyphen. The revisions are only considered if the - upstream versions compare equal.) - -To: debian-devel@pixar.com -Subject: Re: dpkg 0.93.8 released - -[...] -Well, here is what I came up with after a bit of thought and testing. -I propose the following algorithm for comparing version numbers: - - forever { - remove initial non-digit substring from string a - remove initial non-digit substring from string b - compare initial non-digit substrings lexically, - counting letters as coming before punctuation - if (they differ) return the answer - remove initial digit substring from string a - remove initial digit substring from string b - compare initial digit substrings numerically - if (they differ) return the answer - if (both strings are now empty) - the version numbers are the same, stop - if (one string is now empty) - it is the `lesser', return the answer - } - -This will have the desired results: - 2.1 < 2.7 < 2.7a < 2.7a-2 < 2.15 - -An implementation in Perl is attached below. - -Ian. - -#!/usr/bin/perl -- - -if (@ARGV) { - print &compare(@ARGV),"\n"; -} else { - while(<>) { chop; chop($x=<>); print &compare($_,$x),"\n"; } -} - -sub compare { - local ($a,$b) = @_; - do { - $a =~ s/^\D*//; $ad= $&; $ad =~ s/\W/ /g; - $b =~ s/^\D*//; $bd= $&; $bd =~ s/\W/ /g; -print "\t[$ad|$a] [$bd|$b]\n"; - $cm = $ad cmp $bd; return $cm if $cm; - $a =~ s/^\d*//; $ad= $&; - $b =~ s/^\d*//; $bd= $&; -print "\t<$ad|$a> <$bd|$b>\n"; - $cm = $ad <=> $bd; return $cm if $cm; - } while (length($a) && length($b)); -print "\t{$a} {$b}\n"; - return length($a) cmp length($b); -} diff --git a/doc/obsolete/virtual-dependencies.txt b/doc/obsolete/virtual-dependencies.txt deleted file mode 100644 index 1f45eb7a0..000000000 --- a/doc/obsolete/virtual-dependencies.txt +++ /dev/null @@ -1,105 +0,0 @@ -To: Debian users list <debian-user@pixar.com> -Subject: dpkg 0.93.36: dselect does virtual packages - -This release contains virtual package support in the C parts of the -system, which at the moment includes dselect and dpkg-deb. - -It works as I outlined in a mail to debian-devel a little while ago. - -Package maintainers: please start adding `Provides:' fields to your -packages. dselect will use and understand them; dpkg-deb will check -the syntax of the Provides field instead of warning you about it. -dpkg will not understand the new field and will ignore it. - -When almost all the packages have Provides: fields in place we can -start replacing old-style Recommended: fields. - -Note that we can't change Depends: fields since they're also -interpreted by dpkg, which doesn't know about Provides (yet). - -[...] --------------------- - -From: iwj10@cus.cam.ac.uk (Ian Jackson) -To: debian-devel@pixar.com -Subject: `virtual' packages in Depends, Conflicts &c -Date: Fri, 31 Mar 95 15:44 BST - -We're starting to have a problem with package name changes and -multiple packages providing the same service. - -I liked the idea (put forward by [Bruce Perens]) of having `virtual' -packages; it seems that it would solve many of these problems straight -away. - -What I'm proposing to do is as follows: - -Depends, Conflicts, Recommended and Optional lines will now be able to -contain `virtual' package names as well as real package names. - -Virtual packages are in the same namespace as real packages, and may -have the same name. The meaning of a virtual package in a -dependency/conflicts list is exactly that of listing all the real -packages which state that they are an instantiation of that virtual -package. - -This is done with a new Provides field in the control file, with a -syntax much like the Conflicts field. - -The idea is that we can have something like: - Package: elm - Depends: mta - - Package: smail - Provides: mta - Conflicts: mta - - Package: sendmail - Provides: mta - Conflicts: mta -&c. The result is equivalent to elm having said - Depends: smail | sendmail - -(There'll be a special case to say that a package may conflict with a -virtual package which it provides - clearly ...) - -If there are both a real and a virtual package of the same name then -the dependency may be satisfied (or the conflict caused) by either the -real package or any of the virtual packages which provide it. This is -so that, for example, supposing we have - Package: lout - Optional: ghostview -(this is a fictional example - the Lout package shouldn't mention -ghostview), and someone else comes up with a nice PostScript -previewer, then they can just say - Package: marvelpostview - Provides: ghostview -and all will work in the interim (until, say, the Lout maintainer -changes things). - -If a dependency or a conflict has a version number attached then only -real packages will be considered to see whether the relationship is -satisfied (or prohibited, for a conflict) - it is assumed that a real -package which provides virtual package is not of the `right' version. -If there is demand I could arrange that a package which provides a -virtual package may mention a version number, eg. - Provides: mta (2.0) -though I tbink this is unlikely to be helpful. - -If you want to specify which of a set of real packages should be the -default to satisfy a particular dependency on a virtual package, you -can simply list the real package as alternative before the virtual -one. E.g.: - Package: xbaseR6 - Recommended: xsvga | x-server - Provides: x-base, xr6shlib - - Package: xsvga - Recommended: x-base - Provides: x-server - - Package: x8514 - Recommended: x-base - Provides: x-server - -Ian. diff --git a/doc/policy.sgml b/doc/policy.sgml deleted file mode 100644 index 112d51d30..000000000 --- a/doc/policy.sgml +++ /dev/null @@ -1,1619 +0,0 @@ -<!doctype debiandoc system [ -<!entity % manuals-version-def system "manuals-version"> -%manuals-version-def; -]> - -<!-- - Debian Linux package policy manual. - Copyright (C)1996 Ian Jackson; released under the terms of the GNU - General Public License, version 2 or (at your option) any later. - --> - -<book> - -<title>Debian policy manual -<author>Ian Jackson <email/ijackson@gnu.ai.mit.edu/ -<version>version &manuals-version; (dpkg &dpkg-version;), <date> - -<abstract> -This manual describes the policy requirements which must be satisfied -for a package to be included in the Debian distribution. This -includes details of the permissions and ownerships of files in -packages and other technical requirements as well as information like -the upload procedure. -</abstract> - -<copyright>Copyright ©1996 Ian Jackson. -<p> - -This manual is free software; you may redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. -<p> - -This is distributed in the hope that it will be useful, but -<em>without any warranty</em>; without even the implied warranty of -merchantability or fitness for a particular purpose. See the GNU -General Public License for more details. -<p> - -You should have received a copy of the GNU General Public License with -your Debian GNU/Linux system, in <tt>/usr/doc/copyright/GPL</tt>, or -with the <prgn/dpkg/ source package as the file <tt>COPYING</tt>. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. - -<toc sect> - -<chapt id="scope">Introduction and scope of this manual -<p> - -This manual describes the criteria that a Debian-format package must -satisfy to be included in the Debian distribution. -<p> - -Much of this information will be useful even when building a package -which is to be distributed in some other way or is for local use. -<p> - -This manual does <em/not/ describe the technical mechanisms involved -in package creation, installation and removal. This information can -be found in the <prgn/dpkg/ programmers' manual and the <prgn/dpkg/ system -administrators' manual. -<p> - -This document assumes familiarity with these other two manuals. -Unfortunately the system administrators' manual does not exist yet. -<p> - -The Debian version of the FSF's GNU <prgn/hello/ program is provided -as an example for people wishing to create Debian packages. -<p> - -<em>Note that this document is still a draft!</em> - -<chapt id="pkgcopyright">Package copyright -<p> - -Please study the copyright of your submission <em/carefully/ and -understand it before proceeding. If you have doubts or questions, -please ask. -<p> - -The aims of the policy detailed below are: -<list compact> -<item> -That any user be able to rebuild any package in the official Debian -distribution from the original source plus our patches. -<item> -That we make available in our packaging formats as much software as we -can. -<item> -That it be easy for people to make CDROMs of our distribution without -violating copyrights. -</list> -<p> - -All packages in the Debian distribution proper must be freely useable, -modifiable and redistributable in both source and binary -form.<footnote>It is OK for there to be a requirement that modified -versions carry a warning, or that they be released with a different -name or version number, or something similar, because we can comply -with this requirement if necessary.</footnote> -It must be possible for anyone to distribute and use modified source -code and their own compiled binaries, at least when they do so as part -of a Debian distribution. -<p> - -Packages -<list compact> -<item> -whose copyright permission notices (or patent problems) do not allow -distribution and copying for profit, without restriction on the amount -charged, or -<item> -where distribution is restricted according to the medium used, or -<item> -where the distributor must ask any kind of special permission of the -authors, or -<item> -with other onerous conditions, -</list> -may only be placed in the semi-supported non-free section of the -Debian FTP archives. This is important so that CDROM manufacturers -can distribute Debian without having to check the copyright of each -package individually, simply by leaving out the contents of the -non-free area; CDROM distributors are encouraged, though, to check the -copyrights on programs in non-free individually and include as many as -they can. -<p> - -Packages -<list compact> -<item> -whose copyright permission notices (or patent problems) allow only -distribution of compiled binaries (and thus of which only binaries are -available), or -<item> -where the source code which may be -distributed is not the complete source code required to compile the -program (ie, the program cannot be compiled using only packages in the -main Debian distribution), or -<item> -which depend for their use on non-free or contrib -packages<footnote>This includes all packages which declare a -dependency on a non-free or contrib package, and almost all packages -which declare a recommendation.</footnote>, or -<item> -allow free use only for a trial period (shareware), or -<item> -are demonstration programs lacking vital functionality (crippleware), -or -<item> -are only installer-packages which require the user to supply a -separate file to be installed, or -<item> -which are buggy and no longer maintained, but are preserved for -backward compatibility, or -<item> -which fail to meet some other policy requirements, -</list> -may only be placed in the semi-supported contrib section of the Debian -FTP archives (unless they need to be in non-free - see above). -<p> - -Programs whose authors encourage the user to make donations are fine -for the main distribution, provided that the authors do not claim that -not donating is immoral, unethical, illegal or something similar; -otherwise they must go in contrib (or non-free, if even distribution -is restricted by such statements). -<p> - -Packages whose copyright permission notices (or patent problems) do -not allow redistribution even of only binaries, and where no special -permission has been obtained, cannot placed on the Debian FTP site and -its mirrors at all. -<p> - -Note that under international copyright law<footnote>This applies in -the United States, too.</footnote> <em/no/ distribution or modification -of a work is allowed without an explicit notice saying so. Therefore -a program without a copyright notice <em/is/ copyrighted and you may -not do anything to it without risking being sued! Likewise if a -program has a copyright notice but no statement saying what is -permitted then nothing is permitted. -<p> - -Many authors are unaware of the problems that restrictive copyrights -(or lack of copyright notices) can cause for the users of their -supposedly-free software. It is often worthwhile contacting such -authors diplomatically to ask them to modify their terms generally, or -specially for Debian. However, this is a politically difficult thing -to do and you should ask for advice on <prgn/debian-devel/ first. -<p> - -When in doubt, send mail to <email/debian-devel@lists.debian.org/. Be -prepared to provide us with the copyright statement. Software covered -by the GPL, public domain software and BSD-like copyrights are safe; -be wary of the phrases `commercial use prohibited' and `distribution -restricted'. -<p> - -Every package submission <em/must/ be accompanied by verbatim copy of -its copyright (with the exceptions of public domain packages and those -covered by the UCB BSD licence or the GNU GPL or LGPL; in these cases -simply indicate which is appropriate). This information must be -included in a file installed by the binary package - see <ref -id="copyrightfile">. - -<chapt id="binarypkg">Contents of the binary package - -<sect>Control file requirements - -<sect1><tt/Maintainer/ information -<p> - -All packages must have a <tt/Maintainer/ field with the correct name -and a working email address for the Debian maintainer of the package. -If one person maintains several packages they should try to avoid -having different forms of their name and address in different -<tt/Maintainer/ fields. - -<sect1>Dependencies and virtual packages -<p> - -Add a dependency for any shared libraries required by -dynamically-linked executable binaries in your package, by using -<prgn/dpkg-shlibdeps/. -<p> - -All packages must use virtual package names where appropriate, and -arrange to create new ones if necessary. They must not use virtual -package names (except privately, amongst a cooperating group of -packages) unless they have been agreed upon and appear in the list of -virtual package names. -<p> - -The latest version of the authoritative list of virtual package names -can be found on <ftpsite>ftp.debian.org</> in -<ftppath>/debian/doc/package-developer/virtual-package-names-list.text</> -or your local mirror. The procedure for updating it is described at -the top of the file. - -<sect1><tt/Section/ and <tt/Priority/ -<p> - -Decide whether your package can go in <tt/non-free/, <tt/contrib/ or -the main distribution - see <ref id="pkgcopyright">, and put -an appropriate value for the distribution in the -<tt>debian/changelog</> file. -<p> - -The <tt/Priority/ and <tt/Section/ control file fields give -information for classifying the package in <prgn/dselect/ and say -which directory to place it in the FTP archive. -<p> - -They are ultimately the responsibility of the distribution -maintainers; however, you should suggest values for them in your -<tt/.changes/ information when you upload a package. You do this by -including appropriate information in the <tt>debian/control</tt> file -before building the packages. -<p> - -For a list of the currently in-use sections, please see the FTP -archive. Packages in the non-free and contrib areas should have -section <tt/non-free/ and <tt/contrib/, respectively. - -<sect2><tt/Priority/ values -<p> - -<taglist> -<tag><tt/required/ -<item> -<tt/required/ packages are necessary for the proper functioning of the -system. You must not remove these packages or your system may become -totally broken and you may probably not even be able to use -<prgn/dpkg/ to put things back. Systems with only the <tt/required/ -packages are probably unuseable, but they do have enough functionality -to allow the sysadmin to boot and install more software. - -<tag><tt/important/ -<item> -Important programs, including those which one would expect to find on -any Unix-like system. If the expectation is that an experienced Unix -person who found it missing would go `What the F*!@<+ is going on, -where is <prgn/foo/', it should be in <tt/important/. This is an -important criterion because we are trying to produce, amongst other -things, a free Unix. Other packages without which the system will not -run well or be useable should also be here. This does <em/not/ -include Emacs or X11 or TeX or any other large applications. The -<tt/important/ packages are just a bare minimum of commonly-expected -and necessary tools. - -<tag><tt/standard/ -<item> -These packages provide a reasonably small but not too limited -character-mode system. This is what will install by default if the -user doesn't select anything else. It doesn't include many large -applications, but it does include Emacs (this is more of a piece of -infrastructure than an application) and a reasonable subset of TeX and -LaTeX (if this is possible without X). - -<tag><tt/optional/<footnote>In a sense everything is optional that -isn't required, but that's not what is meant here.</footnote> -<item> -This is all the software that you might reasonably want to install if -you didn't know what it was or don't have specialised requirements. -This is a much larger system and includes X11, a full TeX -distribution, and lots of applications. - -<tag><tt/extra/ -<item> -This contains packages that conflict with others with higher -priorities, or are only likely to be useful if you already know what -they are or have specialised requirements. - -</taglist> -<p> - -Priority values are not case-sensitive. - -<sect2>Base packages -<p> - -Some packages have <tt/Section: base/ and are in the <tt/base/ -subdirectory on the FTP archives. These are the packages that are -supplied on the base disks. They are the minimum sensible set for -installing new packages (perhaps via a network). -<p> - -Most of these packages should have <tt/Priority: required/ or at least -<tt/Priority: important/, and many will be essential (see below). - -<sect1><tt/Pre-Depends/ and the <tt/Essential/ flag -<p> - -Do not use <tt/Pre-Depends/ or <tt/Essential: yes/ unless your package -is absolutely vital to the functioning of the system and the -installation of other packages. Do not do either of these things -without consultation with the distribution maintainers or on -<prgn/debian-devel/. -<p> - -Usually, neither of these fields should not be used unless removing a -package really will completely hose the system, making it impossible -to recover by (re)installing packages with <prgn/dpkg/. -<p> - -<tt/Essential/ should not be used for a shared library package - the -dependencies will prevent its premature removal, and we need to be -able to remove it when it has been superseded. -<p> - -It is not necessary for other packages to declare any dependencies -they have on other packages which are marked <tt/Essential/. - -<sect1>Including <tt/Priority/ and <tt/Section/ in the <tt/.deb/ -control file -<p> - -If a user installs a package which is not part of the standard -distribution, or without downloading and updating from a new -<prgn/Packages/ file, the information about the priority and section -of a package will be absent, and the <prgn/dselect/ package listing -will have the package listed under `unclassified'. In order to -improve this it is permissible to use the <tt/-is/, <tt/-isp/ or -<tt/-ip/ option to <prgn/dpkg-gencontrol/, so that the <tt/Section/ -and/or <tt/Priority/ is copied into the actual control information in -the <tt/.deb/ file. However, if you do this you should make sure you -keep the information up to date so that users are not shown -conflicting information. - - -<sect1>Formatting of the <tt/Description/ control file field -<p> - -Every Debian package should have an extended description. -<p> - -The description should be written so that it tells the user what they -need to know to decide whether to install the package. This -description should not just be copied from the blurb for the program. -Instructions for configuring or using the package should not be -included - that is what installation scripts, manpages, Info files and -<tt>/usr/doc/<var/package/</> are for. Copyright statements and other -administrivia should not be included - that is what -<tt>/usr/doc/<var/package//copyright</> is for. -<p> - -If you wish to include a list in your extended with entries which are -a line or more each you must indent each entry by one space to make -sure that it doesn't get wordwrapped. The start of each list entry -should be marked with an asterisk, followed by a single space. You -must wrap the list entries yourself to 75 columns, and should start -continuation lines indented by three spaces so that they line up with -the start of the text on the first line of each list entry. -<p> - -See the programmers' manual for further requirements and pitfalls. - -<sect>Locations of files -<p> - -The location of all installed files and directories must comply fully -with the Linux File System Standard (FSSTND). The latest version of -this document can be found alongside this manual or on -<ftpsite/tsx-11.mit.edu/ in -<ftppath>/pub/linux/docs/linux-standards/fsstnd/</>. Specific questions -about following the standard may be asked on <prgn/debian-devel/, or -referred to Daniel Quinlan, the FSSTND coordinator, at -<email/quinlan@yggdrasil.com/. -<p> - -<sect1>Manpages -<p> - -You must install manpages in <prgn/nroff/ source form, in appropriate -places under <tt>/usr/man</tt>. You should only use sections 1 to 9 -(see the FSSTND for more details). You must <em/not/ install a -preformatted `cat page'. -<p> - -If no manual page is available for a particular program, utility or -function and this is reported as a bug on debian-bugs, a symbolic link -from the requested manual page to the <manref name=undocumented -section=7> manual page should be provided. This symbolic link can be -created from <tt>debian/rules</> like this: -<example> -ln -s ../man7/undocumented.7 \ - debian/tmp/usr/man/man[1-9]/the_requested_manpage.[1-9] -</example> -This manpage claims that the lack of a manpage has been reported as a -bug, so you may only do this if it really has (you can report it -yourself, if you like). Do not close the bug report until a proper -manpage is available. -<p> - -You may forward a complaint about a missing manpage to the upstream -authors, and mark the bug as forwarded in the Debian bug tracking -system. Even though the GNU Project do not in general consider the -lack of a manpage to be a bug, we do - if they tell you that they -don't consider it a bug you should leave the bug in our bug tracking -system open anyway. -<p> - -Manpages should be installed compressed using <tt/gzip -9/. -<p> - -If one manpage needs to be accesssible via several names it is better -to use a symbolic link than the <tt/.so/ feature, but there is no need -to fiddle with the relevant parts of the upstream source to change -from <tt/.so/ to symlinks - don't do it unless it's easy. Do not -create hard links in the manual page directories, and do not put -absolute filenames in <tt/.so/ directives. The filename in a -<tt/.so/ in a manpage should be relative to the base of the manpage -tree (usually <tt>/usr/man</tt>). - -<sect1>Info documents -<p> - -Info documents should be installed in <tt>/usr/info</tt>. They should -be compressed with <tt/gzip -9/. -<p> - -Your package must call <prgn/install-info/ to update the Info <tt/dir/ -file, in its post-installation script: -<example> -install-info --quiet --section Development Development \ - /usr/info/foobar.info -</example> -<p> - -It is a good idea to specify a section for the location of your -program; this is done with the <tt/--section/ switch. To determine -which section to use, you should look at <tt>/usr/info/dir</> on your -system and choose the most relevant (or create a new section if none -of the current sections are relevant). Note that the <tt/--section/ -flag takes two arguments; the first is a regular expression to match -(case-insensitively) against an existing section, the second is used -when creating a new one. -<p> - -You must remove the entries in the pre-removal script: -<example> -install-info --quiet --remove /usr/info/foobar.info -</example> -<p> - -If <prgn/install-info/ cannot find a description entry in the Info file -you will have to supply one. See <manref name=install-info section=8> -for details. - -<sect1>Additional documentation -<p> - -Any additional documentation that comes with the package can be -installed at the discretion of the package maintainer. Text -documentation should be installed in a directory -<tt>/usr/doc/<var/package/</tt><footnote>Where <var/package/ is the -name of the package.</footnote> and compressed with <tt/gzip -9/ -unless it is small. -<p> - -If a package comes with large amounts of documentation which many -users of the package will not require you should create a separate -binary package to contain it, so that it does not take up disk space -on the machines of users who do not need or want it installed. -<p> - -It is often a good idea to put text information files (<tt/README/s, -changelogs, and so forth) that come with the source package in -<tt>/usr/doc/<var/package/</> in the binary package. However, don't -install the instructions for building and installing the package, of -course! - -<sect1>Preferred documentation formats -<p> - -The unification of Debian documentation is being carried out via HTML. -<p> - -If your package comes with extensive documentation in a markup format -that can be converted to various other formats you should if possible -ship HTML versions in the binary package, in the directory -<tt>/usr/doc/<var/package/</> or its subdirectories. -<p> - -Other formats such as PostScript may be provided at your option. - -<sect2>Examples -<p> - -Any examples (configurations, source files, whatever), should be -installed in a directory <tt>/usr/doc/<var/package//examples</tt>. -These files should not be referenced by any program - they're there -for the benefit of the system administrator and users, as -documentation only. - -<sect1 id="instchangelog"><tt>/usr/doc/<var/package//changelog.Debian.gz</> -and <tt>/usr/doc/<var/package//changelog.upstream.gz</>. -<p> - -This installed file must contain a copy of the <tt>debian/changelog</> -file from your Debian source tree, and a copy of the upstream -changelog file if there is one. They should usually be installed in -<tt>/usr/doc/<var/package/</> as <tt/changelog.Debian.gz/ and -<tt/changelog.gz/ respectively. -<p> - -Both should be installed compressed using <tt/gzip -9/, as they will -become large with time even if they start out small. -<p> - -If the package has only one changelog which is used both as the Debian -changelog and the upstream one because there is no separate upstream -maintainer then that changelog should usually be installed as -<tt>/usr/doc/<var/package//changelog.gz</>; if there is a separate -upstream maintainer, but no upstream changelog, then the Debian -changelog should still be called <tt/changelog.Debian.gz/. - -<sect1 id="copyrightfile"><tt>/usr/doc/<var/package//copyright</tt> -<p> - -This file must contain details of the authorship and copyright of the -package. It must say where the upstream sources (if any) were -obtained, and explain briefly what modifications were made in the -Debian version of the package compared to the upstream one. It must -name the original authors of the package and the Debian maintainer(s) -who were involved with its creation. -<p> - -It must contain the full text of the copyright notice and any -acknowledgements for the program and the licence terms under which the -program is distributed. If the package is distributed under the GNU -General Public Licence, the GNU Library General Public Licence, the -Regents of the University of California at Berkeley (BSD) licence or -Larry Wall's Artistic Licence please say so instead of including a -copy of the licence. The files <tt/BSD/, <tt/GPL/, <tt/LGPL/ and -<tt/Artistic/ are be available in <tt>/usr/doc/copyright</tt> for you -to refer to. -<p> - -The copyright file should not be compressed unless it is very large. -<p> - -Do not use the copyright file as a general <tt/README/ file. If your -package has such a file it should be installed in -<tt>/usr/doc/<var/package//README</> or <tt/README.Debian/ or some -other appropriate place. - -<sect1>Symbolic links -<p> - -Most symbolic links should be relative, not absolute. Absolute links, -in general, cause problems when a file system is not mounted where it -"normally" resides (for example, when mounted via NFS). -<p> - -In particular, symlinks from one part of <tt>/usr</tt> to another -should be relative. -<p> - -In certain cases, however, relative links may cause more problems. -For example, links into <tt>/etc</tt> and <tt>/var</tt> should be -absolute. -<p> - -Note that when creating a relative link using <prgn/ln/ it is not -necessary for the target of the link to exist relative to the working -directory you're running <prgn/ln/ from; nor is it necessary to change -directory to the directory where the link is to be made. Simply -include the string that should appear as the target of the link (this -will be a pathname relative to the directory in which the link -resides) as the first argument to <prgn/ln/. -<p> - -For example, in your <prgn/Makefile/ or <tt>debian/rules</>, do things -like: -<example> -ln -fs gcc $(prefix)/bin/cc -ln -fs gcc debian/tmp/usr/bin/cc -ln -fs ../sbin/sendmail $(prefix)/bin/runq -ln -fs ../sbin/sendmail debian/tmp/usr/bin/runq -</example> - -<sect1>Logfiles -<p> - -Logfiles should usually be named -<tt>/var/log/<var/package/.log</tt>. If you have many logfiles, -or need a separate directory for permissions reasons -(<tt>/var/log</tt> is writeable only by <tt/root/), you should usually -create a directory named <tt>/var/log/<var/package/</tt>. -<p> - -Make sure that any logfiles are rotated occasionally so that they -don't grow indefinitely; the best way to do this is to use -<prgn/savelog/ program in an <tt>/etc/cron.daily</>, -<tt>/etc/cron.weekly</> or <tt>/etc/cron.monthly</> script. -<p> - -Make sure that any logfiles are removed when the package is purged -(but not when it is only removed), by checking the argument to the -postrm script (see the programmer's manual for details). - -<sect1><tt>/usr/local</> - for the use of the system administrator -<p> - -As mandated by the FSSTND no package should place any files in -<tt>/usr/local</>, either by putting them in the filesystem archive to -be unpacked by <prgn/dpkg/ or by manipulating them in their maintainer -scripts. -<p> - -Every package that searches a number of directories or files for -something (for example, looking for shared libraries in <tt>/lib</> or -<tt>/usr/lib</>) should search an appropriate directory in -<tt>/usr/local</> too. -<p> - -In order that the system administrator may know where to place -additional files a package should create an empty directory in the -appropriate place in <tt>/usr/local</> by supplying it in the -filesystem archive for unpacking by <prgn/dpkg/. The -<tt>/usr/local</> directory itself and all the subdirectories created -by the package should have permissions 2775 (group-writeable and -set-group-id) and be owned by <tt/root.staff/. -<p> - -In the future it will be possible to tell <prgn/dpkg/ not to unpack -files matching certain patterns, so that system administrators who do -not wish these directories in <tt>/usr/local</> do not need to have -them. - -<sect>Permissions and ownerships -<p> - -The rules in this section are guidelines for general use. If -necessary you may deviate from the details below. However, if you do -so you must make sure that what is done is secure and you must try to -be as consistent as possible with the rest of the system. You should -probably also discuss it on <prgn/debian-devel/ first. -<p> - -Files should be owned by <tt/root.root/, and made writeable only by -the owner and universally readable (and executable, if appropriate). -<p> - -Directories should be mode 755 or (for group-writability) mode 2775. -The ownership of the directory should be consistent with its mode - -if a directory is mode 2775, it should be owned by the group that -needs write access to it. -<p> - -Setuid and setgid executables should be mode 4755 or 2755 -respectively, and owned by the appropriate user or group. They should -not be made unreadable (modes like 4711 or 2711 or even 4111); doing -so achieves no extra security, because anyone can find the binary in -the freely available Debian package - it is merely inconvenient. For -the same reason you should not restrict read or execute permissions on -non-set-id executables. -<p> - -Some setuid programs need to be restricted to particular sets of -users, using file permissions. In this case they should be owned by -the uid to which they are set-id, and by the group which should be -allowed to execute them. They should have mode 4754; there is no -point in making them unreadable to those users who must not be allowed -to execute them. -<p> - -Do not arrange that the system administrator can only reconfigure the -package to correspond to their local security policy by changing the -permissions on a binary. Ordinary files installed by <prgn/dpkg/ (as -opposed to conffiles and other similar objects) have their permissions -reset to the distributed permissions when the package is reinstalled. -Instead you should consider (for example) creating a group for people -allowed to use the program(s) and making any setuid executables -executable only by that group. -<p> - -Shared libraries should be installed executable. - -<sect>Configuration files -<p> - -Any configuration files created or used by your package should reside -in <tt>/etc</tt>. If there are several you should consider creating a -subdirectory named after your package. -<p> - -It is almost certain that any file in <tt>/etc</tt> that is in your -package's filesystem archive should be listed in <prgn/dpkg/'s -<tt/conffiles/ control area file. (See the <prgn/dpkg/ programmers' -manual). - -<sect>Maintainer scripts -<p> - -The package installation scripts should avoid producing output which -it is unnecessary for the user to see and should rely on <prgn/dpkg/ to -stave off boredom on the part of a user installing many packages. -This means, amongst other things, using the <tt/--quiet/ option on -<prgn/install-info/. -<p> - -Packages should try to minimise the amount of prompting they need to -do, and they should ensure that the user will only every be asked each -question once. This means that packages should try to use appropriate -shared configuration files (such as <tt>/etc/papersize</> and -<tt>/etc/news/server</>, rather than each prompting for their own -list of required pieces of information. -<p> - -It also means that an upgrade should not ask the same questions again, -unless the user has used <tt/dpkg --purge/ to remove the package's -configuration. The answers to configuration questions should be -stored in an appropriate place in <tt>/etc</> so that the user can -modify them, and how this has been done should be documented. -<p> - -If a package has a vitally important piece of information to pass to -the user (such as "don't run me as I am, you must edit the following -configuration files first or you risk your system emitting -badly-formatted messages"), it should display this in the -<prgn/postinst/ script and prompt the user to hit return to -acknowledge the message. Copyright messages do not count as vitally -important (they belong in <tt>/usr/doc/copyright</>); neither do -instructions on how to use a program (these should be in on line -documentation, where all the users can see them). -<p> - -Any necessary prompting should almost always be confined to the -post-installation script, and should be protected with a conditional -so that unnecssary prompting doesn't happen if a package's -installation fails and the <prgn/postinst/ is called with -<tt/abort-upgrade/, <tt/abort-remove/ or <tt/abort-deconfigure/. -<p> - -Errors which occur during the execution of an installation script -<em/must/ be checked and the installation <em/must not/ continue after -an error. -<p> - -The section below on scripts in general applies to package maintainer -scripts too. - -<sect>Scripts in general -<p> - -All command scripts, including the package maintainer scripts inside -the package and used by <prgn/dpkg/, should have a <tt/#!/ line naming -the shell to be used to interpret them. -<p> - -In the case of Perl scripts this should be <tt>#!/usr/bin/perl</tt>. -<p> - -Shell scripts (<prgn/sh/ and <prgn/bash/) should almost certainly -start with <tt>set -e</> so that errors are detected. Every script -<em/must/ use <tt/set -e/ or check the exit status of <em/every/ -command. -<p> - -Perl scripts should check for errors when making any system calls, -including <tt/open/, <tt/print/, <tt/close/, <tt/rename/ and -<tt/system/. -<p> - -<prgn/csh/ and <prgn/tcsh/ should be avoided as scripting languages. See -Csh Programming Considered Harmful, one of the <tt/comp.unix.*/ FAQs. -If an upstream package comes with <prgn/csh/ scripts then you must make -sure that they start with <tt>#!/bin/csh</tt> and make your package -depend on <prgn/csh/. -<p> - -<sect>Shared library packages -<p> - -Packages involving shared libraries should be split up into several -binary packages. -<p> - -For a straightforward library which has a development environment and -a runtime kit including just shared libraries you need to create two -packages: <tt/<var/libraryname/<var/soname//<footnote><var/soname/ is -the shared object name of the shared library - it's the thing that has -to match exactly between building an executable and running it for the -dynamic linker to be able run the program. Usually the <var/soname/ -is the major number of the library.</footnote> and -<tt/<var/libraryname/<var/soname/-dev/. -<p> - -If you prefer only to support one development version at a time you -may name the development package <tt/<var/libraryname/-dev/; otherwise -you may wish to use <prgn/dpkg/'s conflicts mechanism to ensure that -the user only installs one development version at a time (after all, -different development versions are likely to have the same header -files in them, causing a filename clash if both are installed). -Typically the development version will also need an exact version -dependency on the runtime library, to make sure that compilation and -linking happens correctly. -<p> - -Packages which use the shared library should have a dependency on the -name of the shared library package, -<tt/<var/libraryname/<var/soname//. When the <var/soname/ changes you -can have both versions of the library installed while moving from the -old library to the new. -<p> - -If your package has some run-time support programs which use the -shared library you must <em/not/ put them in the shared library -package. If you do that then you won't be able to install several -versions of the shared library without getting filename clashes. -Instead, either create a third package for the runtime binaries (this -package might typically be named <tt/<var/libraryname/-runtime/ - note -the absence of the <var/soname/ in the package name) or if the -development package is small include them in there. -<p> - -If you have several shared libraries built from the same source tree -you can lump them all togther into a single shared library package, -provided that you change all their <var/soname/s at once (so that you -don't get filename clashes if you try to install different versions of -the combined shared libraries package). -<p> - -Follow the directions in the <prgn/dpkg/ programmers' manual for -putting the shared library in its package, and make sure you include a -<tt/shlibs/ control area file with details of the dependencies for -packages which use the library. - -<sect>Application configuration files, dotfiles and <tt>/etc/skel</> -<p> - -Files in <tt>/etc/skel</> will automatically be copied into new user -accounts by <prgn/adduser/. They should not be referenced there by -any program. -<p> - -Therefore, if a program needs a dotfile to exist in advance in -<tt/$HOME/ to work sensibly that dotfile should be installed in -<tt>/etc/skel</> (and listed in conffiles, if it is not generated and -modified dynamically by the package's installation scripts). -<p> - -However, programs that require dotfiles in order to operate sensibly -(dotfiles that they do not create themselves automatically, that is) -are a bad thing, and programs should be configured by the Debian -default installation as close to normal as possible. -<p> - -Therefore, if a program in a Debian package needs to be configured in -some way in order to operate sensibly that configuration should be -done in a site-wide global configuration file elsewhere in -<tt>/etc</>. Only if the program doesn't support a site-wide default -configuration and the package maintainer doesn't have time to add it -should a default per-user file be placed in <tt>/etc/skel</>. -<p> - -<tt>/etc/skel</> should be as empty as we can make it. This is -particularly true because there is no easy mechanism for ensuring that -the appropriate dotfiles are copied into the accounts of existing -users when a package is installed. -<p> - -Ideally the sysadmin should ideally not have to do any configuration -other than that done (semi-)automatically by the postinst script. - - -<sect>Games -<p> - -The permissions on /var/lib/games are 755 <tt/root.root/. -<p> - -Each game decides on its own security policy. -<p> - -Games which require protected, privileged access to high-score files, -savegames, &c, must be made set-<em/group/-id (mode 2755) and -owned by <tt/root.games/, and use files and directories with -appropriate permissions (770 <tt/root.games/, for example). They must -<em/not/ be made set-<em/user/-id, as this causes security -problems.<footnote>If an attacker can subvert any set-user-id game -they can overwrite the executable of any other, causing other players -of these cames to run a trojan. With a set-group-id game the attacker -only gets access to less important game data, and if they can get at -the other players' accounts at all it will take considerably more -effort.</footnote> -<p> - -Some packages, for example some fortune cookie programs, are -configured by the upstream authors to install with their data files or -other static information made unreadable so that they can only be -accessed through set-id programs provided. Do not do this in a Debian -package: anyone can download the <tt/.deb/ file and read the data from -it, so there is no point making the files unreadable. Not making the -files unreadable also means that you don't have to make so many -programs set-id, which reduces the risk of a security hole. - -<sect>Allocating package-specific users and groups -<p> - -If you need to create a new user or group for your package there are -two possibilities. Firstly, you may need to make some files in the -binary package be owned by this user or group, or you may need to -compile the user or group id (rather than just the name) into the -binary (though this latter should be avoided if possible). In this -case you need a statically allocated id. -<p> - -You must ask for a user or group id from the base system maintainer, -and must not release the package until you have been allocated one. -Once you have been allocated one you must make the package depend -on a version of the base system with the id present in -<tt>/etc/passwd</tt> or <tt>/etc/group</tt>, or alternatively arrange -for your package to create the user or group itself with the correct -id (using <tt/adduser/) in its pre- or post-installation script (the -latter is to be preferred if it is possible). -<p> - -On the other hand, the program may able to determine the uid or gid -from the group name at runtime, so that a dynamic id can be used. In -this case you must choose an appropriate user or group name, -discussing this on <prgn/debian-devel/ and checking with the base system -maintainer that it is unique and that they do not wish you to use a -statically allocated id instead. When this has been checked you must -arrange for your package to create the user or group if necessary -using <prgn/adduser/ in the pre- or post-installation script (again, the -latter is to be preferred if it is possible). -<p> - -Note that changing the numeric value of an id associated with a name -is very difficult, and involves searching the filesystem for all -appropriate files. You need to think carefully whether a static or -dynamic id is required, since changing your mind later will cause -problems. - - -<sect>Installation of Emacs-lisp files -<p> - -Generally, if a package includes an elisp helper file, it probably -doesn't need to be byte-compiled. If the package is <em/written/ -primarily in emacs, it is probably complex enough that speed is an -issue and should be byte compiled. - - -<sect>Use of <prgn/dpkg-divert/ and <prgn/update-alternatives/ -<p> - -Do not use <prgn/dpkg-divert/ on a file belonging to another package -without consulting the maintainer of that package first. -<p> - -In order for <prgn/update-alternatives/ to work correctly all the -packages which supply an instance of the `shared' command name (or, -in general, filename) must use it. You can use <tt/Conflicts/ to -force the deinstallation of other packages supplying it which do not -(yet) use <prgn/update-alternatives/. It may in this case be -appropriate to specify a conflict on earlier versions on something - -this is an exception to the usual rule that this is not allowed. - - -<chapt>Configuring and building the programs in the package - -<sect>Compilation options -<p> - -Generally the following compilation parameters should be used: -<example> -CC = gcc -CFLAGS = -O2 -g -Wall # sane warning options vary between programs -LDFLAGS = # none -install -s # (or use strip on the files in debian/tmp) -</example> -<p> - -Note that all installed binaries and shared libraries should be -stripped<footnote>Shared libraries can function perfectly well when -stripped, since the symbols for dynamic linking are in a separate part -of the ELF object file.</footnote><footnote>Under some circumstances -it may be useful to install a shared library unstripped, for example -when building a separate package to support debugging.</footnote>, -either by using the <tt/-s/ flag to <prgn/install/, or by calling -<prgn/strip/ on the binaries after they have been copied into -<tt>debian/tmp</> but before the tree is made into a package. -<p> - -Make sure that you do not link with <tt/-g/, as this makes a.out -compilers produce huge statically linked binaries. The <tt/-g/ flag -is useful on compilation so that you have available a full set of -debugging symbols in your built source tree, in case anyone should -file a bug report involving (for example) a core dump. -<p> - -The <tt/-N/ flag should not be used. On a.out systems it may have -been useful for some very small binaries, but for ELF it has no good -effect. -<p> - -It is up to the package maintainer to decide what compilation options -are best for the package. Certain binaries (such as -computationally-intensive programs) may function better with certain -flags (<tt/-O3/, for example); feel free to use them. Please use good -judgment here. Don't use flags for the sake of it; only use them if -there is good reason to do so. Feel free to override the upstream -author's ideas about which compilation options are best - they are -often inappropriate for our environment. -<p> - -Please make sure that you use only released versions of shared -libraries to build your packages; otherwise other users will not be -able to run your binaries properly. Producing source packages that -depend on unreleased compilers is also usually a bad idea. - - -<sect>Packages which can use the X shared libraries -<p> - -Some programs can be configured with or without support for X Windows. -Typically these binaries produced when configured for X will need the -X shared libraries to run. -<p> - -Such programs should be configured <em/with/ X support, and should -declare a dependency on <tt/elf-x11r6lib/ (for the X11R6 libraries). -Users who wish to use the program can install just the relatively -small <tt/xlib/ package, and do not need to install the whole of X. -<p> - -Do not create two versions (one with X support and one without) of -your package. - - -<sect id="mail">Mail processing on Debian systems -<p> - -Debian packages which process electronic mail, whether -mail-user-agents (MUAs) or mail-transport-agents (MTAs), <em/must/ -make sure that they are compatible with the configuration decisions -below. Failure to do this may result in lost mail, broken <tt/From:/ -lines, and other serious brain damage! -<p> - -The mail spool is <tt>/var/spool/mail</> and the interface to send a -mail message is <tt>/usr/sbin/sendmail</> (as per the FSSTND). The -mail spool is part of the base system and not part of the MTA package. -<p> - -Mailboxes are locked using the <tt/<var/username/.lock/ lockfile -convention, rather than <prgn/fcntl/, <prgn/flock/ or <prgn/lockf/. -<p> - -Mailboxes are generally 660 <tt/<var/user/.mail/ unless the user has -chosen otherwise. A MUA may remove a mailbox (unless it has -nonstandard permissions) in which case the MTA or another MUA must -recreate it if needed. Mailboxes must be writeable by group mail. -<p> - -The mail spool is 2775 <tt/mail.mail/, and MUA's need to be setgid -mail to do the locking mentioned above (and obviously need to avoid -accessing other users' mailboxes using this privilege). -<p> - -<tt>/etc/aliases</> is the source file for the system mail aliases -(e.g. postmaster, usenet, etc.) - it is the one which the sysadmin -and postinst scripts may edit. After <tt>/etc/aliases</> is edited -the program or human editing it must call <prgn/newaliases/. All MTA -packages should come with a <prgn/newaliases/ program, even if it does -nothing, but older MTA packages do not do this so programs should not -fail if <prgn/newaliases/ cannot be found. -<p> - -The convention of writing <tt/forward to <var/address// in the mailbox -itself is not supported. Use a <tt/.forward/ file instead. -<p> - -The location for the <prgn/rmail/ program used by UUCP for incoming -mail is <tt>/usr/sbin/rmail</>, as per the FSSTND. Likewise, -<prgn/rsmtp/, for receiving batch-SMTP-over-UUCP, is in -<tt>/usr/sbin/rsmtp</> if it is supported. -<p> - -If you need to know what name to use (for example) on outgoing news -and mail messages which are generated locally, you should use the file -<tt>/etc/mailname</>. It will contain the portion after the username -and <tt/@/ (at) sign for email addresses of users on the machine -(followed by a newline). -<p> - -A package should check for the existence of this file. If it exists -it should use it without comment.<footnote>An MTA's prompting -configuration script may wish to prompt the user even if it finds this -file exists.</footnote> If it does not exist it should prompt the user -for the value and store it in <tt>/etc/mailname</> as well as using it -in the package's configuration. The prompt should make it clear that -the name will not just be used by that package. E.g., in this -situation the INN package says: -<example> -Please enter the `mail name' of your system. This is the hostname -portion of the address to be shown on outgoing news and mail messages. -The default is <var/syshostname/, your system's host name. -Mail name [`<var/syshostname/']: -</example> -where <var/syshostname/ is the output of <tt/hostname -fqdn/. - - -<sect>Obsolete constructs and libraries: varargs and libtermcap -<p> - -<prgn/<varargs.h>/ is provided to support end-users compiling -very old software; libtermcap is provided to support the execution of -software which has been linked against it (either old programs or -those such as Netscape which are only available in binary form). -<p> - -Debian packages should be ported to <prgn/<stdarg.h>/ and -ncurses when they are built. - - -<chapt id="sourcepkg">Source packaging, changelogs, etc. - -<sect>Releases of packages by other than the usual Debian maintainer -<p> - -Under certain circumstances it is necessary for someone other than the -usual package maintainer to make a release of a package. For example, -a porter for another architecture may have to make some small changes -to the source package and does not wish to wait with uploading their -release until the main maintainer has incorporated the patch, or a -serious security problem may have come to light requiring immediate -attention. -<p> - -Maintainers other than the usual package maintainer should make as few -changes to the package as possible, and they should always send a -unified context diff (<tt/diff -u/) detailing their changes to the bug -tracking system properly flagged with the correct package so that the -usual maintainer is kept aware of the situation. -<p> - -When someone other than the usual maintainer releases a package they -should add a new component to the <var/debian-revision/ component of -the version number - that is, the portion after the (last) hyphen. -This extra component will start at <tt/1/. This is to avoid -`stealing' one of the usual maintainer's version numbers, possibly -disrupting their work. If there is no <var/debian-revision/ component -in the version number then one should be created, starting at <tt/1/. -<p> - -If it is absolutely necessary for someone other than the usual -maintainer to make a release based on a new upstream version then the -person making the release should start with the <var/debian-revision/ -value <tt/0.1/. The usual maintainer of a package should start their -<var/debian-revision/ numbering at <tt/1/. - - -<sect>Standards conformance and <tt/Standards-Version/ -<p> - -You should specify the most recent version of the packaging standards -with which your package complies in the source package's -<tt/Standards-Version/ field. -<p> - -This value will be used to file bug reports automatically if your -package becomes too much out of date. -<p> - -The value corresponds to a version of the Debian manuals, as can be -found on the title page or page headers and footers (depending on the -format). The value for this version of the manuals and packaging -standards is <tt/&manuals-version;/. -<p> - -The version number has four components - major and minor number and -major and minor patchlevel. When the standards change in a way that -requires every package to change the major number will be changed. -Significant changes that will require work in many packages will be -signaled by a change to the minor number. The major patchlevel will -be changed for any change to the meaning of the standards, however -small; the minor patchlevel will be changed when only cosmetic, -typographical or other edits which do not change the meaning are made, -or changes which do not affect the contents of packages. -<p> - -You should regularly, and especially if your package has become out of -date, install the most recent version of dpkg and read -<tt>/usr/doc/dpkg/changelog-manuals</> to see which changes, if any, -are relevant. If any are relevant you should look up the relevant -section in the policy or programmers' manuals and update your package. -When your package complies with the new standards you may update the -<tt/Standards-Version/ source package field and release it. - - -<sect>Documentation and the <tt/changelog/ -<p> - -Document your changes and updates to the source package properly in -the <tt>debian/changelog</tt> file. -<p> - -A copy of the file which will be installed in -<tt>/usr/doc/<var/package//copyright</tt> should be in -<tt>debian/copyright</tt>. -<p> - -In non-experimental packages you may only use a format for -<tt>debian/changelog</> which is supported by the most recent released -version of <prgn/dpkg/. If your format is not supported and there is -general support for it you should contact the <prgn/dpkg/ maintainer -to have the parser script for your format included in the <prgn/dpkg/ -package.<footnote>You will need to agree that the parser and its -manpage may be distributed under the GNU GPL, just as the rest of -<prgn/dpkg/ is.</footnote> - -<sect>Changes to the upstream sources -<p> - -If you need to edit a <prgn/Makefile/ where GNU-style <prgn/configure/ -scripts are used, you should edit the <tt/.in/ files rather than -editing the <prgn/Makefile/ directly. This allows the user to -reconfigure the package if necessary. You should <em/not/ configure -the package and edit the generated <prgn/Makefile/! This makes it -impossible for someone else to later reconfigure the package. -<p> - -If changes to the source code are made that are generally applicable -please try to get them included in the upstream version of the package -by supplying the upstream authors with the changes in whatever form -they prefer. -<p> - -If you need to configure the package differently for Debian or for -Linux, and the upstream source doesn't provide a way to configure it -the way you need to, please add such configuration facilities (for -example, a new <prgn/autoconf/ test or <tt/#define/) and send the -patch to the upstream authors, with the default set to the way they -originally had it. You can then easily override the default in your -<tt>debian/rules</tt> or wherever is appropriate. - -<sect>Error trapping in makefiles -<p> - -When <prgn/make/ invokes a command in a makefile (including your -package's upstream makefiles and the <tt>debian/rules</>) it does so -using <tt/sh/. This means that <tt/sh/'s usual bad error handling -properties apply: if you include a miniature script as one of the -commands in your makefile you'll find that if you don't do anything -about it then errors are not detected and <prgn/make/ will blithely -continue after problems. -<p> - -Every time you put more than one shell command (this includes using a -loop) in a makefile command you <em/must/ make sure that errors are -trapped. For simple compound commands, such as changing directory and -then running a program, using <tt/&&/ rather than semicolon as -a command separator is sufficient. For more complex commands -including most loops and conditionals you must include a separate -<tt/set -e/ command at the start of every makefile command that's -actually one of these miniature shellscripts. - -<chapt id="developer">Procedure - how to participate in the Debian project - -<sect>Before you start work on a package -<p> - -So, you've read all the documentation, you understand what everything -in the <prgn/hello/ example package is for, and you're about to -Debianise your favourite package. How do you actually become a Debian -developer so that your work can be incorporated into the Project? -<p> - -Firstly, subscribe to <prgn/debian-devel/ if you haven't already. -Send the word <tt/subscribe/ in the <em/Subject/ of a mail to -<email/debian-devel-REQUEST@lists.debian.org/. In case of problems -contact the list administrator, Anders Chrigstrom <email/ac@netg.se/. -<p> - -You should to subscribe and lurk for a bit before doing any coding, -and you should post about your intentions to work on something to -avoid duplicated effort. -<p> - -If you do not have a PGP key yet generate one. You should probably -read the PGP manual, as it has much important information which is -critical to its security. Many more security failures are due to -human error than to software failure or high-powered spy techniques. -<p> - -If you live in a country where use of cryptography even for signing is -forbidden then please contact us so we can make special arrangements. -This does not apply in France, where I believe only encryption and not -signing is forbidden. - - -<sect>When you have a package to upload -<p> - -When you have your package ready to be uploaded you must send a -message to the project leader, Bruce Perens <email/bruce@pixar.com/, -the administrator of <tt/master.debian.org/, Simon Shapiro -<email/shimon@i-connect.net/, the mailing list administrator, Anders -Chrigstrom <email/ac@netg.se/ and the <prgn/dpkg/ maintainer, Ian -Jackson <email/ijackson@gnu.ai.mit.edu/. -<p> - -The message should say what you've done and who you are, and should -ask for an account on <prgn/master/ and to be subscribed to -<prgn/debian-private/ (the developers-only mailing list). It should -contain your PGP key (extracted using <tt/pgp -kxa/) for the database -of keys which is shipped with <prgn/dpkg/. - -When you have your personal account on <prgn/master/ log in and -transfer the files to -<tt>/home/Debian/ftp/private/project/Incoming</>. You cannot upload -to <prgn/Incoming/ on <prgn/master/ using anonymous FTP. -<p> - -You can also upload files to <prgn/Incoming/ via a <prgn/cron/-driven -upload queue in Europe on <ftpsite/chiark.chu.cam.ac.uk/. For details -connect to <prgn/chiark/ using anonymous FTP and read -<ftppath>/pub/debian/private/project/README.how-to-upload</ftppath>. - - -<sect id="changesfiles">Upload handling - <tt/.changes/ files -<p> - -When a package is uploaded to the Debian FTP archive, it must be -accompanied by a <tt/.changes/ file which gives directions for its -handling. This is usually generated by <prgn/dpkg-genchanges/. -<p> - -This file is a control file with the following fields: -<list compact> -<item><tt/Format/ -<item><tt/Date/ -<item><tt/Source/ -<item><tt/Binary/ -<item><tt/Architecture/ -<item><tt/Version/ -<item><tt/Distribution/ -<item><tt/Urgency/ -<item><tt/Maintainer/ -<item><tt/Description/ -<item><tt/Changes/ -<item><tt/Files/ -</list> -<p> - -All of them are mandatory for a Debian upload. See the list of -control fields in the <prgn/dpkg/ programmers' manual for the contents -of these fields. -<p> - -The first time a version is uploaded which corresponds to a particular -upstream version the original source tarfile should be uploaded and -included in the <tt/.changes/ file; subsequent times the very same -tarfile should be used to build the new diffs and <tt/.dsc/ files, and -it need not then be uploaded. -<p> - -By default <prgn/dpkg-genchanges/ and <prgn/dpkg-buildpackage/ will -include the original source tarfile if and only if the Debian revision -part of the source version number is <tt/0/ or <tt/1/, indicating a -new upstream version. This behaviour may be modified by using -<tt/-sa/ to always include it or <tt/-sd/ to always leave it out. -<p> - -If no original source is included in the upload then the original -source tarfile used by <prgn/dpkg-source/ when constructing the -<tt/.dsc/ file and diff to be uploaded <em/must/ be byte-for-byte -identical with the one already in the archive. If there is some -reason why this is not the case then the new version of the original -source should be uploaded, possibly by using the <tt/-sa/ flag. - - -<sect>Upload handling - announcements -<p> - -When a package is uploaded an announcement should be posted to -<tt/debian-changes/. The announcement should give the (source) -package name and version number, and a very short summary of the -changes, in the <prgn/Subject/ field, and should contain the -PGP-signed <tt/.changes/ file. Some additional explanatory text may -be added before the start of the <tt/.changes/ file. -<p> - -If a package is released with <tt/Distribution: experimental/ the -announcement should be posted to <tt/debian-devel/ instead. - - -<sect id="mailinglists">The Debian mailing lists -<p> - -The mailing list server is at <tt/lists.debian.org/. Mail -<tt/debian-<var/foo/-REQUEST@lists.debian.org/<footnote>where -<tt/debian-<var/foo// is the name of the list</footnote> with the word -<tt/subscribe/ in the Subject to subscribe or <tt/unsubscribe/ to -unsubscribe. -<p> - -When replying to messages on the mailing list, please do not send a -carbon copy (<tt/CC/ - this does not mean `courtesy copy') to the -original poster. Anyone who posts to a mailing list should read it to -see the responses. -<p> - -As ever on the net, please trim down the quoting of articles you're -replying to. In general, please adhere to the usual conventions for -posting messages. - - -<chapt id="conversion">Conversion procedure from old source packages -<p> - -This is a brief summary of the procedure for converting a -pre-2.0.0.0-format source package into the new format. -<p> - -You are strongly advised to download and examine the <prgn/hello/ -package, and to read the section in the <prgn/dpkg/ programmers' -manual describing the source packaging tools. More detail about the -exact functionality of these tools is available in <manref -name=dpkg-source section=1>. -<p> - -<list> - -<item> -Download the original source code from wherever it can be found and do -any rearrangement required to make it look like the original tree of -the Debian source. Put it in -<tt><var/package/-<var/upstream-version/.orig/</> or -<tt/<var/package/_<var/upstream-version/.orig.tar.gz/. - -<item> -Rename all files <tt/debian.*/ to <tt>debian/*</>. There may be some -exceptions to this, but this is a good start. - -<item> -Edit the <tt>debian/changelog</> - create or rename it if necessary. -Add a new revision to the top with the appropriate details, and a -local variables entry to the bottom to set Emacs to the right mode: -<example> -Local variables: -mode: debian-changelog -End: -</example> - -<item> -Edit/create <tt>debian/control</>: -<list compact> -<item> -Remove the <tt/Version/ field. If it is generated unusually (not -equal to the source version) you must use the -v option to -dpkg-gencontrol (see below). <tt/Section/, <tt/Priority/, -<tt/Maintainer/ go above the first blank line, most of the rest below. - -<item> -Reorder the fields and add a blank line at an appropriate point, -separating the source package fields from the binary package -fields. - -<item> -Add the <tt/Source/ field. - -<item> -Add the <tt/Standards-Version/ field. The current value is -<tt/&manuals-version;/. - -<item> -Change the <tt/Architecture/ field for each package to <tt/any/, -<tt/all/ or whatever. If there isn't an <tt/Architecture/ field add -one. - -<item> -If any other seddery or things used to happen to make the binary -control files use <prgn/dpkg-gencontrol/'s variable substitution -features to achieve the same effect. Use <tt>debian/substvars</> if -you need to put unusally-generated information (apart from details of -<tt/.deb/ files) in the <tt/.changes/ file too. -</list> - -<item> -Edit the <tt>debian/rules</>: -<list compact> -<item> -Remove the <prgn/source/ and <prgn/diff/ and any <prgn/changes/ and -<prgn/dist/ targets. These things now happen in a package-independent -way and are not done by <tt>debian/rules</>. -<item> -Split the <prgn/binary/ target into <prgn/binary-arch/ and -<prgn/binary-indep/; in many cases all of <prgn/binary/ should go into -<prgn/binary-arch/. Create the <prgn/binary/ target and the unused of -the two other <prgn/binary-*/ targets if there is one - you can copy -the ones from the <prgn/hello/ package. -<item> -Change the <prgn/binary/ target to use <prgn/dpkg-gencontrol/ to make -the package control file(s). Move it to after all the files have been -installed but just before the last <prgn/chown/ and <prgn/chmod/ in -the target. -<item> -Change occurrences of <tt/debian-tmp/ to <tt>debian/tmp</>. -<item> -Change occurrences of <tt/debian.{post,pre}{inst,rm}/ to -<tt>debian/*</>. -<item> -Remove the version number setting at the top, if there is one. -<item> -Ensure that the package's Debian-specific and upstream changelogs are -installed. -</list> - -<item> -Change the package to use <prgn/dpkg-shlibdeps/ to determine its -shared library dependencies and substitute them in. Shared library -dependencies should no longer be hardwired in the source package. - -<item> -Check that the <tt>debian/README</> is really the copyright file, and -if so rename it to <tt>debian/copyright</> and edit -<tt>debian/rules</> to cope with this and to change the installation -of the copyright file from <tt>/usr/doc/<var/package//copyright</> -instead of <tt>/usr/doc/copyright/<var/package/</>. If it isn't then -find <tt>debian/copyright</> and decide what to do with the -<tt>README</>. - -<item> -Check for various other anachronisms and problems: -<list compact> -<item> -Remove any <tt/Package_Revision/, <tt/Package-Revision/ or -<tt/Revision/ fields. -<item> -Rename <tt/Optional/ to <tt/Suggests/, <tt/Recommended/ to -<tt/Recommends/. -<item> -Change <tt>/usr/doc/examples/<var/package/</> to -<tt>/usr/doc/<var/package//examples</>. -<item> -Make sure that manpages are installed compressed. -<item> -Check that the description has an extended description, is -well-formatted and meaningful and helpful to people wanting to know -whether to install a package. -</list> - -<item> -Look everything over. - -<item> -Do a test build using <tt/dpkg-buildpackage -ur -uc -sa --r<var/whatever//. Check the permissions and locations of files in -the resulting package by eyeballing the output of <tt/dpkg-deb ---contents/, and check that the source build happened OK. Test -install the binary package(s) and test extract the source package(s). - -<item> -Sign the release: either rebuild everything with <tt/dpkg-buildpackage --sa/, or PGP-sign the <tt/.dsc/, rebuild the <tt/.changes/ using -<tt/dpkg-genchanges -sa/, and then PGP-sign the <tt/.changes/. - -</list> -<p> - -The use of <tt/-sa/ on <prgn/dpkg-buildpackage/ and -<prgn/dpkg-genchanges/ is important when doing the first -build/uploading of a new-format source package. Unless this happens -to be Debian revision <tt/0/ or <tt/1/ by default the original source -tarfile will not be included in the uploaded files listed in the -<tt/.changes/ file, and so it won't be installed on the FTP site. -<tt/-sa/ requests that the original source be included regardless. - -</book> diff --git a/doc/programmer.sgml b/doc/programmer.sgml deleted file mode 100644 index 0dcd867b3..000000000 --- a/doc/programmer.sgml +++ /dev/null @@ -1,3370 +0,0 @@ -<!doctype debiandoc system [ -<!entity % manuals-version-def system "manuals-version"> -%manuals-version-def; -]> - -<!-- - Debian Linux dpkg package installation tool. - programmers' manual. - Copyright (C)1996 Ian Jackson; released under the terms of the GNU - General Public License, version 2 or (at your option) any later. - --> - -<book> - -<title><prgn/dpkg/ programmers' manual -<author>Ian Jackson <email/ijackson@gnu.ai.mit.edu/ -<version>version &manuals-version; (dpkg &dpkg-version;), <date> - -<abstract> -This manual describes the technical aspects of creating Debian binary -and source packages. It also documents the interface between -<prgn/dselect/ and its access method scripts. It does not deal with -the Debian Project policy requirements, and it assumes familiarity -with <prgn/dpkg/'s functions from the system administrator's -perspective. - -<copyright>Copyright ©1996 Ian Jackson. -<p> - -This manual is free software; you may redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. -<p> - -This is distributed in the hope that it will be useful, but -<em>without any warranty</em>; without even the implied warranty of -merchantability or fitness for a particular purpose. See the GNU -General Public License for more details. -<p> - -You should have received a copy of the GNU General Public License with -your Debian GNU/Linux system, in <tt>/usr/doc/copyright/GPL</tt>, or -with the <prgn/dpkg/ source package as the file <tt>COPYING</tt>. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. - -<toc sect> - -<!-- Describes the technical interface between a package and dpkg. - -How to safely put shared libraries in a package. Details of dpkg's -handling of individual files. Sections on when to use which feature -(eg Replaces vs. Replaces/Conflicts vs. update-alternatives -vs. diversions) Cross-references to the policy document (see below) -where appropriate. Description of the interface between dselect and -its access methods. Hints on where to start with a new package (ie, -the hello package). What to do about file aliasing. - -file aliasing - -Manpages are required for: update-rc.d, diversions, -update-alternatives, install-info in a package. - ---> - -<chapt id="scope">Introduction and scope of this manual -<p> - -<prgn/dpkg/ is a suite of programs for creating binary package files -and installing and removing them on Unix systems.<footnote><prgn/dpkg/ -is targetted primarily at Debian GNU/Linux, but may work on or be -ported to other systems.</footnote> -<p> - -The binary packages are designed for the management of installed -executable programs (usually compiled binaries) and their associated -data, though source code examples and documentation are provided as -part of some packages. -<p> - -This manual describes the technical aspects of creating Debian binary -packages (<tt/.deb/ files). It documents the behaviour of the -package management programs <prgn/dpkg/, <prgn/dselect/ et al. and and the -way they interact with packages. -<p> - -It also documents the interaction between <prgn/dselect/'s core and the -access method scripts it uses to actually install the selected -packages, and describes how to create a new access method. -<p> - -This manual does not go into detail about the options and usage of the -package building and installation tools. It should therefore be read -in conjuction with those programs' manpages. -<p> - -The utility programs which are provided with <prgn/dpkg/ for managing -various system configuration and similar issues, such as -<prgn/update-rc.d/ and <prgn/install-info/, are not described in -detail here - please see their manpages. -<p> - -It does <em/not/ describe the policy requirements imposed on Debian -packages, such as the permissions on files and directories, -documentation requirements, upload procedure, and so on. You should -see the Debian packaging policy manual for these details. (Many of -them will probably turn out to be helpful even if you don't plan to -upload your package and make it available as part of the -distribution.) -<p> - -It is assumed that the reader is reasonably familiar with the -<prgn/dpkg/ System Administrators' manual. Unfortunately this manual -does not yet exist. -<p> - -The Debian version of the FSF's GNU hello program is provided as an -example for people wishing to create Debian packages. -<p> - -<em>Note that this document is still a draft!</em> - -<chapt id="binarypkg">Binary packages -<p> - -The binary package has two main sections. The first part consists of -various control information files and scripts used by <prgn/dpkg/ when -installing and removing. See <ref id="controlarea">. -<p> - -The second part is an archive (currently a <prgn/tar/ archive) -containing files and directories to be installed. -<p> - -In the future binary packages may also contain other components, such -as checksums and digital signatures. - - -<sect id="bincreating">Creating package files - <prgn/dpkg-deb/ -<p> - -All manipulation of binary package files is done by <prgn/dpkg-deb/; -it's the only program that has knowledge of the format. -(<prgn/dpkg-deb/ may be invoked by calling <prgn/dpkg/, as <prgn/dpkg/ will -spot that the options requested are appropriate to <prgn/dpkg-deb/ and -invoke that instead with the same arguments.) -<p> - -In order to create a binary package you must make a directory tree -which contains all the files and directories you want to have in the -filesystem data part of the package. In Debian-format source packages -this directory is usually <tt>debian/tmp</tt>, relative to the top of -the package's source tree. -<p> - -They should have the locations (relative to the root of the directory -tree you're constructing) ownerships and permissions which you want -them to have on the system when they are installed. -<p> - -With current versions of <prgn/dpkg/ the uid/username and gid/groupname -mappings for the users and groups being used should be the same on the -system where the package is built and the one where it is installed. -<p> - -You need to add one special directory to the root of the miniature -filesystem tree you're creating: <prgn/DEBIAN/. It should contain the -control information files, notably the binary package control file -(see <ref id="controlfile">). -<p> - -The <prgn/DEBIAN/ directory will not appear in the filesystem archive of -the package, and so won't be installed by <prgn/dpkg/ when the package -is installed. -<p> - -When you've prepared the package, you should invoke: -<example> -dpkg --build <var/directory/ -</example> -<p> - -This will build the package in <tt/<var/directory/.deb/. -(<prgn/dpkg/ knows that <tt/--build/ is a <prgn/dpkg-deb/ option, so it -invokes <prgn/dpkg-deb/ with the same arguments to build the package.) -<p> - -See the manpage <manref name="dpkg-deb" section=8> for details of how -to examine the contents of this newly-created file. You may find the -output of following commands enlightening: -<example> -dpkg-deb --info <var/filename/.deb -dpkg-deb --contents <var/filename/.deb -</example> - -<sect id="controlarea">Package control information files -<p> - -The control information portion of a binary package is a collection of -files with names known to <prgn/dpkg/. It will treat the contents of -these files specially - some of them contain information used by -<prgn/dpkg/ when installing or removing the package; others are scripts -which the package maintainer wants <prgn/dpkg/ to run. -<p> - -It is possible to put other files in the package control area, but -this is not generally a good idea (though they will largely be -ignored). -<p> - -Here is a brief list of the control info files supported by <prgn/dpkg/ -and a summary of what they're used for. -<p> - -<taglist> -<tag><tt/control/ -<item> - -This is the key description file used by <prgn/dpkg/. It specifies the -package's name and version, gives its description for the user, states -its relationships with other packages, and so forth. -See <ref id="controlfile">. -<p> - -It is usually generated automatically from information in the source -package by the <prgn/dpkg-gencontrol/ program, and with assistance -from <prgn/dpkg-shlibdeps/. See <ref id="sourcetools">. - -<tag><tt/postinst/, <tt/preinst/, <tt/postrm/, <tt/prerm/ -<item> - -These are exectuable files (usually scripts) which <prgn/dpkg/ runs -during installation, upgrade and removal of packages. They allow the -package to deal with matters which are particular to that package or -require more complicated processing than that provided by <prgn/dpkg/. -Details of when and how they are called are in -<ref id="maintainerscripts">. -<p> - -It is very important to make these scripts itempotent.<footnote>That -means that if it runs successfully or fails and then you call it again -it doesn't bomb out, but just ensures that everything is the way it -ought to be.</footnote> This is so that if an error occurs, the user -interrupts <prgn/dpkg/ or some other unforeseen circumstance happens you -don't leave the user with a badly-broken package. -<p> - -The maintainer scripts are guaranteed to run with a controlling -terminal and can interact with the user. If they need to prompt for -passwords, do full-screen interaction or something similar you should -do these things to and from <tt>/dev/tty</>, since <prgn/dpkg/ will at -some point redirect scripts' standard input and output so that it can -log the installation process. Likewise, because these scripts may be -executed with standard output redirected into a pipe for logging -purposes, Perl scripts should set unbuffered output by setting -<tt/$|=1/ so that the output is printed immediately rather than being -buffered. -<p> - -Each script should return a zero exit status for success, or a nonzero -one for failure. - -<tag><tt/conffiles/ -<item> - -This file contains a list of configuration files which are to be -handled automatically by <prgn/dpkg/ (see <ref id="conffiles">). Note -that not necessarily every configuration file should be listed here. - -<tag><tt/shlibs/ -<item> - -This file contains a list of the shared libraries supplied by the -package, with dependency details for each. This is used by -<prgn/dpkg-shlibdeps/ when it determines what dependencies are -required in a package control file. -<p> - -Each line is of the form: -<example> -<var/library-name/ <var/version-or-soname/ <var/dependencies .../ -</example> -<p> - -<var/library-name/ is the name of the shared library, for example -<tt/libc5/. -<p> - -<var/version-or-soname/ is the soname of the library - ie, the thing -that must exactly match for the library to be recognised by -<prgn/ld.so/. Usually this is major version number of the library. -<p> - -<var/dependencies/ has the same syntax as a dependency field in a -binary package control file. It should give details of which -package(s) are required to satisfy a binary built against the version -of the library contained in the package. See <ref id="depsyntax">. -<p> - -For example, if the package <tt/foo/ contains <tt/libfoo.so.1.2.3/, -where the soname of the library is <tt/libfoo.so.1/, and the first -version of the package which contained a minor number of at least -<tt/2.3/ was <var/1.2.3-1/, then the package's <var/shlibs/ could -say: -<example> -libfoo 1 foo (>= 1.2.3-1) -</example> -<p> - -The version-specific dependency is to avoid warnings from <prgn/ld.so/ -about using older shared libraries with newer binaries. - -</taglist> - -<sect id="controlfile">The main control information file: <tt/control/ -<p> - -The most important control information file used by <prgn/dpkg/ when it -installs a package is <tt/control/. It contains all the package's -`vital statistics'. -<p> - -The binary package control files of packages built from Debian sources -are made by a special tool, <prgn/dpkg-gencontrol/, which reads -<tt>debian/control</> and <tt>debian/changelog</> to find the -information it needs. See <ref id="sourcepkg"> for more details. -<p> - -The fields in binary package control files are: -<list compact> - -<item><qref id="f-Package"><tt/Package/</> (mandatory) -<item><qref id="versions"><tt/Version/</> (mandatory) - -<item><qref id="f-Architecture"><tt/Architecture/</> -(mandatory)<footnote>This field should appear in all packages, though -<prgn/dpkg/ doesn't require it yet so that old packages can still be -installed.</footnote> - -<item><qref id="relationships"><tt/Depends/, <tt/Provides/ et al.</> -<item><qref id="f-Essential"><tt/Essential/</> -<item><qref id="f-Maintainer"><tt/Maintainer/</> -<item><qref id="f-classification"><tt/Section/, <tt/Priority/</> -<item><qref id="f-Source"><tt/Source/</> -<item><qref id="descriptions"><tt/Description/</> -<item><qref id="f-Installed-Size"><tt/Installed-Size/</> - -</list> -<p> - -A description of the syntax of control files and the purpose of these -fields is available in <ref id="controlfields">. - - -<chapt id="sourcepkg">Source packages -<p> - -The Debian binary packages in the distribution are generated from -Debian sources, which are in a special format to assist the easy and -automatic building of binaries. -<p> - -There was a previous version of the Debian source format, which is now -being phased out. Instructions for converting an old-style package -are given in the Debian policy manual. - -<sect id="sourcetools">Tools for processing source packages -<p> - -Various tools are provided for manipulating source packages; they pack -and unpack sources and help build of binary packages and help manage -the distribution of new versions. -<p> - -They are introduced and typical uses described here; see <manref -name=dpkg-source section=1> for full documentation about their -arguments and operation. -<p> - -For examples of how to construct a Debian source package, and how to -use those utilities that are used by Debian source packages, please -see the <prgn/hello/ example package. - -<sect1><prgn/dpkg-source/ - packs and unpacks Debian source packages -<p> - -This program is frequently used by hand, and is also called from -package-independent automated building scripts such as -<prgn/dpkg-buildpackage/. -<p> - -To unpack a package it is typically invoked with -<example> -dpkg-source -x <var>.../path/to/filename</>.dsc -</example> -with the <tt/<var/filename/.tar.gz/ and -<tt/<var/filename/.diff.gz/ (if applicable) in the same directory. It -unpacks into <tt/<var/package/-<var/version//, and if applicable -<tt/<var/package/-<var/version/.orig/, in the current directory. -<p> - -To create a packed source archive it is typically invoked: -<example> -dpkg-source -b <var/package/-<var/version/ -</example> -This will create the <tt/.dsc/, <tt/.tar.gz/ and <tt/.diff.gz/ (if -appropriate) in the current directory. <prgn/dpkg-source/ does not -clean the source tree first - this must be done separately if it is -required. -<p> - -See also <ref id="sourcearchives">. - - -<sect1><prgn/dpkg-buildpackage/ - overall package-building control -script -<p> - -<prgn/dpkg-buildpackage/ is a script which invokes <prgn/dpkg-source/, -the <tt>debian/rules</> targets <prgn/clean/, <prgn/build/ and -<prgn/binary/, <prgn/dpkg-genchanges/ and <prgn/pgp/ to build a signed -source and binary package upload. -<p> - -It is usually invoked by hand from the top level of the built or -unbuilt source directory. It may be invoked with no arguments; useful -arguments include: -<taglist compact> -<tag><tt/-uc/, <tt/-us/ -<item>Do not PGP-sign the <tt/.changes/ file or the source package -<tt/.dsc/ file, respectively. - -<tag><tt/-p<var/pgp-command// -<item>Invoke <var/pgp-command/ instead of finding <tt/pgp/ on the -<prgn/PATH/. <var/pgp-command/ must behave just like <prgn/pgp/. - -<tag><tt/-r<var/root-command// -<item>When root privilege is required, invoke the command -<var/root-command/. <var/root-command/ should invoke its first -argument as a command, from the <prgn/PATH/ if necessary, and pass its -second and subsequent arguments to the command it calls. If no -<var/root-command/ is supplied then <var/dpkg-buildpackage/ will take -no special action to gain root privilege, so that for most packages it -will have to be invoked as root to start with. - -<tag><tt/-b/, <tt/-B/ -<item>Two types of binary-only build and upload - see <manref -name=dpkg-source section=1>. -</taglist> - - -<sect1><prgn/dpkg-gencontrol/ - generates binary package control files -<p> - -This program is usually called from <tt>debian/rules</> (see <ref -id="sourcetree">) in the top level of the source tree. -<p> - -This is usually done just before the files and directories in the -temporary directory tree where the package is being built have their -permissions and ownerships set and the package is constructed using -<prgn/dpkg-deb/<footnote>This is so that the control file which is -produced has the right permissions</footnote>. -<p> - -<prgn/dpkg-gencontrol/ must be called after all the files which are to -go into the package have been placed in the temporary build directory, -so that its calculation of the installed size of a package is correct. -<p> - -It is also necessary for <prgn/dpkg-gencontrol/ to be run after -<prgn/dpkg-shlibdeps/ so that the variable substitutions created by -<prgn/dpkg-shlibdeps/ in <tt>debian/substvars</> are available. -<p> - -For a package which generates only one binary package, and which -builds it in <tt>debian/tmp</> relative to the top of the source -package, it is usually sufficient to call: -<example> -dpkg-gencontrol -</example> -<p> - -Sources which build several binaries will typically need something -like: -<example> -dpkg-gencontrol -Pdebian/tmp-<var/pkg/ -p<var/package/ -</example> -The <tt/-P/ tells <prgn/dpkg-gencontrol/ that the package is being -built in a non-default directory, and the <tt/-p/ tells it which -package's control file should be generated. -<p> - -<prgn/dpkg-gencontrol/ also adds information to the list of files in -<tt>debian/files</>, for the benefit of (for example) a future -invocation of <prgn/dpkg-genchanges/. - - -<sect1><prgn/dpkg-shlibdeps/ - calculates shared library dependencies -<p> - -This program is usually called from <tt>debian/rules</> just before -<prgn/dpkg-gencontrol/ (see <ref id="sourcetree">), in the top level -of the source tree. -<p> - -Its arguments are executables<footnote>They may be specified either -in the locations in the source tree where they are created or in the -locations in the temporary build tree where they are installed prior -to binary package creation.</footnote> for which shared library -dependencies should be included in the binary package's control file. -<p> - -If some of the executable(s) shared libraries should only warrant a -<tt/Recommends/ or <tt/Suggests/, or if some warrant a -<tt/Pre-Depends/, this can be achieved by using the -<tt/-d<var/dependency-field// option before those executable(s). -(Each <tt/-d/ option takes effect until the next <tt/-d/.) -<p> - -<prgn/dpkg-shlibdeps/ does not directly cause the output control file -to be modified. Instead by default it adds to the -<tt>debian/substvars</> file variable settings like -<tt/shlibs:Depends/. These variable settings must be referenced in -dependency fields in the appropriate per-binary-package sections of -the source control file. -<p> - -For example, the <prgn/procps/ package generates two kinds of -binaries, simple C binaries like <prgn/ps/ which require a -predependency and full-screen ncurses binaries like <prgn/top/ which -require only a recommendation. It can say in its <tt>debian/rules</>: -<example> -dpkg-shlibdeps -dPre-Depends ps -dRecommends top -</example> -and then in its main control file <tt>debian/control</>: -<example> -<var/.../ -Package: procps -Pre-Depends: ${shlibs:Pre-Depends} -Recommends: ${shlibs:Recommends} -<var/.../ -</example> -<p> - -Sources which produce several binary packages with different shared -library dependency requirements can use the <tt/-p<var/varnameprefix// -option to override the default <tt/shlib:/ prefix (one invocation of -<prgn/dpkg-shlibdeps/ per setting of this option). They can thus -produce several sets of dependency variables, each of the form -<tt/<var/varnameprefix/:<var/dependencyfield//, which can be referred -to in the appropriate parts of the binary package control files. - - -<sect1><prgn/dpkg-distaddfile/ - adds a file to <tt>debian/files</> -<p> - -Some packages' uploads need to include files other than the source and -binary package files. -<p> - -<prgn/dpkg-distaddfile/ adds a file to the <tt>debian/files</> file so -that it will be included in the <tt/.changes/ file when -<prgn/dpkg-genchanges/ is run. -<p> - -It is usually invoked from the <prgn/binary/ target of -<tt>debian/rules</>: -<example> -dpkg-distaddfile <var/filename/ <var/section/ <var/priority/ -</example> -The <var/filename/ is relative to the directory where -<prgn/dpkg-genchanges/ will expect to find it - this is usually the -directory above the top level of the source tree. The -<tt>debian/rules</> target should put the file there just before or -just after calling <prgn/dpkg-distaddfile/. -<p> - -The <var/section/ and <var/priority/ are passed unchanged into the -resulting <tt/.changes/ file. See <ref id="f-classification">. - - -<sect1><prgn/dpkg-genchanges/ - generates a <tt/.changes/ upload -control file -<p> - -This program is usually called by package-independent automatic -building scripts such as <prgn/dpkg-buildpackage/, but it may also be -called by hand. -<p> - -It is usually called in the top level of a built source tree, and when -invoked with no arguments will print out a straightforward -<tt/.changes/ file based on the information in the source package's -changelog and control file and the binary and source packages which -should have been built. - - -<sect1><prgn/dpkg-parsechangelog/ - produces parsed representation of -a changelog -<p> - -This program is used internally by <prgn/dpkg-source/ et al. It may -also occasionally be useful in <tt>debian/rules</> and elsewhere. It -parses a changelog, <tt>debian/changelog</> by default, and prints a -control-file format representation of the information in it to -standard output. - -<sect id="sourcetree">The Debianised source tree -<p> - -The source archive scheme described later is intended to allow a -Debianised source tree with some associated control information to be -reproduced and transported easily. The Debianised source tree is a -version of the original program with certain files added for the -benefit of the Debianisation process, and with any other changes -required made to the rest of the source code and installation scripts. -<p> - -The extra files created for Debian are in the subdirectory <tt/debian/ -of the top level of the Debianised source tree. They are described -below. - -<sect1><tt>debian/rules</tt> - the main building script -<p> - -This file is an executable makefile, and contains the package-specific -recipies for compiling the package and building binary package(s) out -of the source. -<p> - -It must start with the line <tt>#!/usr/bin/make -f</tt>, so that it -can be invoked by saying its name rather than invoking <prgn/make/ -explicitly. -<p> - -The targets which are required to be present are: - -<taglist> -<tag/<tt/build// -<item> - -This should perform all non-interactive configuration and compilation -of the package. If a package has an interactive pre-build -configuration routine, the Debianised source package should be built -after this has taken place, so that it can be built without rerunning -the configuration. -<p> - -For some packages, notably ones where the same source tree is compiled -in different ways to produce two binary packages, the <prgn/build/ -target does not make much sense. For these packages it is good enough -to provide two (or more) targets (<tt/build-a/ and <tt/build-b/ or -whatever) for each of the ways of building the package, and a -<prgn/build/ target that does nothing. The <prgn/binary/ target will have -to build the package in each of the possible ways and make the binary -package out of each. -<p> - -The <prgn/build/ target must not do anything that might require root -privilege. -<p> - -The <prgn/build/ target may need to run <prgn/clean/ first - see below. -<p> - -When a package has a configuration routine that takes a long time, or -when the makefiles are poorly designed, or when <prgn/build/ needs to -run <prgn/clean/ first, it is a good idea to <tt/touch build/ when the -build process is complete. This will ensure that if <tt>debian/rules -build</tt> is run again it will not rebuild the whole program. - -<tag/<tt/binary/, <tt/binary-arch/, <tt/binary-indep/ -<item> - -The <prgn/binary/ target should be all that is necessary for the user -to build the binary package. It is split into two parts: -<prgn/binary-arch/ builds the packages' output files which are -specific to a particular architecture, and <prgn/binary-indep/ -builds those which are not. -<p> - -<prgn/binary/ should usually be a target with no commands which simply -depends on <prgn/binary-arch/ and <prgn/binary-indep/. -<p> - -Both <prgn/binary-*/ targets should depend on the <prgn/build/ target, -above, so that the package is built if it has not been already. It -should then create the relevant binary package(s), using -<prgn/dpkg-gencontrol/ to make their control files and <prgn/dpkg-deb/ -to build them and place them in the parent of the top level directory. -<p> - -If one of the <prgn/binary-*/ targets has nothing to do (this will be -always be the case if the source generates only a single binary -package, whether architecture-dependent or not) it <em/must/ still -exist, but should always succeed. -<p> - -<ref id="binarypkg"> describes how to construct binary packages. -<p> - -The <prgn/binary/ targets must be invoked as root. - -<tag/<tt/clean// -<item> - -This should undo any effects that the <prgn/build/ and <prgn/binary/ -targets may have had, except that it should leave alone any output -files created in the parent directory by a run of <prgn/binary/. -<p> - -If a <prgn/build/ file is touched at the end of the <prgn/build/ target, -as suggested above, it must be removed as the first thing that -<prgn/clean/ does, so that running <prgn/build/ again after an interrupted -<prgn/clean/ doesn't think that everything is already done. -<p> - -The <prgn/clean/ target must be invoked as root if <prgn/binary/ has -been invoked since the last <prgn/clean/, or if <prgn/build/ has been -invoked as root (since <prgn/build/ may create directories, for -example). - -<tag/<tt/get-orig-source// -<item> - -This target fetches the most recent version of the original source -package from a canonical archive site (via FTP or WWW, for example), -does any necessary rearrangement to turn it into the original source -tarfile format described below, and leaves it in the current directory. -<p> - -This target may be invoked in any directory, and should take care to -clean up any temporary files it may have left. -<p> - -This target is optional, but providing it if possible is a good idea. - -</taglist> - -The <prgn/build/, <prgn/binary/ and <prgn/clean/ targets must be -invoked with a current directory of the package's top-level -directory. - -<p> - -Additional targets may exist in <tt>debian/rules</tt>, either as -published or undocumented interfaces or for the package's internal -use. - - -<sect1><tt>debian/control</tt> -<p> - -This file contains version-independent details about the source -package and about the binary packages it creates. -<p> - -It is a series of sets of control fields, each syntactically similar -to a binary package control file. The sets are separated by one or -more blank lines. The first set is information about the source -package in general; each subsequent set describes one binary package -that the source tree builds. -<p> - -The syntax and semantics of the fields are described below in -<ref id="controlfields">. -<p> - -The general (binary-package-independent) fields are: -<list compact> -<item><qref id="f-Source"><tt/Source/</> (mandatory) -<item><qref id="f-Maintainer"><tt/Maintainer/</> -<item><qref id="f-classification"><tt/Section/ and <tt/Priority/</> -(classification, mandatory) -<item><qref id="f-Standards-Version"><tt/Standards-Version/</> -</list> -<p> - -The per-binary-package fields are: -<list compact> -<item><qref id="f-Package"><tt/Package/</> (mandatory) -<item><qref id="f-Architecture"><tt/Architecture/</> (mandatory) -<item><qref id="descriptions"><tt/Description/</> -<item><qref id="f-classification"><tt/Section/ and <tt/Priority/</> (classification) -<item><qref id="f-Essential"><tt/Essential/</> -<item><qref id="relationships"><tt/Depends/ et al.</> (package interrelationships) -</list> -<p> - -These fields are used by <prgn/dpkg-gencontrol/ to generate control -files for binary packages (see below), by <prgn/dpkg-genchanges/ to -generate the <tt/.changes/ file to accompany the upload, and by -<prgn/dpkg-source/ when it creates the <tt/.dsc/ source control file as -part of a source archive. -<p> - -The fields here may contain variable references - their values will be -substituted by <prgn/dpkg-gencontrol/, <prgn/dpkg-genchanges/ or -<prgn/dpkg-source/ when they generate output control files. See <ref -id="srcsubstvars"> for details. -<p> - -<sect2>User-defined fields -<p> - -Additional user-defined fields may be added to the source package -control file. Such fields will be ignored, and not copied to (for -example) binary or source package control files or upload control -files. -<p> - -If you wish to add additional unsupported fields to these output files -you should use the mechanism described here. -<p> - -Fields in the main source control information file with names starting -<tt/X/, followed by one or more of the letters <tt/BCS/ and a hyphen -<tt/-/, will be copied to the output files. Only the part of the -field name after the hyphen will be used in the output file. Where -the letter <tt/B/ is used the field will appear in binary package -control files, where the letter <tt/S/ is used in source package -control files and where <tt/C/ is used in upload control -(<tt/.changes/) files. -<p> - -For example, if the main source information control file contains the -field -<example> -XBS-Comment: I stand between the candle and the star. -</example> -then the binary and source package control files will contain the -field -<example> -Comment: I stand between the candle and the star. -</example> - -<sect1 id="dpkgchangelog"><tt>debian/changelog</> -<p> - -This file records the changes to the Debian-specific parts of the -package<footnote>Though there is nothing stopping an author who is -also the Debian maintainer from using it for all their changes, it -will have to be renamed if the Debian and upstream maintainers become -different people.</footnote>. -<p> - -It has a special format which allows the package building tools to -discover which version of the package is being built and find out -other release-specific information. -<p> - -That format is a series of entries like this: -<example> -<var/package/ (<var/version/) <var/distribution(s)/; urgency=<var/urgency/ - - * <var/change details/ - <var/more change details/ - * <var/even more change details/ - - -- <var/maintainer name and email address/ <var/date/ -</example> -<p> - -<var/package/ and <var/version/ are the source package name and -version number. <var/distribution(s)/ lists the distributions where -this version should be installed when it is uploaded - it is copied to -the <tt/Distribution/ field in the <tt/.changes/ file. See <ref -id="f-Distribution">. -<p> - -<var/urgency/ is the value for the <tt/Urgency/ field in the -<tt/.changes/ file for the upload. See <ref id="f-Urgency">. It is -not possible to specify an urgency containing commas; commas are used -to separate <tt/<var/keyword/=<var/value// settings in the <prgn/dpkg/ -changelog format (though there is currently only one useful -<var/keyword/, <tt/urgency/). -<p> - -The change details may in fact be any series of lines starting with at -least two spaces, but conventionally each change starts with an -asterisk and a separating space and continuation lines are indented so -as to bring them in line with the start of the text above. Blank -lines may be used here to separate groups of changes, if desired. -<p> - -The maintainer name and email address should <em/not/ necessarily be -those of the usual package maintainer. They should be the details of -the person doing <em/this/ version. The information here will be -copied to the <tt/.changes/ file, and then later used to send an -acknowledgement when the upload has been installed. -<p> - -The <var/date/ should be in RFC822 format<footnote>This is generated -by the <prgn/822-date/ program.</footnote>; it should include the -timezone specified numerically, with the timezone name or abbreviation -optionally present as a comment. -<p> - -The first `title' line with the package name should start at the left -hand margin; the `trailer' line with the maintainer and date details -should be preceded by exactly one space. The maintainer details and -the date must be separated by exactly two spaces. -<p> - -An Emacs mode for editing this format is available: it is called -<tt/debian-changelog-mode/. You can have this mode selected -automatically when you edit a Debian changelog by adding a local -variables clause to the end of the changelog. - -<sect2>Defining alternative changelog formats -<p> - -It is possible to use a different format to the standard one, by -providing a parser for the format you wish to use. -<p> - -In order to have <tt/dpkg-parsechangelog/ run your parser, you must -include a line within the last 40 lines of your file matching the Perl -regular expression: -<tt>\schangelog-format:\s+([0-9a-z]+)\W</tt> -The part in parentheses should be the name of the format. For -example, you might say: -<example> -@@@ changelog-format: joebloggs @@@ -</example> -Changelog format names are non-empty strings of alphanumerics. -<p> - -If such a line exists then <tt/dpkg-parsechangelog/ will look for the -parser as <tt>/usr/lib/dpkg/parsechangelog/<var/format-name/</> or -<tt>/usr/local/lib/dpkg/parsechangelog/<var/format-name/</>; it is an -error for it not to find it, or for it not to be an executable -program. The default changelog format is <tt/dpkg/, and a parser for -it is provided with the <tt/dpkg/ package. -<p> - -The parser will be invoked with the changelog open on standard input -at the start of the file. It should read the file (it may seek if it -wishes) to determine the information required and return the parsed -information to standard output in the form of a series of control -fields in the standard format. By default it should return -information about only the most recent version in the changelog; it -should accept a <tt/-v<var/version// option to return changes -information from all versions present <em/strictly after/ -<var/version/, and it should then be an error for <var/version/ not to -be present in the changelog. -<p> - -The fields are: -<list compact> -<item><qref id="f-Source"><tt/Source/</> -<item><qref id="versions"><tt/Version/</> (mandatory) -<item><qref id="f-Distribution"><tt/Distribution/</> (mandatory) -<item><qref id="f-Urgency"><tt/Urgency/</> (mandatory) -<item><qref id="f-Maintainer"><tt/Maintainer/</> (mandatory) -<item><qref id="f-Date"><tt/Date/</> -<item><qref id="f-Changes"><tt/Changes/</> (mandatory) -</list> -<p> - -If several versions are being returned (due to the use of <tt/-v/), -the urgency value should be of the highest urgency code listed at the -start of any of the versions requested followed by the concatenated -(space-separated) comments from all the versions requested; the -maintainer, version, distribution and date should always be from the -most recent version. -<p> - -For the format of the <tt/Changes/ field see <ref id="f-Changes">. -<p> - -If the changelog format which is being parsed always or almost always -leaves a blank line between individual change notes these blank lines -should be stripped out, so as to make the resulting output compact. -<p> - -If the changelog format does not contain date or package name -information this information should be omitted from the output. The -parser should not attempt to synthesise it or find it from other -sources. -<p> - -If the changelog does not have the expected format the parser should -exit with a nonzero exit status, rather than trying to muddle through -and possibly generating incorrect output. -<p> - -A changelog parser may not interact with the user at all. - -<sect1 id="srcsubstvars"><tt>debian/substvars</> and variable substitutions -<p> - -When <prgn/dpkg-gencontrol/, <prgn/dpkg-genchanges/ and -<prgn/dpkg-source/ generate control files they do variable -substitutions on their output just before writing it. Variable -substitutions have the form <tt/${<var/variable-name/}/. The optional -file <tt>debian/substvars</> contains variable substitutions to be -used; variables can also be set directly from <tt>debian/rules</> -using the <tt/-V/ option to the source packaging commands, and certain -predefined variables are available. -<p> - -The is usually generated and modified dynamically by -<tt>debian/rules</> targets; in this case it must be removed by the -<prgn/clean/ target. -<p> - - - -See <manref name=dpkg-source section=1> for full details about source -variable substitutions, including the format of -<tt>debian/substvars</>. - -<sect1><tt>debian/files</> -<p> - -This file is not a permanent part of the source tree; it is used while -building packages to record which files are being generated. -<prgn/dpkg-genchanges/ uses it when it generates a <tt/.changes/ file. -<p> - -It should not exist in a shipped source package, and so it (and any -backup files or temporary files such as -<tt/files.new/<footnote><tt/files.new/ is used as a temporary file by -<prgn/dpkg-gencontrol/ and <prgn/dpkg-distaddfile/ - they write a new -version of <tt/files/ here before renaming it, to avoid leaving a -corrupted copy if an error occurs</footnote>) should be removed by the -<prgn/clean/ target. It may also be wise to ensure a fresh start by -emptying or removing it at the start of the <prgn/binary/ target. -<p> - -<prgn/dpkg-gencontrol/ adds an entry to this file for the <tt/.deb/ -file that will be created by <prgn/dpkg-deb/ from the control file -that it generates, so for most packages all that needs to be done with -this file is to delete it in <prgn/clean/. -<p> - -If a package upload includes files besides the source package and any -binary packages whose control files were made with -<prgn/dpkg-gencontrol/ then they should be placed in the parent of the -package's top-level directory and <prgn/dpkg-distaddfile/ should be -called to add the file to the list in <tt>debian/files</>. - -<sect1><tt>debian/tmp</> -<p> - -This is the canonical temporary location for the construction of -binary packages by the <prgn/binary/ target. The directory <tt/tmp/ -serves as the root of the filesystem tree as it is being constructed -(for example, by using the package's upstream makefiles install -targets and redirecting the output there), and it also contains the -<tt/DEBIAN/ subdirectory. See <ref id="bincreating">. -<p> - -If several binary packages are generated from the same source tree it -is usual to use several <tt>debian/tmp<var/something/</> directories, -for example <tt/tmp-a/ or <tt/tmp-doc/. -<p> - -Whatever <tt>tmp</> directories are created and used by <prgn/binary/ -must of course be removed by the <prgn/clean/ target. - - -<sect id="sourcearchives">Source packages as archives -<p> - -As it exists on the FTP site, a Debian source package consists of -three related files. You must have the right versions of all three to -be able to use them. -<p> - -<taglist> -<tag/Debian source control file - <tt/.dsc// -<item> - -This file contains a series of fields, identified and separated just -like the fields in the control file of a binary package. The fields -are listed below; their syntax is described above, in -<ref id="controlfields">. -<list compact> -<item><qref id="f-Source"><tt/Source/</> -<item><qref id="versions"><tt/Version/</> -<item><qref id="f-Maintainer"><tt/Maintainer/</> -<item><qref id="f-Binary"><tt/Binary/</> -<item><qref id="f-Architecture"><tt/Architecture/</> -<item><qref id="f-Standards-Version"><tt/Standards-Version/</> -<item><qref id="f-Files"><tt/Files/</> -</list> -<p> - -The source package control file is generated by <prgn/dpkg-source/ -when it builds the source archive, from other files in the source -package, described above. When unpacking it is checked against the -files and directories in the other parts of the source package, as -described below. - -<tag/Original source archive - <tt/<var/package/_<var/upstream-version/.orig.tar.gz// -<item> - -This is a compressed (with <tt/gzip -9/) <prgn/tar/ file containing -the source code from the upstream authors of the program. The tarfile -unpacks into a directory -<tt/<var/package/-<var/upstream-version/.orig/, and does not contain -files anywhere other than in there or in its subdirectories. - -<tag/Debianisation diff - <tt/<var/package/_<var/version-revision/.diff.gz// -<item> - -This is a unified context diff (<tt/diff -u/) giving the changes which -are required to turn the original source into the Debian source. -These changes may only include editing and creating plain files. The -permissions of files, the targets of symbolic links and the -characteristics of special files or pipes may not be changed and no -files may be removed or renamed. -<p> - -All the directories in the diff must exist, except the <tt/debian/ -subdirectory of the top of the source tree, which will be created by -<prgn/dpkg-source/ if necessary when unpacking. -<p> - -The <prgn/dpkg-source/ program will automatically make the -<tt>debian/rules</tt> file executable (see below). - -</taglist> -<p> - -If there is no original source code - for example, if the package is -specially prepared for Debian or the Debian maintainer is the same as -the upstream maintainer - the format is slightly different: then there -is no diff, and the tarfile is named -<tt/<var/package/_<var/version/.tar.gz</> and contains a directory -<tt/<var/package/-<var/version/</>. - -<sect>Unpacking a Debian source package without <prgn/dpkg-source/ -<p> - -<tt/dpkg-source -x/ is the recommended way to unpack a Debian source -package. However, if it is not available it is possible to unpack a -Debian source archive as follows: - -<enumlist compact> -<item>Untar the tarfile, which will create a <tt/.orig/ directory. -<item>Rename the <tt/.orig/ directory to -<tt/<var/package/-<var/version//. -<item>Create the subdirectory <tt/debian/ at the top of the source -tree. -<item>Apply the diff using <tt/patch -p0/. -<item>Untar the tarfile again if you want a copy of the original -source code alongside the Debianised version. -</enumlist> -<p> - -It is not possible to generate a valid Debian source archive without -using <prgn/dpkg-source/. In particular, attempting to use -<prgn/diff/ directly to generate the <tt/.diff.gz/ file will not work. - -<sect1>Restrictions on objects in source packages -<p> - -The source package may not contain any hard links<footnote>This is not -currently detected when building source packages, but only when -extracting them.</footnote><footnote>Hard links may be permitted at -some point in the future, but would require a fair amount of -work.</footnote>, device special files, sockets or setuid or setgid -files.<footnote>Setgid directories are allowed.</footnote> -<p> - -The source packaging tools manage the changes between the original and -Debianised source using <prgn/diff/ and <prgn/patch/. Turning the -original source tree as included in the <tt/.orig.tar.gz/ into the -debianised source must not involve any changes which cannot be handled -by these tools. Problematic changes which cause <prgn/dpkg-source/ to -halt with an error when building the source package are: -<list compact> -<item>Adding or removing symbolic links, sockets or pipes. -<item>Changing the targets of symbolic links. -<item>Creating directories, other than <tt/debian/. -<item>Changes to the contents of binary files. -</list> -Changes which cause <prgn/dpkg-source/ to print a warning but continue -anyway are: -<list compact> -<item>Removing files, directories or symlinks. <footnote>Renaming a -file is not treated specially - it is seen as the removal of the old -file (which generates a warning, but is otherwise ignored), and the -creation of the new one.</footnote> -<item>Changed text files which are missing the usual final newline -(either in the original or the modified source tree). -</list> -Changes which are not represented, but which are not detected by -<prgn/dpkg-source/, are: -<list compact> -<item>Changing the permissions of files (other than -<tt>debian/rules</>) and directories. -</list> -<p> - -The <tt/debian/ directory and <tt>debian/rules</> are handled -specially by <prgn/dpkg-source/ - before applying the changes it will -create the <tt/debian/ directory, and afterwards it will make -<tt>debian/rules</> world-exectuable. - -<chapt id="controlfields">Control files and their fields -<p> - -Many of the tools in the <prgn/dpkg/ suite manipulate data in a common -format, known as control files. Binary and source packages have -control data as do the <tt/.changes/ files which control the -installation of uploaded files, and <prgn/dpkg/'s internal databases -are in a similar format. - -<sect>Syntax of control files -<p> - -A file consists of one or more paragraphs of fields. The paragraphs -are separated by blank lines. Some control files only allow one -paragraph; others allow several, in which case each paragraph often -refers to a different package. -<p> - -Each paragraph is a series of fields and values; each field consists -of a name, followed by a colon and the value. It ends at the end of -the line. Horizontal whitespace (spaces and tabs) may occur before or -after the value and is ignored there; it is conventional to put a -single space after the colon. -<p> - -Some fields' values may span several lines; in this case each -continuation line <em/must/ start with a space or tab. Any trailing -spaces or tabs at the end of individual lines of a field value are -ignored. -<p> - -Except where otherwise stated only a single line of data is allowed -and whitespace is not significant in a field body. Whitespace may -never appear inside names (of packages, architectures, files or -anything else), version numbers or in between the characters of -multi-character version relationships. -<p> - -Field names are not case-sensitive, but it is usual to capitalise the -fields using mixed case as shown below. -<p> - -Blank lines, or lines consisting only of spaces and tabs, are not -allowed within field values or between fields - that would mean a new -paragraph. -<p> - -It is important to note that there are several fields which are -optional as far as <prgn/dpkg/ and the related tools are concerned, -but which must appear in every Debian package, or whose omission may -cause problems. When writing the control files for Debian packages -you <em/must/ read the Debian policy manual in conjuction with the -details below and the list of fields for the particular file. - -<sect>List of fields - -<sect1 id="f-Package"><tt/Package/ -<p> - -The name of the binary package. Package names consist of the -alphanumerics and <tt/+/ <tt/-/ <tt/./ (plus, minus and full -stop).<footnote>The characters <tt/@/ <tt/:/ <tt/=/ <tt/%/ <tt/_/ (at, -colon, equals, percent and underscore) used to be legal and are still -accepted when found in a package file, but may not be used in new -packages</footnote> -<p> - -They must be at least two characters and must start with an -alphanumeric. In current versions of dpkg they are sort of -case-sensitive<footnote>This is a bug.</footnote>; use lowercase -package names unless the package you're building (or referring to, in -other fields) is already using uppercase. - -<sect1 id="f-Version"><tt/Version/ -<p> - -This lists the source or binary package's version number - see <ref -id="versions">. - -<sect1 id="f-Architecture"><tt/Architecture/ -<p> - -This is the architecture string; it is a single word for the CPU -architecture. -<p> - -<prgn/dpkg/ will check the declared architecture of a binary package -against its own compiled-in value before it installs it. -<p> - -The special value <tt/all/ indicates that the package is -architecture-independent. -<p> - -In the main <tt>debian/control</> file in the source package, or in -the source package control file <tt/.dsc/, a list of architectures -(separated by spaces) is also allowed, as is the special value -<tt/any/. A list indicates that the source will build an -architecture-dependent package, and will only work correctly on the -listed architectures. <tt/any/ indicates that though the source -package isn't dependent on any particular architecture and should -compile fine on any one, the binary package(s) produced are not -architecture-independent but will instead be specific to whatever the -current build architecture is. -<p> - -In a <tt/.changes/ file the <tt/Architecture/ field lists the -architecture(s) of the package(s) currently being uploaded. This will -be a list; if the source for the package is being uploaded too the -special entry <tt/source/ is also present. -<p> - -The current build architecture can be determined using <tt/dpkg ---print-architecture/.<footnote>This actually invokes -<example> -gcc --print-libgcc-file-name -</example> -and parses and decomposes the output and looks the CPU type from the -GCC configuration in a table in <prgn/dpkg/. This is so that it will -work if you're cross-compiling. -</footnote> -This value is automatically used by <prgn/dpkg-gencontrol/ when -building the control file for a binary package for which the source -control information doesn't specify architecture <tt/all/. -<p> - -There is a separate option, <tt/--print-installation-architecture/, -for finding out what architecture <prgn/dpkg/ is willing to install. -This information is also in the output of <tt/dpkg --version/. - -<sect1 id="f-Maintainer"><tt/Maintainer/ -<p> - -The package maintainer's name and email address. The name should come -first, then the email address inside angle brackets <tt/<>/ (in -RFC822 format). -<p> - -If the maintainer's name contains a full stop then the whole field -will not work directly as an email address due to a misfeature in the -syntax specified in RFC822; a program using this field as an address -must check for this and correct the problem if necessary (for example -by putting the name in round brackets and moving it to the end, and -bringing the email address forward). -<p> - -In a <tt/.changes/ file or parsed changelog data this contains the -name and email address of the person responsible for the particular -version in question - this may not be the package's usual maintainer. -<p> - -This field is usually optional in as far as the <prgn/dpkg/ are -concerned, but its absence when building packages usually generates a -warning. - -<sect1 id="f-Source"><tt/Source/ -<p> - -This field identifies the source package name. -<p> - -In a main source control information or a <tt/.changes/ or <tt/.dsc/ -file or parsed changelog data this may contain only the name of the -source package. -<p> - -In the control file of a binary package (or in a <tt/Packages/ file) -it may be followed by a version number in parentheses.<footnote>It is -usual to leave a space after the package name if a version number is -specified.</footnote> This version number may be omitted (and is, by -<prgn/dpkg-gencontrol/) if it has the same value as the <tt/Version/ -field of the binary package in question. The field itself may be -omitted from a binary package control file when the source package has -the same name and version as the binary package. - -<sect1>Package interrelationship fields: -<tt/Depends/, <tt/Pre-Depends/, <tt/Recommends/ -<tt/Suggests/, <tt/Conflicts/, <tt/Provides/, <tt/Replaces/ -<p> - -These fields describe the package's relationships with other packages. -Their syntax and semantics are described in <ref id="relationships">. - -<sect1 id="f-Description"><tt/Description/ -<p> - -In a binary package <tt/Packages/ file or main source control file -this field contains a description of the binary package, in a special -format. See <ref id="descriptions"> for details. -<p> - -In a <tt/.changes/ file it contains a summary of the descriptions for -the packages being uploaded. The part of the field before the first -newline is empty; thereafter each line has the name of a binary -package and the summary description line from that binary package. -Each line is indented by one space. - -<sect1 id="f-Essential"><tt/Essential/ -<p> - -This is a boolean field which may occur only in the control file of a -binary package (or in the <tt/Packages/ file) or in a per-package -fields paragraph of a main source control data file. -<p> - -If set to <tt/yes/ then <prgn/dpkg/ and <prgn/dselect/ will refuse to -remove the package (though it can be upgraded and/or replaced). The -other possible value is <tt/no/, which is the same as not having the -field at all. - -<sect1 id="f-classification"><tt/Section/ and <tt/Priority/ -<p> - -These two fields classify the package. The <tt/Priority/ represents -how important that it is that the user have it installed; the -<tt/Section/ represents an application area into which the package has -been classified. -<p> - -When they appear in the <tt>debian/control</> file these fields give -values for the section and priority subfields of the <tt/Files/ field -of the <tt/.changes/ file, and give defaults for the section and -priority of the binary packages. -<p> - -The section and priority are represented, though not as separate -fields, in the information for each file in the <qref -id="f-Files"><tt/Files/</> field of a <tt/.changes/ file. The -section value in a <tt/.changes/ file is used to decide where to -install a package in the FTP archive. -<p> - -These fields are not used by by <prgn/dpkg/ proper, but by -<prgn/dselect/ when it sorts packages and selects defaults. See the -Debian policy manual for the priorities in use and the criteria for -selecting the priority for a Debian package, and look at the Debian -FTP archive for a list of currently in-use priorities. -<p> - -These fields may appear in binary package control files, in which case -they provide a default value in case the <tt/Packages/ files are -missing the information. <prgn/dpkg/ and <prgn/dselect/ will only use -the value from a <tt/.deb/ file if they have no other information; a -value listed in a <tt/Packages/ file will always take precedence. By -default <prgn/dpkg-genchanges/ does not include the section and -priority in the control file of a binary package - use the <tt/-isp/, -<tt/-is/ or <tt/-ip/ options to achieve this effect. - -<sect1 id="f-Binary"><tt/Binary/ -<p> - -This field is a list of binary packages. -<p> - -When it appears in the <tt/.dsc/ file it is the list of binary -packages which a source package can produce. It does not necessarily -produce all of these binary packages for every architecture. The -source control file doesn't contain details of which architectures are -appropriate for which of the binary packages. -<p> - -When it appears in a <tt/.changes/ file it lists the names of the -binary packages actually being uploaded. -<p> - -The syntax is a list of binary packages separated by -commas.<footnote>A space after each comma is conventional.</footnote> -Currently the packages must be separated using only spaces in the -<tt/.changes/ file. - -<sect1 id="f-Installed-Size"><tt/Installed-Size/ -<p> - -This field appears in the control files of binary packages, and in the -<tt/Packages/ files. It gives the total amount of disk space -required to install the named package. -<p> - -The disk space is represented in kilobytes as a simple decimal number. - -<sect1 id="f-Files"><tt/Files/ -<p> - -This field contains a list of files with information about each one. -The exact information and syntax varies with the context. In all -cases the the part of the field contents on the same line as the field -name is empty. The remainder of the field is one line per file, each -line being indented by one space and containing a number of sub-fields -separated by spaces. -<p> - -In the <tt/.dsc/ (Debian source control) file each line contains the -MD5 checksum, size and filename of the tarfile and (if applicable) -diff file which make up the remainder of the source -package.<footnote>That is, the parts which are not the -<tt/.dsc/.</footnote> The exact forms of the filenames are described -in <ref id="sourcearchives">. -<p> - -In the <tt/.changes/ file this contains one line per file being -uploaded. Each line contains the MD5 checksum, size, section and -priority and the filename. The section and priority are the values of -the corresponding fields in the main source control file - see <ref -id="f-classification">. If no section or priority is specified then -<tt/-/ should be used, though section and priority values must be -specified for new packages to be installed properly. -<p> - -The special value <tt/byhand/ for the section in a <tt/.changes/ file -indicates that the file in question is not an ordinary package file -and must by installed by hand by the distribution maintainers. If the -section is <tt/byhand/ the priority should be <tt/-/. -<p> - -If a new Debian revision of a package is being shipped and no new -original source archive is being distributed the <tt/.dsc/ must still -contain the <tt/Files/ field entry for the original source archive -<tt/<var/package/-<var/upstream-version/.orig.tar.gz/, but the -<tt/.changes/ file should leave it out. In this case the original -source archive on the distribution site must match exactly, -byte-for-byte, the original source archive which was used to generate -the <tt/.dsc/ file and diff which are being uploaded. - - -<sect1 id="f-Standards-Version"><tt/Standards-Version/ -<p> - -The most recent version of the standards (the <prgn/dpkg/ programmers' -and policy manuals and associated texts) with which the package -complies. This is updated manually when editing the source package to -conform to newer standards; it can sometimes be used to tell when a -package needs attention. -<p> - -Its format is the same as that of a version number except that no -epoch or Debian revision is allowed - see <ref id="versions">. - - -<sect1 id="f-Distribution"><tt/Distribution/ -<p> - -In a <tt/.changes/ file or parsed changelog output this contains the -(space-separated) name(s) of the distribution(s) where this version of -the package should be or was installed. Distribution names follow the -rules for package names. (See <ref id="f-Package">). -<p> - -Current distribution values are <tt/stable/, <tt/unstable/, -<tt/contrib/, <tt/non-free/ and <tt/experimental/. - -<sect1 id="f-Urgency"><tt/Urgency/ -<p> - -This is a description of how important it is to upgrade to this -version from previous ones. It consists of a single keyword usually -taking one of the values <tt/LOW/, <tt/MEDIUM/ or <tt/HIGH/) followed -by an optional commentary (separated by a space) which is usually in -parentheses. For example: -<example> -Urgency: LOW (HIGH for diversions users) -</example> -<p> - -This field appears in the <tt/.changes/ file and in parsed changelogs; -its value appears as the value of the <tt/urgency/ attribute in a -<prgn/dpkg/-style changelog (see <ref id="dpkgchangelog">). -<p> - -Urgency keywords are not case-sensitive. - -<sect1 id="f-Date"><tt/Date/ -<p> - -In <tt/.changes/ files and parsed changelogs, this gives the date the -package was built or last edited. - -<sect1 id="f-Format"><tt/Format/ -<p> - -This field occurs in <tt/.changes/ files, and specifies a format -revision for the file. The format described here is version <tt/1.5/. -The syntax of the format value is the same as that of a package -version number except that no epoch or Debian revision is allowed - -see <ref id="versions">. - -<sect1 id="f-Changes"><tt/Changes/ -<p> - -In a <tt/.changes/ file or parsed changelog this field contains the -human-readable changes data, describing the differences between the -last version and the current one. -<p> - -There should be nothing in this field before the first newline; all -the subsequent lines must be indented by at least one space; blank -lines must be represented by a line consiting only of a space and a -full stop. -<p> - -Each version's change information should be preceded by a `title' line -giving at least the version, distribution(s) and urgency, in a -human-readable way. -<p> - -If data from several versions is being returned the entry for the most -recent version should be returned first, and entries should be -separated by the representation of a blank line (the `title' line may -also be followed by the representation of blank line). - -<sect1 id="f-Filename"><tt/Filename/ and <tt/MSDOS-Filename/ -<p> - -These fields in <tt/Packages/ files give the filename(s) of (the parts -of) a package in the distribution directories, relative to the root of -the Debian hierarchy. If the package has been split into several -parts the parts are all listed in order, separated by spaces. - -<sect1 id="f-Size"><tt/Size/ and <tt/MD5sum/ -<p> - -These fields in <tt/Packages/ files give the size (in bytes, expressed -in decimal) and MD5 checksum of the file(s) which make(s) up a binary -package in the distribution. If the package is split into several -parts the values for the parts are listed in order, separated by -spaces. - -<sect1 id="f-Status"><tt/Status/ -<p> - -This field in <prgn/dpkg/'s status file records whether the user wants a -package installed, removed or left alone, whether it is broken -(requiring reinstallation) or not and what its current state on the -system is. Each of these pieces of information is a single word. - -<sect1 id="f-Config-Version"><tt/Config-Version/ -<p> - -If a package is not installed or not configured, this field in -<prgn/dpkg/'s status file records the last version of the package which -was successfully configured. - -<sect1 id="f-Conffiles"><tt/Conffiles/ -<p> - -This field in <prgn/dpkg/'s status file contains information about the -automatically-managed configuration files held by a package. This -field should <em/not/ appear anywhere in a package! - -<sect1>Obsolete fields -<p> - -These are still recognised by <prgn/dpkg/ but should not appear anywhere -any more. - -<taglist compact> - -<tag><tt/Revision/ -<tag><tt/Package-Revision/ -<tag><tt/Package_Revision/ -<item> -The Debian revision part of the package version was at one point in a -separate control file field. This field went through several names. - -<tag><tt/Recommended/ -<item>Old name for <tt/Recommends/ - -<tag><tt/Optional/ -<item>Old name for <tt/Suggests/. - -<tag><tt/Class/ -<item>Old name for <tt/Priority/. - -</taglist> - -<chapt id="versions">Version numbering -<p> - -Every package has a version number, in its <tt/Version/ control file -field. -<p> - -<prgn/dpkg/ imposes an ordering on version numbers, so that it can tell -whether packages are being up- or downgraded and so that <prgn/dselect/ -can tell whether a package it finds available is newer than the one -installed on the system. The version number format has the most -significant parts (as far as comparison is concerned) at the -beginning. -<p> - -The version number format is: -&lsqb<var/epoch/<tt/:/]<var/upstream-version/[<tt/-/<var/debian-revision/]. -<p> - -The three components here are: - -<taglist> - -<tag><var/epoch/ -<item> - -This is a single unsigned integer, which should usually be small. It -may be omitted, in which case zero is assumed. If it is omitted then -the <var/upstream-version/ may not contain any colons. -<p> - -It is provided to allow mistakes in the version numbers of older -versions of a package, and also a package's previous version numbering -schemes, to be left behind. -<p> - -<prgn/dpkg/ will not usually display the epoch unless it is essential -(non-zero, or if the <var/upstream-version/ contains a colon); -<prgn/dselect/ does not display epochs at all in the main part of the -package selection display. - -<tag><var/upstream-version/ -<item> - -This is the main part of the version. It is usually version number of -the original (`upstream') package of which the <tt/.deb/ file has been -made, if this is applicable. Usually this will be in the same format -as that specified by the upstream author(s); however, it may need to -be reformatted to fit into <prgn/dpkg/'s format and comparison scheme. -<p> - -The comparison behaviour of <prgn/dpkg/ with respect to the -<var/upstream-version/ is described below. The <var/upstream-version/ -portion of the version number is mandatory. -<p> - -The <var/upstream-version/ may contain only alphanumerics and the -characters <tt/+/ <tt/./ <tt/-/ <tt/:/ (full stop, plus, hyphen, -colon) and should start with a digit. If there is no -<var/debian-revision/ then hyphens are not allowed; if there is no -<var/epoch/ then colons are not allowed. - -<tag><var/debian-revision/ -<item> - -This part of the version represents the version of the modifications -that were made to the package to make it a Debian binary package. It -is in the same format as the <var/upstream-version/ and <prgn/dpkg/ -compares it in the same way. -<p> - -It is optional; if it isn't present then the <var/upstream-version/ -may not contain a hyphen. This format represents the case where a -piece of software was written specifically to be turned into a Debian -binary package, and so there is only one `debianization' of it and -therefore no revision indication is required. -<p> - -It is conventional to restart the <var/debian-revision/ at <tt/1/ each -time the <var/upstream-version/ is increased. -<p> - -<prgn/dpkg/ will break the <var/upstream-version/ and -<var/debian-revision/ apart at the last hyphen in the string. The -absence of a <var/debian-revision/ compares earlier than the presence -of one (but note that the <var/debian-revision/ is the least -significant part of the version number). -<p> - -The <var/debian-revision/ may contain only alphanumerics and the -characters <tt/+/ and <tt/./ (plus and full stop). - -</taglist> - -The <var/upstream-version/ and <var/debian-revision/ parts are -compared by <prgn/dpkg/ using the same algorithm: -<p> - -The strings are compared from left to right. -<p> - -First the initial part of each string consisting entirely of non-digit -characters is determined. These two parts (one of which may be empty) -are compared lexically. If a difference is found it is returned. The -lexical comparison is a comparison of ASCII values modified so that -all the letters sort earlier than all the non-letters. -<p> - -Then the initial part of the remainder of each string which consists -entirely of digit characters is determined. The numerical values of -these two parts are compared, and any difference found is returned as -the result of the comparison. For these purposes an empty string -(which can only occur at the end of one or both version strings being -compared) counts as zero. -<p> - -These two steps are repeated (chopping initial non-digit strings and -initial digit strings off from the start) until a difference is found -or both strings are exhausted. -<p> - -Note that the purpose of epochs is to allow us to leave behind -mistakes in version numbering, and to cope with situations where the -version numbering changes. It is <em/not/ there to cope with version -numbers containing strings of letters which <prgn/dpkg/ cannot interpret -(such as <tt/ALPHA/ or <tt/pre-/), or with silly orderings (the author -of this manual has heard of a package whose versions went <tt/1.1/, -<tt/1.2/, <tt/1.3/, <tt/1/, <tt/2.1/, <tt/2.2/, <tt/2/ and so forth). -<p> - -If an upstream package has problematic version numbers they should be -converted to a sane form for use in the <tt/Version/ field. - - -<chapt id="maintainerscripts">Package maintainer scripts -and installation procedure -<sect>Introduction to package maintainer scripts -<p> - -It is possible supply scripts as part of a package which <prgn/dpkg/ -will run for you when your package is installed, upgraded or removed. -<p> - -These scripts should be the files <tt/preinst/, <tt/postinst/, -<tt/prerm/ and <tt/postrm/ in the control area of the package. They -must be proper exectuable files; if they are scripts (which is -recommended) they must start with the usual <tt/#!/ convention. They -should be readable and executable to anyone, and not world-writeable. -<p> - -<prgn/dpkg/ looks at the exit status from these scripts. It is -important that they exit with a non-zero status if there is an error, -so that <prgn/dpkg/ can stop its processing. For shell scripts this -means that you <em/almost always/ need to use <tt/set -e/ (this is -usually true when writing shell scripts, in fact). It is also -important, of course, that they don't exit with a non-zero status if -everything went well. -<p> - -It is necessary for the error recovery procedures that the scripts be -idempotent: ie, invoking the same script several times in the same -situation should do no harm. If the first call failed, or aborted -half way through for some reason, the second call should merely do the -things that were left undone the first time, if any, and exit with a -success status. -<p> - -When a package is upgraded a combination of the scripts from the old -and new packages is called in amongst the other steps of the upgrade -procedure. If your scripts are going to be at all complicated you -need to be aware of this, and may need to check the arguments to your -scripts. -<p> - -Broadly speaking the <prgn/preinst/ is called before (a particular -version of) a package is installed, and the <prgn/postinst/ afterwards; -the <prgn/prerm/ before (a version of) a package is removed and the -<prgn/postrm/ afterwards. - - -<sect id="mscriptsinstact">Summary of ways maintainer scripts are called -<p> - -<list compact> -<item><var/new-preinst/ <tt/install/ -<item><var/new-preinst/ <tt/install/ <var/old-version/ -<item><var/new-preinst/ <tt/upgrade/ <var/old-version/ -<item><var/old-preinst/ <tt/abort-upgrade/ <var/new-version/ -</list> -<p> - -<list compact> -<item><var/postinst/ <tt/configure/ <var/most-recently-configured-version/ -<item><var/old-postinst/ <tt/abort-upgrade/ <var/new version/ -<item><var/conflictor's-postinst/ <tt/abort-remove/ - <tt/in-favour/ <var/package/ <var/new-version/ -<item><var/deconfigured's-postinst/ <tt/abort-deconfigure/ - <tt/in-favour/ <var/failed-install-package/ <var/version/ - <tt/removing/ <var/conflicting-package/ <var/version/ -</list> -<p> - -<list compact> -<item><var/prerm/ <tt/remove/ -<item><var/old-prerm/ <tt/upgrade/ <var/new-version/ -<item><var/new-prerm/ <tt/failed-upgrade/ <var/old-version/ -<item><var/conflictor's-prerm/ <tt/remove/ <tt/in-favour/ - <var/package/ <var/new-version/ -<item><var/deconfigured's-prerm/ <tt/deconfigure/ - <tt/in-favour/ <var/package-being-installed/ <var/version/ - <tt/removing/ <var/conflicting-package/ <var/version/ -</list> -<p> - -<list compact> -<item><var/postrm/ <tt/remove/ -<item><var/postrm/ <tt/purge/ -<item><var/old-postrm/ <tt/upgrade/ <var/new-version/ -<item><var/new-postrm/ <tt/failed-upgrade/ <var/old-version/ -<item><var/new-postrm/ <tt/abort-install/ -<item><var/new-postrm/ <tt/abort-install/ <var/old-version/ -<item><var/new-postrm/ <tt/abort-upgrade/ <var/old-version/ -<item><var/disappearer's-postrm/ <tt/disappear/ <var/overwriter/ <var/new-version/ -</list> - - -<sect>Details of unpack phase of installation or upgrade -<p> - -The procedure on installation/upgrade/overwrite/disappear (ie, when -running <tt/dpkg --unpack/, or the unpack stage of <tt/dpkg ---install/) is as follows. In each case if an error occurs the -actions in are general run backwards - this means that the maintainer -scripts are run with different arguments in reverse order. These are -the `error unwind' calls listed below. - -<enumlist> -<item> - -<enumlist> -<item> -If a version the package is already -installed, call -<example> -<var/old-prerm/ upgrade <var/new-version/ -</example> - -<item> -If this gives an error (ie, a non-zero exit status), dpkg will -attempt instead: -<example> -<var/new-prerm/ failed-upgrade <var/old-version/ -</example> -Error unwind, for both the above cases: -<example> -<var/old-postinst/ abort-upgrade <var/new-version/ -</example> - -</enumlist> - -<item> -If a `conflicting' package is being removed at the same time: -<enumlist> - -<item> -If any packages depended on that conflicting package and -<tt/--auto-deconfigure/ is specified, call, for each such package: -<example> -<var/deconfigured's-prerm/ deconfigure \ - in-favour <var/package-being-installed/ <var/version/ \ - removing <var/conflicting-package/ <var/version/ -</example> -Error unwind: -<example> -<var/deconfigured's-postinst/ abort-deconfigure \ - in-favour <var/package-being-installed-but-failed/ <var/version/ \ - removing <var/conflicting-package/ <var/version/ -</example> -The deconfigured packages are marked as requiring configuration, so -that if <tt/--install/ is used they will be configured again if -possible. - -<item> -To prepare for removal of the conflicting package, call: -<example> -<var/conflictor's-prerm/ remove in-favour <var/package/ <var/new-version/ -</example> -Error unwind: -<example> -<var/conflictor's-postinst/ abort-remove \ - in-favour <var/package/ <var/new-version/ -</example> - -</enumlist> - -<item> -<enumlist> -<item> -If the package is being upgraded, call: -<example> -<var/new-preinst/ upgrade <var/old-version/ -</example> - -<item> -Otherwise, if the package had some configuration files from a previous -version installed (ie, it is in the `configuration files only' state): -<example> -<var/new-preinst/ install <var/old-version/ -</example> - -<item> -Otherwise (ie, the package was completely purged): -<example> -<var/new-preinst/ install -</example> -Error unwind versions, respectively: -<example> -<var/new-postrm/ abort-upgrade <var/old-version/ -<var/new-postrm/ abort-install <var/old-version/ -<var/new-postrm/ abort-install -</example> - -</enumlist> - -<item> -The new package's files are unpacked, overwriting any that may be on -the system already, for example any from the old version of the same -package or from another package (backups of the old files are left -around, and if anything goes wrong dpkg will attempt to put them back -as part of the error unwind). -<p> - -It is an error for a package to contains files which are on the system -in another package, unless <tt/Replaces/ is used (see -<ref id="replaces">). Currently the <tt/--force-overwrite/ flag is -enabled, downgrading it to a warning, but this may not always be the -case. -<p> - -It is a more serious error for a package to contain a plain file or -other kind of nondirectory where another package has a directory -(again, unless <tt/Replaces/ is used). This error can be overridden -if desired using <tt/--force-overwrite-dir/, but this is not --> ---advisable. -<p> - -Packages which overwrite each other's files produce behaviour which -though deterministic is hard for the system administrator to -understand. It can easily lead to `missing' programs if, for example, -a package is installed which overwrites a file from another package, -and is then removed again.<footnote>Part of the problem is due to what -is arguably a bug in <prgn/dpkg/.</footnote> -<p> - -A directory will never be replaced by a symbolic links to a directory -or vice versa; instead, the existing state (symlink or not) will be -left alone and <prgn/dpkg/ will follow the symlink if there is one. - -<item> - -<enumlist> -<item> -If the package is being upgraded, call -<example> -<var/old-postrm/ upgrade <var/new-version/ -</example> - -<item> -If this fails, <prgn/dpkg/ will attempt: -<example> -<var/new-postrm/ failed-upgrade <var/old-version/ -</example> -Error unwind, for both cases: -<example> -<var/old-preinst/ abort-upgrade <var/new-version/ -</example> - -</enumlist> - -This is the point of no return - if <prgn/dpkg/ gets this far, it won't -back off past this point if an error occurs. This will leave the -package in a fairly bad state, which will require a successful -reinstallation to clear up, but it's when <prgn/dpkg/ starts doing -things that are irreversible. - -<item> -Any files which were in the old version of the package but not in the -new are removed. - -<item> -The new file list replaces the old. - -<item> -The new maintainer scripts replace the old. - -<item> -Any packages all of whose files have been overwritten during the -installation, and which aren't required for dependencies, are considered -to have been removed. For each such package, - -<enumlist> -<item> -<prgn/dpkg/ calls: -<example> -<var/disappearer's-postrm/ disappear \ - <var/overwriter/ <var/overwriter-version/ -</example> - -<item> -The package's maintainer scripts are removed. - -<item> -It is noted in the status database as being in a sane state, namely -not installed (any conffiles it may have are ignored, rather than -being removed by <prgn/dpkg/). Note that disappearing packages do not -have their prerm called, because <prgn/dpkg/ doesn't know in advance -that the package is going to vanish. - -</enumlist> - -<item> -Any files in the package we're unpacking that are also listed in the -file lists of other packages are removed from those lists. (This will -lobotomise the file list of the `conflicting' package if there is one.) - -<item> -The backup files made during installation, above, are deleted. - -<item> -The new package's status is now sane, and recorded as `unpacked'. Here -is another point of no return - if the conflicting package's removal -fails we do not unwind the rest of the installation; the conflicting -package is left in a half-removed limbo. - -<item> -If there was a conflicting package we go and do the removal actions -(described below), starting with the removal of the conflicting -package's files (any that are also in the package being installed -have already been removed from the conflicting package's file list, -and so do not get removed now). - -</enumlist> - -<sect>Details of configuration -<p> - -When we configure a package (this happens with <tt/dpkg --install/, or -with <tt/--configure/), we first update the conffiles and then call: -<example> -<var/postinst/ configure <var/most-recently-configured-version/ -</example> -<p> - -No attempt is made to unwind after errors during configuration. -<p> - -If there is no most recently configured version <prgn/dpkg/ will pass a -null argument; older versions of dpkg may pass -<tt><unknown></tt> (including the angle brackets) in this case. -Even older ones do not pass a second argument at all, under any -circumstances. - -<sect>Details of removal and/or configuration purging -<p> - -<enumlist> -<item> -<example> -<var/prerm/ remove -</example> - -<item> -The package's files are removed (except conffiles). - -<item> -<example> -<var/postrm/ remove -</example> - -<item> -All the maintainer scripts except the postrm are removed. -<p> - -If we aren't purging the package we stop here. Note that packages -which have no postrm and no conffiles are automatically purged when -removed, as there is no difference except for the <prgn/dpkg/ status. - -<item> -The conffiles and any backup files (<tt/~/-files, <tt/#*#/ files, -<tt/%/-files, <tt/.dpkg-{old,new,tmp}/, etc.) are removed. - -<item> -<example> -<var/postrm/ purge -</example> - -<item> -The package's file list is removed. - -</enumlist> - -No attempt is made to unwind after errors during removal. - - -<chapt id="descriptions">Descriptions of packages - the -<tt/Description/ field -<p> - -The <tt/Description/ control file field is used by <prgn/dselect/ when -the user is selecting which packages to install and by <prgn/dpkg/ -when it displays information about the status of packages and so -forth. It is included on the FTP site in the <prgn/Packages/ files, -and may also be used by the Debian WWW pages. -<p> - -The description is intended to describe the program to a user who has -never met it before so that they know whether they want to install it. -It should also give information about the significant dependencies and -conflicts between this package and others, so that the user knows why -these dependencies and conflicts have been declared. -<p> - -The field's format is as follows: -<example> -Description: <var/single line synopsis/ - <var/extended description over several lines/ -</example> -<p> - -The synopsis is often printed in lists of packages and so forth, and -should be as informative as possible. Every package should also have -an extended description. -<p> - -<sect>Types of formatting line in the extended description -<p> - -<list> -<item> -Those starting with a single space are part of a paragraph. -Successive lines of this form will be word-wrapped when displayed. -The leading space will usually be stripped off. - -<item> -Those starting with two or more spaces. These will be displayed -verbatim. If the display cannot be panned horizontally the -displaying program will linewrap them `hard' (ie, without taking -account of word breaks). If it can they will be allowed to trail -off to the right. None, one or two initial spaces may be deleted, -but the number of spaces deleted from each line will be the same -(so that you can have indenting work correctly, for example). - -<item> -Those containing a single space followed by a single full stop -character. These are rendered as blank lines. This is the <em/only/ -way to get a blank line - see below. - -<item> -Those containing a space, a full stop and some more characters. These -are for future expansion. Do not use them. -</list> - -<sect>Notes about writing descriptions -<p> - -<em/Always/ start extended description lines with at least one -whitespace character. Fields in the control file and in the Packages -file are separated by field names starting in the first column, just -as message header fields are in RFC822. Forgetting the whitespace -will cause <prgn/dpkg-deb/<footnote>Version 0.93.23 or -later.</footnote> to produce a syntax error when trying to build the -package. If you force it to build anyway <prgn/dpkg/ will refuse to -install the resulting mess. -<p> - -<em/Do not/ include any completely <em/empty/ lines. These separate -different records in the Packages file and different packages in the -<tt>debian/control</> file, and are forbidden in package control -files. See the previous paragraph for what happens if you get this -wrong. -<p> - -The single line synopsis should be kept brief - certainly under 80 -characters. <prgn/dselect/ displays between 25 and 49 characters -without panning if you're using an 80-column terminal, depending on -what display options are in effect. -<p> - -Do not include the package name in the synopsis line. The display -software knows how to display this already, and you do not need to -state it. Remember that in many situations the user may only see -the synopsis line - make it as informative as you can. -<p> - -The extended description should describe what the package does and -how it relates to the rest of the system (in terms of, for -example, which subsystem it is which part of). -<p> - -The blurb that comes with a program in its announcements and/or -<prgn/README/ files is rarely suitable for use in a description. It -is usually aimed at people who are already in the community where the -package is used. The description field needs to make sense to anyone, -even people who have no idea about any of the -things the package deals with. -<p> - -Put important information first, both in the synopis and extended -description. Sometimes only the first part of the synopsis or of -the description will be displayed. You can assume that there will -usually be a way to see the whole extended description. -<p> - -You may include information about dependencies and so forth in the -extended description, if you wish. -<p> - -Do not use tab characters. Their effect is not predictable. -<p> - -Do not try to linewrap the summary (the part on the same line as the -field name <tt/Description/) into the extended description. This will -not work correctly when the full description is displayed, and makes -no sense where only the summary is available. - -<sect>Example description in control file for Smail -<p> - -<example> -Package: smail -Version: 3.1.29.1-13 -Maintainer: Ian Jackson <iwj10@cus.cam.ac.uk> -Recommends: pine | mailx | elm | emacs | mail-user-agent -Suggests: metamail -Depends: cron, libc5 -Conflicts: sendmail -Provides: mail-transport-agent -Description: Electronic mail transport system. - Smail is the recommended mail transport agent (MTA) for Debian. - . - An MTA is the innards of the mail system - it takes messages from - user-friendly mailer programs and arranges for them to be delivered - locally or passed on to other systems as required. - . - In order to make use of it you must have one or more user level - mailreader programs such as elm, pine, mailx or Emacs (which has Rmail - and VM as mailreaders) installed. If you wish to send messages other - than just to other users of your system you must also have appropriate - and VM as mailreaders) installed. If you wish to send messages other - than just to other users of your system you must also have appropriate - networking support, in the form of IP or UUCP. -</example> - -<chapt id="relationships">Declaring relationships between packages -<p> - -Packages can declare in their control file that they have certain -relationships to other packages - for example, that they may not be -installed at the same time as certain other packages, and/or that they -depend on the presence of others, or that they should overwrite files -in certain other packages if present. -<p> - -This is done using the <tt/Depends/, <tt/Recommends/, <tt/Suggests/, -<tt/Conflicts/, <tt/Provides/ and <tt/Replaces/ control file fields. -<p> - -<sect id="depsyntax">Syntax of relationship fields -<p> - -These fields all have a uniform syntax. They are a list of package -names separated by commas. -<p> - -In <tt/Depends/, <tt/Recommends/, <tt/Suggests/ and <tt/Pre-Depends/ -(the fields which declare dependencies of the package in which they -occur on other packages) these package names may also be lists of -alternative package names, separated by vertical bar symbols <tt/|/ -(pipe symbols). -<p> - -All the fields except <tt/Provides/ may restrict their applicability -to particular versions of each named package. This is done in -parentheses after each individual package name; the parentheses should -contain a relation from the list below followed by a version number, -in the format described in <ref id="versions">. -<p> - -The relations allowed are -<tt/<</, -<tt/<=/, -<tt/=/, -<tt/>=/ and -<tt/>>/ -for strictly earlier, earlier or equal, exactly equal, later or equal -and strictly later, respectively. The forms <tt/</ and <tt/>/ -were used to mean earlier/later or equal, rather than strictly -earlier/later, so they should not appear in new packages (though -<prgn/dpkg/ still supports them). -<p> - -Whitespace may appear at any point in the version specification, and -must appear where it's necessary to disambiguate; it is not otherwise -significant. For consistency and in case of future changes to -<prgn/dpkg/ it is recommended that a single space be used after a -version relationship and before a version number; it is usual also to -put a single space after each comma, on either side of each vertical -bar, and before each open parenthesis. -<p> - -For example: -<example> -Package: metamail -Version: 2.7-3 -Depends: libc5 (>= 5.2.18-4), mime-support, csh | tcsh -</example> - -<sect>Dependencies - <tt/Depends/, <tt/Recommends/, <tt/Suggests/, <tt/Pre-Depends/ -<p> - -These four fields are used to declare a dependency by one package on -another. They appear in the depending package's control file. -<p> - -All but <tt/Pre-Depends/ (discussed below) take effect <em/only/ when -a package is to be configured. They do not prevent a package being on -the system in an unconfigured state while its dependencies are -unsatisfied, and it is possible to replace a package whose -dependencies are satisfied and which is properly installed with a -different version whose dependencies are not and cannot be satisfied; -when this is done the depending package will be left unconfigured -(since attempts to configure it will give errors) and will not -function properly. -<p> - -For this reason packages in an installation run are usually all -unpacked first and all configured later; this gives later versions of -packages with dependencies on later versions of other packages the -opportunity to have their dependencies satisfied. -<p> - -Thus <tt/Depends/ allows package maintainers to impose an order in -which packages should be configured. - -<taglist> -<tag><tt/Depends/ -<item> - -This declares an absolute dependency. -<p> - -<prgn/dpkg/ will not configure -packages whose dependencies aren't satisfied. If it is asked to make -an installation which would cause an installed package's dependencies -to become unsatisfied it will complain<footnote>Current versions -(1.2.4) of <prgn/dpkg/ have a bug in this area which will cause some of -these problems to be ignored.</footnote>, unless -<tt/--auto-deconfigure/ is specified, in which case those packages -will be deconfigured before the installation proceeds. -<p> - -<prgn/dselect/ makes it hard for the user to select packages for -installation, removal or upgrade in a way that would mean that -packages' <prgn/Depends/ fields would be unsatisfied. The user can -override this if they wish, for example if they know that <prgn/dselect/ -has an out-of-date view of the real package relationships. -<p> - -The <tt/Depends/ field should be used if the depended-on package is -required for the depending package to provide a significant amount of -functionality. - -<tag><tt/Recommends/ -<item> -This declares a strong, but not absolute, dependency. -<p> - -<tt/Recommends/ is ignored by <prgn/dpkg/, so that users using the -command-line (who are presumed to know what they're doing) will not be -impeded. -<p> - -It is treated by <prgn/dselect/ exactly as <tt/Depends/ is; this makes -it hard for the user to select things so as to leave <tt/Recommends/ -fields unsatisfied, but they are able to do so by being persistent. -<p> - -The <tt/Recommends/ field should list packages that would be found -together with this one in all but unusual installations. - -<tag><tt/Suggests/ -<item> - -This is used to declare that one package may be more useful with one -or more others. Using this field tells the packaging system and the -user that the listed packages are be related to this one and can -perhaps enhance its usefulness, but that installing this one without -them is perfectly reasonable. -<p> - -<prgn/dselect/ will offer suggsted packages to the system administrator -when they select the suggesting package, but the default is not to -install the suggested package. - -<tag><tt/Pre-Depends/ -<item> - -This field is like <tt/Depends/, except that it also forces <prgn/dpkg/ -to complete installation of the packages named before even starting -the installation of the package which declares the predependency. -<p> - -<prgn/dselect/ checks for predependencies when it is doing an -installation run, and will attempt to find the packages which are -required to be installed first and do so in the right order. -<p> - -However, this process is slow (because it requires repeated -invocations of <prgn/dpkg/) and troublesome (because it requires -guessing where to find the appropriate files). -<p> - -For these reasons, and because this field imposes restrictions on the -order in which packages may be unpacked (which can be difficult for -installations from multipart media, for example), <tt/Pre-Depends/ -should be used sparingly, preferably only by packages whose premature -upgrade or installation would hamper the ability of the system to -continue with any upgrade that might be in progress. -<p> - -When the package declaring it is being configured, a -<tt/Pre-Dependency/ will be considered satisfied only if the depending -package has been correctly configured, just as if an ordinary -<tt/Depends/ had been used. -<p> - -However, when a package declaring a predependency is being unpacked -the predependency can be satisfied even if the depended-on package(s) -are only unpacked or half-configured, provided that they have been -configured correctly at some point in the past (and not removed or -partially removed since). In this case both the previously-configured -and currently unpacked or half-configured versions must satisfy any -version clause in the <tt/Pre-Depends/ field. - -</taglist> - -When selecting which level of dependency to use you should consider -how important the depended-on package is to the functionality of the -one declaring the dependency. Some packages are composed of -components of varying degrees of importance. Such a package should -list using <tt/Depends/ the package(s) which are required by the more -important components. The other components' requirements may be -mentioned as Suggestions or Recommendations, as appropriate to the -components' relative importance. - -<sect1>Dependencies on shared libraries -<p> - -The dependency fields listed above are used by packages which need -shared libraries to declare dependencies on the appropriate packages. -<p> - -These dependencies are usually determined automatically using -<prgn/dpkg-shlibdeps/ and inserted in the package control file using -the control file substitution variables mechanism; see <ref -id="srcsubstvars"> and <ref id="sourcetools">. - -<sect1>Deconfiguration due to removal during bulk installations -<p> - -If <prgn/dpkg/ would like to remove a package due to a conflict, as -described above, but this would violate a dependency of some other -package on the system, <prgn/dpkg/ will usually not remove the -conflicting package and halt with an error. -<p> - -However, if the <tt/--auto-deconfigure/ (<tt/-B/) option is used -<prgn/dpkg/ will automatically `deconfigure' the package with the -problematic dependency, so that the conflicting package can be removed -and the package we're trying to install can be installed. If -<prgn/dpkg/ is being asked to install packages (rather than just -unpacking them) it will try to reconfigure the package when it has -unpacked all its arguments, in the hope that one of the other packages -it is installing will satisfy the problematic dependency. -<p> - -<prgn/dselect/ supplies this argument to <prgn/dpkg/ when it invokes it, -so that bulk installations proceed smoothly. - -<sect id="conflicts">Alternative packages - <tt/Conflicts/ and <tt/Replaces/ -<p> - -When one package declares a conflict with another <prgn/dpkg/ will -refuse to allow them to be installed on the system at the same time. -<p> - -If one package is to be installed, the other must be removed first - -if the package being installed is marked as replacing (<ref -id="replaces">) the one on the system, or the one on the system is -marked as deselected, or both packages are marked <tt/Essential/, then -<prgn/dpkg/ will automatically remove the package which is causing the -conflict, otherwise it will halt the installation of the new package -with an error. -<p> - -<prgn/dselect/ makes it hard to select conflicting packages, though the -user can override this if they wish. If they do not override it then -<prgn/dselect/ will select one of the packages for removal, and the user -must make sure it is the right one. In the future <prgn/dselect/ will -look for the presence of a <tt/Replaces/ field to help decide which -package should be installed and which removed. -<p> - -A package will not cause a conflict merely because its configuration -files are still installed; it must be at least half-installed. -<p> - -A special exception is made for packages which declare a conflict with -their own package name, or with a virtual package which they provide -(see below): this does not prevent their installation, and allows a -package to conflict with others providing a replacement for it. You -use this feature when you want the package in question to be the only -package providing something. -<p> - -A <tt/Conflicts/ entry should almost never have an `earlier than' -version clause. This would prevent <prgn/dpkg/ from upgrading or -installing the package which declared such a conflict until the -upgrade or removal of the conflicted-with package had been completed. -This aspect of installation ordering is not handled by <prgn/dselect/, -so that the use <tt/Conflicts/ in this way is likely to cause problems -for `bulk run' upgrades and installations. -<p> - - -<sect id="virtual">Virtual packages - <tt/Provides/ -<p> - -As well as the names of actual (`concrete') packages, the package -relationship fields <tt/Depends/, <tt/Recommends/, <tt/Suggests/ and -<tt/Conflicts/ may mention virtual packages. -<p> - -A virtual package is one which appears in the <tt/Provides/ control -file field of another package. The effect is as if the package(s) -which provide a particular virtual package name had been listed by -name everywhere were the virtual package name appears. -<p> - -If there are both a real and a virtual package of the same name then -the dependency may be satisfied (or the conflict caused) by either the -real package or any of the virtual packages which provide it. This is -so that, for example, supposing we have -<example> -Package: vm -Depends: emacs -</example> -and someone else releases an xemacs package they can say -<example> -Package: xemacs -Provides: emacs -</example> -and all will work in the interim (until a purely virtual package name -is decided on and the <tt/emacs/ and <tt/vm/ packages are changed to -use it). -<p> - -If a dependency or a conflict has a version number attached then only -real packages will be considered to see whether the relationship is -satisfied (or the prohibition violated, for a conflict) - it is -assumed that a real package which provides virtual package is not of -the `right' version. So, a <tt/Provides/ field may not contain -version numbers, and the version number of the concrete package which -provides a particular virtual package will not be looked at when -considering a dependency on or conflict with the virtual package name. -<p> - -If you want to specify which of a set of real packages should be the -default to satisfy a particular dependency on a virtual package, you -should list the real package as alternative before the virtual. -<p> - - -<sect id="replaces"><tt/Replaces/ - overwriting files and replacing packages -<p> - -The <tt/Replaces/ control file field has two purposes, which come into -play in different situations. -<p> - -Virtual packages (<ref id="virtual">) are not considered when looking -at a <tt/Replaces/ field - the packages declared as being replaced -must be mentioned by their real names. - -<sect1>Overwriting files in other packages -<p> - -Firstly, as mentioned before, it is usually an error for a package to -contains files which are on the system in another package, though -currently the <tt/--force-overwrite/ flag is enabled by default, -downgrading the error to a warning, -<p> - -If the overwriting package declares that it replaces the one -containing the file being overwritten then <prgn/dpkg/ will proceed, and -replace the file from the old package with that from the new. The -file will no longer be listed as `owned' by the old package. -<p> - -If a package is completely replaced in this way, so that <prgn/dpkg/ -does not know of any files it still contains, it is considered to have -disappeared. It will be marked as not wanted on the system (selected -for removal) and not installed. Any conffiles details noted in the -package will be ignored, as they will have been taken over by the -replacing package(s). The package's <prgn/postrm/ script will be run to -allow the package to do any final cleanup required. -See <ref id="mscriptsinstact">. -<p> - -In the future <prgn/dpkg/ will discard files which overwrite those from -another package which declares that it replaces the one being -installed (so that you can install an older version of a package -without problems). -<p> - -This usage of <tt/Replaces/ only takes effect when both packages are -at least partially on the system at once, so that it can only happen -if they do not conflict or if the conflict has been overridden. - -<sect1>Replacing whole packages, forcing their removal -<p> - -Secondly, <tt/Replaces/ allows <prgn/dpkg/ and <prgn/dselect/ to resolve -which package should be removed when a conflict - see -<ref id="conflicts">. This usage only takes effect when the two -packages <em/do/ conflict, so that the two effects do not interfere -with each other. -<p> - -<sect>Defaults for satisfying dependencies - ordering -<p> - -Ordering is significant in dependency fields. -<p> - -Usually dselect will suggest to the user that they select the package -with the most `fundamental' class (eg, it will prefer Base packages to -Optional ones), or the one that they `most wanted' to select in some -sense. -<p> - -In the absence of other information <prgn/dselect/ will offer a -default selection of the first named package in a list of -alternatives. -<p> - -However, there is no way to specify the `order' of several packages -which all provide the same thing, when that thing is listed as a -dependency. -<p> - -Therefore a dependency on a virtual package should contain a concrete -package name as the first alternative, so that this is the default. -<p> - -For example, consider the set of packages: - -<example> -Package: glibcdoc -Recommends: info-browser - -Package: info -Provides: info-browser - -Package: emacs -Provides: info-browser -</example> -<p> - -If <prgn/emacs/ and <prgn/info/ both have the same priority then -<prgn/dselect/'s choice is essentially random. Better would be -<example> -Package: glibcdoc -Recommends: info | info-browser -</example> -so that <prgn/dselect/ defaults to selecting the lightweight standalone -info browser. - - - -<chapt id="conffiles">Configuration file handling -<p> - -<prgn/dpkg/ can do a certain amount of automatic handling of package -configuration files. -<p> - -Whether this mechanism is appropriate depends on a number of factors, -but basically there are two approaches to any particular configuration -file. -<p> - -The easy method is to ship a best-effort configuration in the package, -and use <prgn/dpkg/'s conffile mechanism to handle updates. If the user -is unlikely to want to edit the file, but you need them to be able to -without losing their changes, and a new package with a changed version -of the file is only released infrequently, this is a good approach. -<p> - -The hard method is to build the configuration file from scratch in the -<prgn/postinst/ script, and to take the responsibility for fixing any -mistakes made in earlier versions of the package automatically. This -will be appropriate if the file is likely to need to be different on -each system. - -<sect>Automatic handling of configuration files by <prgn/dpkg/ -<p> - -A package may contain a control area file called <tt/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. -<p> - -When a package is upgraded <prgn/dpkg/ will process the configuration -files during the configuration stage, shortly before it runs the -package's <prgn/postinst/ script, -<p> - -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. -<p> - -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 - ie, 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. -<p> - -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. -<p> - -When a package is installed for the first time <prgn/dpkg/ will install -the file that comes with it, unless that would mean overwriting a file -already on the filesystem. -<p> - -However, note that <prgn/dpkg/ will <em/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. -<p> - -Note that a package should <em/not/ modify a <prgn/dpkg/-handled -conffile in its maintainer scripts. Doing this will lead to -<prgn/dpkg/ giving the user confusing and possibly dangerous options -for conffile update when the package is upgraded. - -<sect>Fully-featured maintainer script configuration handling -<p> - -For files which contain site-specific information such as the hostname -and networking details and so forth, it is better to create the file -in the package's <prgn/postinst/ script. -<p> - -This will typically involve examining the state of the rest of the -system to determine values and other information, and may involve -prompting the user for some information which can't be obtained some -other way. -<p> - -When using this method there are a couple of important issues which -should be considered: -<p> - -If you discover a bug in the program which generates the configuration -file, or if the format of the file changes from one version to the -next, you will have to arrange for the postinst script to do something -sensible - usually this will mean editing the installed configuration -file to remove the problem or change the syntax. You will have to do -this very carefully, since the user may have changed the file, perhaps -to fix the very problem that your script is trying to deal with - you -will have to detect these situations and deal with them correctly. -<p> - -If you do go down this route it's probably a good idea to make the -program that generates the configuration file(s) a separate program in -<tt>/usr/sbin</>, by convention called <tt/<var/package/config/ and -then run that if appropriate from the post-installation script. The -<tt/<var/package/config/ program should not unquestioningly overwrite -an existing configuration - if its mode of operation is geared towards -setting up a package for the first time (rather than any arbitrary -reconfiguration later) you should have it check whether the -configuration already exists, and require a <tt/--force/ flag to -overwrite it. - - - -<chapt id="alternatives">Alternative versions of an interface - -<prgn/update-alternatives/ -<p> - -When several packages all provide different versions of the same -program or file it is useful to have the system select a default, but -to allow the system administrator to change it and have their -decisions respected. -<p> - -For example, there are several versions of the <prgn/vi/ editor, and -there is no reason to prevent all of them from being installed at -once, each under their own name (<prgn/nvi/, <prgn/vim/ or whatever). -Nevertheless it is desirable to have the name <tt/vi/ refer to -something, at least by default. -<p> - -If all the packages involved cooperate, this can be done with -<prgn/update-alternatives/. -<p> - -Each package provides its own version under its own name, and calls -<prgn/update-alternatives/ in its postinst to register its version -(and again in its prerm to deregister it). -<p> - -See the manpage <manref name=update-alternatives section=8> for -details. -<p> - -If <prgn/update-alternatives/ does not seem appropriate you may wish -to consider using diversions instead. - - -<chapt id="diversions">Diversions - overriding a package's version of a file -<p> - -It is possible to have <prgn/dpkg/ not overwrite a file when it -reinstalls the package it belongs to, and to have it put the file from -the package somewhere else instead. -<p> - -This can be used locally to override a package's version of a file, or -by one package to override another's version (or provide a wrapper for -it). -<p> - -Before deciding to use a diversion, read <ref id="alternatives"> to -see if you really want a diversion rather than several alternative -versions of a program. -<p> - -There is a diversion list, which is read by <prgn/dpkg/, and updated -by a special program <prgn/dpkg-divert/. Please see <manref -name=dpkg-divert section=8> for full details of its operation. -<p> - -When a package wishes to divert a file from another, it should call -<prgn/dpkg-divert/ in its preinst to add the diversion and rename the -existing file. For example, supposing that a <prgn/smailwrapper/ -package wishes to install a wrapper around <tt>/usr/sbin/smail</>: -<example> -if [ install = "$1" ]; then - dpkg-divert --package smailwrapper --add --rename \ - --divert /usr/sbin/smail.real /usr/sbin/smail -fi -</example> -Testing <tt/$1/ is necessary so that the script doesn't try to add the -diversion again when <prgn/smailwrapper/ is upgraded. The -<tt/--package smailwrapper/ ensures that <prgn/smailwrapper/'s copy of -<tt>/usr/sbin/smail</> can bypass the diversion and get installed as -the true version. -<p> - -The postrm has to do the reverse: -<example> -if [ remove = "$1" ]; then - dpkg-divert --package smailwrapper --remove --rename \ - --divert /usr/sbin/smail.real /usr/sbin/smail -fi -</example> -<p> - -Do not attempt to divert a file which is vitally important for the -system's operation - when using <prgn/dpkg-divert/ there is a time, -after it has been diverted but before <prgn/dpkg/ has installed the -new version, when the file does not exist. - - -<chapt id="sharedlibs">Shared libraries -<p> - -Packages containing shared libraries must be constructed with a little -care to make sure that the shared library is always available. This -is especially important for packages whose shared libraries are -vitally important, such as the libc. -<p> - -Firstly, your package should install the shared libraries under their -normal names. For example, the <prgn/libgdbm1/ package should install -<tt/libgdbm.so.1.7.3/ as <tt>/usr/lib/libgdbm.so.1.7.3</tt>. The -files should not be renamed or relinked by any prerm or postrm -scripts; <prgn/dpkg/ will take care of renaming things safely without -affecting running programs, and attempts to interfere with this are -likely to lead to problems. -<p> - -Secondly, your package should include the symlink that <prgn/ldconfig/ -would create for the shared libraries. For example, the -<prgn/libgdbm1/ package should include a symlink from -<tt>/usr/lib/libgdbm.so.1</tt> to <tt/libgdbm.so.1.7.3/. This is -needed so that <prgn/ld.so/ can find the library in between the time -<prgn/dpkg/ installs it and <prgn/ldconfig/ is run in the -<prgn/postinst/ script. Futhermore, and <em/this is very important/, -the library must be placed before the symlink pointing to it in the -<tt/.deb/ file. This is so that by the time <prgn/dpkg/ comes to -install the symlink (overwriting the previous symlink pointing at an -older version of the library) the new shared library is already in -place. Currently the way to ensure the ordering is done properly is -to install the library in the appropriate <tt>debian/tmp/.../lib</> -directory before creating the symlink, by putting the commands in the -<tt>debian/rules</> in the appropriate order. -<p> - -If you do the above your package does not need to call <prgn/ldconfig/ -in its maintainer scripts. It is especially important not to call -<prgn/ldconfig/ in the postrm or preinst scripts in the case where the -package is being upgraded (see the programmer's manual), as -<prgn/ldconfig/ will see the temporary names that <prgn/dpkg/ uses for the -files while it is installing them and will make the shared library -links point to them, just before <prgn/dpkg/ continues the installation -and removes the links! - - - -<chapt id="sysvinit">Configuration of <prgn/init/ -<p> - -<sect>Introduction to the <tt/init.d/ scheme -<p> - -The <tt>/etc/init.d</> directory contains the scripts executed by -<prgn/init/ when init state (or `runlevel') is changed (see <manref -name=init section=8>). -<p> - -These scripts are be referenced by symbolic links in the -<tt>/etc/rc<var/n/.d</> directories. When changing runlevels, init -looks in the directory <tt>/etc/rc<var/n/.d</> for the scripts it -should execute, where <var/n/ is the runlevel that is being changed -to. -<p> - -The names of the links all have the form <tt/S<var/mm/<var/script// or -<tt/K<var/mm/<var/script// where <var/mm/ is a two-digit number and -<var/script/ is the name of the script (this should be the same as the -name of the actual script in <tt>/etc/init.d</>. - -When <prgn/init/ changes runlevel first the targets of the links whose -names starting with a <tt/K/ are executed, each with the single -argument <tt/stop/, followed by the scripts prefixed with an <tt/S/, -each with the single argument <tt/start/. The <tt/K/ links are -responsible for killing services and the <tt/S/ link for starting -services upon entering the runlevel. -<p> - -For example, if we are changing from runlevel 2 to runlevel 3, init -will first execute all of the <tt/K/ prefixed scripts it finds in -<tt>/etc/rc3.d</>, and then all of the <tt/S/ prefixed scripts. The -links starting with <tt/K/ will cause the referred-to file to be -executed with an argument of <tt/stop/, and the <tt/S/ links with an -argument of <tt/start/. -<p> - -The two-digit number <var/mm/ is used to decide which order to start -and stop things in - low-numbered links have their scripts run first. -For example, the <tt/K20/ scripts will be executed before the <tt/K30/ -scripts. This is used when a certain service must be started before -another. For example, the name server <prgn/bind/ might need to be -started before the news server <prgn/inn/ so that <prgn/inn/ can set -up its access lists. In this case, the script that starts <prgn/bind/ -should have a lower number than the script that starts <prgn/inn/ so -that it runs first: -<example> -/etc/rc2.d/S17bind -/etc/rc2.d/S70inn -</example> - -<sect>Writing <tt/init.d/ scripts -<p> - -Packages can and should place scripts in <tt>/etc/init.d</> to start -or stop services at boot time or during a change of runlevel. These -scripts should be named <tt>/etc/init.d/<var/package/</>, and they -should accept one argument, saying what to do: <tt/start/, meaning to -starts the service, or <tt/stop/, to stop the service. Optionally -they can support <tt/reload/ which causes the configuration to be -reloaded. -<p> - -The <tt/init.d/ scripts should ensure that they will behave sensibly -if invoked with <tt/start/ when the service is already running, or -with <tt/stop/ when it isn't, and that they don't kill -unfortunately-named user processes. The best way to achieve this is -usually to use <prgn/start-stop-daemon/. -<p> - -These scripts should not fail obscurely when the configuration files -remain but the package has been removed, as the default in <prgn/dpkg/ -is to leave configuration files on the system after the package has -been removed. Only when it is executed with the <tt/--purge/ option -will dpkg remove configuration files. Therefore, you should include a -<tt/test/ statement at the top of the script, like this: -<example> -test -f <var/program-executed-later-in-script/ || exit 0 -</example> - -<sect>Managing the <tt/rc<var/n/.d/ links - <prgn/update-rc.d/ -<p> - -A program is provided, <prgn/update-rc.d/, to make it easier for -package maintainers to arrange for the proper creation and removal of -<tt>/etc/rc<var/n/.d</> symbolic links from their postinst and postrm -scripts. -<p> - -You should use this script to make changes to <tt>/etc/rc<var/n/.d</> -and <em/never/ include any <tt>/etc/rc<var/n/.d</> symbolic links in -the actual archive. -<p> - -By default <prgn/update-rc.d/ will start services in each of the -multi-user state runlevels (2, 3, 4, and 5) and stop them in the halt -runlevel (0), the single-user runlevel (1) and the reboot runlevel -(6). The system administrator will have the opportunity to customize -runlevels by simply adding, moving, or removing the symbolic links in -<tt>/etc/rc<var/n/.d</>. -<p> - -To get the default behaviour for your package, put in your postinst -script -<example> -update-rc.d <var/package/ default >/dev/null -</example> -and in your postrm -<example> -if [ purge = "$1" ]; then - update-rc.d <var/package/ remove >/dev/null -fi -</example> -<p> - -This will use a default sequence number of 20. If it does not matter -when or in which order the script is run, use this default. If it -does, then you should talk to the maintainer of the <prgn/sysvinit/ -package or post to <tt>debian-devel</>, and they will help you choose -a number. -<p> - -For more information about using <tt/update-rc.d/, please consult its -manpage <manref name=update-rc.d section=8>. - -<sect>Boot-time initialisation - <tt/rc.boot/ -<p> - -There is another directory, <tt>/etc/rc.boot</>, which contains -scripts which are run once per machine boot. This facility is -provided for initialisation of hardware devices, cleaning up of -leftover files, and so forth. -<p> - -For example, the <prgn/kbd/ package provides a script here for -initialising the keyboard layout and console font and mode. -<p> - -The files in <tt>/etc/rc.boot</> should <em/not/ be links into -<tt>/etc/init.d</> - they should be the scripts themselves. -<p> - -<tt/rc.boot/ should <em/not/ be used for starting general-purpose -daemons and similar activities. This should be done using the -<tt/rc<var/n/.d/ scheme, above, so that the services can be started -and stopped cleanly when the runlevel changes or the machine is to be -shut down or rebooted. - -<sect>Notes -<p> - -<em/Do not/ include the <tt>/etc/rc<var/n/.d/*</> symbolic links in -the <tt/.deb/ filesystem archive! <em/This will cause problems!/ -You should create them with <prgn/update-rc.d/, as above. -<p> - -<em/Do not/ include the <tt>/etc/rc<var/n/.d/*</> symbolic links in -<prgn/dpkg/'s conffiles list! <em/This will cause problems!/ -<em/Do/, however, include the <tt>/etc/init.d</> scripts in conffiles. - -<sect>Example -<p> - -The <prgn/bind/ DNS (nameserver) package wants to make sure that the -nameserver is running in multiuser runlevels, and is properly shut -down with the system. It puts a script in <tt>/etc/init.d</>, naming -the script appropriately <tt/bind/. As you can see, the script -interprets the argument <tt/reload/ to send the nameserver a <tt/HUP/ -signal (causing it to reload its configuration); this way the user can -say <tt>/etc/init.d/bind reload</> to reload the nameserver. -<p> - -<example> -#!/bin/sh -# Original version by Robert Leslie <rob@mars.org>, edited by iwj -test -x /usr/sbin/named || exit 0 -case "$1" in - start) - test -f /etc/named.boot -a -f /var/named/boot.options || exit 0 - start-stop-daemon --start --verbose --exec /usr/sbin/named - ;; - stop) - start-stop-daemon --stop --verbose \ - --pidfile /var/run/named.pid --exec /usr/sbin/named - ;; - reload) - start-stop-daemon --stop --signal 1 --verbose \ - --pidfile /var/run/named.pid --exec /usr/sbin/named - ;; - *) - echo "Usage: /etc/init.d/bind {start|stop|reload}" >&2 - exit 1 - ;; -esac -exit 0 -</example> -<p> - -Another example on which to base your <tt>/etc/init.d</> scripts is in -<tt>/etc/init.d/skeleton</>. -<p> - -If this package is happy with the default setup from -<prgn/update-rc.d/, namely an ordering number of 20 and having named -running in all runlevels, it can say in its postinst: -<example> -update-rc.d bind default >/dev/null -</example> -And in its postrm, to remove the links when the package is purged: -<example> -if [ purge = "$1" ]; then - update-rc.d acct remove >/dev/null -fi -</example> - - - -<chapt id="methif"><prgn/dselect/'s interface to its installation methods -<p> - -<prgn/dselect/ calls scripts from its installation methods when it -needs to actually access data from the distribution. The core program -<prgn/dselect/ itself just calls these scripts and provides the -package and access method selection interfaces. The installation -methods are responsible for invoking <prgn/dpkg/ as appropriate. -<p> - -Each installation method has three scripts: -<list compact> -<item>Setup installation parameters. -<item>Update list of available packages. -<item>Install. -</list> -<p> - -<prgn/dselect/ searches for methods in <tt>/usr/lib/dpkg/methods</> -and <tt>/usr/local/lib/dpkg/methods</>. - -<sect>Functions of the method scripts -<p> - -The setup script is run just after the user has chosen an installation -method. It should prompt the user for parameters like the site to -NFS-mount or FTP from, the directory to use, or the directory or -filesystem where the <tt/.deb/ files can be found, or the tape or -floppy device to install from. It should store the responses under -<tt>/var/lib/dpkg/methods</> - see below. If no available -packages list is available it should perhaps offer to scan the -available packages. -<p> - -The update script should obtain a list of available packages if -possible, and run <tt/dpkg --update-avail/, <tt/dpkg --merge-avail/ -and/or <tt/dpkg --forget-old-unavail/ to load it into <prgn/dpkg/ and -<prgn/dselect/'s database of available packages. If no packages list -was available and the user was offered and accepted the option of -scanning the actual files available this scan should be done here, -using <tt/dpkg --record-avail/. -<p> - -The install script should feed all the available <tt/.deb/ files to -<tt/dpkg --iGOEB/ (this is equivalent to <tt/dpkg --install ---refuse-downgrade --selected-only --skip-same-version ---auto-deconfigure/). The <tt/-R/ (<tt/--recursive/) option for -traversing subdirectories may also be useful here). -<p> - -If any of these scripts needs to display a message for the user, it -should wait for the user to hit `return' before exiting so that -dselect doesn't immediately rewrite the screen. -<p> - -If a method script succeeds (returns a zero exit status) -<prgn/dselect/ will return immediately to the main menu, with the -`next' option highlighted ready for the user to select it. If it -fails <prgn/dselect/ will display a message and wait for the user to -hit return. - -<sect>Location and arguments of the method scripts -<p> - -A set of scripts (henceforth known as a group) may provide several -methods on the `main menu' with different behaviour. For example, -there might be a generic get-packages-by-FTP group which might provide -methods in the main menu for installation directly from one of the -Debian mirror sites as well as for installation from a user-specified -site. -<p> - -Each group of methods implemented by the same set of scripts should -have a subdirectory <tt>/usr/lib/dpkg/methods/<var/group/</> or -<tt>/usr/local/lib/dpkg/methods/<var/group/</>, containing: -<taglist compact> -<tag><tt/names/ -<item>a list of user-visible methods provided by these scripts. -<tag><tt/setup/ -<tag><tt/update/ -<tag><tt/install/ -<item>executable programs, the scripts themselves. -<tag><tt/desc.<var/option// -<item>description file. -</taglist> -<p> - -<tt/names/ will be formatted as a list of lines, each containing: -<example> -<var/sequence/ <var/method/ <var/summary/ -</example> -<p> - -<var/sequence/ is a two-digit number that will be used much like -<tt/rc.d/ prefixes to control the order in the main menu. If in doubt -use 50. -<p> - -<var/method/ is a name which is displayed by <prgn/dselect/ as the -name of the method, and which will be passed to <tt/setup/, -<tt/update/ and <tt/unpack/ as their first argument. -<p> - -<var/summary/ is the brief description string for <prgn/dselect/'s menu. -<p> - -Each of the three scripts gets the same three arguments: <var/vardir/, -<var/group/ and <var/method/. <var/vardir/ is the base directory for -storing <prgn/dpkg/ and <prgn/dselect/'s state, usually -<tt>/var/lib/dpkg</>; this is passed in so that the <tt/--admindir/ -option to <prgn/dselect/ is honoured). -<p> - -Each option may have an extended description in -<tt/desc.<var/option//. This should be formatted like the extended -description part of a <tt/Description/ field entry <em/shifted one -character to the left/. -<p> - -<tt><var/vardir//methods</> will exist, and a method group may use a -<tt><var/vardir//methods/<var/group/</> directory to store its state. -<p> - -The group name and method name must follow the rules for C identifiers. - -</book> diff --git a/doc/texinfo.debian_mapping b/doc/texinfo.debian_mapping new file mode 100644 index 000000000..35c429827 --- /dev/null +++ b/doc/texinfo.debian_mapping @@ -0,0 +1,18 @@ +% texinfo.debian_mapping +% - sgmlsasp mapping file for TeXinfo/SGML->debiandoc/SGML +% +% Copyright (C) 1997 Klee Dienes <klee@mit.edu> +% +% This is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as +% published by the Free Software Foundation; either version 2, +% or (at your option) any later version. +% +% This is distributed in the hope that it will be useful, but +% WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public +% License along with dpkg; if not, write to the Free Software +% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. diff --git a/doc/texinfo.dtd b/doc/texinfo.dtd new file mode 100644 index 000000000..6484519a5 --- /dev/null +++ b/doc/texinfo.dtd @@ -0,0 +1,94 @@ +<!-- + texinfo.dtd - TeXinfo/SGML document type definition + + Copyright (C) 1997 Klee Dienes <klee@mit.edu> + + This is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + This is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public + License along with dpkg; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +--> + +<!entity at sdata "@@"> +<!entity copy sdata "@copyright{}"> +<!entity amp sdata "@&"> +<!entity lt sdata "<"> +<!entity gt sdata ">"> +<!entity lsqb sdata "["> +<!entity rsqb sdata "]"> +<!entity bsol sdata "\"> + +<!element setfilename - o (#pcdata)> + +<!element titlepage - - (title?,author?,date?,abstract?)> +<!element texinfo - - (setfilename,titlepage?,chapter+,closing)> + +<!element title - - (#pcdata)> +<!element author - - (#pcdata)> +<!element date - - (#pcdata)> +<!element abstract - - (#pcdata|file|samp|var|code)*> + +<!element quotation - - (#pcdata)> +<!element example - - (#pcdata)> +<!element lisp - - (#pcdata)> +<!element smallexample - - (#pcdata)> +<!element smalllisp - - (#pcdata)> +<!element display - - (#pcdata)> +<!element format - - (#pcdata)> + +<!element code - - (#pcdata)> +<!element kbd - - (#pcdata)> +<!element key - - (#pcdata)> +<!element samp - - (#pcdata)> +<!element var - - (#pcdata)> +<!element file - - (#pcdata)> +<!element dfn - - (#pcdata)> +<!element cite - - (#pcdata)> + +<!element tt - - (#pcdata)+> +<!element em - - (#pcdata)+> +<!element it - - (#pcdata)+> + +<!element heading o o (#pcdata|label|code|var|file|samp)+> +<!element body o o (#pcdata|index|ref|file|samp|var|code|example|tt|em|it|htmlurl|url|itemize|enumerate|table|ftable|vtable)+> + +<!element chapter - o (heading, (section|cindex|findex|vindex|kindex|pindex|tindex|p)*)> +<!element section - o (heading, (subsection|cindex|findex|vindex|kindex|pindex|tindex|p)*)> +<!element subsection - o (heading, (subsubsection|cindex|findex|vindex|kindex|pindex|tindex|p)*)> +<!element subsubsection - o (heading, (cindex|findex|vindex|kindex|pindex|tindex|p)*)> + +<!element itemize - - (item)*> +<!element enumerate - - (item)*> +<!element table - - (item, body)*> +<!element ftable - - (item, body)*> +<!element vtable - - (item, body)*> + +<!element item - o (body)> + +<!element p - o (body)> + +<!element contents - o empty> +<!element shortcontents - o empty> +<!element summarycontents - o empty> + +<!element printindex - o empty> + +<!attlist printindex name NAME "fn"> + +<!element closing o o (contents|shortcontents|summarycontents|printindex)*> + +<!element cindex - - (#pcdata|code|var|file|samp)+> +<!element findex - - (#pcdata|code|var|file|samp)+> +<!element vindex - - (#pcdata|code|var|file|samp)+> +<!element kindex - - (#pcdata|code|var|file|samp)+> +<!element pindex - - (#pcdata|code|var|file|samp)+> +<!element tindex - - (#pcdata|code|var|file|samp)+> diff --git a/doc/texinfo.texi_mapping b/doc/texinfo.texi_mapping new file mode 100644 index 000000000..2f879144a --- /dev/null +++ b/doc/texinfo.texi_mapping @@ -0,0 +1,120 @@ +% texinfo.mapping - sgmlsasp mapping file for TeXinfo/SGML->TeXinfo +% +% Copyright (C) 1997 Klee Dienes <klee@mit.edu> +% +% This is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as +% published by the Free Software Foundation; either version 2, +% or (at your option) any later version. +% +% This is distributed in the hope that it will be useful, but +% WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public +% License along with dpkg; if not, write to the Free Software +% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +<texinfo> "\\input texinfo\n" +</texinfo> "@bye\n" + +<setfilename> "@setfilename " +</setfilename> "\n" + +<titlepage> "@titlepage\n" +</titlepage> "\n@end titlepage\n" + +<title> "@title " +</title> "\n" + +<author> "@author " +</author> "\n" + +<chapter> "@chapter " +<section> "@section " +<subsection> "@subsection " +<subsubsection> "@subsubsection " + +<heading> "" +</heading> "\n" + +<code> "@code{" +</code> "}" + +<kbd> "@kbd{" +</kbd> "}" + +<key> "@key{" +</key> "}" + +<p> "\n\n" + +<samp> "@samp{" +</samp> "}" + +<var> "@var{" +</var> "}" + +<file> "@file{" +</file> "}" + +<dfn> "@dfn{" +</dfn> "}" + +<cite> "@cite{" +</cite> "}" + +<itemize> "@itemize @asis\n" +</itemize> "@end itemize\n" + +<table> "@table @asis\n" +</table> "\n@end table\n" + +<item> "@item " +</item> "\n" + +<quotation> "@quotation\n" +</quotation> "@end quotation\n" + +<example> "@example\n" +</example> "@end example\n" + +<lisp> "@lisp\n" +</lisp> "@end lisp\n" + +<smallexample> "@smallexample\n" +</smallexample> "@end smallexample\n" + +<smalllisp> "@smalllisp\n" +</smalllisp> "@end smalllisp\n" + +<display> "@display\n" +</display> "@end display\n" + +<format> "@format\n" +</format> "@end format\n" + +<contents> "@contents\n" +<shortcontents> "@shortcontents\n" +<summarycontents> "@summarycontents\n" + +<cindex> "@cindex " +</cindex> "\n" + +<findex> "@findex " +</findex> "\n" + +<vindex> "@vindex " +</vindex> "\n" + +<kindex> "@kindex " +</kindex> "\n" + +<pindex> "@pindex " +</pindex> "\n" + +<tindex> "@tindex " +</tindex> "\n" + +<printindex> "@printindex [name]\n"
\ No newline at end of file |