guide.dbk 23 KB

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