dpkg (1.2.12); priority=LOW
[dpkg.git] / doc / guidelines.texi
blobf266b955206c0321beb3ed29b51aae6d688290cf
1 \input texinfo @c -*-texinfo-*-
2 @setfilename guidelines.info
4 @set DATE 26th January 1996
6 @setchapternewpage off
8 @iftex
9 @center @titlefont{Debian Linux Packaging Guidelines}
10 @tex
11 \vskip2pt \hrule height 2pt width \hsize \vskip2pt
12 @end tex
13 @sp 0.5
14 @center @value{DATE}
15 @end iftex
17 @ifinfo
18 @format
19 START-INFO-DIR-ENTRY
20 * Guidelines: (guidelines).       How to make Debian packages.
21 END-INFO-DIR-ENTRY
22 @end format
23 @end ifinfo
25 @node Top, Additional Information, (dir), (dir)
27 @ifinfo
28 @top Debian Linux Packaging Guidelines
29 @end ifinfo
31    This file documents the steps that must be taken in the preparation
32 of a Debian Linux package.  All submissions to be included in the
33 distribution proper and all packages to be considered for @file{contrib}
34 or @file{non-free} availability @emph{must} conform to the guidelines
35 and standards described in this document or they cannot be included or
36 made available at the archive with the distribution.
38    Please read the Guidelines carefully.  If you have comments or
39 questions, please contact @code{debian-devel@@pixar.com}.  If you are
40 planning on going further than just contributing a package (i.e., if
41 you plan to maintain it for an extended period of time or if you are
42 generally interested in becoming more involved in the Project), you
43 should join the @code{debian-devel} mailing list.  For more details,
44 read @file{info/mailing-lists.txt}, available at any Debian Linux
45 archive.
47    (This file was last updated on @value{DATE}.  Please check the most
48 recent @file{dpkg} package at any Debian Linux archive for a
49 potentially more up to date copy.)
51 @menu
52 * Additional Information::      Where other info is to be found.
53 * Package Copyright::           A few words about the importance of
54                                 understanding the package copyright.
55 * Package Content::             Requirements for the package content.
56 * Source Package::              Creating the source package.
57 * Binary Package::              Creating the binary package.
58 * Control Files::               The binary package control files.
59 * Appendix::                    More specific details about some aspects.
60 @end menu
64 @node Additional Information, Package Copyright, Top, Top
65 @unnumbered Additional Information
67    These Guidelines are intended to be fairly general.  More specific
68 information is available about certain aspects of building packages,
69 such as how to use the features of Init under Debian Linux and how
70 to interact with some more technical details of dpkg's operation.  This
71 information can be found in the directory @file{doc/package-developer}
72 at any Debian Linux archive.  At the time of this writing, the
73 following documents are available:
75 @table @file
76 @item virtual-package-names-list.text
77 The list of virtual package names currently in use, together with the
78 procedure for getting new virtual package names allocated.
79 @item auto-deconfiguration.txt
80 How dpkg can sometimes automatically deconfigure packages in order to
81 do bulk installations smoothly.
82 @item dpkg-essential-flag.txt
83 How to tell dpkg a package is essential and should not be removed.
84 (This is for the use of base system packages only.)
85 @item dpkg-disappear-replace.txt
86 What happens when a package appears to have been completely replaced.
87 @end table
89    In the future, we hope also to make available:
91 @table @file
92 @item copyright.txt
93 How to choose a good copyright notice to attach to new programs.
94 @item version-ordering.txt
95 The algorithm with which packages' version numbers are compared.
96 @end table
98    Also, you should download the sample files and the sample package
99 (GNU Hello) available in @file{standards/samples}.  You may use any
100 of this material as a starting point for new packages.  The following
101 sample files, incidentally, are available:
103 @itemize @bullet
104 @item debian.README
105 @item debian.control
106 @item debian.postinst
107 @item debian.postrm
108 @item debian.rules
109 @end itemize
111 Some more detailed information about certain topics is available in the
112 appendix to this document (@pxref{Appendix}).
115 @node Package Copyright, Package Content, Additional Information, Top
116 @unnumbered Package Copyright
118    Please study the copyright of your submission @emph{carefully}
119 and @emph{understand it} before proceeding!  If you have doubts or
120 questions, please ask!
122    In order to understand how we classify and distribute certain
123 packages, it is important to understand the distinction between being
124 freely available and being freely redistributable.
126    Being @dfn{freely available}, quite simply, means that the software
127 can be made available freely, at least for non-commercial purposes and
128 in its original, unmodified form.  This includes packages made available
129 freely that have restrictions on non-commercial use, redistribution of
130 modifications, etc.  Being freely available, therefore, has nothing to
131 do with being able to modify and redistribute the software.  It only
132 means that you can get a copy of the software without having to pay
133 (and it does not necessarily mean that you can @emph{use} the software
134 without having to pay---shareware is an example of freely available
135 software).
137    @dfn{freely redistributable}, while generally being freely available,
138 goes beyond just being freely available.  Freely redistributable means
139 that that the software, in addition to being able to be made available
140 freely, must be able to be freely modified and redistributed without
141 restriction.
143    All submissions to be included in the distribution proper @emph{must}
144 be freely redistributable.
146    In addition to the distribution, the Project maintains two separate
147 archives of software packages with the distribution: the @file{contrib}
148 archive and the @file{non-free} archive.
150    @file{contrib} is an archive of user-contributed packages that are
151 not maintained by the Project, packages that were once maintained by the
152 Project but that are no longer actively maintained, and packages that
153 are maintained by the Project but that are not yet considered ready for
154 inclusion in the distribution proper (i.e., ALPHA and BETA packages).
155 As above, all submissions for inclusion in the @file{contrib} archive
156 @emph{must} be freely redistributable.
158    @file{non-free} is an archive of packages with either restrictive or
159 unclear terms of copying or modification.  If a package has @emph{any}
160 restrictions on modification or redistribution, it can not be included
161 in the distribution or @file{contrib} archive.  It can only be included
162 in the @file{non-free} archive, and then only if it is freely available.
164    In summary, in order to be included in the distribution proper or the
165 @file{contrib} archive, a package must be @emph{freely redistributable}.
166 Anyone must be able to make copies of it, modify it, redistribute it with
167 their modifications in place, include it on a CD-ROM, or generally sell
168 it.  To be included in the @file{non-free} archive, a package may have
169 restrictions, as long as the package remains @emph{freely available}.  We
170 must be available to make it available freely at the archive, and anyone
171 must be able to make copies of it and use it for at least non-commercial,
172 personal purposes.  Software that will typically be included in
173 @file{non-free} are software that does not allow commercial distribution,
174 software that does not allow modification or redistribution of
175 modifications, commercial ``demos'', and ``shareware''.
177    When in doubt, send mail to @file{debian-devel@@lists.debian.org}.
178 Be prepared to provide us with the copyright statement.  Software
179 covered by the GPL, public domain software and BSD-like copyrights are
180 safe; be wary of the phrases ``commercial use prohibited'' and
181 ``distribution restricted''.
183    Every package submission @emph{must} be accompanied by verbatim copy
184 of its copyright (with the exceptions of public domain packages and
185 those covered by the UCB BSD licence or the GNU GPL or LGPL; in these
186 cases simply indicate which is appropriate).  This information must be
187 included in a file installed to the directory @file{/usr/doc/copyright}.
188 See below for details.
192 @node Package Content, Source Package, Package Copyright, Top
193 @unnumbered Package Content
195    The following requirements apply equally to both the binary and
196 source packages.  In either case, when files have been installed,
197 they must conform to the requirements described in this section.
199    The primary rule in Debian Linux is to follow the Linux @dfn{File
200 System Standard} (@dfn{FSSTND}).  The location of installed files
201 @emph{must} comply @emph{fully} with the FSSTND.  The latest version of
202 this document can be found alongside the Guidelines or at
203 @file{tsx-11.mit.edu} in @file{/pub/linux/docs/linux-standards/fsstnd}.
204 Specific questions about following the standard should be addressed to
205 Daniel Quinlan, the FSSTND coordinator, at @code{quinlan@@yggdrasil.com}.
207    In addition to the FSSTND, all Debian Linux packages must follow
208 the guidelines below.
210 @itemize @bullet
211 @item
212 Directories should be mode 755 or (for group-writability) mode 2775,
213 with the exception of special ``system'' directories that need to be
214 another mode.  The ownership of the directory should be consistent with
215 its mode---if a directory is mode 2775, it should be owned by the group
216 that needs write access to it, of course.  Use common sense in assigning
217 permissions and ownerships to directories, and make sure that what is
218 done is secure if it is ``non-standard''.
220 @item
221 Normal binaries should be mode 755 and owned by @code{root.root}.  If
222 there is a good reason to use a different mode or ownership, you may do
223 so, but you must try to be as consistent as possible with the rest of
224 the system.  If you need to use a different mode or ownership, please
225 discuss it with @code{imurdock@@debian.org}.
227 @item
228 Setuid binaries should normally be mode 4755 (not 4711!) and, of course,
229 owned by the appropriate user.
231 @item
232 Setgid binaries should normally be mode 2755 (not 2711!) and, of course,
233 owned by the appropriate group.
235 @item
236 Library files should generally be mode 644 and owned by
237 @code{root.root}; shared libraries should be mode 755.  If the package
238 requires different permissions or ownerships to function correctly, they
239 should be used instead.
241 @item
242 Manual pages should be mode 644 and owned by @code{root.root}.  The
243 @file{nroff} source must be installed.  You should @emph{not} install a
244 preformatted ``cat page'', and you should only use sections 1 to 9---see
245 the FSSTND for more details.  If no manual page is available for a
246 particular program, utility or function and this is reported as a bug on
247 debian-bugs, a symbolic link from the requested manual page to the
248 @file{undocumented}(7) manual page should be provided. This symbolic
249 link can be created from @file{debian.rules} like this:
251 @smallexample
252 ln -s ../man7/undocumented.7 debian-tmp/usr/man/man[1-9]/the_requested_manpage.[1-9]
253 @end smallexample
255 Do not close the bug report until a proper manpage is available.  You
256 may forward the complaint to the upstream maintainers, and mark the bug
257 as forwarded in the Debian bug tracking system.  The GNU Project do not
258 in general consider the lack of a manpage to be a bug, but we do - if
259 they tell you to go away leave the bug open anyway.
261 @item
262 Info documents should be mode 644, owned by @code{root.root}, and
263 compressed with @file{gzip -9} when installed.  The package must call
264 @file{install-info} to update the Info @file{dir} file.  This should
265 be done in the post-installation script (@file{postinst}), like this:
267 @smallexample
268 install-info --quiet /usr/info/foobar.info
269 @end smallexample
271 The entries should be removed by the pre-removal script (@file{prerm}),
272 like this:
274 @smallexample
275 install-info --quiet --remove /usr/info/foobar.info
276 @end smallexample
278 It is also a good idea to specify a section for the Info @file{dir}
279 entry.  This is done with the @file{--section} switch.  To determine
280 which section to use, you should use look at @file{/usr/info/dir} on
281 your system and choose the most relevant (or create a new section if
282 none of the current sections are relevant).
284 If @file{install-info} cannot find a description entry in the Info file
285 you will have to supply one.  See @file{install-info}(8) for details.
287 @item
288 If a package contains any shared libraries you will have to invoke
289 @file{ldconfig} in both the @file{postinst} and @file{prerm} scripts
290 to correctly update the library links.  See @file{ldconfig}(8) for
291 details.
293 @item
294 Any additional documentation that comes with the package can be
295 installed at the discretion of the package maintainer.  Text
296 documentation should be mode 644, owned by @code{root.root}, installed
297 to @file{/usr/doc}, and compressed with @file{gzip -9} unless it is small.
299 If a subdirectory of @file{/usr/doc} is warranted, please do create one.
300 Please do not install DVI, PostScript, or large textual documentation in
301 the same package; upload such documentation as a separate package
302 (installing its files in @file{/usr/doc}) so that it can be made
303 available with the distribution.  If a user has the need for the
304 documentation, they can easily get it from the archive, CD-ROM, etc.,
305 but it should not take up disk space on the machines of the user who do
306 not need or want it installed.
308 @item
309 Create a file named @file{/usr/doc/copyright/<@i{package}>} which gives
310 details of the authorship and copyright of the package.  If the package
311 is distributed under the GNU General Public Licence, the GNU Library
312 General Public Licence or the Regents of the University of California at
313 Berkeley (BSD) licence, please say so instead of including a copy of the
314 licence.  The files @file{BSD}, @file{GPL}, and @file{LGPL} will be
315 available in the @file{/usr/doc/copyright} directory for you to refer
316 to.  @file{/usr/doc/copyright/<@i{package}>} should not be compressed.
318 @emph{All} authorship and copyright information from the original source
319 package must be included in the @file{/usr/doc/copyright/<@i{package}>}
320 file.
322 @item
323 Any example files (for example, sample configuration files) should
324 be placed in the directory @file{/usr/doc/examples}.  If the file is
325 normally a hidden file, such as @file{.emacs}, then please call it
326 @file{dot.emacs}, to avoid confusion.  Again, you may create a
327 subdirectory if it is needed.
329 @item
330 All symbolic links should be relative, not absolute.  Absolute links,
331 in general, cause problems when a file system is not mounted where it
332 ``normally'' resides (for example, when mounted via NFS).  In certain
333 cases, however, relative links may also cause similar problems.  I
334 have generally made links into @file{/etc} and @file{/var} absolute
335 and all other links relative.  There may be other cases in which
336 absolute links are necessary.
338 Therefore, in the @file{Makefile} or @file{debian.rules}, do not do:
339 @smallexample
340 install: all
341          [...]
342          ln -fs /usr/bin/gcc /usr/bin/cc
343          [...]
344 @end smallexample
345 Instead, do:
346 @smallexample
347 ln -fs gcc /usr/bin/cc
348 @end smallexample
350 @smallexample
351 ( cd /usr/bin ; ln -fs gcc cc )
352 @end smallexample
354 Please do not create hard links in the manual page directories.  In
355 these cases, you should use relative symbolic links or files that
356 @file{.so} (roff for `source') others instead.
358 @item
359 All command scripts should have a @code{#!} line naming the shell to be
360 used to interpret them.
362 @item
363 In the case of Perl scripts this should be @code{#!/usr/bin/perl} or
364 sometimes @code{#!/bin/perl}, as follows: if the script is a critical
365 one that may be called when the @file{/usr} partition is unmounted or
366 broken it should use @file{/bin/perl}.  Otherwise (especially if the
367 script is not specifically targetted at Debian) it should use Perl's
368 standard location, @file{/usr/bin/perl}.
370 @item
371 Generally the following compilation parameters should be used:
373 @display
374    CC = gcc
375    CFLAGS = -O2 -g -Wall # sane warning options vary between programs
376    LDFLAGS = # none (or -N, if appropriate; see below)
377    install -s (or strip)
378 @end display
380 Note that all installed binaries should be stripped, either by using the
381 @code{-s} flag to @file{install}, or by calling @file{strip} on the
382 binaries after they have been copied into the @file{debian-tmp} but
383 before the tree is made into a package.
385 Make sure that you do not link with @code{-g}, as this makes a.out
386 compilers produce huge statically linked binaries.  The @code{-g} flag
387 is useful on compilation so that you have available a full set of
388 debugging symbols in your built source tree, in case anyone should file
389 a bug report involving (for example) a core dump.
391 @code{-N} should only be used on binaries that are very small (less than
392 8K with the @code{-N} option, roughly) and are not likely to have
393 multiple instances in memory.  Do not use @code{-N} on daemons, no
394 matter how small they are.
396 It is up to the package maintainer to decide what compilation options
397 are best for the package.  Certain binaries (such as
398 computationally-intensive programs) may function better with certain
399 flags (@code{-O3}, for example); feel free to use them.  Please use good
400 judgment here.  Don't add flags for the sake of adding flags; only add
401 flags if there is good reason to do so.
403 @item
404 Please make sure that you use only released versions of shared libraries
405 to build your packages; otherwise other users will not be able to run
406 your binaries properly.  Producing source packages that depend on
407 unreleased compilers is also usually a bad idea.
409 @item
410 Logfiles should usually be named @file{/var/log/<package>}, or
411 @file{/var/log/<package>.<something>} if you have several logfiles.  It
412 may be appropriate to create a directory.  Make sure that any logfiles
413 are rotated occasionally so that they don't grow indefinitely; the best
414 way to do this is to use @file{savelog} from the cron package in an
415 @file{/etc/cron.daily}, @file{/etc/cron.weekly} or
416 @file{/etc/cron.monthly} script.
419 @item
420 Please check with the base system maintainer (Ian Murdock) before using
421 users or groups other than @code{root} and others specified in this
422 document.
423 @end itemize
427 @node Source Package, Binary Package, Package Content, Top
428 @unnumbered Source Package
430    The source package should contain a file called @file{debian.rules}
431 which contains at least the following targets, to be invoked in the top
432 level directory:
434 @smallexample
435 build
436 binary
437 clean
438 @end smallexample
440 @file{debian.rules} should start with
442 @smallexample
443 #!/usr/bin/make -f
444 @end smallexample
446 @noindent and be executable.  It is a good idea to arrange for it not
447 to fail obscurely when invoked in the wrong directory, for example by
448 testing for the existence of a file in the source directory.
450 @itemize @bullet
451 @item
452 The @file{build} target should perform all non-interactive configuration
453 and compilation of the package.  If a package has an interactive
454 pre-build configuration routine, the source package should be built
455 @emph{after} this has taken place.
457    For some packages, notably ones where the same source tree is
458 compiled in different ways to produce two binary packages, the
459 @file{build} target does not make much sense.  For these packages it is
460 good enough to provide two (or more) targets (@file{build-a} and
461 @file{build-b} or whatever) for each of the ways of building the
462 package, and a @file{build} target that does nothing.  The @file{binary}
463 target will have to build the package in each of the possible ways and
464 make the binary package out of each.
466 @item
467 The @file{binary} target of @file{debian.rules} should be all that is
468 necessary for the user to build the binary package.  The binary package
469 should be created using @file{dpkg} and placed in the parent of the top
470 level directory.  The next section describes how to construct binary
471 packages from the @file{binary} target.
473 @item
474 The @file{clean} target should undo the effects of the @file{build}
475 target and the @file{binary} target, except that it should leave alone
476 any @file{../<@i{package}>-<@i{version}>.deb} file created by a run of
477 @file{binary}.
479 @item
480 Additional targets may exist in @file{debian.rules}.  We recommend using
481 @file{source} and @file{diff} targets to build the Debianised source
482 package and the Debianisation context diff, respectively.  These files
483 should be placed in @file{../foo-<@i{version}>.tar.gz} and
484 @file{../foo-<@i{version}>.diff.gz}.  The @file{install} target, for
485 installing into a running system direct from the Debianised source
486 tree, is no longer required.  The sample @file{debian.rules} provides
487 @file{source} and @file{diff} targets that should work with little or
488 no alteration, providing that the package-specific variables at the top
489 of the script have been properly defined.
491 @item
492 If you need to edit a @file{Makefile} where @file{configure} scripts
493 are used, you should edit the @file{.in} files rather than editing
494 the @file{Makefile} directly.  This allows the user to reconfigure
495 the package if necessary.  You should @emph{not} configure the package
496 and edit the generated @file{Makefile}!  This makes it impossible for
497 someone else to later reconfigure the package.
499 @item
500 Please document your changes to the source package so that future
501 package maintainers know what has been changed.  To do this, include
502 a description of your changes in the @file{debian.README} (which, as
503 described above, should already contain authorship and copyright
504 information!) and include relevant information such as your name,
505 electronic mail address, date, etc.  The @file{debian.README} file
506 should also document any `unusual' packages which must be installed for
507 this one to compile.
509 @item
510 If changes to the source code are made that are applicable to Linux
511 systems or systems in general please try to get them included in the
512 upstream version of the package by supplying the upstream authors with
513 the changes in whatever form they prefer.
515 If changes to the source code are made, please use a @file{define}.  If
516 they are changes required to compile or function under Linux in general,
517 use @file{LINUX}.  If it is a cosmetic or functional change, use
518 @file{DEBIAN}.
520 @item
521 Create the source package using @file{tar}, and use @file{gzip -9} to
522 compress it.  Source packages should be named in the form
523 <@i{package}>-<@i{version}>.tar.gz---for example,
524 @file{fileutils-3.9-3.tar.gz}.
526 NB, here @code{<@i{version}>} is the full Debian version number, in the
527 form @code{<@i{original_version}>-<@i{debian_revision}>} (see below),
528 but the tarfile should unpack into a directory named
529 @code{<@i{package}>-<@i{original_version}>} (again, see the section
530 below on version numbering).
532 @item
533 Create the unified context diff against the original package using
534 @file{diff -uNr}, and use @file{gzip -9} to compress it.  Diffs should
535 be named in the form <@i{package}>-<@i{version}>.diff.gz---for example,
536 @file{fileutils-3.9-3.diff.gz}.
537 @end itemize
539    Please note that the package and patch filenames do @emph{not} need
540 to fit in MS-DOS 8+3.  They will be made available under an alternative
541 8+3 name in the archive by the archive maintainer, using a symlink.
545 @node Binary Package, Control Files, Source Package, Top
546 @unnumbered Binary Package
548    The @file{binary} target of the source package @file{debian.rules}
549 file should do the following (see the sample @file{debian.rules}
550 for an implementation that you are free to modify and use in your own
551 packages, of course):
553 @itemize @bullet
554 @item
555 Create an empty directory in the top-level directory of the source
556 package (deleting it first, if necessary), and install the files
557 belonging to this package in that directory.  For example, the directory
558 could be called @file{debian-tmp} and would probably contain directories
559 @file{debian-tmp/usr/bin}, @file{debian-tmp/usr/lib}, etc.
560 (@file{debian-tmp} is the name traditionally used, and it is used in
561 the sample @file{debian.rules} file, so we will use that name in the
562 Guidelines.)
564 @item
565 Make sure that all the files under @file{debian-tmp} have the correct
566 ownerships and permissions (@pxref{Package Content}, for more information
567 about file locations, ownerships, and permissions.)
569 @item
570 Create a subdirectory of @file{debian-tmp} called @file{DEBIAN}.  This
571 directory contains the package control information, including at the
572 very least the master information file named @file{control}.  The next
573 section describes the semantics and syntax of the files required and
574 allowed here.
576 @item
577 Run @file{dpkg} to create the binary package, using something like
579 @smallexample
580 dpkg --build debian-tmp
581 @end smallexample
583 This will create a file called @file{debian-tmp.deb}, from the
584 @file{debian-tmp} directory.  You should rename this file to
585 @file{../<@i{package}>-<@i{version}>.deb} after it is built.
587 After the @file{binary} target has done all this, the
588 @file{<@i{package}>-<@i{version}>.deb} file in the parent directory is
589 the binary distribution.  This file may be distributed and installed on
590 any Debian Linux system with @file{dpkg} in the same manner and
591 using the same methods as all packages are installed to the system.
593 @item
594 If a single source package corresponds to several binary packages, there
595 should usually be a @file{debian.rules} file with a single @file{binary}
596 target that builds all the binary packages involved and move all packages
597 to the parent directory of that containing the source package.
599 In this case, you should choose binary package names which are meant to
600 make clear the close relationship between the binary packages and which
601 source package the binary packages came from (for example, the
602 @file{texinfo} source package build two binary packages: @file{texidoc}
603 and @file{texinfo}).  You should place the appropriate binary package
604 name in the @file{Package} field of the control file (not the source
605 package name), and you should consider whether the other binary packages
606 that come from the same source tree should be mentioned in the
607 @file{Depends}, @file{Recommends} or @file{Suggests} fields.  You
608 should put the source package name in the @file{Source} field.
610 You should retain the source package version numbering in the
611 @file{Version} field, if possible---the version number should be the
612 same for the Debianised source tree and all the binary packages
613 generated from it.  It is more important, though, that the version
614 numbers sort correctly.  See below for details of version numbers.
615 @end itemize
619 @node Control Files, Appendix, Binary Package, Top
620 @unnumbered Control Files
622    Each binary package contains, in addition to the files that comprise
623 the actual package, a set of text files that control how @file{dpkg}
624 installs, configures, upgrades, removes, etc. the package.  These files
625 are called @dfn{control files}.  When creating the package, the control
626 files should placed in a directory called @file{DEBIAN}, as described
627 earlier (@pxref{Binary Package}, for further information).
629 The control information files are:
631 @table @code
632 @item control
633 The master package control information file.
634 @item conffiles
635 A list of package configuration files.
636 @item preinst
637 The package pre-installation script.
638 @item postinst
639 The package post-installation script.
640 @item prerm
641 The package pre-removal script.
642 @item postrm
643 The package post-removal script.
644 @end table
646    Of these, only @file{control} is required.  The various installation
647 scripts, and the configuration files list, will only be used if they are
648 present.
650 @menu
651 * control::
652 * conffiles::
653 * Installation and Removal Scripts::
654 * Dependencies and Conflicts::
655 * Package Classification Fields::
656 @end menu
658 @node control, conffiles, Control Files, Control Files
659 @unnumberedsec control
661    The @file{control} file contains a number of fields.  Each field
662 begins with a field name, such as @file{Package} or @file{Version}
663 (case insensitive), followed by a colon and optionally some spaces or
664 tabs (a single space is conventional).  Then comes the body of the
665 field, which may be several lines long; each continuation line must
666 start with at least one space or tab.  (These are the same rules as
667 apply to RFC822 mail headers.)  Blank lines are not permitted in the
668 control file.
670    The required fields in the control file are the following:
672 @table @code
673 @item Package
674 The name of the package.
675 @item Description
676 The description of the package.  How to write an extended and more
677 usefull description field can be found in @pxref{How to write the Description control file field}.
678 @item Maintainer
679 The name and e-mail address of the maintainer of the package.
680 @item Version
681 The version number in the format
682 @code{<@i{original_version}>-<@i{debian_revision}>}.
683 @end table
685    Each field has a particular format and meaning for the package
686 installation tools.
688 The value of @file{Package} should be the name of the package.  Package
689 names must start with an alphanumeric, must be at least two characters,
690 and may contain only alphanumerics and the characters - + . (that is,
691 hyphen, plus, stop) @footnote{The characters @@ : = % _ (at, colon,
692 equals, percent and underscore) used to be legal and are still accepted
693 when found in a package file, but may not be used in new packages}.
694 They are sort of case sensitive - please try to get the case right first
695 time.
697    The @code{Maintainer} field should be in the form
699 @smallexample
700 Joe J. Bloggs <jbloggs@@foo.com>
701 @end smallexample
703 @noindent Note that this will not be useable as an email address if
704 the name given contains full stop characters, because of a silly
705 restriction in the Internet mail standards.  If you want to use this
706 as an email address in a program you should check for full stops and
707 change the string to the form @code{jbloggs@@foo.com (Joe J. Bloggs)}
708 if you find any.
710    The @code{Version} field should be the version number of the
711 package.  For most packages which are not written specifically for
712 Debian, this should be in the form
714 @smallexample
715 Version: <@i{original_version}>-<@i{debian_revision}>
716 @end smallexample
718 @noindent where @file{<@i{original_version}>} is the original package
719 version number in whatever form the original package uses and
720 @file{<@i{debian_revision}>} indicates which ``debianisation'' this is
721 (this should usually be a plain number or perhaps a two numbers
722 separated by a full stop, and should be incremented each time the
723 package is changed or updated).
725     Packages which are written specifically for Debian do not have a
726 @i{debian_revision}, and their version number should simply be
727 @i{version} (which should not contain any hyphens, to avoid
728 confusion).
730     There is an ordering imposed on version numbers, described in
731 @file{version-ordering.txt}.  This ordering is designed to `do the right
732 thing' in most circumstances; if your package has an version number in
733 an unusual format you may need to reformat it somewhat to get the
734 ordering right.  This is important because @file{dpkg} is (for example)
735 reluctant to downgrade packages.
737    The optional fields in the control file are the following:
739 @table @code
740 @item Depends
741 The names of prerequisite packages.
742 @item Recommends
743 The names of related, recommended packages.
744 @item Suggests
745 The names of related, optional packages.
746 @item Conflicts
747 The names of packages which conflict with this package.
748 @item Provides
749 The names of virtual packages which this package provides.
750 @item Priority
751 The `priority' of the package, as shown and used by @file{dselect}.
752 @item Section
753 The `section' of the package, as shown and used by @file{dselect}, and
754 used as a location for the package in the distribution.
755 @item Essential
756 A boolean field used by the base packages.
757 @item Pre-Depends
758 Used by base packages to ensure that (for example) shared libraries are
759 present before they are upgraded.  This feature is for expert use only.
760 @item Source
761 Gives the name of the source package when several binary packages are
762 generated from a single source tree.
763 @end table
765 @noindent See below for details of the semantics and syntax of these
766 fields.  Most packages will need at least a @code{Depends} field.
768    An example of a @file{control} file would be:
770 @smallexample
771 Package: smail
772 Version: 3.1.29.1-13
773 Maintainer: Ian Jackson <iwj10@@cus.cam.ac.uk>
774 Recommends: pine | mailx | elm | emacs | mail-user-agent
775 Suggests: metamail
776 Depends: cron, libc5
777 Conflicts: sendmail
778 Provides: mail-transport-agent
779 Description: Electronic mail transport system.
780  Smail is the recommended mail transport agent (MTA) for Debian.
782  An MTA is the innards of the mail system - it takes messages from
783  user-friendly mailer programs and arranges for them to be delivered
784  locally or passed on to other systems as required.
786  In order to make use of it you must have one or more user level
787  mailreader programs such as elm, pine, mailx or Emacs (which has Rmail
788  and VM as mailreaders) installed.  If you wish to send messages other
789  than just to other users of your system you must also have appropriate
790  networking support, in the form of IP or UUCP.
791 @end smallexample
793    In this case, @file{mail-user-agent} is a virtual package
794 representing any user mailer program; the actual package names
795 @file{pine} is quoted for the reasons described in
796 @file{dependency-ordering.txt}, and the others because older versions
797 of those packages do not have the appropriate @file{Provides} field.
799 @node conffiles, Installation and Removal Scripts, control, Control Files
800 @unnumberedsec conffiles
802    The contents of @file{conffiles} is simply a list of configuration
803 files in the package.  When installing the package, @file{dpkg} uses
804 an intelligent method to update these files.  This will ensure that
805 package-specific configuration files are not overwritten when a package
806 is upgraded, unless the user wishes the installation tools to do so.
808    Typically, files listed in conffiles are package-specific
809 configuration files, which (according to the Linux Filesystem Standard)
810 are stored in @file{/etc}.  For example, the @code{sendmail} package may
811 contain the file @file{/etc/sendmail.cf}, which we do not wish to
812 overwrite automatically when the user upgrades the sendmail package.
813 Only those files listed in @file{DEBIAN/conffiles} will be updated
814 intelligently when a package is upgraded; all other files in the package
815 will be overwritten by the upgrade process.
817    Configuration files which will be functional as shipped and will
818 probably need little or no local editing should simply be listed the
819 @file{conffiles} file; in this case you need read no further.
821    For packages whose configuration files will need modification on
822 most systems there are two sensible approaches.  Which one is chosen
823 depends on how hard the configuration problem is and how much time the
824 package maintainer has available.
826    One option is for you to ship a minimal `best-effort' file in
827 @file{/etc}, and list the file in @file{conffiles}.  This will mean that
828 the user will have to go and edit the file themselves to get the package
829 to work properly, of course.  The next time they upgrade the package, if
830 you haven't changed the file version, their old file will be left in
831 place.  If you have modified your version then the user will get a
832 prompt asking them which version of the file they want, theirs or yours.
833 They will then usually have to resolve the discrepancies manually.
835    The other option is to be preferred, if you can do it: do not put a
836 copy of the configuration file in the package at all.  Instead, you
837 check in the postinst whether the file exists, and if it doesn't you
838 prompt the user for the information you need to create a good one.  This
839 is obviously harder work.
841   You also have to remember that you will have to keep up with your
842 package's changes: if you discover a bug in the program which generates
843 the configuration file, or if the format of the file changes from one
844 version to the next, you will have to arrange for the postinst script to
845 do something sensible---usually this will mean editing the installed
846 configuration file to remove the problem or change the syntax.  You will
847 have to do this very carefully, since the user may have changed the
848 file, perhaps to fix the very problem that your script is trying to deal
849 with---you will have to detect these situations and deal with them
850 correctly.
852   If you do go down this route it's probably a good idea to make the
853 program that generates the configuration file(s) a separate program in
854 @file{/usr/sbin}, by convention called @i{package}@code{config}, and
855 then run that if appropriate from the post-installation script.  The
856 @i{package}@code{config} program should not unquestioningly overwrite an
857 existing configuration---if its mode of operation is geared towards
858 setting up a package for the first time (rather than any arbitrary
859 reconfiguration later) you should have it check whether the
860 configuration already exists, and require a @code{--force} flag to
861 overwrite it.
863    @file{conffiles} should almost certainly list all the files contained
864 in your package in the @file{/etc} directory.  There may also be other
865 files somewhere that the user is expected to edit, which should also be
866 included.  Note, however, that the FSSTND specifies that configuration
867 files must be in @file{/etc}.  No Debian package should contain
868 configuration files in @file{/usr/etc}, and all programs should refer to
869 configuration files in @file{/etc}.
871 @noindent For example, the TCP/IP package might use a conffiles which contains
873 @smallexample
874 /etc/init.d/netbase
875 /etc/gateways
876 /etc/protocols
877 /etc/services
878 /etc/hosts.allow
879 /etc/hosts.deny
880 /etc/rpc
881 @end smallexample
883 @noindent and so on; the files
885 @smallexample
886 /etc/hosts
887 /etc/inetd.conf
888 /etc/host.conf
889 /etc/networks
890 /etc/resolv.conf
891 @end smallexample
893 @noindent might be generated by an interactive configuration program,
894 and would then not be included in the package or listed in the
895 @file{conffiles}.
897 @node Installation and Removal Scripts, Dependencies and Conflicts, conffiles, Control Files
898 @unnumberedsec Installation and Removal Scripts
900    The scripts @file{preinst}, @file{postinst}, @file{prerm}, and
901 @file{postrm} are optional (Bash or Perl) scripts.  As the names
902 would indicate, if these scripts exist, they will be executed before
903 installing the package, after installation, before package removal,
904 and after removal, respectively.
906    They are given arguments which indicate the precise situation and
907 action being performed---see
908 @pxref{Maintainer script arguments and how dpkg does things} for
909 details of exactly when each of the scripts is invoked and what its
910 arguments are.  Extra arguments and situations may be added later, so
911 you should not test the number of arguments to your script to determine
912 the situation, and you should choose the sense of your `if it is this
913 then do this otherwise do that' tests carefully.
915    These scripts can be used to perform any site-specific package
916 configuration.
918    Because the scripts will be exectued by the dpkg front-end, it is
919 guaranteed that the scripts will be executed interactively.  User input
920 from the scripts should be read from standard input, not the user's
921 terminal.  Similarly, output should be sent to standard output.
923    If your maintainer scripts need to prompt for passwords and/or do
924 @i{full-screen} interaction should do these things to and from
925 @file{/dev/tty}, since @file{dpkg} will at some point redirect scripts'
926 standard input and output so that it can log the installation process.
927 Likewise, because these scripts may be executed with standard output
928 redirected into a pipe for logging purposes, Perl scripts should set
929 unbuffered output by setting @code{$|=1} so that the output is printed
930 immediately rather than being buffered.
932    The scripts must be idempotent, and they must clean up after
933 themselves properly.  Ie, they must do the right thing if run multiple
934 times, even if previous runs failed halfway through.  This is so that if
935 any errors occur, or if the @file{dpkg} run is interrupted, the user can
936 recover by rerunning @file{dpkg}, and/or by upgrading to a new version
937 and then rerunning the failed operation.
939    These scripts should avoid producing output which it is unnecessary
940 for the user to see and should rely on @file{dpkg} to stave off boredom
941 on the part of a user installing many packages.  This means, amongst
942 other things, using the @file{--quiet} option on @file{install-info}.
944    Packages should try to minimise the amount of prompting they need to
945 do, and they should ensure that the user will only every be asked each
946 question once.  This means that packages should try to use appropriate
947 shared configuration files (such as @file{/etc/papersize} and
948 @file{/etc/news/server}), rather than each prompting for their own list
949 of required pieces of information.
951    It also means that an upgrade should not ask the same questions
952 again, unless the user has used @code{dpkg --purge} to remove the
953 package's configuration.  The answers to configuration questions should
954 be stored in an appropriate place in @file{/etc} so that the user can
955 modify them, and how this has been done should be documented.
957    If a package has a vitally important piece of information to pass to
958 the user (such as "don't run me as I am, you must edit the following
959 configuration files first or you risk your system emitting
960 badly-formatted messages"), it should display this in the
961 @file{postinst} script and prompt the user to hit Return to acknowledge
962 the message.  Copyright messages do not count as vitally important (they
963 belong in @file{/usr/doc/copyright}; neither do instructions on how to
964 use a program (these should be in on line documentation, where all the
965 users can see them).
967    They should return a zero exit status for success, or a nonzero one
968 for failure.  Note that if a script is a @code{#!/bin/sh} script it
969 should probably start with @code{set -e}, to avoid continuing after
970 errors---see @file{bash}(1) for details.  Perl scripts should check for
971 errors when making calls such as @code{open}, @code{print},
972 @code{close}, @code{rename} and @code{system}.
974    If these scripts exist they should be left in the @file{DEBIAN}
975 directory with execute permission enabled and should contain an
976 appropriate @code{#!} line, such as @code{#!/bin/bash} for a
977 @code{bash} script or @code{#!/bin/perl} for a Perl script (see
978 above).
980 @node Dependencies and Conflicts, Package Classification Fields, Installation and Removal Scripts, Control Files
981 @unnumberedsec Conflicts, Depends, Suggests, Recommends and Provides
983    The @file{Depends} field lists packages that are required for this
984 package to provide a significant amount of functionality.  The package
985 maintenance software will not allow a package to be installed without
986 also installing packages listed in its @code{Depends} field, and will
987 run the @code{postinst} scripts of packages listed in @code{Depends}
988 fields before those of the packages which depend on them, and run the
989 @code{prerm} scripts before.
991    Packages containing dynamically-linked executable binaries (this
992 includes almost all C programs) should include a @file{Depends} field
993 which mentions the shared C library required for the program to run.
994 For a.out binaries linked against @file{libc.so.4} the relevant package
995 name is @file{libc} (for the a.out stable 0.93 tree) or @file{libc4}
996 (for the unstable development 1.1 tree); for ELF binaries linked against
997 @file{libc.so.5} the relevant package name is @file{libc5}.
999    The @code{Recommends} field lists packages that would be found
1000 together with this one in all but unusual installations.  The user-level
1001 package maintenance program @file{dselect} will warn the user if they
1002 select a package without those listed in its @code{Recommends} field.
1003 Note that @code{Recommends} fields do not currently have any implications
1004 for the order in which the maintainer scripts are run.
1006    The @code{Suggests} field lists packages that are related to this one
1007 and can perhaps enhance its usefulness, but without which installing
1008 this package is perfectly reasonable.  The package maintenance software
1009 will not moan at the user for not selecting @code{Suggests} related
1010 packages, but may use the information in the @code{Suggests} field to
1011 assist the user during package selection.
1013    The syntax of @code{Depends}, @code{Recommends} and @code{Suggests}
1014 is a list of groups of alternative packages.  Each group is a list of
1015 packages separated by vertical bar (or `pipe') symbols, @code{|}.  The
1016 groups are separated by commas.  Each package is a package name
1017 optionally followed by a version number specification in parentheses.  A
1018 version number may start with a @code{>=}, in which case that version or
1019 any later will match, or @code{<=} for that version or any earlier
1020 version. A version number starting with a @code{>>} or @code{<<} will
1021 respectively match any later or earlier version. If a version number or
1022 a version number starting with @code{=} is specified an exact match is
1023 required. Commas are to be read as `AND', and pipes as `OR', with pipes
1024 binding more tightly.
1026    Versions of dpkg before 1.0.9 used @code{<} and @code{>} for
1027 @code{<=} and @code{>=} (these are still supported for backward
1028 compatibility), and did not support @code{<<} and @code{>>}.
1030    The @code{Conflicts} field lists packages that conflict with this
1031 one, for example by containing files with the same names (an example
1032 would be Smail vs. Sendmail).  The package maintenance software will not
1033 allow conflicting packages to be installed.  Two conflicting packages
1034 should each include a @code{Conflicts} line mentioning the other.
1036    The syntax of @code{Conflicts} is a list of package names (with
1037 optional version numbers), separated by commas (and optional
1038 whitespace).  In the @code{Conflicts} field the comma should be read as
1039 `OR'.
1041    The @code{Provides} field lists the names of any `virtual packages'
1042 of which this packages is to be considered an instantiation.  Virtual
1043 packages are used to allow packages to refer to a service they require
1044 (such as the availability of @file{/usr/sbin/sendmail}) without having
1045 to know the names of all the relevant packages.  The virtual package
1046 names defined in @code{Provides} fields may be used in other packages'
1047 @code{Depends}, @code{Recommends}, @code{Suggests} and @code{Conflicts}
1048 fields.  For more information about how to use virtual packages and
1049 which virtual package names to use read @pxref{Virtual dependencies} and
1050 @file{doc/package-developer/virtual-package-names-list.text}.
1052    The syntax of @code{Provides} is a list of package names separated by
1053 commas (and optional whitespace).
1055 @node Package Classification Fields,  , Dependencies and Conflicts, Control Files
1056 @unnumberedsec Priority, Section and Essential
1058    The @code{Priority} and @code{Section} fields are used by
1059 @file{dselect} when displaying the list of packages to the user.  There
1060 is no need to put them into a package, since these are usually set by
1061 the distribution maintainers in the @file{Packages} file.
1063    However, if a user installs a package which is not part of the
1064 standard distribution, or without downloading and updating from a new
1065 @file{Packages} file, the information about the priority and section of
1066 a package will be absent, and the @file{dselect} package listing will
1067 have the package listed under `unclassified'.  It is permissible for a
1068 package to include @code{Section} or @code{Priority} fields to improve
1069 this; however, if you do this you should make sure you keep the
1070 information up to date so that users are not shown conflicting
1071 information.  The @code{Section} field can also be used by the
1072 distribution maintainers as a suggestion about which section you think
1073 is most appropriate for your package.
1075   The values for the @code{Section} and @code{Priority} fields should be
1076 determined by the distribution maintainers; if you don't know what to
1077 put in them just leave them out.  You can add them later, if you like,
1078 but remember that you'll then have to reissue your package if the
1079 distribution maintainers change the classification of your package.
1081   The @code{Essential} field should only appear in packages in the
1082 installation's base system.  If it is set to @code{yes} then @file{dpkg}
1083 will not remove the package even if asked to, and will make certain
1084 minor modifications to its installation procedures.  The only other
1085 legal value is @code{no}, which is equivalent to the absence of the
1086 field.
1088 @appendix
1089 @node Appendix,  , Control Files, Top
1090 @unnumbered Appendix
1091 @comment  node-name,  next,  previous,  up
1092 @menu
1093 * configuration files -- /etc/skel vs /usr/doc/examples::
1094 * How to write the Description control file field::
1095 * Configuration of init::
1096 * Maintainer script arguments and how dpkg does things::
1097 * Mail processing packages::
1098 * Virtual dependencies::
1099 @end menu
1101 @node configuration files -- /etc/skel vs /usr/doc/examples, How to write the Description control file field, Appendix, Appendix
1102 @comment  node-name,  next,  previous,  up
1103 @unnumberedsec configuration files -- /etc/skel vs /usr/doc/examples
1105 There seems to be a certain amount of confusion about @file{/etc/skel}
1106 and @file{/usr/doc/examples}. The most important thing to remember is
1107 the following:
1109 Files in @file{/etc/skel} will @emph{automatically} be copied into
1110 @emph{new} user accounts by @file{adduser}.  They should not
1111 be referenced there by any program. Files in @file{/usr/doc/examples}
1112 should not be installed automatically.
1114 Therefore, if the program in question need a dotfile to exist in advance
1115 in @file{$HOME} to work @emph{sensibly} that dotfile should be installed
1116 in @file{/etc/skel} (and listed in conffiles; @pxref{conffiles}).
1118 However, programs that require dotfiles in order to operate sensibly
1119 (dotfiles that they do not create themselves automatically, that is) are
1120 a bad thing, and that programs should be configured by the Debian
1121 default installation as close to normal as possible.
1123 Therefore, if a program in a Debian package needs to be configured in
1124 some way in order to operate sensibly that configuration should be done
1125 in a site-wide global configuration file elsewhere in @file{/etc} (and
1126 that file should be listed in conffiles).  Only if the program doesn't
1127 support a site-wide default configuration should a default per-user file
1128 be placed in @file{/etc/skel} (and listed in conffiles;
1129 @pxref{conffiles}).
1131 The idea is as follows:
1133 The sysadmin should ideally not have to do any configuration other than
1134 that done @w{(semi-)}automatically by the postinst script.
1136 However, if they wish to change their configuration themselves
1137 (because the configuration they want is beyond the scope of the
1138 autoconfiguration, or because the autoconfiguration doesn't exist yet,
1139 or because they just want to do it themselves for any reason) then
1140 @file{/usr/doc/examples} exists as @emph{documentation} for their benefit.
1142 The only time these files should be read are by the sysadmin using their
1143 favourite editor or pager, or @emph{perhaps} (in very complex packages)
1144 by the postinst as a template to build on or modify.
1146 @file{/etc/skel} is part of the @emph{implementation} of this
1147 configuration.  It contains the files that are copied into new user
1148 accounts.  It should probably be as empty as we can make it.
1150 Examples:
1151 @table @code
1152 @item .profile
1153 @file{/etc/skel} should not contain a @file{.profile} file.  Anything
1154 that needs to be done there should be done in @file{/etc/profile}.
1155 Anything that should not go in @file{/etc/profile} (users can't avoid
1156 running @file{/etc/profile}) probably should not be in the default
1157 configuration.  bash has generally good default behaviour.
1159 @item .bash_logout
1160 Likewise, bash functions perfectly happily without a
1161 @file{.bash_logout}, so none should be provided, since anything in it is
1162 a deviation from the sensible default behaviour.
1164 @item .xsession
1165 @file{/etc/skel} should not contain a @file{.xsession}.  @file{xdm}'s
1166 system-wide startup file @file{/usr/lib/X11/xdm/Xsession} supports a
1167 system-wide default user configuration (which should probably be
1168 @file{/etc/X11/Xsession} or some such) which may be overridden by
1169 @file{.xsession} in the user's home directory.  Therefore there is no
1170 need for a @file{.xsession} to be installed by default and none should
1171 be provided.
1173 Instead, a sensible @file{/etc/X11/Xsession} should be provided, and if
1174 desired this can be used as a template by users who wish to install
1175 their own configuration, or alternatively a more comprehensive example
1176 with much commented-out interesting stuff could be put in
1177 @file{/usr/doc/examples}.
1179 If the sysadmin wishes to change the system-wide default they should
1180 probably do this by editing @file{/etc/X11/Xsession} rather than
1181 creating the file in @file{/etc/skel}, because the former will affect
1182 all user accounts that haven't explicitly overridden things by creating
1183 their own file while the latter will only affect new accounts.
1185 All the configuration necessary for a program to function should be
1186 provided.  Therefore sysadmins will not need to go through
1187 @file{/usr/doc/examples} while editing configuration files in
1188 @file{/etc} except in extreme cases (like INN) where the configuration
1189 was too difficult to do automatically.
1191 @item site-wide defaults
1192 Site-wide defaults should not go in @file{/etc/skel}.  In the case of
1193 twm, for example, the system-wide default should be in
1194 @file{/etc/X11/system.twmrc}.  (The default location for this in X11R5,
1195 btw, is in @file{/usr/lib/X11} somewhere, but we can't put it on
1196 @file{/usr} because of CDROM distributions, etc - hence the FSSTND's
1197 mandate to put configuration files in @file{/etc}.)
1199 @item .twmrc
1200 There should be no @file{.twmrc} file in @file{/etc/skel}.  You can have
1201 one in @file{/usr/doc/examples} if you @emph{like}, but why bother if
1202 @file{system.twmrc} is a good example (and indeed is the one the user is
1203 using before they create their own)?
1205 @item m4
1206 @file{/usr/doc/examples} isn't mainly for example @emph{configuration
1207 files}.  It's for any kind of example file distributed with a package.
1208 For example, GNU m4 comes with a whole pile of example m4 macro scripts,
1209 which is exactly what @file{/usr/doc/examples} is for.
1210 @end table
1212 Summary
1214 Files that should be installed in new user accounts should be in
1215 @file{/etc/skel}, as that will ensure that they @emph{are} installed in
1216 new user accounts!  However, we should try to avoid the need for this.
1218 @file{/usr/doc/examples} is just what it says: documentation in the form
1219 of examples.  If a sysadmin is required to go and read these files for
1220 their system to work they should be told about it.  For example, here
1221 is what the Smail postinst script says right at the start:
1223 @smallexample
1224 I can do certain kinds of automatic configuration of your
1225 mail system, by asking you a number of questions.  Later you
1226 may to confirm and/or correct your answers.  In any case,
1227 comprehensive information on configuring Smail is in
1228 smail(5) and in /usr/doc/examples/smail and
1229 /usr/doc/smail-admin-guide.
1230 @end smallexample
1232 @node How to write the Description control file field, Configuration of init, configuration files -- /etc/skel vs /usr/doc/examples, Appendix
1233 @unnumberedsec How to write the Description control file field
1235 The format of the @code{Description} field is as follows:
1237 @smallexample
1238 Description: <single line synopsis>
1239  <extended description over several lines>
1240 @end smallexample
1242 Every package should have an extended description.
1244 The extended description has several kinds of line:
1246 @itemize @bullet
1247 @item
1248 Those starting with a single space are part of a paragraph.  Successive
1249 lines of this form will be word-wrapped when displayed.  The leading
1250 space will usually be stripped off.
1252 @item
1253 Those starting with two or more spaces.  These will be displayed
1254 verbatim.  If the display cannot be panned horizontally the displaying
1255 program will linewrap them `hard' (ie, without taking account of word
1256 breaks).  If it can they will be allowed to trail off to the right.
1257 None, one or two initial spaces may be deleted, but the number of spaces
1258 deleted from each line will be the same (so that you can have indenting
1259 work correctly, for example).
1261 @item
1262 Those containing a single space followed by a single full stop
1263 character.  These are rendered as blank lines.  This is the @emph{only}
1264 way to get a blank line - see below.
1266 @item
1267 Those containing a space, a full stop and some more characters.  These
1268 are for future expansion.  @emph{Do not} use them.
1269 @end itemize
1271 IMPORTANT and not so important TIPS:
1273 @itemize @bullet
1274 @item
1275 @emph{Always} start extended description lines with at least @emph{one}
1276 whitespace character.  Fields in the control file and in the Packages
1277 file are separated by field names starting in the first column, just as
1278 in RFC822.  Forgetting the whitespace will cause @file{dpkg-deb}
1279 (>=0.93.23) to produce a syntax error when trying to build the package.
1280 If you force it to build anyway @file{dpkg} will refuse to install the
1281 resulting mess.
1283 @item
1284 @emph{Do not} include any completely @emph{empty} lines. These separate
1285 different records in the Packages file, and are forbidden in control
1286 files.  See the previous paragraph for what happens if you get this
1287 wrong.
1289 @item
1290 The single line synopsis should be kept brief - certainly under 80
1291 characters.  @file{dselect} displays the @emph{first 49} characters if
1292 you're using an 80-column terminal.
1294 @item
1295 Do not include the package name in the synopsis line.  The display
1296 software knows how to display this already, and you do not need to
1297 state it.  Remember that in many situations the user may only see the
1298 synopsis line - make it as informative as you can.
1300 @item
1301 The extended description should describe what the package does and how
1302 it relates to the rest of the system (in terms of, for example, which
1303 subsystem it is which part of).
1305 The blurb that comes with a program in its announcements and/or
1306 @file{README} files is rarely suitable for use in a description field.
1307 It is usually aimed at people who are already in the community where the
1308 package is used.  The @code{Description} field needs to make sense to
1309 anyone, even people who have no idea about any of the things the package
1310 deals with.
1312 @item
1313 Put important information first, both in the synopis and extended
1314 description.  Sometimes only the first part of the synopsis or of the
1315 description will be displayed.  You can assume that there will usually
1316 be a way to see the whole extended description.
1318 @item
1319 You may include information about dependencies and so forth in the
1320 extended description, if you wish.
1322 @item
1323 Do not use tab characters.  Their effect is not predictable.
1324 @end itemize
1326 Example control file for Smail:
1328 @smallexample
1329 Package: smail
1330 Version: 3.1.29.1-13
1331 Maintainer: Ian Jackson <iwj10@@cus.cam.ac.uk>
1332 Recommends: pine | mailx | elm | emacs | mail-user-agent
1333 Suggests: metamail
1334 Depends: cron, libc5
1335 Conflicts: sendmail
1336 Provides: mail-transport-agent
1337 Description: Electronic mail transport system.
1338  Smail is the recommended mail transport agent (MTA) for Debian.
1340  An MTA is the innards of the mail system - it takes messages from
1341  user-friendly mailer programs and arranges for them to be delivered
1342  locally or passed on to other systems as required.
1344  In order to make use of it you must have one or more user level
1345  mailreader programs such as elm, pine, mailx or Emacs (which has Rmail
1346  and VM as mailreaders) installed.  If you wish to send messages other
1347  than just to other users of your system you must also have appropriate
1348  networking support, in the form of IP or UUCP.
1349 @end smallexample
1351 @node Configuration of init, Maintainer script arguments and how dpkg does things, How to write the Description control file field, Appendix
1352 @unnumberedsec Configuration of init
1354 The @file{/etc/init.d} directory contains the scripts executed by
1355 init(8) when init state (or "runlevel") is changed.  This includes the
1356 boot process, when the multi-user state begins.  Several of these
1357 scripts are included with init and are intended to be executed
1358 @emph{once}, usually at boot time.  An example is
1359 @file{/etc/init.d/boot}, which is executed at boot time to check and
1360 mount file systems, activate swap, load kernel modules, etc.--everything
1361 that needs to be done before the multi-user state begins.
1362 @file{/etc/init.d} also contains the scripts that are executed when
1363 entering runlevel 0 (halt), runlevel 1 (single-user) and runlevel 6
1364 (reboot).
1366 Packages can (and should) place scripts in @file{/etc/init.d} to start
1367 or stop services at boot time or during a change of runlevel.  These
1368 scripts should be named @file{/etc/init.d/}<package>, and they should
1369 accept one of two arguments: "start", which starts the services, or
1370 "stop", which stops the services.  These scripts should ensure that they
1371 will behave sensibly if invoked with "start" when the service is already
1372 running, or with "stop" when it isn't---the best way to achieve this is
1373 often to use @file{start-stop-daemon}.
1375 This script should not fail obscurely when the configuration files
1376 remain but the package has been removed, as the default in dpkg is to
1377 leave configuration files on the system after the package has been
1378 removed.  Only when it is executed with the `--purge' option will dpkg
1379 remove configuration files.  Therefore, you should include a `test'
1380 statement at the top of the script, like this:
1382 @smallexample
1383 test -f <program-executed-later-in-script> || exit 0
1384 @end smallexample
1386 These scripts should be referenced, when appropriate, by symbolic links
1387 in the @file{/etc/rc?.d} directories, as below.
1389 When changing runlevels, init looks in the directory @file{/etc/rc<n>.d}
1390 for the scripts it should execute, where <n> is the runlevel that is
1391 being changed to.  Please note that the "scripts" in @file{/etc/rc?.d}
1392 are not actually scripts; they are symbolic links, referencing actual
1393 scripts in @file{/etc/init.d}.  For simplicity, we refer to them as
1394 "scripts".
1396 First, the scripts prefixed with a "K" are executed, followed by the
1397 scripts prefixed with an "S".  The "K" scripts are responsible for
1398 killing certain services and the "S" scripts for starting certain
1399 services upon @emph{entering} the runlevel.  For example, if we are
1400 changing from runlevel 2 to runlevel 3, init will first execute all of
1401 the "K" prefixed scripts it finds in @file{/etc/rc3.d} (to kill
1402 services), and then all of the "S" prefixed scripts it finds in
1403 @file{/etc/rc3.d} (to start services).  The "K" scripts will execute the
1404 file it references with an argument of "stop", and the "S" scripts will
1405 execute this file with an argument of "start".
1407 After the "K" or "S" prefix, there should be a number specified, and
1408 this number should be between 00 and 99.  The number determines the
1409 order in which the scripts are run.  For example, the "K20" scripts will
1410 be executed before the "K30" scripts.  You can use this number to make
1411 sure that a certain service is started before another.  For example, on
1412 some machines, the program @file{setserial} may need to properly set an
1413 IRQ before the @file{ppp} program uses a modem to connect to a network.
1414 In this case, the script that runs @file{setserial} should have a lower
1415 number than the script that starts @file{ppp} so that it runs first:
1417 @smallexample
1418 @file{/etc/rc2.d/S10setserial}
1419 @file{/etc/rc2.d/S20ppp}
1420 @end smallexample
1422 If it does not matter when or in which order the script is run, use the
1423 number "20".  If it does, then you should talk to the maintainer of the
1424 @code{sysvinit} package or post to @code{debian-devel}, and they will
1425 help you choose a number.
1427 In Debian Linux, we try to ship our software in as much of a
1428 "default" state as possible.  Therefore, unless there is a good reason
1429 for doing differently, we ask that you start the services in each of the
1430 multi-user state runlevels (2, 3, 4, and 5) and stop them in the halt
1431 runlevel (0), the single-user runlevel (1) and the reboot runlevel (6).
1433 The system administrator will have the opportunity to customize
1434 runlevels by simply adding, moving, or removing the symbolic links in
1435 @file{/etc/rc?.d}.  This is why we default to running everything in the
1436 multi-user state--a reasonable default--and the administrator can easily
1437 customize init to be as complex and sophisticated as he or she wants it
1438 to be beyond this.
1440 We provide a script, @file{update-rc.d}, to make it easier for package
1441 maintainers to arrange for the proper creation and removal of
1442 @file{/etc/rc?.d} symbolic links from their postinst and postrm scripts.
1443 You should use this script to make changes to @file{/etc/rc?.d} and
1444 @emph{never} include any @file{/etc/rc.?.d} symbolic links in the actual
1445 archive.
1447 @itemize @bullet
1448 @item
1449 In the postinst script, you need only do the following to setup
1450 @file{/etc/rc?.d}.  You should redirect standard output to
1451 @file{/dev/null}, as @file{update-rc.d} produces insignificant output:
1453 @smallexample
1454 update-rc.d <package> default >/dev/null
1455 @end smallexample
1457 where <package> is the name of the file as it appears in
1458 @file{/etc/init.d}.  It will use the default number of "20", as
1459 mentioned above.  If you need to use a different number, you can specify
1460 it after "default":
1462 @smallexample
1463 update-rc.d <package> default 30 >/dev/null
1464 @end smallexample
1466 @item
1467 In the postrm script, you need only do the following @emph{if and only
1468 if} it is called with the `purge' argument:
1470 @smallexample
1471 if [ purge = "$1" ]
1472 then
1473   update-rc.d <package> remove >/dev/null
1475 @end smallexample
1476 @end itemize
1478 @unnumberedsubsec Important Note:
1480 @emph{Do not} include the @file{/etc/rc?.d/*} symbolic links in the
1481 archive!  @emph{This will cause problems!}  You should create them with
1482 update-rc.d, as above.
1484 @emph{Do not} include the @file{/etc/rc?.d/*} symbolic links in
1485 conffiles!  @emph{This will cause problems!}  @emph{Do}, however,
1486 include the @file{/etc/init.d} scripts in conffiles.
1489 @unnumberedsubsec Example:
1491 The process accounting package wants to make sure that process
1492 accounting is started at boot time and that it is stopped before the
1493 system is halted, enters the single-user state, or is rebooted (so
1494 that the @file{/var} file system can be properly unmounted).  It puts
1495 a script that does this in @file{/etc/init.d}, naming the script
1496 appropriately "acct".  This script accepts one of two arguments:
1497 either "start", which starts process accounting, or "stop", which
1498 stops it.  To ensure that it does not fail obscurely when the
1499 configuration files remain but the package has been removed, we
1500 include a `test' statement at the top of the script:
1502 @smallexample
1503 #! /bin/sh
1505 # Start process accounting.
1506 . /etc/init.d/functions
1507 test -f /usr/sbin/accton || exit 0
1508 case "$1" in
1509   start)
1510     echo "Starting process accounting"
1511     /usr/sbin/accton /var/account/pacct
1512     ;;
1513   stop)
1514     echo "Stopping process accounting"
1515     /usr/sbin/accton
1516     ;;
1517   *)
1518     echo "Usage: /etc/init.d/acct @{start|stop@}"
1519     exit 1
1520 esac
1521 exit 0
1522 @end smallexample
1524 You may find a skeletal script from which to base your @file{/etc/init.d}
1525 scripts in @file{/etc/init.d/skeleton}.
1527 We want to stop then (re)start process accounting when entering a
1528 multi-user state--runlevels 2, 3, 4, and 5--and we want to stop it when
1529 leaving such a state--runlevels 0 (halt), 1 (single) and 6 (reboot).
1530 These are good defaults, and we accomplish this by including the
1531 following in the postinst:
1533 @smallexample
1534 update-rc.d acct default >/dev/null
1535 @end smallexample
1537 When the user removes the acct packages with the `--purge' option, we
1538 want to make sure the @file{/etc/rc?.d} symbolic links are properly
1539 removed, so we include the following in the postrm:
1541 @smallexample
1542 update-rc.d acct remove >/dev/null
1543 @end smallexample
1545 Otherwise, the @file{/etc/rc?.d} symbolic links will remain on the system
1546 along with @file{/etc/init.d/acct} script.
1548 @node Maintainer script arguments and how dpkg does things, Mail processing packages, Configuration of init, Appendix
1549 @unnumberedsec Maintainer script arguments and how dpkg does things
1551 This appendix describes exactly how maintainer scripts are called, with
1552 what arguments, in what order, and what @file{dpkg} does in between.
1554 In all cases version numbers are <version>-<revision>, if the package
1555 has both, or just <version>.  @code{upgrade} is used even when the new
1556 version number looks lower than the old.  If there is no appropriate
1557 version then the argument may be the empty string (or, in versions of
1558 dpkg before 1.2.1, @code{<unknown>}).
1561 @unnumberedsubsec Summary
1563 @smallexample
1564 <new preinst> install
1565 <new preinst> install <old-version>
1566 <new preinst> upgrade <old-version>
1567 <old preinst> abort-upgrade <new-version>
1569 <postinst> configure <most-recently-configured-version>
1570 <old postinst> abort-upgrade <new version>
1571 <conflictor's postinst> abort-remove in-favour <package> <new version>
1572 <deconfigured's postinst> abort-deconfigure \
1573               in-favour <package-being-installed-but-failed> <version>
1574               removing <conflicting-package> <version>
1576 <prerm> remove
1577 <old prerm> upgrade <new version>
1578 <new prerm> failed-upgrade <old-vppersion>
1579 <conflictor's prerm> remove in-favour <package> <new version>
1580 <deconfigured's prerm> deconfigure \
1581               in-favour <package-being-installed> <version> \
1582               removing <conflicting-package> <version>
1584 <postrm> remove
1585 <postrm> purge
1586 <old postrm> upgrade <new-version>
1587 <new postrm> failed-upgrade <old-version>
1588 <new postrm> abort-install
1589 <new postrm> abort-install <old-version>
1590 <new postrm> abort-upgrade <old-version>
1591 <disappearer's postrm> disappear <overwriter> <new version>
1592 @end smallexample
1595 @unnumberedsubsec Details of unpack phase of installation or upgrade
1597 The procedure on installation/upgrade/overwrite/disappear (ie, when
1598 running @code{dpkg --unpack}, or the unpack stage of @code{dpkg
1599 --install}) is as follows.  In each case if an error occurs the actions
1600 in are general run backwards - this means that the maintainer scripts
1601 are run with different arguments in reverse order.  These are the `error
1602 unwind' calls listed below.
1604 @enumerate
1605 @item
1606 @noindent @enumerate a
1607 @item
1608 If a version the package is already
1609 installed, call
1610 @smallexample
1611 <old prerm> upgrade <new version>
1612 @end smallexample
1613 @item
1614 If this gives an error (ie, a non-zero exit status), dpkg will
1615 attempt instead:
1616 @smallexample
1617 <new prerm> failed-upgrade <old-version>
1618 @end smallexample
1619 @noindent error unwind, for both the above cases:
1620 @smallexample
1621 <old postinst> abort-upgrade <new version>
1622 @end smallexample
1623 @end enumerate
1624 @item
1625 If a `conflicting' package is being removed at the same time:
1626 @noindent @enumerate a
1627 @item
1628 If any packages depended on that conflicting package and
1629 @code{--auto-deconfigure} is specified, call, for each such package:
1630 @smallexample
1631 <deconfigured's prerm> deconfigure \
1632  in-favour <package-being-installed> <version> \
1633  removing <conflicting-package> <version>
1634 @end smallexample
1635 @noindent error unwind:
1636 @smallexample
1637 <deconfigured's postinst> abort-deconfigure \
1638  in-favour <package-being-installed-but-failed> <version>
1639  removing <conflicting-package> <version>
1640 @end smallexample
1641 The deconfigured packages are marked as requiring configuration, so
1642 that if --install is used they will be configured again if possible.
1643 @item
1644 To prepare for removal of the conflicting package, call:
1645 @smallexample
1646 <conflictor's prerm> remove in-favour <package> <new version>
1647 @end smallexample
1648 @noindent error unwind:
1649 @smallexample
1650 <conflictor's postinst> abort-remove in-favour <package> <new version>
1651 @end smallexample
1652 @end enumerate
1653 @item
1654 @noindent @enumerate a
1655 @item
1656 If the package is being upgraded, call
1657 @smallexample
1658 <new preinst> upgrade <old-version>
1659 @end smallexample
1660 @item
1661 otherwise, if the package had some configuration files from a previous
1662 version installed (ie, it is in the conffiles-only state):
1663 @smallexample
1664 <new preinst> install <old-version>
1665 @end smallexample
1666 @item
1667 otherwise (ie, the package was completely purged):
1668 @smallexample
1669 <new preinst> install
1670 @end smallexample
1671 @noindent error unwind versions, respectively:
1672 @smallexample
1673 <new postrm> abort-upgrade <old-version>
1674 <new postrm> abort-install <old-version>
1675 <new postrm> abort-install
1676 @end smallexample
1677 @end enumerate
1678 @item
1679 The new package's files are unpacked, overwriting any that may be on the
1680 system already, for example any from the old package or from another
1681 package (backups of the old files are left around, and if anything goes
1682 wrong dpkg will attempt to put them back as part of the error unwind).
1683 @item
1684 @noindent @enumerate a
1685 @item
1686 If the package is being upgraded, call
1687 @smallexample
1688 <old postrm> upgrade <new-version>
1689 @end smallexample
1690 @item
1691 If this fails, dpkg will attempt:
1692 @smallexample
1693 <new postrm> failed-upgrade <old-version>
1694 @end smallexample
1695 @noindent error unwind, for both cases:
1696 @smallexample
1697 <old preinst> abort-upgrade <new-version>
1698 @end smallexample
1699 @end enumerate
1700 This is the point of no return - if dpkg gets this far, it won't back
1701 off past this point if an error occurs.  This will leave the package in
1702 a fairly bad state, which will require a successful reinstallation to
1703 clear up, but it's when dpkg starts doing things that are irreversible.
1704 @item
1705 Any files which were in the old version of the package but not in the
1706 new are removed.
1707 @item
1708 The new file list replaces the old.
1709 @item
1710 The new maintainer scripts replace the old.
1711 @item
1712 Any packages all of whose files have been overwritten during the
1713 installation, and which aren't required for dependencies, are considered
1714 to have been removed.  For each such package,
1715 @noindent @enumerate a
1716 @item
1717 dpkg calls:
1718 @smallexample
1719 <disappearer's postrm> disappear <overwriter> <new version>
1720 @end smallexample
1721 @item
1722 The package's maintainer scripts are removed.
1723 @item
1724 It is noted in the status database as being in a sane state, namely not
1725 installed (any conffiles it may have are ignored).  Note that
1726 disappearing packages do not have their prerm called, because dpkg
1727 doesn't know in advance that the package is going to vanish.
1728 @end enumerate
1729 @item
1730 Any files in the package we're unpacking that are also listed in the
1731 file lists of other packages are removed from those lists.  (This will
1732 lobotomise the file list of the `conflicting' package if there is one.)
1733 @item
1734 The backup files made at 4. are deleted.
1735 @item
1736 The new package's status is now sane, and recorded as `unpacked'.  Here
1737 is another point of no return - if the conflicting package's removal
1738 fails we do not unwind the rest of the installation; the conflicting
1739 package is left in a half-removed limbo.
1740 @item
1741 If there was a conflicting package we go and do the removal actions,
1742 starting from point 2. of the removal, below.
1743 @end enumerate
1746 @unnumberedsubsec Details of configuration
1748 When we configure a package (this happens with @code{dpkg --install}, or with
1749 @code{--configure}), we first update the conffiles and then call:
1750 @smallexample
1751 <postinst> configure <most-recently-configured-version>
1752 @end smallexample
1754 No attempt is made to unwind after errors during configuration.
1757 @unnumberedsubsec Details of removal and/or configration purging
1759 @enumerate
1760 @item
1761 @smallexample
1762 <prerm> remove
1763 @end smallexample
1764 @item
1765 The package's files are removed (except conffiles).
1766 @item
1767 @smallexample
1768 <postrm> remove
1769 @end smallexample
1770 @item
1771 All the maintainer scripts except the postrm are removed.
1773 If we aren't purging the package we stop here.  Note that packages which
1774 have no postrm and no conffiles are automatically purged when removed,
1775 as there is no difference except for the dpkg status.
1777 @item
1778 The conffiles and any backup files (@samp{~}-files, @samp{#*#} files,
1779 @samp{%}-files, .dpkg-@{old,new,tmp@}, etc.) are removed.
1780 @item
1781 @smallexample
1782 <postrm> purge
1783 @end smallexample
1784 @item
1785 The package's file list is removed.
1786 @end enumerate
1787 No attempt is made to unwind after errors during removal.
1789 @node Mail processing packages, Virtual dependencies, Maintainer script arguments and how dpkg does things, Appendix
1790 @unnumberedsec Mail processing packages
1792 Debian packages which process electronic mail (whether mail-user-agents
1793 (MUA) or alternative mail-transport-agents (MTA)) @emph{must} make sure
1794 that they are compatible with the configuration decisions below.
1795 Failure to do this may result in lost mail, broken @code{From:} lines,
1796 and other serious brain damage!
1798 @itemize @bullet
1799 @item
1800 The mail spool is @file{/var/spool/mail} and the interface to send a
1801 mail message is @file{/usr/sbin/sendmail} (as per the FSSTND).  The mail
1802 spool is part of the base and not part of the MTA package.
1804 @item
1805 Mailboxes are locked using the @file{.lock} lockfile convention, rather
1806 than fcntl, flock or lockf.
1808 @item
1809 Mailboxes are generally 660 @file{<user>.mail} unless the user has
1810 chosen otherwise.  A MUA may remove a mailbox (unless it has nonstandard
1811 permissions) in which case the MTA or another MUA must recreate it if
1812 needed.  Mailboxes must be writeable by group mail.
1814 @item
1815 The mail spool is 2775 mail.mail, and MUA's need to be setgid mail to do
1816 the locking mentioned above (and obviously need to avoid accessing other
1817 users' mailboxes using this privilege).
1819 @item
1820 @file{/etc/aliases} is the source file for the system mail aliases (e.g.
1821 postmaster, usenet, etc.) - it is the one which the sysadmin and
1822 postinst scripts may edit.
1824 @item
1825 The convention of writing `forward to <address>' in the mailbox itself
1826 is not supported.  Use a @file{.forward} file instead.
1828 @item
1829 The location for the @file{rmail} program used by UUCP for incoming mail
1830 is @file{/usr/sbin/rmail}, as per the FSSTND.  Likewise, @file{rsmtp},
1831 for receiving batch-SMTP-over-UUCP, is in @file{/usr/sbin/rsmtp} if it
1832 is supported.
1834 @item
1835 Smail is not using HoneyDanBer UUCP, whose uux apparently accepts -a and
1836 -g options.
1838 @item
1839 If you need to know what name to use (for example) on outgoing news and
1840 mail messages which are generated locally, you should use the file
1841 @file{/etc/mailname}.  It will contain the portion after the username
1842 and @samp{@@} sign for email addresses of users on the machine (followed
1843 by a newline).
1844 @end itemize
1846 A package should check for the existence of this file.  If it exists it
1847 should use it without comment @footnote{An MTA's prompting configuration
1848 script may wish to prompt the user even if it finds this file exists.}.
1849 If it does not exist it should prompt the user for the value and store
1850 it in @file{/etc/mailname} as well as using it in the package's
1851 configuration.  The prompt should make it clear that the name will not
1852 just be used by that package.  E.g., in the same situation the INN
1853 package says:
1855 @smallexample
1856 Please enter the `mail name' of your system.  This is the hostname
1857 portion of the address to be shown on outgoing news and mail messages.
1858 The default is `$syshostname', your system's host name.
1859 Mail name [`$syshostname']:
1860 @end smallexample
1861 ($syshostname is the output of `hostname --fqdn').
1863 @node  Virtual dependencies, , Mail processing packages, Appendix
1864 @comment  node-name,  next,  previous,  up
1865 @unnumberedsec Virtual dependencies
1867 Virtual packages are in the same namespace as real packages, and may
1868 have the same name.  The meaning of a virtual package in a
1869 dependency/conflicts list is exactly that of listing all the real
1870 packages which state that they are an instantiation of that virtual
1871 package.
1873 This is done with a new Provides field in the control file, with a
1874 syntax much like the Conflicts field.
1876 The idea is that we can have something like:
1877 @smallexample
1878 Package: elm
1879 Depends: mta
1881 Package: smail
1882 Provides: mta
1883 Conflicts: mta
1885 Package: sendmail
1886 Provides: mta
1887 Conflicts: mta
1888 @end smallexample
1889 @noindent The result is equivalent to elm having said
1890 @smallexample
1891 Package: elm
1892 Depends: smail | sendmail
1893 @end smallexample
1895 (There'll be a special case to say that a package may conflict with a
1896 virtual package which it provides - clearly ...)
1898 If there are both a real and a virtual package of the same name then
1899 the dependency may be satisfied (or the conflict caused) by either the
1900 real package or any of the virtual packages which provide it.  This is
1901 so that, for example, supposing we have
1902 @smallexample
1903 Package: lout
1904 Optional: ghostview
1905 @end smallexample
1906 (this is a fictional example - the Lout package should not mention
1907 ghostview), and someone else comes up with a nice PostScript
1908 previewer, then they can just say
1909 @smallexample
1910 Package: marvelpostview
1911 Provides: ghostview
1912 @end smallexample
1913 and all will work in the interim (until, say, the Lout maintainer
1914 changes things).
1916 If a dependency or a conflict has a version number attached then only
1917 real packages will be considered to see whether the relationship is
1918 satisfied (or prohibited, for a conflict) - it is assumed that a real
1919 package which provides virtual package is not of the `right' version.
1920 If there is demand it can be arranged that a package which provides a
1921 virtual package may mention a version number, though this is unlikely to
1922 be helpful:
1923 @smallexample
1924 Provides: mta (2.0)
1925 @end smallexample
1927 If you want to specify which of a set of real packages should be the
1928 default to satisfy a particular dependency on a virtual package, you can
1929 simply list the real package as alternative before the virtual one:
1930 @smallexample
1931 Package: xbaseR6
1932 Recommended: xsvga | x-server
1933 Provides: x-base, xr6shlib
1935 Package: xsvga
1936 Recommended: x-base
1937 Provides: x-server
1939 Package: x8514
1940 Recommended: x-base
1941 Provides: x-server
1942 @end smallexample
1944 Virtual package names should generally not be used in the names of
1945 @file{/etc/init.d} scripts, configuration files, logfiles, and so on, so
1946 that several programs providing the same virtual package name can be
1947 installed.
1949 @bye