Packages generally contain all of the files necessary to implement a set of related commands or features. There are two types of Debian packages:
Installation of software by the package system uses
"dependencies" which are carefully designed by
the package maintainers. These dependencies are documented
control file associated
with each package. For example, the package containing the
GNU C compiler (
gcc) "depends" on the package
binutils which includes the linker and assembler.
If a user attempts to install
gcc without having first installed
Debian's package system will send an error message that it also needs
binutils, and will install
gcc only if the user agrees
binutils first. (However, this facility can be
overridden by the insistent user.) More details are given
below on package dependencies.
Debian's packaging tools can be used to:
A Debian "package", or a Debian archive file, contains the
executable files, libraries, and documentation associated with a particular
suite of program or set of related programs. Normally, a Debian archive
file has a filename that ends in
Debian archive files can be parsed and manipulated by the utility
ar. The precise contents of Debian archive files changed
since Debian 0.93. The new contents are understood by versions of
the primary package tool,
dpkg, later than 0.93.76,
and is described in the "deb"(5) man page.
The old format is described in "deb-old"(5).
Using the command
ar -t foo_VVV-RRR.deb, one sees that a Debian
archive file contains these members:
tarfile which contains the Debian control files for this package. (Confusingly, one of these files, and the only one which is required, is itself named
tarfile which contains the executables, libraries, documentation, etc., associated with this package. In other words, this component is the filesystem data part of a Debian package.
Additional members may be added in the future. Detailed requirements for
adding them are given in the
deb manual page.
The Debian package names conform to the following convention: <foo>_<VersionNumber>-<DebianRevisionNumber>_<Arch>.deb
foo is supposed to be the package name. This
naming convention is rather new, and some packages have slightly different
name formats. As a check, one can learn the package name associated with a
particular Debian archive file (.deb file) in one of these ways:
dpkg --info foo_VVV-RRR.deb. This sends a message to STDOUT which gives, among other things, the Package Name corresponding to the archive file being unpacked.
VVV component is the version number specified by the
upstream developer. There are no standards in place here, so the version
number may have formats as different as
"960428" and "2.7.2.l.3".
RRR component is the Debian revision number, and is
specified by the
Debian developer (or an individual user if he chooses to build the package
himself). This number corresponds to the revision level of the Debian
package (which includes the Debian-specific Makefile, called
debian.rules, as well as the Debian control file, usually called
debian.control). Thus, a new revision level usually signifies
changes in the Debian Makefile, the Debian control file, the installation
or removal scripts, or in the configuration files used with the package.
Arch component identifies the processor for which the
package was built. This is commonly
i386, which refers to
chips in the 80x86 family of vintage 80386 or later.
m68k for processors in the Motorola 680x0 family, etc.
Specifics regarding the contents of a Debian control file are provided
in the manual page
deb-control (5). Briefly,
a sample control file is shown below for the Debian package libc5_5.2.18-9.deb:
PACKAGE: libc5 SECTION: base SOURCE: libc5 DESCRIPTION: The Linux C library version 5 (run-time libraries). Includes shared libraries needed to run programs built with libc 5. MAINTAINER: David Engel <email@example.com> VERSION: 5.2.18-9 PRE-DEPENDS: ldso (>=1.7.14-2) CONFLICTS: elf-libc, pthreads1 REPLACES: elf-libc PROVIDES: elf-libc, pthreads1 ARCHITECTURE: i386
The first line gives the package name. This is the name by which the package can be manipulated by the package tools, and usually similar to but not necessarily the same as, the first component string in the Debian archive file name.
The second line gives the "section" where this Debian package is stored at the Debian FTP sites. This is the name of a subdirectory (within one of the main directories, see more about the Debian FTP directory structure) where the package is stored.
Source field identifies the source package from which the
binary package was made. Normally, this is the same as the name of the
package itself. It can be different, however, when one source package
actually provides more than one binary package. For example, three
different binary packages related to the Java Developer's Kit are produced
from the single
jdk source package: one for systems with Motif
jdk-shared), one for systems without Motif
jdk-static), and one package common to both (
The Description field gives a brief summary of the package's features, and the Maintainer field names the Debian package developer and his email address. The version field gives both the upstream developer's version number and (in the last component) the revision level of the Debian package of this program.
The Pre-Depends field gives a list of packages that have to be available in order to make dpkg even try to install a package. This feature is for expert use only.
The Conflicts field tells the user (and the Debian package maintenance tools) what other packages cannot co-exist with the programs in this package. The Replaces field tells what packages will be replaced when this one is installed. The Provides field tells what packages will be installed by this package; this is a mechanism by which multiple packages can be distributed as a single package, which is in some cases an aid to the package maintenance system.
The final field (Architecture) specifies the chip for which this particular binary was compiled.
Conffiles are listings of configuration files, usually placed in
/etc, that the package management system will not overwrite
when a package is upgraded.
This ensures that local values for the contents of these files
will be preserved, and is a critical feature enabling the in-place upgrade
of packages on a running system.
To determine exactly which files are preserved during an upgrade, users
can inspect the contents of
For example, the
netbase.conffiles package contains these entries:
/etc/init.d/netbase /etc/gateways /etc/protocols /etc/services /etc/hosts.allow /etc/hosts.deny /etc/rpc
These files are executable scripts which are automatically run before
or after a package is installed.
Along with a file named
control, all of these files are part
of the "control" section of a Debian archive file.
The individual files are:
This script executes the configuration of a package once that package has been unpacked from its Debian archive (".deb") file. Many 'preinst' scripts also stop services for packages which are being upgraded until their installation or upgrade is completed (following the successful execution of the 'postinst' script).
This script typically completes any required
configuration of the package
foo has been unpacked
from its Debian archive (".deb") file.
Often, 'postinst' scripts ask the
user for input, and/or warn the user that if he accepts default values,
he should remember to go back and re-configure that package as the
situation warrants. Many 'postinst' scripts then execute any commands
necessary to start or restart a service once a new package has been
installed or upgraded. It is a good idea to check the contents of
the 'postinst' script for any configuration advice, when trying out a
package for the first time.
This script typically stops any daemons which are associated with a package. It is executed before the removal of files associated with the package.
This script typically modifies links or other
files associated with
foo. (See notes on
All of the control files can be found in
The files relevant to package
foo begin with the name
"foo" and have file extensions of "preinst",
"postinst", etc., as appropriate. The file
in that directory
lists all of the files that were installed with the package
Each Debian package is assigned a priority by the distribution maintainers, as an aid to the package management system. The priorities are:
A virtual package is a generic name that applies to any one of a group
of packages, all of which provide similar basic functionality.
For example, both the
are both news readers, and should therefore satisfy any dependency of
a program that required a news reader on a system in order to work.
They are therefore both said to provide the "virtual package"
sendmail both provide the
functionality of a mail transport agent. They are therefore said to
provide the virtual package, "mail transport agent".
If either one is installed, then any program depending on the
installation of a
mail transport agent will be satisfied by
the existence of this virtual package.
Debian provides a mechanism so that, if more than one package which
provide the same virtual package is installed on a system,
then system administrators can set one as the preferred package.
The relevant command is
update-alternatives, and is
described further in the section on
The Debian package system has a range of package "dependencies" which are designed to indicate (in a single flag) the level at which Program A can operate independently of the existence of Program B on a given system:
"Pre-Depends" is a special dependency.
In the case of most packages,
dpkg will unpack its archive
file (i.e., its
.deb file independently of whether or not the
files on which it depends exist on the system. Simplistically,
unpacking means that
dpkg will extract the files from the archive
file that were meant to be installed on your filesystem, and put them
in place. If those packages depend on the existence of some
other packages on your system,
dpkg will refuse to complete the
installation by executing its "configure" action until the
other packages are installed.
However, for some packages,
dpkg will refuse even to unpack
them until certain dependencies are resolved. Such packages are said
to "Pre-depend" on the presence of some other packages.
The Debian project provided this mechanism to support the safe upgrading
of systems from
a.out format to
ELF format, where
the order in which packages were unpacked was critical.
These "want" flags tell what the user wanted to do with
a package (as indicated either by the user's actions in
the "Select" section of
dselect, or by the user's
direct invocations of
dpkg). Their meanings are: