APT is a collection of tools distributed in a package namedapt. A significant part of APT is defined in aC++ library of functions; APT also includes command-line programs for dealing with packages, which use the library. Three such programs areapt,apt-get andapt-cache. They are commonly used in examples because they are simple and ubiquitous. Theapt package is of "important" priority in all current Debian releases, and is therefore included in a default Debian installation. APT can be considered afront end todpkg, friendlier than the olderdselect front end. Whiledpkg performs actions on individual packages, APT manages relations (especially dependencies) between them, as well as sourcing and management of higher-level versioning decisions (release tracking andversion pinning).
APT is often hailed as one of Debian's best features,[by whom?][5][6][7][8] which Debian developers attribute to the strict quality controls in Debian's policy.[9][10]
A major feature of APT is the way it callsdpkg — it doestopological sorting of the list of packages to be installed or removed and callsdpkg in the best possible sequence. In some cases, it utilizes the--force options ofdpkg. However, it only does this when it is unable to calculate how to avoid the reasondpkg requires the action to be forced.
The user indicates one or more packages to be installed. Each package name is phrased as just the name portion of the package, not a fully qualified filename (for instance, in a Debian system,libc6 would be the argument provided, notlibc6_1.9.6-2.deb). Notably, APT automatically gets and installs packages upon which the indicated package depends (if necessary). This was an original distinguishing characteristic of APT-based package management systems, as it avoided installation failure due to missing dependencies, a type ofdependency hell.
Another distinction is the retrieval of packages from remote repositories. APT uses a location configuration file (/etc/apt/sources.list) to locate the desired packages, which might be available on the network or a removable storage medium, for example, and retrieve them, and also obtain information about available (but not installed) packages.
APT provides other command options to override decisions made by apt-get's conflict resolution system. One option is to force a particular version of a package. This can downgrade a package and render dependent software inoperable, so the user must be careful.
Finally, theapt_preferences mechanism allows the user to create an alternative installation policy for individual packages.
Usage modes ofapt andapt-get that facilitate updating installed packages include:
update is used to resynchronize thepackage index files from their sources. The lists of available packages are fetched from the location(s) specified in/etc/apt/sources.list. For example, when using a Debian archive, this command retrieves and scans thePackages.gz files, so that information about new and updated packages is available.
upgrade is used to install the newest versions of all packages currently installed on the system from the sources enumerated in/etc/apt/sources.list. Packages currently installed with new versions available are retrieved and upgraded; under no circumstances are currently installed packages removed, or packages not already installed retrieved and installed. New versions of currently installed packages that cannot be upgraded without changing the install status of another package will be left at their current version.
full-upgrade (apt) anddist-upgrade (apt-get), in addition to performing the function ofupgrade, also intelligently handles changing dependencies with new versions of packages;apt andapt-get have a "smart" conflict resolution system, and will attempt to upgrade the most important packages at the expense of less important ones if necessary. The/etc/apt/sources.list file contains a list of locations from which to retrieve desired package files.[4]aptitude has a smarterdist-upgrade feature calledfull-upgrade.[11]
/etc/apt/preferences.d/: Directory with version preferences files. This is where "pinning" is specified, i.e. a preference to get certain packages from a separate source or from a different version of a distribution.
/var/cache/apt/archives/: Storage area for retrieved package files.
/var/cache/apt/archives/partial/: Storage area for package files in transit.
/var/lib/apt/lists/: Storage area for state information for each package resource specified insources.list
/var/lib/apt/lists/partial/: Storage area for state information in transit.
APT relies on the concept ofrepositories in order to find software and resolve dependencies. For APT, a repository is a directory containing packages along with an index file. This can be specified as a networked orCD-ROM location. As of 14 August 2021,[update] the Debian project keeps a central repository of over 50,000 software packages ready for download and installation.[15]
Any number of additional repositories can be added to APT'ssources.list configuration file (/etc/apt/sources.list) and then be queried by APT. Graphical front ends often allow modifyingsources.list more simply (apt-setup). Once a package repository has been specified (like during the system installation), packages in that repository can be installed without specifying a source and will be kept up-to-date automatically.
In addition to network repositories,compact discs and other storage media (USB keydrive, hard disks...) can be used as well, usingapt-cdrom[16] or addingfile:/ URI[17] to the source list file.apt-cdrom can specify a folder other than a CD-ROM, using the-d option (i.e. a hard disk or a USB keydrive). The Debian CDs available for download contain Debian repositories. This allows non-networked machines to be upgraded. One can also useapt-zip.
Problems may appear when several sources offer the same package(s). Systems that have such possibly conflicting sources can use APT pinning to control which sources should be preferred.
TheAPT pinning feature allows users to force APT to choose particular versions of packages which may be available in different versions from different repositories. This allows administrators to ensure that packages are not upgraded to versions which may conflict with other packages on the system, or that have not been sufficiently tested for unwelcome changes.
In order to do this, thepins in APT'spreferences file (/etc/apt/preferences) must be modified,[18] although graphical front ends often make pinning simpler.
GDebi, a GTK-based tool sponsored for Ubuntu. (There is also a Qt version, available in the Ubuntu repositories as gdebi-kde.)
apt-cdrom, a way to add a new CDROM to APT's list of available repositories (sources.lists). It is necessary to use apt-cdrom to add CDs to the APT system, it cannot be done by hand.
Apt-offline: A convenient way to make any available non-containerized change to any Debian-type Linux installation without using a direct Internet connection. However, a temporary direct connection can be required, such as to install Apt-offline on some of the relevant types of Linux, and to addPPA's to the sources-list.
APT front ends can:
search for new packages;
upgrade packages;
install or remove packages and
upgrade the whole system to a new release.
APT front ends can list the dependencies of packages being installed or upgraded, ask the administrator if packages recommended or suggested by newly installed packages should be installed too, automatically install dependencies and perform other operations on the system such as removing obsolete files and packages.
The original effort that led to theapt-get program was thedselect replacement project known by its codenameDeity.[24] This project was commissioned in 1997 by Brian White, the Debian release manager at the time. The first functional version ofapt-get was calleddpkg-get and was only intended to be a test program for the core library functions that would underpin the new user interface (UI).[25]
Much of the original development of APT was done onInternet relay chat (IRC), so records have been lost. The 'Deity creation team' mailing list archives include only the major highlights.
The 'Deity' name was abandoned as the official name for the project due to concerns over the religious nature of the name. The APT name was eventually decided after considerable internal and public discussion. Ultimately the name was proposed on IRC, accepted and then finalized on the mailing lists.[26]
APT was introduced in 1998 and original test builds were circulated on IRC. The first Debian version that included it was Debian 2.1, released on 9 March 1999.[27]
In the end the original goal of the Deity project of replacing thedselect user interface was a failure. Work on the user interface portion of the project was abandoned (the user interface directories were removed from theconcurrent versions system) after the first public release ofapt-get. The response to APT as adselect method and a command line utility was so great and positive that all development efforts focused on maintaining and improving the tool. It was not until much later that several independent people built user interfaces on top oflibapt-pkg.
Eventually, a new team picked up the project, began to build new features and released version 0.6 of APT which introduced the Secure APT feature, using strongcryptographicsigning to authenticate the package repositories.[28]
APT was originally designed as a front end fordpkg to work with Debian's.deb packages. A version of APT modified to also work with theRPM Package Manager system was released asAPT-RPM.[29] TheFink project has ported APT toMac OS X for some of its own package management tasks,[30] and APT is also available inOpenSolaris.
apt-file is a command, packaged separately from APT, to find which package includes a specific file, or to list all files included in a package on remote repositories.[31]