A comprehensive command guide to Debian’s APT-GET and DPKG
Purpose: Debian has a very powerful package management system called APT. Learning some useful commands can really unleash the true power and usefulness of this package management system. From time to time I will add commands and other tips and tricks that will be helpful to solve some issues and get work done faster. The idea is to make this post a COMPREHENSIVE command guide for APT package management.
Note: For most of the examples, I have used “traceroute” as an example package wherever possible. In some scenarios I have used other packages for the example since traceroute was not suitable for those.
APT-GET Commands
- To install a package. For example, let say you would like to install traceroute package:
#apt-get install traceroute
- To install a package’s source files. For example, let say you would like to download “traceroute” package’s source:
# apt-get source traceroute
- To install dependencies of a package for building the package from it’s source. For example, before you start building a binary package (traceroute) from it’s source, you need to install the dependencies that are required to build the package from it’s source:
# apt-get build-dep traceroute
- To build a package from it’s source:
# apt-get source traceroute
# cd traceroute-VERSION
# debuild -uc -us
# cd ..
- To fix a system with incorrect/broken dependencies. Also useful if the apt-get was stopped unexpectedly due to crash or power failure:
# apt-get -f install
DPKG-based Commands
- To reconfigure any package that is unpacked but not yet configured or half-configured state. This can be used along with “apt-get -f install”. Also useful in case of unexpected shutdown while upgrading the system.
# apt-get -f install
# dpkg --configure -a
- To remove a package (this does not remove the configuration files of the package):
# dpkg --remove traceroute
- To remove a package (and its configuration files):
# dpkg --purge traceroute
- To reconfigure a package. For example suppose you want to select a different settings for your X server:
# dpkg-reconfigure xserver-xorg
- To identify the package name that produced a particular file. For example, “I would like to know which Debian package produced the file ‘lft.db’:
# dpkg -S lft.db
or
# dpkg --search lft.db
Output:
traceroute: /usr/bin/lft.db
traceroute: /usr/share/man/man8/lft.db.8.gz
- To list all the files installed a particular package:
# dpkg --listfiles traceroute
- To list all the packages installed on the system along with their state, name, version and a description:
# dpkg --list
- To list all the packages installed on the system (only names):
# dpkg --get-selections
- To get detailed information about a downloaded package (deb file):
# dpkg --info traceroute_2.0.11-2_i386.deb
Output:
new debian package, version 2.0.
size 47346 bytes: control archive= 1482 bytes.
904 bytes, 20 lines control
876 bytes, 14 lines md5sums
815 bytes, 35 lines * postinst #!/bin/sh
421 bytes, 27 lines * prerm #!/bin/sh
Package: traceroute
Version: 2.0.11-2
Architecture: i386
Maintainer: Daniel Baumann <daniel@debian.org>
Installed-Size: 168
Depends: libc6 (>= 2.7-1)
Conflicts: tcptraceroute (<< 1.5beta6-2.1), traceproto (<< 1.1.2beta1-3), traceroute-nanog (<< 6.4.2-1)
Section: net
Priority: important
Homepage: http://traceroute.sourceforge.net/
Description: Traces the route taken by packets over an IPv4/IPv6 network
The traceroute utility displays the route used by IP packets on their way to a
specified network (or Internet) host. Traceroute displays the IP number and
host name (if possible) of the machines along the route taken by the packets.
Traceroute is used as a network debugging tool. If you’re having network
connectivity problems, traceroute will show you where the trouble is coming
from along the route.
.
Install traceroute if you need a tool for diagnosing network connectivity
problems.
- To extract the contents of a downloaded deb package:
# ar -x traceroute_2.0.11-2_i386.deb
Output:
#ls
control.tar.gz data.tar.gz debian-binary traceroute_2.0.11-2_i386.deb
APT-CACHE Commands
- To perform a full-text search on a package’s name, description, etc:
# apt-cache search traceroute
- To print detailed information of a package:
# apt-cache show traceroute
- To print a list of packages a given package (traceroute) depends on. For example, show me all the packages on which traceroute depends:
# apt-cache depends traceroute
Output:
traceroute
Depends: libc6
Conflicts: tcptraceroute
Conflicts: <traceproto>
Conflicts: traceroute-nanog
- To print a list of packages that are dependent on a particular package. For example, show me all the packages that are dependent on “traceroute” package:
# apt-cache rdepends traceroute
Output:
Reverse Depends:
xorp
traceroute-nanog
traceroute-nanog
licq
traceroute-nanog
ksniffer
traceroute-nanog
iputils-tracepath
traceroute-nanog
gnome-nettool
traceroute-nanog
education-common
traceroute-nanog
- To print detailed information of the versions available for a package and the packages that reverse-depends on it. For example, show me all the packages which depends on traceroute:
# apt-cache showpkg traceroute
Troubleshooting package installation process
- To troubleshoot error messages like the following:
Unpacking dictionaries-common (from …/dictionaries-common_0.98.12_all.deb) …
dpkg-divert: cannot open diversions: No such file or directory
dpkg: error processing /var/cache/apt/archives/dictionaries-common_0.98.12_all.deb (–unpack):
subprocess pre-installation script returned error exit status 2
Selecting previously deselected package aspell.
Unpacking aspell (from …/aspell_0.60.6-1_i386.deb) …
Processing triggers for man-db …
Errors were encountered while processing:
/var/cache/apt/archives/dictionaries-common_0.98.12_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
debian-486:/var/lib/dpkg# ls
# touch /var/lib/dpkg/diversions
- To troubleshoot error messages like following:
Errors were encountered while processing:
/var/cache/apt/archives/acpid_ 1.0.8-7.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Try following commands one by one:
# apt-get -f install
# apt-get upgrade
# apt-get dist-upgrade
# dpkg --configure -a
# apt-get -f install
# cd /var/lib/dpkg/info
# rm -rf acpid*
# apt-get install acpid
# cd /var/lib/apt/lists
# rm *
# apt-get update
# apt-get install acpid
# cd /var/cache/apt/archives
# rm acpid_ 1.0.8-7.deb
# apt-get install acpid

Free Email Subscription









October 23rd, 2009 at 2:21 pm
Do you have anything on aptitude? Debian has recommended the use of aptitude over apt-get since Sarge.
Also, it would be good to show the opposite end of dpkg –get-selections with dpkg –set-selections. I’ve used this before when setting up systems that needed to have similar package sets but were not the same architecture.
Reply to this comment
Admin Reply:
October 26th, 2009 at 10:12 pm
Mike,
I have not switched from apt-get to aptitude so I am not very familiar with it. But most of the commands are quite the same. I like apt-get and I intend to stick to it for now.
Thank you for the comment.
Reply to this comment
November 7th, 2009 at 1:57 am
Hi,
I’m trying to solve similar problem i’ve encountered on ubuntu 9.10 in emacs installation. I’ve tried all the commands above with any kind of success.
I’ve posted my problem on french forum, if you can have a look ?
http://forum.ubuntu-fr.org/viewtopic.php?id=355335
and
http://forum.ubuntu-fr.org/viewtopic.php?id=355553
Any ideas are welcome ?
Thanks in advance
xavier
Reply to this comment