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