The dpkg program is the workhorse of the Debian packaging system. When run with root privilege, it installs and removes groups of software files called packages. For developers, it builds packages. For normal users, dpkg supplies information on specific packages, the contents of any particular package, or a list of the installed packages on the system. It does all of these package management tasks and more. It is used by dselect, another application discussed in this chapter, to perform the actual installation of packages. Many Perl programs and scripts make calls to dpkg as part of their operation. A familiarity with dpkg provides solutions to many general packaging problems. When all other installation methods fail, dpkg is often capable of resolving the problem.
Dealing with the interdependence of packages is one of the major tasks of the
Debian Package Management System. The dependency checking features of
dpkg are well advanced when compared to other solutions available in the
Linux community. What does this mean? It means that, if you use dpkg to
attempt the installation of a package, and that package depends for its proper
operation on another package that has not yet been installed, dpkg will
complain and fail to install the new package. While this may, at first, seem
to be a problem, it is actually the solution to the problem. It is far more
unsatisfactory to be able to install a package that will not work after it has
been installed. This dependency mechanism protects the system from such
installations. As dpkg provides information on the package dependency
that has not been satisfied, it is a straightforward task to install the
dependent packages. Once the dependencies have been satisfied the package will
install without problems, and run as expected afterwards. On some systems, one
or more of these ``dependent'' packages might only be supplied by a ``local''
version of the software, unknown to the packaging system. There are ways to
force dpkg to install the depending package even when it does not know
that the dependency is satisfied. These options should be used with extreme
care, and an understanding of the consequences. All of these interdependency
issues are dealt with by an interface to dpkg called dselect,
described in the dselect section starting on page
.
The following discussion will cover all of the options that can be specified when using dpkg focusing on how to use them. All of the information contained here is available in ``sparse'' form by executing dpkg -h |less. Each of those options will be described in as much detail as possible in the following section.