| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548 |
- <!-- -*- mode: sgml; mode: fold -*- -->
- <!doctype debiandoc PUBLIC "-//DebianDoc//DTD DebianDoc//EN">
- <book>
- <title>APT User's Guide</title>
- <author>Jason Gunthorpe <email>jgg@debian.org</email></author>
- <version>$Id: guide.sgml,v 1.7 2003/04/26 23:26:13 doogie Exp $</version>
- <abstract>
- This document provides an overview of how to use the the APT package manager.
- </abstract>
- <copyright>
- Copyright © Jason Gunthorpe, 1998.
- <p>
- "APT" and this document are free software; you can redistribute them and/or
- modify them under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 2 of the License, or (at your
- option) any later version.
- <p>
- For more details, on Debian systems, see the file
- /usr/share/common-licenses/GPL for the full license.
- </copyright>
- <toc sect>
- <!-- General {{{ -->
- <!-- ===================================================================== -->
- <chapt>General
- <p>
- The APT package currently contains two sections, the APT <prgn>dselect</>
- method and the <prgn>apt-get</> command line user interface. Both provide
- a way to install and remove packages as well as download new packages from
- the Internet.
- <sect>Anatomy of the Package System
- <p>
- The Debian packaging system has a large amount of information associated with
- each package to help assure that it integrates cleanly and easily into
- the system. The most prominent of its features is the dependency system.
- <p>
- The dependency system allows individual programs to make use of shared
- elements in the system such as libraries. It simplifies placing infrequently
- used portions of a program in separate packages to reduce the
- number of things the average user is required to install. Also, it allows
- for choices in mail transport agents, X servers and
- so on.
- <p>
- The first step to understanding the dependency system is to grasp the concept
- of a simple dependency. The meaning of a simple dependency is that a package
- requires another package to be installed at the same time to work properly.
- <p>
- For instance, mailcrypt is an emacs extension that aids in encrypting email
- with GPG. Without GPGP installed mailcrypt is useless, so mailcrypt has a
- simple dependency on GPG. Also, because it is an emacs extension it has a
- simple dependency on emacs, without emacs it is completely useless.
- <p>
- The other important dependency to understand is a conflicting dependency. It
- means that a package, when installed with another package, will not work and
- may possibly be extremely harmful to the system. As an example consider a
- mail transport agent such as sendmail, exim or qmail. It is not possible
- to have two mail transport agents installed because both need to listen to
- the network to receive mail. Attempting to install two will seriously
- damage the system so all mail transport agents have a conflicting dependency
- with all other mail transport agents.
- <p>
- As an added complication there is the possibility for a package to pretend
- to be another package. Consider that exim and sendmail for many intents are
- identical, they both deliver mail and understand a common interface. Hence,
- the package system has a way for them to declare that they are both
- mail-transport-agents. So, exim and sendmail both declare that they provide a
- mail-transport-agent and other packages that need a mail transport agent
- depend on mail-transport-agent. This can add a great deal of confusion when
- trying to manually fix packages.
- <p>
- At any given time a single dependency may be met by packages that are already
- installed or it may not be. APT attempts to help resolve dependency issues
- by providing a number of automatic algorithms that help in selecting packages
- for installation.
- </sect>
- </chapt>
- <!-- }}} -->
- <!-- apt-get {{{ -->
- <!-- ===================================================================== -->
- <chapt>apt-get
- <p>
- <prgn>apt-get</> provides a simple way to install packages from the command
- line. Unlike <prgn>dpkg</>, <prgn>apt-get</> does not understand .deb files,
- it works with the package's proper name and can only install .deb archives from
- a <em>Source</>.
- <p>
- The first <footnote>If you are using an http proxy server you must set the
- http_proxy environment variable first, see sources.list(5)</footnote> thing that
- should be done before using <prgn>apt-get</> is to fetch the package lists
- from the <em>Sources</> so that it knows what packages are
- available. This is done with <tt>apt-get update</>. For instance,
- <p>
- <example>
- # apt-get update
- Get http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages
- Get http://llug.sep.bnl.gov/debian/ testing/contrib Packages
- Reading Package Lists... Done
- Building Dependency Tree... Done
- </example>
- <p>
- Once updated there are several commands that can be used:
- <taglist>
- <tag>upgrade<item>
- Upgrade will attempt to gently upgrade the whole system. Upgrade will
- never install a new package or remove an existing package, nor will it
- ever upgrade a package that might cause some other package to break.
- This can be used daily to relatively safely upgrade the system. Upgrade
- will list all of the packages that it could not upgrade, this usually
- means that they depend on new packages or conflict with some other package.
- <prgn>dselect</> or <tt>apt-get install</> can be used to force these
- packages to install.
- <tag>install<item>
- Install is used to install packages by name. The package is
- automatically fetched and installed. This can be useful if you already
- know the name of the package to install and do not want to go into a GUI
- to select it. Any number of packages may be passed to install, they will
- all be fetched. Install automatically attempts to resolve dependency problems
- with the listed packages and will print a summary and ask for confirmation
- if anything other than its arguments are changed.
- <tag>dist-upgrade<item>
- Dist-upgrade is a complete upgrader designed to simplify upgrading between
- releases of Debian. It uses a sophisticated algorithm to determine the best
- set of packages to install, upgrade and remove to get as much of the system
- to the newest release. In some situations it may be desired to use dist-upgrade
- rather than spend the time manually resolving dependencies in <prgn>dselect</>.
- Once dist-upgrade has completed then <prgn>dselect</> can be used to install
- any packages that may have been left out.
- <p>
- It is important to closely look at what dist-upgrade is going to do, its
- decisions may sometimes be quite surprising.
- </taglist>
- <p>
- <prgn>apt-get</> has several command line options that are detailed in its
- man page, <manref name="apt-get" section="8">. The most useful option is
- <tt>-d</> which does not install the fetched files. If the system has to
- download a large number of package it would be undesired to start installing
- them in case something goes wrong. When <tt>-d</> is used the downloaded
- archives can be installed by simply running the command that caused them to
- be downloaded again without <tt>-d</>.
- </chapt>
- <!-- }}} -->
- <!-- DSelect {{{ -->
- <!-- ===================================================================== -->
- <chapt>DSelect
- <p>
- The APT <prgn>dselect</> method provides the complete APT system with
- the <prgn>dselect</> package selection GUI. <prgn>dselect</> is used to
- select the packages to be installed or removed and APT actually installs them.
- <p>
- To enable the APT method you need to select [A]ccess in <prgn>dselect</>
- and then choose the APT method. You will be prompted for a set of
- <em>Sources</> which are places to fetch archives from. These can be remote
- Internet sites, local Debian mirrors or CD-ROMs. Each source can provide
- a fragment of the total Debian archive, APT will automatically combine them
- to form a complete set of packages. If you have a CD-ROM then it is a good idea
- to specify it first and then specify a mirror so that you have access to
- the latest bug fixes. APT will automatically use packages on your CD-ROM before
- downloading from the Internet.
- <p>
- <example>
- Set up a list of distribution source locations
-
- Please give the base URL of the debian distribution.
- The access schemes I know about are: http file
-
- For example:
- file:/mnt/debian,
- ftp://ftp.debian.org/debian,
- http://ftp.de.debian.org/debian,
-
-
- URL [http://llug.sep.bnl.gov/debian]:
- </example>
- <p>
- The <em>Sources</> setup starts by asking for the base of the Debian
- archive, defaulting to a HTTP mirror. Next it asks for the distribution to
- get.
- <p>
- <example>
- Please give the distribution tag to get or a path to the
- package file ending in a /. The distribution
- tags are typically something like: stable unstable testing non-US
-
- Distribution [stable]:
- </example>
- <p>
- The distribution refers to the Debian version in the archive, <em>stable</>
- refers to the latest released version and <em>unstable</> refers to the
- developmental version. <em>non-US</> is only available on some mirrors and
- refers to packages that contain encryption technology or other things that
- cannot be exported from the United States. Importing these packages into the
- US is legal however.
- <p>
- <example>
- Please give the components to get
- The components are typically something like: main contrib non-free
-
- Components [main contrib non-free]:
- </example>
- <p>
- The components list refers to the list of sub distributions to fetch. The
- distribution is split up based on software licenses, main being DFSG free
- packages while contrib and non-free contain things that have various
- restrictions placed on their use and distribution.
- <p>
- Any number of sources can be added, the setup script will continue to
- prompt until you have specified all that you want.
- <p>
- Before starting to use <prgn>dselect</> it is necessary to update the
- available list by selecting [U]pdate from the menu. This is a superset of
- <tt>apt-get update</> that makes the fetched information available to
- <prgn>dselect</>. [U]pdate must be performed even if <tt>apt-get update</>
- has been run before.
- <p>
- You can then go on and make your selections using [S]elect and then
- perform the installation using [I]nstall. When using the APT method
- the [C]onfig and [R]emove commands have no meaning, the [I]nstall command
- performs both of them together.
- <p>
- By default APT will automatically remove the package (.deb) files once they have been
- successfully installed. To change this behavior place <tt>Dselect::clean
- "prompt";</> in /etc/apt/apt.conf.
- </chapt>
- <!-- }}} -->
- <!-- The Interfaces {{{ -->
- <!-- ===================================================================== -->
- <chapt>The Interface
- <p>
- Both that APT <prgn>dselect</> method and <prgn>apt-get</> share the same
- interface. It is a simple system that generally tells you what it will do
- and then goes and does it.
- <footnote>
- The <prgn>dselect</> method actually is a set of wrapper scripts
- to <prgn>apt-get</>. The method actually provides more functionality than
- is present in <prgn>apt-get</> alone.
- </footnote>
- After printing out a summary of what will happen APT then will print out some
- informative status messages so that you can estimate how far along it is and
- how much is left to do.
- <!-- ===================================================================== -->
- <sect>Startup
- <p>
- Before all operations except update, APT performs a number of actions to
- prepare its internal state. It also does some checks of the system's state.
- At any time these operations can be performed by running <tt>apt-get check</>.
- <p>
- <example>
- # apt-get check
- Reading Package Lists... Done
- Building Dependency Tree... Done
- </example>
- <p>
- The first thing it does is read all the package files into memory. APT
- uses a caching scheme so this operation will be faster the second time it
- is run. If some of the package files are not found then they will be ignored
- and a warning will be printed when apt-get exits.
- <p>
- The final operation performs a detailed analysis of the system's dependencies.
- It checks every dependency of every installed or unpacked package and considers
- if it is OK. Should this find a problem then a report will be printed out and
- <prgn>apt-get</> will refuse to run.
- <p>
- <example>
- # apt-get check
- Reading Package Lists... Done
- Building Dependency Tree... Done
- You might want to run apt-get -f install' to correct these.
- Sorry, but the following packages have unmet dependencies:
- 9fonts: Depends: xlib6g but it is not installed
- uucp: Depends: mailx but it is not installed
- blast: Depends: xlib6g (>= 3.3-5) but it is not installed
- adduser: Depends: perl-base but it is not installed
- aumix: Depends: libgpmg1 but it is not installed
- debiandoc-sgml: Depends: sgml-base but it is not installed
- bash-builtins: Depends: bash (>= 2.01) but 2.0-3 is installed
- cthugha: Depends: svgalibg1 but it is not installed
- Depends: xlib6g (>= 3.3-5) but it is not installed
- libreadlineg2: Conflicts:libreadline2 (<< 2.1-2.1)
- </example>
- <p>
- In this example the system has many problems, including a serious problem
- with libreadlineg2. For each package that has unmet dependencies a line
- is printed out indicating the package with the problem and the dependencies
- that are unmet. A short explanation of why the package has a dependency
- problem is also included.
- <p>
- There are two ways a system can get into a broken state like this. The
- first is caused by <prgn>dpkg</> missing some subtle relationships between
- packages when performing upgrades. <footnote>APT however considers all known
- dependencies and attempts to prevent broken packages</footnote>. The second is
- if a package installation fails during an operation. In this situation a
- package may have been unpacked without its dependents being installed.
- <p>
- The second situation is much less serious than the first because APT places
- certain constraints on the order that packages are installed. In both cases
- supplying the <tt>-f</> option to <prgn>apt-get</> will cause APT to deduce a
- possible solution to the problem and then continue on. The APT <prgn>dselect</>
- method always supplies the <tt>-f</> option to allow for easy continuation
- of failed maintainer scripts.
- <p>
- However, if the <tt>-f</> option is used to correct a seriously broken system
- caused by the first case then it is possible that it will either fail
- immediately or the installation sequence will fail. In either case it is
- necessary to manually use dpkg (possibly with forcing options) to correct
- the situation enough to allow APT to proceed.
- </sect>
- <!-- ===================================================================== -->
- <sect>The Status Report
- <p>
- Before proceeding <prgn>apt-get</> will present a report on what will happen.
- Generally the report reflects the type of operation being performed but there
- are several common elements. In all cases the lists reflect the final state
- of things, taking into account the <tt>-f</> option and any other relevant
- activities to the command being executed.
- <sect1>The Extra Package list
- <p>
- <example>
- The following extra packages will be installed:
- libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl
- mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base
- bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy
- squake pgp-i python-base debmake ldso perl libreadlineg2
- ssh
- </example>
- <p>
- The Extra Package list shows all of the packages that will be installed
- or upgraded in excess of the ones mentioned on the command line. It is
- only generated for an <tt>install</> command. The listed packages are
- often the result of an Auto Install.
- </sect1>
- <sect1>The Packages to Remove
- <p>
- <example>
- The following packages will be REMOVED:
- xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix
- xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel
- xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid
- nas xpilot xfig
- </example>
- <p>
- The Packages to Remove list shows all of the packages that will be
- removed from the system. It can be shown for any of the operations and
- should be given a careful inspection to ensure nothing important is to
- be taken off. The <tt>-f</> option is especially good at generating packages
- to remove so extreme care should be used in that case. The list may contain
- packages that are going to be removed because they are only
- partially installed, possibly due to an aborted installation.
- </sect1>
- <sect1>The New Packages list
- <p>
- <example>
- The following NEW packages will installed:
- zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base
- </example>
- <p>
- The New Packages list is simply a reminder of what will happen. The packages
- listed are not presently installed in the system but will be when APT is done.
- </sect1>
- <sect1>The Kept Back list
- <p>
- <example>
- The following packages have been kept back
- compface man-db tetex-base msql libpaper svgalib1
- gs snmp arena lynx xpat2 groff xscreensaver
- </example>
- <p>
- Whenever the whole system is being upgraded there is the possibility that
- new versions of packages cannot be installed because they require new things
- or conflict with already installed things. In this case the package will
- appear in the Kept Back list. The best way to convince packages listed
- there to install is with <tt>apt-get install</> or by using <prgn>dselect</>
- to resolve their problems.
- </sect1>
- <sect1>Held Packages warning
- <p>
- <example>
- The following held packages will be changed:
- cvs
- </example>
- <p>
- Sometimes you can ask APT to install a package that is on hold, in such a
- case it prints out a warning that the held package is going to be
- changed. This should only happen during dist-upgrade or install.
- </sect1>
- <sect1>Final summary
- <p>
- Finally, APT will print out a summary of all the changes that will occur.
- <p>
- <example>
- 206 packages upgraded, 8 newly installed, 23 to remove and 51 not upgraded.
- 12 packages not fully installed or removed.
- Need to get 65.7M/66.7M of archives. After unpacking 26.5M will be used.
- </example>
- <p>
- The first line of the summary simply is a reduced version of all of the
- lists and includes the number of upgrades - that is packages already
- installed that have new versions available. The second line indicates the
- number of poorly configured packages, possibly the result of an aborted
- installation. The final line shows the space requirements that the
- installation needs. The first pair of numbers refer to the size of
- the archive files. The first number indicates the number of bytes that
- must be fetched from remote locations and the second indicates the
- total size of all the archives required. The next number indicates the
- size difference between the presently installed packages and the newly
- installed packages. It is roughly equivalent to the space required in
- /usr after everything is done. If a large number of packages are being
- removed then the value may indicate the amount of space that will be
- freed.
- <p>
- Some other reports can be generated by using the -u option to show packages
- to upgrade, they are similar to the previous examples.
- </sect>
- <!-- ===================================================================== -->
- <sect>The Status Display
- <p>
- During the download of archives and package files APT prints out a series of
- status messages.
- <p>
- <example>
- # apt-get update
- Get:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages
- Get:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages
- Hit http://llug.sep.bnl.gov/debian/ testing/main Packages
- Get:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages
- Get:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages
- 11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s
- </example>
- <p>
- The lines starting with <em>Get</> are printed out when APT begins to fetch
- a file while the last line indicates the progress of the download. The first
- percent value on the progress line indicates the total percent done of all
- files. Unfortunately since the size of the Package files is unknown
- <tt>apt-get update</> estimates the percent done which causes some
- inaccuracies.
- <p>
- The next section of the status line is repeated once for each download thread
- and indicates the operation being performed and some useful information
- about what is happening. Sometimes this section will simply read <em>Forking</>
- which means the OS is loading the download module. The first word after the [
- is the fetch number as shown on the history lines. The next word
- is the short form name of the object being downloaded. For archives it will
- contain the name of the package that is being fetched.
- <p>
- Inside of the single quote is an informative string indicating the progress
- of the negotiation phase of the download. Typically it progresses from
- <em>Connecting</> to <em>Waiting for file</> to <em>Downloading</> or
- <em>Resuming</>. The final value is the number of bytes downloaded from the
- remote site. Once the download begins this is represented as <tt>102/10.2k</>
- indicating that 102 bytes have been fetched and 10.2 kilobytes is expected.
- The total size is always shown in 4 figure notation to preserve space. After
- the size display is a percent meter for the file itself.
- The second last element is the instantaneous average speed. This values is
- updated every 5 seconds and reflects the rate of data transfer for that
- period. Finally is shown the estimated transfer time. This is updated
- regularly and reflects the time to complete everything at the shown
- transfer rate.
- <p>
- The status display updates every half second to provide a constant feedback
- on the download progress while the Get lines scroll back whenever a new
- file is started. Since the status display is constantly updated it is
- unsuitable for logging to a file, use the <tt>-q</> option to remove the
- status display.
- </sect>
- <!-- ===================================================================== -->
- <sect>Dpkg
- <p>
- APT uses <prgn>dpkg</> for installing the archives and will switch
- over to the <prgn>dpkg</> interface once downloading is completed.
- <prgn>dpkg</> will also ask a number of questions as it processes the packages
- and the packages themselves may also ask several questions. Before each
- question there is usually a description of what it is asking and the
- questions are too varied to discuss completely here.
- </sect>
- </chapt>
- <!-- }}} -->
- </book>
|