It should not be used by package maintainers wishing to understand how dpkg will install their packages. The descriptions of what dpkg does when installing and removing packages are particularly inadequate.
dpkg can also be used as a front-end to dpkg-deb(1) and dpkg-query(1). The list of supported actions can be found later on in the ACTIONS section. If any such action is encountered dpkg just runs dpkg-deb or dpkg-query with the parameters given to it, but no specific options are currently passed to them, to use any such option the back-ends need to be called directly.
Installation consists of the following steps:
1. Extract the control files of the new package.
2. If another version of the same package was installed before the new installation, execute prerm script of the old package.
3. Run preinst script, if provided by the package.
4. Unpack the new files, and at the same time back up the old files, so that if something goes wrong, they can be restored.
5. If another version of the same package was installed before the new installation, execute the postrm script of the old package. Note that this script is executed after the preinst script of the new package, because new files are written at the same time old files are removed.
6. Configure the package. See --configure for detailed information about how this is done.
To reconfigure a package which has already been configured, try the dpkg-reconfigure(8) command instead.
Configuring consists of the following steps:
1. Unpack the conffiles, and at the same time back up the old conffiles, so that they can be restored if something goes wrong.
2. Run postinst script, if provided by the package.
Removing of a package consists of the following steps:
1. Run prerm script
2. Remove the installed files
3. Run postrm script
Note: Some configuration files might be unknown to dpkg because they are created and handled separately through the configuration scripts. In that case, dpkg won't remove them by itself, but the package's postrm script (which is called by dpkg), has to take care of their removal during purge. Of course, this only applies to files in system directories, not configuration files written to individual users' home directories.
Purging of a package consists of the following steps:
1. Remove the package, if not already removed. See --remove for detailed information about how this is done.
2. Run postrm script.
Currently the only functional check performed is an md5sum verification of the file contents against the stored value in the files database. It will only get checked if the database contains the file md5sum. To check for any missing metadata in the database, the --audit command can be used.
The output format is selectable with the --verify-format option, which by default uses the rpm format, but that might change in the future, and as such, programs parsing this command output should be explicit about the format they expect.
A simpler one-shot command to retrieve and update the available file is dselect update. Note that this file is mostly useless if you don't use dselect but an APT-based frontend: APT has its own system to keep track of available packages.
The available file needs to be up-to-date for this command to be useful, otherwise unknown packages will be ignored with a warning. See the --update-avail and --merge-avail commands for more information.
Note: This command makes use of both the available file and the package selections.
If such a package is present, output it as a Packages file entry, which can be massaged as appropriate.
Note: This command makes use of both the available file and the package selections.
Returns 0 when a package is printed, 1 when no suitable package is available and 2 on error.
When used with --robot, the output will be the program version number in a dotted numerical format, with no newline.
Number Description 1 Generally helpful progress information 2 Invocation and status of maintainer scripts 10 Output for each file processed 100 Lots of output for each file processed 20 Output for each configuration file 200 Lots of output for each configuration file 40 Dependencies and conflicts 400 Lots of dependencies/conflicts output 10000 Trigger activation and processing 20000 Lots of output regarding triggers 40000 Silly amounts of output regarding triggers 1000 Lots of drivel about e.g. the dpkg/info dir 2000 Insane amounts of drivel
Warning: These options are mostly intended to be used by experts only. Using them without fully understanding their effects may break your whole system.
all: Turns on (or off) all force options.
downgrade(*): Install a package, even if newer version of it is already installed.
Warning: At present dpkg does not do any dependency checking on downgrades and therefore will not warn you if the downgrade breaks the dependency of some other package. This can have serious side effects, downgrading essential system components can even make your whole system unusable. Use with care.
configure-any: Configure also any unpacked but unconfigured packages on which the current package depends.
hold: Allow automatic installs, upgrades or removals of packages even when marked to be on "hold". Note: This does not prevent these actions when requested explicitly.
remove-reinstreq: Remove a package, even if it's broken and marked to require reinstallation. This may, for example, cause parts of the package to remain on the system, which will then be forgotten by dpkg.
remove-protected: Remove, even if the package is considered protected (since dpkg 1.20.1). Protected packages contain mostly important system boot infrastructure. Removing them might cause the whole system to be unable to boot, so use with caution.
remove-essential: Remove, even if the package is considered essential. Essential packages contain mostly very basic Unix commands. Removing them might cause the whole system to stop working, so use with caution.
depends: Turn all dependency problems into warnings. This affects the Pre-Depends and Depends fields.
depends-version: Don't care about versions when checking dependencies. This affects the Pre-Depends and Depends fields.
breaks: Install, even if this would break another package (since dpkg 1.14.6). This affects the Breaks field.
conflicts: Install, even if it conflicts with another package. This is dangerous, for it will usually cause overwriting of some files. This affects the Conflicts field.
confmiss: Always install the missing conffile without prompting. This is dangerous, since it means not preserving a change (removing) made to the file.
confnew: If a conffile has been modified and the version in the package did change, always install the new version without prompting, unless the --force-confdef is also specified, in which case the default action is preferred.
confold: If a conffile has been modified and the version in the package did change, always keep the old version without prompting, unless the --force-confdef is also specified, in which case the default action is preferred.
confdef: If a conffile has been modified and the version in the package did change, always choose the default action without prompting. If there is no default action it will stop to ask the user unless --force-confnew or --force-confold is also been given, in which case it will use that to decide the final action.
confask: If a conffile has been modified always offer to replace it with the version in the package, even if the version in the package did not change (since dpkg 1.15.8). If any of --force-confnew, --force-confold, or --force-confdef is also given, it will be used to decide the final action.
overwrite: Overwrite one package's file with another's file.
overwrite-dir: Overwrite one package's directory with another's file.
overwrite-diverted: Overwrite a diverted file with an undiverted version.
statoverride-add: Overwrite an existing stat override when adding it (since dpkg 1.19.5).
statoverride-remove: Ignore a missing stat override when removing it (since dpkg 1.19.5).
security-mac(*): Use platform-specific Mandatory Access Controls (MAC) based security when installing files into the filesystem (since dpkg 1.19.5). On Linux systems the implementation uses SELinux.
unsafe-io: Do not perform safe I/O operations when unpacking (since dpkg 1.15.8.6). Currently this implies not performing file system syncs before file renames, which is known to cause substantial performance degradation on some file systems, unfortunately the ones that require the safe I/O on the first place due to their unreliable behaviour causing zero-length files on abrupt system crashes.
Note: For ext4, the main offender, consider using instead the mount option nodelalloc, which will fix both the performance degradation and the data safety issues, the latter by making the file system not produce zero-length files on abrupt system crashes with any software not doing syncs before atomic renames.
Warning: Using this option might improve performance at the cost of losing data, use with care.
script-chrootless: Run maintainer scripts without chroot(2)ing into instdir even if the package does not support this mode of operation (since dpkg 1.18.5).
Warning: This can destroy your host system, use with extreme care.
architecture: Process even packages with wrong or no architecture.
bad-version: Process even packages with wrong versions (since dpkg 1.16.1).
bad-path: PATH is missing important programs, so problems are likely.
not-root: Try to (de)install things even when not root.
bad-verify: Install a package even if it fails authenticity check.
Be sure to give --no-act before the action-parameter, or you might end up with undesirable results. (e.g. dpkg --purge foo --no-act will first purge package "foo" and then try to purge package "--no-act", even though you probably expected it to actually do nothing).
Note: Front-ends might call dpkg several times per invocation, which might run the hooks more times than expected.
Warning: Take into account that depending on the excluded paths you might completely break your system, use with caution.
The glob patterns use the same wildcards used in the shell, were '*' matches any sequence of characters, including the empty string and also '/'. For example, «/usr/*/READ*» matches «/usr/share/doc/package/README». As usual, '?' matches any single character (again, including '/'). And '[' starts a character class, which can contain a list of characters, ranges and complementations. See glob(7) for detailed information about globbing. Note: The current implementation might re-include more directories and symlinks than needed, to be on the safe side and avoid possible unpack failures; future work might fix this.
This can be used to remove all paths except some particular ones; a typical case is:
--path-exclude=/usr/share/doc/* --path-include=/usr/share/doc/*/copyright
to remove all documentation files except the copyright files.
These two options can be specified multiple times, and interleaved with each other. Both are processed in the given order, with the last rule that matches a file name making the decision.
The filters are applied when unpacking the binary packages, and as such only have knowledge of the type of object currently being filtered (e.g. a normal file or a directory) and have not visibility of what objects will come next. Because these filters have side effects (in contrast to find(1) filters), excluding an exact pathname that happens to be a directory object like /usr/share/doc will not have the desired result, and only that pathname will be excluded (which could be automatically reincluded if the code sees the need). Any subsequent files contained within that directory will fail to unpack.
Hint: make sure the globs are not expanded by your shell.
The only currently supported output format is rpm, which consists of a line for every path that failed any check. The lines start with 9 characters to report each specific check result, a '?' implies the check could not be done (lack of support, file permissions, etc), '.' implies the check passed, and an alphanumeric character implies a specific check failed; the md5sum verification failure (the file contents have changed) is denoted with a '5' on the third character. The line is followed by a space and an attribute character (currently 'c' for conffiles), another space and the pathname.
The only currently supported command is --version.
The other files listed below are in their default directories, see option --admindir to see how to change locations of these files.
The status file is backed up daily in /var/backups. It can be useful if it's lost or corrupted due to filesystems troubles.
The format and contents of a binary package are described in deb(5).
dpkg -l '*vi*'
To see the entries in /var/lib/dpkg/available of two packages:
dpkg --print-avail elvis vim | less
To search the listing of packages yourself:
less /var/lib/dpkg/available
To remove an installed elvis package:
dpkg -r elvis
To install a package, you first need to find it in an archive or CDROM. The available file shows that the vim package is in section editors:
cd /media/cdrom/pool/main/v/vim dpkg -i vim_4.5-3.deb
To make a local copy of the package selection states:
dpkg --get-selections> myselections
You might transfer this file to another computer, and after having updated the available file there with your package manager frontend of choice (see <https://wiki.debian.org/Teams/Dpkg/FAQ> for more details), for example:
apt-cache dumpavail | dpkg --merge-avail
or with dpkg 1.17.6 and earlier:
avail=$(mktemp) apt-cache dumpavail> "$avail" dpkg --merge-avail "$avail" rm "$avail"
you can install it with:
dpkg --clear-selections dpkg --set-selections <myselections
Note that this will not actually install or remove anything, but just set the selection state on the requested packages. You will need some other application to actually download and install the requested packages. For example, run apt-get dselect-upgrade.
Ordinarily, you will find that dselect(1) provides a more convenient way to modify the package selection states.