]> git.saurik.com Git - apt.git/blame_incremental - doc/guide.sgml
* Document unit for Cache-Limit (bytes) (Closes: #234737)
[apt.git] / doc / guide.sgml
... / ...
CommitLineData
1<!-- -*- mode: sgml; mode: fold -*- -->
2<!doctype debiandoc PUBLIC "-//DebianDoc//DTD DebianDoc//EN">
3<book>
4<title>APT User's Guide</title>
5
6<author>Jason Gunthorpe <email>jgg@debian.org</email></author>
7<version>$Id: guide.sgml,v 1.7 2003/04/26 23:26:13 doogie Exp $</version>
8
9<abstract>
10This document provides an overview of how to use the the APT package manager.
11</abstract>
12
13<copyright>
14Copyright &copy; Jason Gunthorpe, 1998.
15<p>
16"APT" and this document are free software; you can redistribute them and/or
17modify them under the terms of the GNU General Public License as published
18by the Free Software Foundation; either version 2 of the License, or (at your
19option) any later version.
20
21<p>
22For more details, on Debian GNU/Linux systems, see the file
23/usr/share/common-licenses/GPL for the full license.
24</copyright>
25
26<toc sect>
27
28<!-- General {{{ -->
29<!-- ===================================================================== -->
30<chapt>General
31
32<p>
33The APT package currently contains two sections, the APT <prgn>dselect</>
34method and the <prgn>apt-get</> command line user interface. Both provide
35a way to install and remove packages as well as download new packages from
36the Internet.
37
38<sect>Anatomy of the Package System
39<p>
40The Debian packaging system has a large amount of information associated with
41each package to help assure that it integrates cleanly and easily into
42the system. The most prominent of its features is the dependency system.
43
44<p>
45The dependency system allows individual programs to make use of shared
46elements in the system such as libraries. It simplifies placing infrequently
47used portions of a program in separate packages to reduce the
48number of things the average user is required to install. Also, it allows
49for choices in mail transport agents, X servers and
50so on.
51
52<p>
53The first step to understanding the dependency system is to grasp the concept
54of a simple dependency. The meaning of a simple dependency is that a package
55requires another package to be installed at the same time to work properly.
56
57<p>
58For instance, mailcrypt is an emacs extension that aids in encrypting email
59with GPG. Without GPGP installed mail-crypt is useless, so mailcrypt has a
60simple dependency on GPG. Also, because it is an emacs extension it has a
61simple dependency on emacs, without emacs it is completely useless.
62
63<p>
64The other important dependency to understand is a conflicting dependency. It
65means that a package, when installed with another package, will not work and
66may possibly be extremely harmful to the system. As an example consider a
67mail transport agent such as sendmail, exim or qmail. It is not possible
68to have two mail transport agents installed because both need to listen to
69the network to receive mail. Attempting to install two will seriously
70damage the system so all mail transport agents have a conflicting dependency
71with all other mail transport agents.
72
73<p>
74As an added complication there is the possibility for a package to pretend
75to be another package. Consider that exim and sendmail for many intents are
76identical, they both deliver mail and understand a common interface. Hence,
77the package system has a way for them to declare that they are both
78mail-transport-agents. So, exim and sendmail both declare that they provide a
79mail-transport-agent and other packages that need a mail transport agent
80depend on mail-transport-agent. This can add a great deal of confusion when
81trying to manually fix packages.
82
83<p>
84At any given time a single dependency may be met by packages that are already
85installed or it may not be. APT attempts to help resolve dependency issues
86by providing a number of automatic algorithms that help in selecting packages
87for installation.
88</sect>
89
90</chapt>
91 <!-- }}} -->
92<!-- apt-get {{{ -->
93<!-- ===================================================================== -->
94<chapt>apt-get
95
96<p>
97<prgn>apt-get</> provides a simple way to install packages from the command
98line. Unlike <prgn>dpkg</>, <prgn>apt-get</> does not understand .deb files,
99it works with the package's proper name and can only install .deb archives from
100a <em>Source</>.
101
102<p>
103The first <footnote>If you are using an http proxy server you must set the
104http_proxy environment variable first, see sources.list(5)</footnote> thing that
105should be done before using <prgn>apt-get</> is to fetch the package lists
106from the <em>Sources</> so that it knows what packages are
107available. This is done with <tt>apt-get update</>. For instance,
108
109<p>
110<example>
111# apt-get update
112Get http://ftp.de.debian.org/debian-non-US/ stable/binary-i386/ Packages
113Get http://llug.sep.bnl.gov/debian/ testing/contrib Packages
114Reading Package Lists... Done
115Building Dependency Tree... Done
116</example>
117
118<p>
119Once updated there are several commands that can be used:
120<taglist>
121<tag>upgrade<item>
122Upgrade will attempt to gently upgrade the whole system. Upgrade will
123never install a new package or remove an existing package, nor will it
124ever upgrade a package that might cause some other package to break.
125This can be used daily to relatively safely upgrade the system. Upgrade
126will list all of the packages that it could not upgrade, this usually
127means that they depend on new packages or conflict with some other package.
128<prgn>dselect</> or <tt>apt-get install</> can be used to force these
129packages to install.
130
131<tag>install<item>
132Install is used to install packages by name. The package is
133automatically fetched and installed. This can be useful if you already
134know the name of the package to install and do not want to go into a GUI
135to select it. Any number of packages may be passed to install, they will
136all be fetched. Install automatically attempts to resolve dependency problems
137with the listed packages and will print a summary and ask for confirmation
138if anything other than its arguments are changed.
139
140<tag>dist-upgrade<item>
141Dist-upgrade is a complete upgrader designed to simplify upgrading between
142releases of Debian. It uses a sophisticated algorithm to determine the best
143set of packages to install, upgrade and remove to get as much of the system
144to the newest release. In some situations it may be desired to use dist-upgrade
145rather than spend the time manually resolving dependencies in <prgn>dselect</>.
146Once dist-upgrade has completed then <prgn>dselect</> can be used to install
147any packages that may have been left out.
148
149<p>
150It is important to closely look at what dist-upgrade is going to do, its
151decisions may sometimes be quite surprising.
152</taglist>
153
154<p>
155<prgn>apt-get</> has several command line options that are detailed in its
156man page, <manref name="apt-get" section="8">. The most useful option is
157<tt>-d</> which does not install the fetched files. If the system has to
158download a large number of package it would be undesired to start installing
159them in case something goes wrong. When <tt>-d</> is used the downloaded
160archives can be installed by simply running the command that caused them to
161be downloaded again without <tt>-d</>.
162
163</chapt>
164 <!-- }}} -->
165<!-- DSelect {{{ -->
166<!-- ===================================================================== -->
167<chapt>DSelect
168<p>
169The APT <prgn>dselect</> method provides the complete APT system with
170the <prgn>dselect</> package selection GUI. <prgn>dselect</> is used to
171select the packages to be installed or removed and APT actually installs them.
172
173<p>
174To enable the APT method you need to to select [A]ccess in <prgn>dselect</>
175and then choose the APT method. You will be prompted for a set of
176<em>Sources</> which are places to fetch archives from. These can be remote
177Internet sites, local Debian mirrors or CDROMs. Each source can provide
178a fragment of the total Debian archive, APT will automatically combine them
179to form a complete set of packages. If you have a CDROM then it is a good idea
180to specify it first and then specify a mirror so that you have access to
181the latest bug fixes. APT will automatically use packages on your CDROM before
182downloading from the Internet.
183
184<p>
185<example>
186 Set up a list of distribution source locations
187
188 Please give the base URL of the debian distribution.
189 The access schemes I know about are: http file
190
191 For example:
192 file:/mnt/debian,
193 ftp://ftp.debian.org/debian,
194 http://ftp.de.debian.org/debian,
195
196
197 URL [http://llug.sep.bnl.gov/debian]:
198</example>
199
200<p>
201The <em>Sources</> setup starts by asking for the base of the Debian
202archive, defaulting to a HTTP mirror. Next it asks for the distribution to
203get.
204
205<p>
206<example>
207 Please give the distribution tag to get or a path to the
208 package file ending in a /. The distribution
209 tags are typically something like: stable unstable testing non-US
210
211 Distribution [stable]:
212</example>
213
214<p>
215The distribution refers to the Debian version in the archive, <em>stable</>
216refers to the latest released version and <em>unstable</> refers to the
217developmental version. <em>non-US</> is only available on some mirrors and
218refers to packages that contain encryption technology or other things that
219cannot be exported from the United States. Importing these packages into the
220US is legal however.
221
222<p>
223<example>
224 Please give the components to get
225 The components are typically something like: main contrib non-free
226
227 Components [main contrib non-free]:
228</example>
229
230<p>
231The components list refers to the list of sub distributions to fetch. The
232distribution is split up based on software licenses, main being DFSG free
233packages while contrib and non-free contain things that have various
234restrictions placed on their use and distribution.
235
236<p>
237Any number of sources can be added, the setup script will continue to
238prompt until you have specified all that you want.
239
240<p>
241Before starting to use <prgn>dselect</> it is necessary to update the
242available list by selecting [U]pdate from the menu. This is a super-set of
243<tt>apt-get update</> that makes the fetched information available to
244<prgn>dselect</>. [U]pdate must be performed even if <tt>apt-get update</>
245has been run before.
246
247<p>
248You can then go on and make your selections using [S]elect and then
249perform the installation using [I]nstall. When using the APT method
250the [C]onfig and [R]emove commands have no meaning, the [I]nstall command
251performs both of them together.
252
253<p>
254By default APT will automatically remove the package (.deb) files once they have been
255successfully installed. To change this behavior place <tt>Dselect::clean
256"prompt";</> in /etc/apt/apt.conf.
257
258</chapt>
259 <!-- }}} -->
260<!-- The Interfaces {{{ -->
261<!-- ===================================================================== -->
262<chapt>The Interface
263
264<p>
265Both that APT <prgn>dselect</> method and <prgn>apt-get</> share the same
266interface. It is a simple system that generally tells you what it will do
267and then goes and does it.
268<footnote>
269The <prgn>dselect</> method actually is a set of wrapper scripts
270to <prgn>apt-get</>. The method actually provides more functionality than
271is present in <prgn>apt-get</> alone.
272</footnote>
273After printing out a summary of what will happen APT then will print out some
274informative status messages so that you can estimate how far along it is and
275how much is left to do.
276
277<!-- ===================================================================== -->
278<sect>Startup
279
280<p>
281Before all operations except update, APT performs a number of actions to
282prepare its internal state. It also does some checks of the system's state.
283At any time these operations can be performed by running <tt>apt-get check</>.
284<p>
285<example>
286# apt-get check
287Reading Package Lists... Done
288Building Dependency Tree... Done
289</example>
290
291<p>
292The first thing it does is read all the package files into memory. APT
293uses a caching scheme so this operation will be faster the second time it
294is run. If some of the package files are not found then they will be ignored
295and a warning will be printed when apt-get exits.
296
297<p>
298The final operation performs a detailed analysis of the system's dependencies.
299It checks every dependency of every installed or unpacked package and considers
300if it is OK. Should this find a problem then a report will be printed out and
301<prgn>apt-get</> will refuse to run.
302
303<p>
304<example>
305# apt-get check
306Reading Package Lists... Done
307Building Dependency Tree... Done
308You might want to run apt-get -f install' to correct these.
309Sorry, but the following packages have unmet dependencies:
310 9fonts: Depends: xlib6g but it is not installed
311 uucp: Depends: mailx but it is not installed
312 blast: Depends: xlib6g (>= 3.3-5) but it is not installed
313 adduser: Depends: perl-base but it is not installed
314 aumix: Depends: libgpmg1 but it is not installed
315 debiandoc-sgml: Depends: sgml-base but it is not installed
316 bash-builtins: Depends: bash (>= 2.01) but 2.0-3 is installed
317 cthugha: Depends: svgalibg1 but it is not installed
318 Depends: xlib6g (>= 3.3-5) but it is not installed
319 libreadlineg2: Conflicts:libreadline2 (<< 2.1-2.1)
320</example>
321
322<p>
323In this example the system has many problems, including a serious problem
324with libreadlineg2. For each package that has unmet dependencies a line
325is printed out indicating the package with the problem and the dependencies
326that are unmet. A short explanation of why the package has a dependency
327problem is also included.
328
329<p>
330There are two ways a system can get into a broken state like this. The
331first is caused by <prgn>dpkg</> missing some subtle relationships between
332packages when performing upgrades. <footnote>APT however considers all known
333dependencies and attempts to prevent broken packages</footnote>. The second is
334if a package installation fails during an operation. In this situation a
335package may have been unpacked without its dependents being installed.
336
337<p>
338The second situation is much less serious than the first because APT places
339certain constraints on the order that packages are installed. In both cases
340supplying the <tt>-f</> option to <prgn>apt-get</> will cause APT to deduce a
341possible solution to the problem and then continue on. The APT <prgn>dselect</>
342method always supplies the <tt>-f</> option to allow for easy continuation
343of failed maintainer scripts.
344
345<p>
346However, if the <tt>-f</> option is used to correct a seriously broken system
347caused by the first case then it is possible that it will either fail
348immediately or the installation sequence will fail. In either case it is
349necessary to manually use dpkg (possibly with forcing options) to correct
350the situation enough to allow APT to proceed.
351</sect>
352
353<!-- ===================================================================== -->
354<sect>The Status Report
355
356<p>
357Before proceeding <prgn>apt-get</> will present a report on what will happen.
358Generally the report reflects the type of operation being performed but there
359are several common elements. In all cases the lists reflect the final state
360of things, taking into account the <tt>-f</> option and any other relevant
361activities to the command being executed.
362
363<sect1>The Extra Package list
364<p>
365<example>
366The following extra packages will be installed:
367 libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl
368 mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base
369 bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy
370 squake pgp-i python-base debmake ldso perl libreadlineg2
371 ssh
372</example>
373
374<p>
375The Extra Package list shows all of the packages that will be installed
376or upgraded in excess of the ones mentioned on the command line. It is
377only generated for an <tt>install</> command. The listed packages are
378often the result of an Auto Install.
379</sect1>
380
381<sect1>The Packages to Remove
382<p>
383<example>
384The following packages will be REMOVED:
385 xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix
386 xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel
387 xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid
388 nas xpilot xfig
389</example>
390
391<p>
392The Packages to Remove list shows all of the packages that will be
393removed from the system. It can be shown for any of the operations and
394should be given a careful inspection to ensure nothing important is to
395be taken off. The <tt>-f</> option is especially good at generating packages
396to remove so extreme care should be used in that case. The list may contain
397packages that are going to be removed because they are only
398partially installed, possibly due to an aborted installation.
399</sect1>
400
401<sect1>The New Packages list
402<p>
403<example>
404The following NEW packages will installed:
405 zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base
406</example>
407
408<p>
409The New Packages list is simply a reminder of what will happen. The packages
410listed are not presently installed in the system but will be when APT is done.
411</sect1>
412
413<sect1>The Kept Back list
414<p>
415<example>
416The following packages have been kept back
417 compface man-db tetex-base msql libpaper svgalib1
418 gs snmp arena lynx xpat2 groff xscreensaver
419</example>
420
421<p>
422Whenever the whole system is being upgraded there is the possibility that
423new versions of packages cannot be installed because they require new things
424or conflict with already installed things. In this case the package will
425appear in the Kept Back list. The best way to convince packages listed
426there to install is with <tt>apt-get install</> or by using <prgn>dselect</>
427to resolve their problems.
428</sect1>
429
430<sect1>Held Packages warning
431<p>
432<example>
433The following held packages will be changed:
434 cvs
435</example>
436
437<p>
438Sometimes you can ask APT to install a package that is on hold, in such a
439case it prints out a warning that the held package is going to be
440changed. This should only happen during dist-upgrade or install.
441</sect1>
442
443<sect1>Final summary
444<p>
445Finally, APT will print out a summary of all the changes that will occur.
446
447<p>
448<example>
449206 packages upgraded, 8 newly installed, 23 to remove and 51 not upgraded.
45012 packages not fully installed or removed.
451Need to get 65.7M/66.7M of archives. After unpacking 26.5M will be used.
452</example>
453
454<p>
455The first line of the summary simply is a reduced version of all of the
456lists and includes the number of upgrades - that is packages already
457installed that have new versions available. The second line indicates the
458number of poorly configured packages, possibly the result of an aborted
459installation. The final line shows the space requirements that the
460installation needs. The first pair of numbers refer to the size of
461the archive files. The first number indicates the number of bytes that
462must be fetched from remote locations and the second indicates the
463total size of all the archives required. The next number indicates the
464size difference between the presently installed packages and the newly
465installed packages. It is roughly equivalent to the space required in
466/usr after everything is done. If a large number of packages are being
467removed then the value may indicate the amount of space that will be
468freed.
469
470<p>
471Some other reports can be generated by using the -u option to show packages
472to upgrade, they are similar to the previous examples.
473</sect>
474
475<!-- ===================================================================== -->
476<sect>The Status Display
477<p>
478During the download of archives and package files APT prints out a series of
479status messages.
480
481<p>
482<example>
483# apt-get update
484Get:1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages
485Get:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages
486Hit http://llug.sep.bnl.gov/debian/ testing/main Packages
487Get:4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages
488Get:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages
48911% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s
490</example>
491
492<p>
493The lines starting with <em>Get</> are printed out when APT begins to fetch
494a file while the last line indicates the progress of the download. The first
495percent value on the progress line indicates the total percent done of all
496files. Unfortunately since the size of the Package files is unknown
497<tt>apt-get update</> estimates the percent done which causes some
498inaccuracies.
499
500<p>
501The next section of the status line is repeated once for each download thread
502and indicates the operation being performed and some useful information
503about what is happening. Sometimes this section will simply read <em>Forking</>
504which means the OS is loading the download module. The first word after the [
505is the fetch number as shown on the history lines. The next word
506is the short form name of the object being downloaded. For archives it will
507contain the name of the package that is being fetched.
508
509<p>
510Inside of the single quote is an informative string indicating the progress
511of the negotiation phase of the download. Typically it progresses from
512<em>Connecting</> to <em>Waiting for file</> to <em>Downloading</> or
513<em>Resuming</>. The final value is the number of bytes downloaded from the
514remote site. Once the download begins this is represented as <tt>102/10.2k</>
515indicating that 102 bytes have been fetched and 10.2 kilobytes is expected.
516The total size is always shown in 4 figure notation to preserve space. After
517the size display is a percent meter for the file itself.
518The second last element is the instantaneous average speed. This values is
519updated every 5 seconds and reflects the rate of data transfer for that
520period. Finally is shown the estimated transfer time. This is updated
521regularly and reflects the time to complete everything at the shown
522transfer rate.
523
524<p>
525The status display updates every half second to provide a constant feedback
526on the download progress while the Get lines scroll back whenever a new
527file is started. Since the status display is constantly updated it is
528unsuitable for logging to a file, use the <tt>-q</> option to remove the
529status display.
530</sect>
531
532<!-- ===================================================================== -->
533<sect>Dpkg
534
535<p>
536APT uses <prgn>dpkg</> for installing the archives and will switch
537over to the <prgn>dpkg</> interface once downloading is completed.
538<prgn>dpkg</> will also ask a number of questions as it processes the packages
539and the packages themselves may also ask several questions. Before each
540question there is usually a description of what it is asking and the
541questions are too varied to discuss completely here.
542</sect>
543
544</chapt>
545 <!-- }}} -->
546
547</book>