/[ddp]/manuals/trunk/apt-howto/apt-howto.zh_CN.sgml
ViewVC logotype

Contents of /manuals/trunk/apt-howto/apt-howto.zh_CN.sgml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7728 - (show annotations) (download) (as text)
Tue Nov 2 13:01:27 2010 UTC (2 years, 6 months ago) by spaillard
File MIME type: text/x-sgml
File size: 49240 byte(s)
Fix typo Debain -> Debian
1 <!DOCTYPE debiandoc PUBLIC "-//DebianDoc//DTD DebianDoc//EN">
2 <!-- CVS revision of this document "$Revision: 1.1 $" -->
3 <!-- CVS revision of original english document "1.22" -->
4 <debiandoc>
5
6 <book>
7
8 <title>APT HOWTO (Obsolete Documentation)</title>
9
10 <author>
11 <name>Gustavo Noronha Silva</name> <email>kov@debian.org</email>
12 </author>
13 <translator>
14 <name>刘浩</name> <email>iamlyoo@163.com</email>
15 </translator>
16
17 <version>1.8.10.4 - 2005年3月</version>
18
19 <abstract>
20 这篇文档试图让用户对于Debian包管理工具APT的工作方式有一个很好的理解。
21 它的目标是让新的Debian用户更容易上手,也让那些想帮助那些想更深入理解
22 如何管理他们的系统的人。它为Debian项目而编写,目的是提高此发行版对它
23 的用户的支持水平。
24 </abstract>
25
26 <copyright>
27 <copyrightsummary>
28 版权所有 &copy; 2001, 2002, 2003, 2004 Gustavo Noronha Silva
29 </copyrightsummary>
30 <p>
31 This manual is free software; you may redistribute it and/or modify it
32 under the terms of the GNU General Public License as published by the
33 Free Software Foundation; either version 2, or (at your option) any
34 later version.
35 </p>
36
37 <p>
38 This is distributed in the hope that it will be useful, but without
39 any warranty; without even the implied warranty of merchantability or
40 fitness for a particular purpose. See the GNU General Public License
41 for more details.
42 </p>
43
44 <p>
45 A copy of the GNU General Public License is available as
46 /usr/share/common-licenses/GPL in the Debian GNU/Linux distribution or
47 on the World Wide Web at the GNU General Public Licence. You can also
48 obtain it by writing to the Free Software Foundation, Inc., 59 Temple
49 Place - Suite 330, Boston, MA 02111-1307, USA.
50 </p>
51 </copyright>
52
53 <toc>
54
55 <chapt>导言
56 <p>
57 最初只有.tar.gz的打包文件,用户必须编译每个他想在GNU/Linux上运行的软件。
58 用户们普遍认为系统很有必要提供一种方法来管理这些安装在机器上的软件包,
59 当Debian诞生时,这样一个管理工具也就应运而生,它被命名为<prgn>dpkg</prgn>。
60 从而著名的“package”概念第一次出现在GNU/Linux系统中,稍后Red Hat才决定开
61 发自己的“rpm”包管理系统。
62 <p>
63 很快一个新的问题难倒了GNU/Linux制作者,他们需要一个快速、实用、高效的方
64 法来安装软件包,当软件包更新时,这个工具应该能自动管理关联文件和维护已有
65 配置文件。Debian在次率先解决了这个问题,APT(Advanced Packaging Tool)诞生
66 了。APT后来还被Conectiva改造用来管理rpm,并被其它Linux发行版本采用为它们
67 的软件包管理工具。
68 <p>
69 本文档不打算讲解apt-rpm相关知识,因为Conectiva移植的APT已很有名了,不过
70 提供有关这部分的补充文档还是欢迎的。
71 <p>
72 本文档是基于Debian下一个发行版<tt>Sarge</tt>的。
73 </chapt>
74
75 <chapt id="basico">基础设置
76
77 <sect id="sources.list">/etc/apt/sources.list文件
78 <p>
79 作为操作的一部分,APT使用一个文件列出可获得软件包的镜像站点地址,这个文
80 件就是<tt>/etc/apt/sources.list</tt>。
81 <p>
82 文件中的各项信息通常按如下格式列出:
83
84 <p>
85 <example>
86 deb http://host/debian distribution section1 section2 section3
87 deb-src http://host/debian distribution section1 section2 section3
88 </example>
89
90 <p>
91 当然,上面所列的地址项都是假设的且不应该使用它们。每行的第一个单词<tt>deb</tt>
92 或<tt>deb-src</tt>描述了文件类型:目录中包含的是二进制软件包(<tt>deb</tt>),
93 即我们通常使用的已编译好的软件包;或包含的是源码包(<tt>deb-src</tt>),源码
94 包包含源程序编码、Debian控制文件(<tt>.dsc</tt>)和“Debian化”该程序所做更改的
95 记录文件<tt>diff.gz</tt>。
96 <p>
97 在Debian缺省的sources.list中通常是如下内容:
98 <p>
99 <example>
100 # See sources.list(5) for more information, especially
101 # Remember that you can only use http, ftp or file URIs
102 # CDROMs are managed through the apt-cdrom tool.
103 deb http://http.us.debian.org/debian stable main contrib non-free
104 deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
105 deb http://security.debian.org stable/updates main contrib non-free
106
107 # Uncomment if you want the apt-get source function to work
108 #deb-src http://http.us.debian.org/debian stable main contrib non-free
109 #deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
110 </example>
111
112 <p>
113 这些是Debian基本安装所需的软件包来源地址。第一个<tt>deb</tt>行指向官方正
114 式软件包来源,第二个行指向non-US软件包来源,第三行指向Debian安全补丁更新
115 包来源。
116 <p>
117 最后两行被注释掉了(在句首加“#”),所以apt-get将忽略它们。这些是<tt>deb-src
118 </tt>行指向Debian源码包来源,如果你常下载程序源码来测试或重编译,可取消对
119 它们的注释。
120 <p>
121 <tt>/etc/apt/sources.list</tt>文件可包含多种类型的地址,APT知道如何处理这
122 些不同的地址类型:<tt>http</tt>、<tt>ftp</tt>、<tt>file</tt>(本地文件,例
123 如:一个加载了ISO9600文件系统的目录)和<tt>ssh</tt>。
124 <p>
125 别忘了在修改完<tt>/etc/apt/sources.list</tt>文件后运行<tt>apt-get</tt>使
126 更改生效。你必须完成这个步骤,以便让APT从你指定的地方获得新的软件包列表。
127 </sect>
128
129 <sect id="dpkg-scanpackages">如何在本地使用APT
130 <p>
131 有时你硬盘上有许多.deb软件包,你会希望通过APT来安装它们,以便让它去处理软
132 件包间复杂的依赖关系。
133 <p>
134 想这么做,就建一个目录,将所有你想要安装的.deb文件放入其中。例如:
135 <p>
136 <example>
137 # mkdir /root/debs
138 </example>
139 <p>
140 你可以使用一个<tt>override</tt>文件直接去修改软件包中控制文件中的定义,使
141 之符合你的软件储藏库管理规则。在这个覆盖文件中,你可能希望定义一些选项来覆
142 盖那些软件包的定义,如下所示:
143 <p>
144 <example>
145 package priority section
146 </example>
147 <p>
148 package是软件包的名称,priority有三个级别low、medium或high,section是软件
149 包所属的section,重载文件可任意命名,文件名将在接下来的步骤中做为参数传递
150 给<prgn>dpkg-scanpackages</prgn>。如果你不想写重载文件,只需在调用<tt>
151 dpkg-scanpackages</tt>时使用<tt>/dev/null</tt>就行了。
152 <p>
153 仍是在/root目录下执行:
154 <p>
155 <example>
156 # dpkg-scanpackages debs <var>file</var> | gzip &gt; debs/Packages.gz
157 </example>
158 <p>
159 在上述的命令行中,<var>file</var>为<tt>override</tt>文件,命令生成一个<file>
160 Packages.gz</file>文件,它包含了APT所需的各种软件包信息。最后,如果要使用
161 这些软件包,加上:
162 <p>
163 <example>
164 deb file:/root debs/
165 </example>
166 <p>
167 完成了上面的工作,就可以通常那样使用APT命令操作这些软件包了。你可以使用同
168 样的方法生成一个源码库,但请记住你需要将<tt>.orig.tar.gz</tt>文件、<tt>
169 .dsc</tt>文件和<tt>.diff.gz</tt>文件包含在目录中,同时必须生成<tt>
170 Source.gz</tt>文件而不是<tt>Packages.gz</tt>文件。所使用的命令也不相同,
171 要使用<prgn>dpkg-scansources</prgn>,命令如下所示:
172 <p>
173 <example>
174 # dpkg-scansources debs | gzip &gt; debs/Sources.gz
175 </example>
176 <p>
177 Notice that <prgn>dpkg-scansources</prgn> doesn't need an
178 <tt>override</tt> file. The sources.list's line is:
179 <p>
180 <example>
181 deb-src file:/root debs/
182 </example>
183 </sect>
184
185 <sect id="netselect">选择最佳镜像发布站点加入source.list文件:netselect,netselect-apt
186 <p>
187 一个新用户经常问到的问题:“该将哪个Debian镜像发布站点加入<tt>source.list
188 </tt>文件?”。有很多方法来选择镜像发布站点,专家们可能会写一个脚本去测试
189 不同站点的ping时间。不过其实有一个程序可以帮你:
190 <strong>netselect</strong>。
191 <p>
192 要安装netselect,通常使用:
193 <p>
194 <example>
195 # apt-get install netselect
196 </example>
197 <p>
198 不带参数运行它时会显示它的帮助信息。运行它时加上以空格分隔的镜像主机列表,
199 它会返回一个分值和列表中的一个主机名。这个分值通过评估ping时间和hops数(一
200 个网络请求报文到达目标主机所经过的转发主机的个数)得出,它与镜像站点预计下
201 载速度成反比(数值越小越好)。返回的主机名是主机列表中得分最低的那个(查看列
202 表中所以主机的得分情况可使用-vv选项)。看出下的例子:
203 <p>
204 <example>
205 # netselect ftp.debian.org http.us.debian.org ftp.at.debian.org download.unesp.br ftp.debian.org.br
206 365 ftp.debian.org.br
207 #
208 </example>
209 <p>
210 它表示,在netselect后列出的所有主机中,<tt>ftp.debian.org.br</tt>是下载速
211 度最快的主机,其得分为365。(注意!!这是在我电脑上的测试结果,不同的网络
212 节点网速会大不相同,所以这个分值不一定适用于其它电脑)
213 <p>
214 现在将netselect找到的连接速度最快的镜像站点加入<tt>/etc/apt/sources.list
215 </tt>文件(参考<ref id="sources.list">)并按照<ref id="apt-get">中的技巧来做。
216 <p><strong>注意:</strong>镜像站点列表通常包含在文件
217 <url id="http://www.debian.org/mirror/mirrors_full"
218 name="http://www.debian.org/mirror/mirrors_full">中。
219 <p>
220 从0.3.ds1版开始,netselect源码包中包含了<strong>netselect-apt</strong>二
221 进制包,它使上述操作自动完成。只需将发布目录树做为参数(默认为stable)输入,
222 <tt>sources.list</tt>文件就会生成速度最快的main和non-US镜像站点列表,并保
223 存在当前目录下。下面的例子生成一个包含stable发布镜像站点列表的sources.list:
224 <p>
225 <example>
226 # ls sources.list
227 ls: sources.list: File or directory not found
228 # netselect-apt stable
229 (...)
230 # ls -l sources.list
231 sources.list
232 #
233 </example>
234 <p>
235 <strong>记住:</strong><tt>sources.list</tt>生成在当前目录下,必须将其移
236 至<tt>/etc/apt</tt>目录。
237 <p>
238 接着,按照<ref id="apt-get">中的技巧来做。
239 </sect>
240
241 <sect id="cdrom">将CD-ROM加入source.list文件
242 <p>
243 如果你用APT从CD-ROM上安装及升级软件包,你可以将它加入到<tt>sources.list
244 </tt>文件中。完成该操作,可使用<prgn>apt-cdrom</prgn>程序:
245
246 <p>
247 <example>
248 # apt-cdrom add
249 </example>
250
251 <p>
252 将Debian光盘放入光驱,它将加载光盘目录,并在光盘上查找软件包信息。如果你
253 的光驱需要额外设置,可使用以下选项:
254
255 <p>
256 <example>
257 -h - program help
258 -d directory - CD-ROM mount point
259 -r - Rename a recognized CD-ROM
260 -m - No mounting
261 -f - Fast mode, don't check package files
262 -a - Thorough scan mode
263 </example>
264
265 <p>
266 例如:
267
268 <p>
269 <example>
270 # apt-cdrom -d /home/kov/mycdrom add
271 </example>
272
273 <p>
274 你还可以扫描一张光盘,但不将其加入列表:
275
276 <p>
277 <example>
278 # apt-cdrom ident
279 </example>
280
281 <p>
282 注意,只有当你在系统的<tt>/etc/fstab</tt>中正确设置了光驱后,该程序才会工作。
283 </sect>
284
285 </chapt>
286
287 <chapt id="apt-get">软件包管理
288 <sect id="update">更新可用软件包列表
289 <p>
290 软件包管理系统使用一个私有数据库跟踪列表中软件包的当前状态:已安装、未安
291 装或可安装。<prgn>apt-get</prgn>通过该数据库来确定如何安装用户想用的软件
292 包以及正常运行该软件包所必须的其它关联包。
293 <p>
294 你可以使用<prgn>apt-get update</prgn>来更新数据库列表。这个命令将扫描
295 <tt>/etc/apt/sources.list</tt>文件中所指路径中的软件包列表文件。有关该列
296 表文件的更多信息请参考<ref id="sources.list">。
297 <p>
298 定时运行这个程序是个好主意,它将使你和你的系统获得最新的软件包更新和安全
299 更新等信息。
300 </sect>
301
302 <sect id="install">安装软件包
303 <p>
304 现在,终于到了你一直期待的阶段!准备好了sources.list和最新版的的可用软件
305 包,你所需做的就是运行<tt>apt-get</tt>来安装你渴望已久的软件了。例如,你
306 可以这样:
307
308 <p>
309 <example>
310 # apt-get install xchat
311 </example>
312
313 <p>
314 APT会扫描它的数据库找到最新的版本的软件包,并将它从<tt>sources.list</tt>中
315 所指的地方下载到本地。如果该软件包需要其它软件包才能正常运行——如本例一样
316 ——APT会做关联性检查并自动安装所关联软件包。如下所示:
317
318 <p>
319 <example>
320 # apt-get install nautilus
321 Reading Package Lists... Done
322 Building Dependency Tree... Done
323 The following extra packages will be installed:
324 bonobo libmedusa0 libnautilus0
325 The following NEW packages will be installed:
326 bonobo libmedusa0 libnautilus0 nautilus
327 0 packages upgraded, 4 newly installed, 0 to remove and 1 not upgraded.
328 Need to get 8329kB of archives. After unpacking 17.2MB will be used.
329 Do you want to continue? [Y/n]
330 </example>
331
332 <p>
333 <tt>nautilus</tt>软件包需要引用共享函数库,因此APT会从镜像源处下载相关共
334 享函数库,如果你在<tt>apt-get</tt>命令行中手动指定了这些共享函数库的名称,
335 APT不会询问你是否要继续;它会自动认为你希望安装所有这些软件包。
336 <p>
337 也就是说APT只会在安装那些没有在命令行中指定的软件包时提示确认。
338 <p>
339 下列apt-get选项也许对你有用:
340
341 <p>
342 <example>
343 -h 这个帮助信息
344 -d 只下载——不安装或解压档案
345 -f 即便完整性检查失败了仍然继续
346 -s 不做什么。只是按顺序模拟
347 -y 对于所有问题都假定为Yes,不询问
348 -u 显示一系列已经将要更新的包
349 </example>
350
351 <p>
352 可以用一条命令安装多个软件包。包文件从网络上下载到本地
353 <tt>/var/cache/apt/archives</tt>目录,稍后再安装。
354 <p>
355 你可以用同样的命令行删除指定软件包,只需在软件包名称后紧跟一个“-”,如下所示:
356
357 <p>
358 <example>
359 # apt-get install nautilus gnome-panel-
360 Reading Package Lists... Done
361 Building Dependency Tree... Done
362 The following extra packages will be installed:
363 bonobo libmedusa0 libnautilus0
364 The following packages will be REMOVED:
365 gnome-applets gnome-panel gnome-panel-data gnome-session
366 The following NEW packages will be installed:
367 bonobo libmedusa0 libnautilus0 nautilus
368 0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded.
369 Need to get 8329kB of archives. After unpacking 2594kB will be used.
370 Do you want to continue? [Y/n]
371 </example>
372
373 <p>
374 参考<ref id="remove">一节以获得更多的关于删除软件包的信息。
375 <p>
376 假如你不小心损坏了已安装的软件包而想修复它,或者仅仅想重新安装软件包中某
377 些文件的最新版本,这是可以做到的,你可以用如下的<tt>--reinstall</tt>选项:
378
379 <p>
380 <example>
381 # apt-get --reinstall install gdm
382 Reading Package Lists... Done
383 Building Dependency Tree... Done
384 0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded.
385 Need to get 0B/182kB of archives. After unpacking 0B will be used.
386 Do you want to continue? [Y/n]
387 </example>
388 </sect>
389
390 <sect id="remove">移除软件包
391 <p>
392 如果你不再使用某些软件包,你可以用APT将其从系统中删除。要删除软件包只需
393 输入:<tt>apt-get remove package</tt>。如下所示:
394
395 <p>
396 <example>
397 # apt-get remove gnome-panel
398 Reading Package Lists... Done
399 Building Dependency Tree... Done
400 The following packages will be REMOVED:
401 gnome-applets gnome-panel gnome-panel-data gnome-session
402 0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded.
403 Need to get 0B of archives. After unpacking 14.6MB will be freed.
404 Do you want to continue? [Y/n]
405 </example>
406
407 <p>
408 由上例可知,APT会关注那些与被删除的软件包有依赖关系的软件包。使用APT删除
409 一个软件包将会连带删除那些与该软件包有依赖关系的软件包。
410
411 <p>
412 上例中运行<prgn>apt-get</prgn>会删除指定软件包以及与之有依赖关系的软件
413 包,但它们的配置文件,如果有的话,会完好无损地保留在系统里。如果想彻底删
414 除这些包及其配置文件,运行:
415
416 <p>
417 <example>
418 # apt-get --purge remove gnome-panel
419 Reading Package Lists... Done
420 Building Dependency Tree... Done
421 The following packages will be REMOVED:
422 gnome-applets* gnome-panel* gnome-panel-data* gnome-session*
423 0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded.
424 Need to get 0B of archives. After unpacking 14.6MB will be freed.
425 Do you want to continue? [Y/n]
426 </example>
427
428 <p>
429 注意:软件包名字后面的*表示该软件包所有的配置文件也将被删除。
430 <p>
431 就象<tt>install</tt>时一样,你可以在<tt>remove</tt>命令中用一个符号来指
432 定安装某个软件包。在删除软件包时,如果你在软件包名字后面紧跟一个
433 “<tt>+</tt>”,那么该软件包就会被安装而不是删除。
434
435 <p>
436 <example>
437 # apt-get --purge remove gnome-panel nautilus+
438 Reading Package Lists... Done
439 Building Dependency Tree... Done
440 The following extra packages will be installed:
441 bonobo libmedusa0 libnautilus0 nautilus
442 The following packages will be REMOVED:
443 gnome-applets* gnome-panel* gnome-panel-data* gnome-session*
444 The following NEW packages will be installed:
445 bonobo libmedusa0 libnautilus0 nautilus
446 0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded.
447 Need to get 8329kB of archives. After unpacking 2594kB will be used.
448 Do you want to continue? [Y/n]
449 </example>
450
451 <p>
452 注意,<prgn>apt-get</prgn>列出了那些将要被安装的额外软件包(即保证该软件
453 包正常运行的其它软件包)和将要被删除关联软件包,然后,再次列出了将要被安
454 装的软件包(包括了额外的包)。
455 </sect>
456
457 <sect id="upgrade">更新软件包
458 <p>
459 软件包更新是APT最成功的特点。只需一条命令即可完成更新:
460 <tt>apt-get upgrade</tt>。你可以使用这条命令从相同版本号的发布版中更新
461 软件包,也可以从新版本号的发布版中更新软件包,尽管实现后一种更新的推荐
462 命令为<tt>apt-get dist-upgrade</tt>;详情请参考<ref id="dist-upgrade">。
463 <p>
464 在运行该命令时加上<tt>-u</tt>选项很有用。这个选项让APT显示完整的可更新
465 软件包列表。不加这个选项,你就只能盲目地更新。APT会下载每个软件包的最新
466 更新版本,然后以合理的次序安装它们。注意在运行该命令前应先运行
467 <tt>apt-get update</tt>更新数据库。详情请参考<ref id="update">。请看下
468 面的例子:
469
470 <p>
471 <example>
472 # apt-get -u upgrade
473 Reading Package Lists... Done
474 Building Dependency Tree... Done
475 The following packages have been kept back
476 cpp gcc lilo
477 The following packages will be upgraded
478 adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp indent
479 ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev
480 libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0
481 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc
482 29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
483 Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used.
484 Do you want to continue? [Y/n]
485 </example>
486
487 <p>
488 整个更新过程非常简单。注意在本例中头几行,<tt>apt-get</tt>报告有些软件包
489 的更新被<tt>kept back</tt>,这表明这些软件包的更新版本因故无法安装,可能
490 的原因有关联不同步(当前没有供下载的新版本关联包)或关联扩展(需要安装新的
491 关联包以配合新版软件包)。
492 <p>
493 对于第一种原因没有很好的解决方法,对于第二次原因,运行<tt>apt-get intall
494 </tt>安装所需的新关联包就可以。另一个更好的解决方法就是使用<tt>dist-upgrade
495 </tt>。详情请参考<ref id="dist-upgrade">。
496 </sect>
497
498 <sect id="dist-upgrade">升级到新版本
499 <p>
500 APT的绝活就是让你一次就完成整个系统的更新,不论是通过Internet还是通过光
501 盘文件(购买的碟片或下载的ISO镜像文件)。
502 <p>
503 它也可以用来更新那些关联关系发生改变的软件包。即如前所述的那些使用<tt>
504 apt-get upgrade</tt>时被不被更新(kept back)的软件包。
505 <p>
506 例如,假设你目前使用的Debian为stable revision 0,而你购买了revision 3的
507 新版Debian,你可以使用APT从新光盘上升级你的系统。使用apt-cdrom(参考<ref
508 id="cdrom">)将光盘加载到<tt>/etc/apt/sources.list</tt>中,然后运行<tt>
509 apt-get dist-upgrade</tt>。
510 <p>
511 请注意,APT总是搜索最新版本的软件包,因此,如果一个软件包在你的
512 <tt>/etc/apt/sources.list</tt>中所列的版本比光盘上所列的版本要新,那么
513 APT会下载其中的软件包而不是使用光盘上的软件包。
514 <p>
515 在<ref id="upgrade">节的例子中,我们看到有些包被<tt>kept back</tt>了,现
516 在我们就用<tt>dist-upgrade</tt>方法来解决这个问题:
517
518 <p>
519 <example>
520 # apt-get -u dist-upgrade
521 Reading Package Lists... Done
522 Building Dependency Tree... Done
523 Calculating Upgrade... Done
524 The following NEW packages will be installed:
525 cpp-2.95 cron exim gcc-2.95 libident libopenldap-runtime libopenldap1
526 libpcre2 logrotate mailx
527 The following packages have been kept back
528 lilo
529 The following packages will be upgraded
530 adduser ae apt autoconf cpp debhelper dpkg-dev esound esound-common ftp gcc
531 indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0
532 libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev
533 liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit
534 procps psmisc
535 31 packages upgraded, 10 newly installed, 0 to remove and 1 not upgraded.
536 Need to get 0B/7098kB of archives. After unpacking 3118kB will be used.
537 Do you want to continue? [Y/n]
538 </example>
539
540 <p>
541 注意现在那些软件包将会被更新,那些新的关联软件包也会被安装。但是lilo仍被
542 <tt>kept back</tt>,可能还存在一些比建立新关联更棘手的问题,我们通过如下
543 方法确定问题所在:
544
545 <p>
546 <example>
547 # apt-get -u install lilo
548 Reading Package Lists... Done
549 Building Dependency Tree... Done
550 The following extra packages will be installed:
551 cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
552 logrotate mailx
553 The following packages will be REMOVED:
554 debconf-tiny
555 The following NEW packages will be installed:
556 cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2
557 logrotate mailx
558 The following packages will be upgraded
559 lilo
560 1 packages upgraded, 9 newly installed, 1 to remove and 31 not upgraded.
561 Need to get 225kB/1179kB of archives. After unpacking 2659kB will be used.
562 Do you want to continue? [Y/n]
563 </example>
564
565 <p>
566 查看上述提示信息可知,lilo与<package>debconf-tiny</package>包产生了一个
567 新冲突,这表明除非删除debconf-tiny,否则将无法安装(或更新)lilo。
568 <p>
569 想知道该保留或删除哪些软件包,你可以使用:
570
571 <p>
572 <example>
573 # apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
574 Reading Package Lists... Done
575 Building Dependency Tree... Done
576 Calculating Upgrade... Starting
577 Starting 2
578 Investigating python1.5
579 Package python1.5 has broken dep on python1.5-base
580 Considering python1.5-base 0 as a solution to python1.5 0
581 Holding Back python1.5 rather than change python1.5-base
582 Investigating python1.5-dev
583 Package python1.5-dev has broken dep on python1.5
584 Considering python1.5 0 as a solution to python1.5-dev 0
585 Holding Back python1.5-dev rather than change python1.5
586 Try to Re-Instate python1.5-dev
587 Done
588 Done
589 The following packages have been kept back
590 gs python1.5-dev
591 0 packages upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
592 </example>
593
594 <p>
595 现在,你很容易就知道不能安装python1.5-dev软件包是因为无法满足另一个软件
596 包python1.5的关联要求。
597
598 </sect>
599
600 <sect id="clean">移除无用软件包文件:apt-get clean and autoclean
601 <p>
602 当你需要安装某个软件包时,APT从/etc/apt/sources.list中所列的主机下载所
603 需的文件,将它们保存到本机软件库(<file>/var/cache/apt/archives/</file>),
604 然后开始安装,参考<ref id="install">。
605 <p>
606 本地软件库会不断膨胀占用大量硬盘空间,幸运的是,APT提供了工具来管理本地
607 软件库:<prgn>apt-get</prgn>的<tt>clean</tt>方法和<tt>autoclean</tt>方法。
608 <p>
609 <prgn>apt-get clean</prgn>将删除<file>/var/cache/apt/archives</file>目录
610 和<file>/var/cache/apt/archives/partial</file>目录下锁文件以外的所有文件。
611 这样以来,当你需要再次安装某个软件包时,APT将重新下载它。
612 <p>
613 <prgn>apt-get autoclean</prgn>仅删除那些不需要再次下载的文件。
614 <p>
615 下面这个例子显示了apt-get autoclean如何工作:
616
617 <p>
618 <example>
619 # ls /var/cache/apt/archives/logrotate* /var/cache/apt/archives/gpm*
620 logrotate_3.5.9-7_i386.deb
621 logrotate_3.5.9-8_i386.deb
622 gpm_1.19.6-11_i386.deb
623 </example>
624
625 <p>
626 在/var/cache/apt/archives目录下有两个不同版本的<package>logrotate</package>
627 软件包文件以及一个<package>gpm</package>软件包文件。
628
629 <p>
630 <example>
631 # apt-show-versions -p logrotate
632 logrotate/stable uptodate 3.5.9-8
633 # apt-show-versions -p gpm
634 gpm/stable upgradeable from 1.19.6-11 to 1.19.6-12
635 </example>
636
637 <p>
638 <prgn>apt-show-versions</prgn>显示<file>logrotate_3.5.9-8_i386.deb</file>
639 提供了<package>logrotate</package>的升级版本,所以
640 <file>logrotate_3.5.9-7_i386.deb</file>没用了。同样
641 <file>gpm_1.19.6-11_i386.deb</file>也没有用了,因为可以下载该软件包的更新
642 版本。
643
644 <p>
645 <example>
646 # apt-get autoclean
647 Reading Package Lists... Done
648 Building Dependency Tree... Done
649 Del gpm 1.19.6-11 [145kB]
650 Del logrotate 3.5.9-7 [26.5kB]
651 </example>
652
653 <p>总之,apt-get autoclean仅删除那些过时的文件。参考
654 <ref id="apt-show-versions">以了解apt-show-versions的更多详情。
655 </sect>
656
657 <sect id="dselect-upgrade">在dselect中操作APT
658 <p>
659 <prgn>dselect</prgn>工具帮助用户选取想要安装的Debian软件包。它有点复杂甚
660 至令人望而生厌,但经过实践你就能掌握它恐怖的终端界面。
661
662 <p>
663 dselect高级功能之一就是它知道利用Debian软件包的“推荐”和“建议”能力。(Debian软
664 件包有一种能力:推荐或建议系统在安装自己的同时,安装别的软件包以配合自身的
665 工作,当然这些推荐的软件包不一定是必须的;而dselect工具可以识别和利用这个能
666 力,使用dselect时你就能体会到。译者注)以root身份运行<tt>dselect</tt>,进入程
667 序后选择apt作为连接方式(access)。该步骤不是必须的,但如果你没有光驱而且想通
668 过Internet下载安装软件包,这是使用dselect的最好方法。
669 <p>
670 想深入学习dselect的用法,请到Debian网站查阅dselect文档页面<url
671 id="http://www.debian.org/doc/ddp" name="http://www.debian.org/doc/ddp">.
672 <p>
673
674 在dselect中选好了软件包后,运行:
675
676 <p>
677 <example>
678 # apt-get -u dselect-upgrade
679 </example>
680
681 <p>
682 如下例所示:
683
684 <p>
685 <example>
686 # apt-get -u dselect-upgrade
687 Reading Package Lists... Done
688 Building Dependency Tree... Done
689 The following packages will be REMOVED:
690 lbxproxy
691 The following NEW packages will be installed:
692 bonobo console-tools-libs cpp-3.0 enscript expat fingerd gcc-3.0
693 gcc-3.0-base icepref klogd libdigest-md5-perl libfnlib0 libft-perl
694 libgc5-dev libgcc300 libhtml-clean-perl libltdl0-dev libsasl-modules
695 libstdc++3.0 metamail nethack proftpd-doc psfontmgr python-newt talk tidy
696 util-linux-locales vacation xbill xplanet-images
697 The following packages will be upgraded
698 debian-policy
699 1 packages upgraded, 30 newly installed, 1 to remove and 0 not upgraded.
700 Need to get 7140kB of archives. After unpacking 16.3MB will be used.
701 Do you want to continue? [Y/n]
702 </example>
703
704 <p>
705
706 比较一下我们在相同系统上运行apt-get dist-upgrade时的情形:
707
708 <p>
709 <example>
710 # apt-get -u dist-upgrade
711 Reading Package Lists... Done
712 Building Dependency Tree... Done
713 Calculating Upgrade... Done
714 The following packages will be upgraded
715 debian-policy
716 1 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
717 Need to get 421kB of archives. After unpacking 25.6kB will be freed.
718 Do you want to continue? [Y/n]
719 </example>
720
721 <p>
722 我们看到在前例中许多软件包被安装是其它软件包“推荐”或“建议”的结果。另外一
723 些软件包被安装或删除(例如lbxproxy软件包)是我们通过dselect工具作出的决定。
724 由此可见dselect与APT结合起来将是一个功能强大的工具。
725 </sect>
726
727 <sect id="default-version">如何保持一个混合系统
728 <p>
729 人们有时会对这种情况有兴趣——使用一个版本的Debian作为其主发行版,但从另一
730 个分支上安装一个或多个包。
731 <p>
732 要设定你的Debian主版本,应当修改<file>/etc/apt/apt.conf</file>文件,并加
733 入:
734 <p>
735 <example>
736 APT::Default-Release "<var>version</var>";
737 </example>
738 <p>
739 其中<var>version</var>是你希望作为主发行版使用的Debian版本。你可以使用的
740 版本有<tt>stable</tt>、<tt>testing</tt>和<tt>unstable</tt>。
741 要从另外一个版本中安装软件包,你必须按照如下方式执行APT:
742
743 <p>
744 <example>
745 # apt-get -t <var>distribution</var> install <var>package</var>
746 </example>
747 <p>
748
749 为了使其可以个工作,在你的<file>/etc/apt/sources.list</file>中至少有一行
750 是关于你要使用的那个版本的,而且要使用的软件包也必须存在于该版本中。
751 <p>
752 你也可以要求使用某个特定把本的软件包,如下所示:
753
754 <example>
755 # apt-get install <var>package</var>=<var>version</var>
756 </example>
757
758 例如,下面的命令将会安装<tt>2.2.4-1</tt>版的<package>nautilus</package>软
759 件包:
760
761 <example>
762 # apt-get install nautilus=2.2.4-1
763 </example>
764
765 <p>
766 <em>重要信息</em>:最新版的Debian软件包首先会上传到“unstable”发布版中,
767 这个发布版包含了软件包所有更改阶段,无论是小修小补还是影响到众多软件包
768 乃至整个系统的重大修改。所以,新手和那些强调系统稳定性的用户<em>不</em>
769 会使用这个发布版。
770 <p>
771 “testing”发布版比起“unstable”发布版,多注重了些系统稳定性,但正式运行的
772 系统应当使用“stable”发布版。
773 </sect>
774
775 <sect id="apt-show-versions">如何从Debian的专用版本下升级软件包
776 <p>
777 <prgn>apt-show-versions</prgn>提供了一个安全的途径,让那些使用混合系统的
778 用户放心升级他们的系统,不必担心升级会将原来属于stable的包升级成了unstable包。
779 例如,在安装了<package>apt-show-versions</package>软件包之后,
780 使用这条命令将只升级你的unstable软件包:
781 <p>
782 <example>
783 # apt-get install `apt-show-versions -u -b | grep unstable | cut -d ' ' -f 1`
784 </example>
785 </sect>
786
787 <sect id="pin">如何维护已安装软件包的多个版本(复杂)
788 How to keep specific versions of packages installed (complex)
789 <p>
790 你可能会遇到这种情况,更改了某个软件包中的一些文件,但你没有时间或根本就
791 不想将这些更改引入到新版本中。或者,你将系统升级到3.0,但仍想继续使用Debian
792 2.2下的某个软件包。你可以“钉住”这个版本,这样它就不会被更新了。
793 <p>
794 操作起来十分简单,你只需编辑<tt>/etc/apt/preferences</tt>文件。
795 <tt>/etc/apt/preferences</tt>.
796 <p>
797 文件格式很简单:
798 <p>
799 <example>
800 Package: &lt;package&gt;
801 Pin: &lt;pin definition&gt;
802 Pin-Priority: &lt;pin's priority&gt;
803 </example>
804 <p>
805 每个条目都要以空白行与其它条目分割开。例如,我对<package>sylpheed</package>
806 软件包做了某些修改以使用“reply-to-list”功能,其版本为0.4.99。我想保留这
807 些修改不被更新,可加上:
808 <p>
809 <example>
810 Package: sylpheed
811 Pin: version 0.4.99*
812 </example>
813 <p>
814 注意我用了一个<tt>*</tt>(星号)。这是一个“通配符”;它表明我希望“钉住”所有
815 以0.4.99打头的版本(以防它们被下载并安装到我机器上。pin控制的是服务器端的
816 更新软件包而非本地的已安装软件包。译者注)。因为Debian使用“Debian版本号”
817 为其软件包定版本,我不想进行所有这些版本的升级,如果不用通配符,
818 那么0.4.99-1版或0.4.99-10版只要一出炉系统就会安装它们。如果你修改了软件包,
819 你一定不希望这么做。
820 <p>
821 Pin的优先级帮助我们检查一个与“Packages:”和“Pin:”相符合的软件包是否应该被
822 安装。当优先级比较高时,符合的软件包将会被安装。你可以查阅<manref
823 name="apt_preferences" section="7">,其中有关于优先级的详细讨论,但通过
824 一些简单的例子也可以了解基本的概念。下面就说明了在上面的sylpheed例子中设
825 定优先级域的效果。
826 </p>
827 <p>
828 <taglist>
829 <tag>1001</tag>
830 <item>
831 Sylpheed 0.4.99永远不会被apt替换。如果可能,apt甚至会用0.4.99版替换已经
832 安装的更高的版本呢。只有那些优先级比1000大的软件包才会降级。
833 </item>
834 <tag>1000</tag>
835 <item>
836 除了不会将高版本降级以外,与1001的效果相同。
837 </item>
838 <tag>990</tag>
839 <item>
840 版本0.4.99只会被首选发布系列中高版本的的软件包替换,首选发行版由变量
841 “APT::Default-Release”定义(参考<ref id="default-version">。
842 </item>
843 <tag>500</tag>
844 <item>
845 任何发布系列中比0.4.99版本高的sylpheed都会被安装,但相对于低版本而言,仍然
846 建议使用0.4.99。
847 </item>
848 <tag>100</tag>
849 <item>
850 任何发布系列中高版本的sylpheed都会被安装;因此只有没有其它版本可以安装时
851 才会安装0.4.99。已安装包的优先级。
852 </item>
853 <tag>-1</tag>
854 <item>
855 负的优先级也是允许的,它会组织0.4.99版被安装。
856 </item>
857 </taglist>
858 <p>
859 钉子也可以用来指定软件包的<tt>version</tt>、<tt>release</tt>或
860 <tt>origin</tt>。
861 <p>
862 我们已经看到,钉在一个<tt>version</tt>上,可以使用具体的版本号,也可以使
863 用通配符一次指定多个版本。
864 <!-- what's available? standard shell globs? ?*[] or more? -->
865 <p>
866 <tt>release</tt>选项依赖于APT仓库上的或者CD中的Release文件。如果你使用的
867 APT仓库并没有提供这个文件,这个选项就没有任何用处了。你可以在
868 <tt>/var/lib/apt/lists/</tt>中看到Release文件的内容。release的参数是:
869 <tt>a</tt>(存档)、<tt>c</tt>(部件)、<tt>v</tt>(版本)、<tt>o</tt>(起源)
870 和<tt>l</tt>(标签)。
871 <p>
872 例如:
873 <p>
874 <example>
875 Package: *
876 Pin: release v=2.2*,a=stable,c=main,o=Debian,l=Debian
877 Pin-Priority: 1001
878 </example>
879 <p>
880 在这个例子中,我们选择了Debian版本2.2*(可以是2.2r2、2.2r3——这些版本中通常
881 包含了对安全问题的修复和其它重要更新),<tt>stable</tt>仓库,<tt>main</tt>
882 (相应的还有<tt>contrib</tt>或者<tt>non-free</tt>)区段、起源和标签都是
883 Debian。origin(o=)定义了谁制作了这个Release文件,label(l=)定义了发行版的
884 名字:Debian自己就使用Debian而Progeny则使用Progeny。Release文件的例子如下
885 所示:
886 <p>
887 <example>
888 $ cat /var/lib/apt/lists/ftp.debian.org.br_debian_dists_potato_main_binary-i386_Release
889 Archive: stable
890 Version: 2.2r3
891 Component: main
892 Origin: Debian
893 Label: Debian
894 Architecture: i386
895 </example>
896 </sect>
897 </chapt>
898
899 <chapt id="helpers">几个非常有用的工具
900 <sect id="equivs">如何安装本地编译的软件包:equivs
901 <p>
902 有时,用户想使用某些软件的特殊版本,它们只以源代码的形式存在,没有现成
903 的Debian软件包。软件包管理系统在处理这类事务时可能会出问题。假设你想编
904 译新版本的邮件服务器,所有的事情都很正常,但是Debian中的很多软件包是依
905 赖于MTA(邮件传输代理)的。由于你是自己手工编译安装软件,软件包管理系统
906 对此一无所知。
907 <p>
908 现在是<package>equivs</package>登台的时候了。用它来安装软件包,它所做
909 的工作就是创建一个新的空软件包来实现关联,让软件包管理系统相信所有的依
910 赖关系都可以满足。
911 <p>
912 在我们开始以前,我必须提醒你,编译某个软件最安全的方法是对该软件现有
913 的Debian软件包进行修改后重新编译,如果你并不知道你正在干什么,劝你不要使
914 用equivs替换关联包。更多信息请参考<ref id="sourcehandling">。
915 <p>
916 继续上面的例子,你安装好了新编译的<prgn>postfix</prgn>,接下来打算安装
917 <package>mutt</package>。突然你发现<package>mutt</package>想安装另外一
918 个MTA,但实际上你已经有了你的MTA。
919 <p>
920 转到某个目录(例如<file>/tmp</file>)执行:
921
922 <p>
923 <example>
924 # equivs-control <var>name</var>
925 </example>
926
927 <p>
928 将<var>name</var>替换为你创建的控制文件,控制文件按如下格式创建:
929
930 <p>
931 <example>
932 Section: misc
933 Priority: optional
934 Standards-Version: 3.0.1
935
936 Package: &lt;enter package name; defaults to equivs-dummy&gt;
937 Version: &lt;enter version here; defaults to 1.0&gt;
938 Maintainer: &lt;your name and email address; defaults to username&gt;
939 Pre-Depends: &lt;packages&gt;
940 Depends: &lt;packages&gt;
941 Recommends: &lt;packages&gt;
942 Suggests: &lt;package&gt;
943 Provides: &lt;(virtual)package&gt;
944 Architecture: all
945 Copyright: &lt;copyright file; defaults to GPL2&gt;
946 Changelog: &lt;changelog file; defaults to a generic changelog&gt;
947 Readme: &lt;README.Debian file; defaults to a generic one&gt;
948 Extra-Files: &lt;additional files for the doc directory, comma-separated&gt;
949 Description: &lt;short description; defaults to some wise words&gt;
950 long description and info
951 .
952 second paragraph
953 </example>
954
955 <p>
956 我们只需按自己的需要修改相关项目就行了。文件中每个项目都描述得很清楚,我
957 们不必在此逐行解释它们。现在开始修改吧:
958
959 <p>
960 <example>
961 Section: misc
962 Priority: optional
963 Standards-Version: 3.0.1
964
965 Package: mta-local
966 Provides: mail-transport-agent
967 </example>
968
969 <p>
970 行了,就是这样。<package>mutt</package>依赖于<package>mail-transport-agent
971 </package>,这是所有MTA共同提供的一个虚拟包,我可以简单地将这个软件包命名
972 为<package>mail-transport-agent</package>,不过我更愿意使用系统的虚拟包方
973 案,使用Provides选项。
974 <p>
975 现在你可以开始构建软件包了:
976
977 <p>
978 <example>
979 # equivs-build <var>name</var>
980 dh_testdir
981 touch build-stamp
982 dh_testdir
983 dh_testroot
984 dh_clean -k
985 # Add here commands to install the package into debian/tmp.
986 touch install-stamp
987 dh_testdir
988 dh_testroot
989 dh_installdocs
990 dh_installchangelogs
991 dh_compress
992 dh_fixperms
993 dh_installdeb
994 dh_gencontrol
995 dh_md5sums
996 dh_builddeb
997 dpkg-deb: building package `<var>name</var>' in `../<var>name</var>_1.0_all.deb'.
998
999 软件包已经被创建了,注意,软件包是创建在当前目录中的。
1000 </example>
1001
1002 <p>
1003 然后安装这个<tt>.deb</tt>文件。
1004 <p>
1005 众所周知,<prgn>equivs</prgn>的用法很多,譬如你可以创建一个<tt>my-favorites
1006 </tt>软件包,它依赖于你通常安装的软件包。尽情发挥你的想像力吧,当然还是要小心。
1007 <p>
1008 重要提示:在<file>/usr/share/doc/equivs/examples</file>目录下有控制文件
1009 的例子,最好看一下。
1010 </sect>
1011
1012 <sect id="localepurge">移除无用的地区配置(locale)文件:localepurge
1013 <p>
1014 许多Debian用户仅在固定地区使用Debian。例如,在巴西的Debian用户,通常使
1015 用<tt>pt_BR</tt>地区配置文件而不会关心<tt>es</tt>地区配置文件。
1016 <p>
1017 对于这类用户而言<package>localepurge</package>是一个非常有用的工具,你可
1018 以仅保留你当前所用的地区配置文件,删除其它无用的文件,从而释放大量硬盘空
1019 间。运行<tt>apt-get install localepurge</tt>就行了。
1020 <p>
1021 它配置起来非常容易,debconf的提问将引导用户一步一步完成设置。在回答第一
1022 个问题时请务必谨慎,如果回答错了,系统可能删掉所有的地区配置文件,包括你
1023 正在使用的这个。复原它们的唯一方法就是重装那些软件包。
1024 </sect>
1025
1026 <sect id="helper-show-versions">如何知晓哪些软件包可以升级
1027 <p>
1028 <prgn>apt-show-versions</prgn>工具可以告诉你系统中哪些包可以更新以及其它
1029 一些有用的信息。<tt>-u</tt>选项可以显示可更新软件包列表:
1030
1031 <p>
1032 <example>
1033 $ apt-show-versions -u
1034 libeel0/unstable upgradeable from 1.0.2-5 to 1.0.2-7
1035 libeel-data/unstable upgradeable from 1.0.2-5 to 1.0.2-7
1036 </example>
1037 </sect>
1038
1039 </chapt>
1040
1041 <chapt id="search">获取软件包信息
1042 <p>
1043 有些基于APT系统的前端程序,能十分方便地获得系统软件包列表,列表包括可安
1044 装或已安装的软件包,还可以显示某软件包属于哪个section,它的优先级是多少,
1045 它的说明文档等等。
1046 <p>
1047 但是...在此我们想的学习如何使用APT本身来完成。你如何找出你想要安装的软件
1048 包的名称?
1049 <p>
1050 我们完成这个任务的方法有很多。我们从<tt>apt-cache</tt>开始,APT系统使用
1051 这个程序来维护它的数据库。下面我们通过一些实际操作来对它做个概览。
1052
1053 <sect id="cache">获得软件包名称
1054 <p>
1055 假设你十分怀念玩Atari 2600的好日子,你决定用APT安装一个Atari emulator,
1056 随后再下载几个游戏,你可以这样:
1057
1058 <p>
1059 <example>
1060 # apt-cache search atari
1061 atari-fdisk-cross - Partition editor for Atari (running on non-Atari)
1062 circuslinux - The clowns are trying to pop balloons to score points!
1063 madbomber - A Kaboom! clone
1064 tcs - Character set translator.
1065 atari800 - Atari emulator for svgalib/X/curses
1066 stella - Atari 2600 Emulator for X windows
1067 xmess-x - X binaries for Multi-Emulator Super System
1068 </example>
1069
1070 <p>
1071
1072 我们找到了几个相关的软件包,以及有关的简单描述。想进一步获得某个软件包的
1073 详细信息,你可以运行:
1074
1075 <p>
1076 <example>
1077 # apt-cache show stella
1078 Package: stella
1079 Priority: extra
1080 Section: non-free/otherosfs
1081 Installed-Size: 830
1082 Maintainer: Tom Lear &lt;tom@trap.mtview.ca.us&gt;
1083 Architecture: i386
1084 Version: 1.1-2
1085 Depends: libc6 (&gt;= 2.1), libstdc++2.10, xlib6g (&gt;= 3.3.5-1)
1086 Filename: dists/potato/non-free/binary-i386/otherosfs/stella_1.1-2.deb
1087 Size: 483430
1088 MD5sum: 11b3e86a41a60fa1c4b334dd96c1d4b5
1089 Description: Atari 2600 Emulator for X windows
1090 Stella is a portable emulator of the old Atari 2600 video-game console
1091 written in C++. You can play most Atari 2600 games with it. The latest
1092 news, code and binaries for Stella can be found at:
1093 http://www4.ncsu.edu/~bwmott/2600
1094 </example>
1095
1096 <p>
1097 屏幕上显示出这个软件包的详细信息及其用途的完整描述。如果你的系统中已安装
1098 了某个软件包而系统又搜索到它的新版本,系统会将它们的详细信息一并列出。如
1099 下例:
1100
1101 <p>
1102 <example>
1103 # apt-cache show lilo
1104 Package: lilo
1105 Priority: important
1106 Section: base
1107 Installed-Size: 271
1108 Maintainer: Russell Coker &lt;russell@coker.com.au&gt;
1109 Architecture: i386
1110 Version: 1:21.7-3
1111 Depends: libc6 (&gt;= 2.2.1-2), debconf (&gt;=0.2.26), logrotate
1112 Suggests: lilo-doc
1113 Conflicts: manpages (&lt;&lt;1.29-3)
1114 Filename: pool/main/l/lilo/lilo_21.7-3_i386.deb
1115 Size: 143052
1116 MD5sum: 63fe29b5317fe34ed8ec3ae955f8270e
1117 Description: LInux LOader - The Classic OS loader can load Linux and others
1118 This Package contains lilo (the installer) and boot-record-images to
1119 install Linux, OS/2, DOS and generic Boot Sectors of other OSes.
1120 .
1121 You can use Lilo to manage your Master Boot Record (with a simple text screen)
1122 or call Lilo from other Boot-Loaders to jump-start the Linux kernel.
1123
1124 Package: lilo
1125 Status: install ok installed
1126 Priority: important
1127 Section: base
1128 Installed-Size: 190
1129 Maintainer: Vincent Renardias &lt;vincent@debian.org&gt;
1130 Version: 1:21.4.3-2
1131 Depends: libc6 (&gt;= 2.1.2)
1132 Recommends: mbr
1133 Suggests: lilo-doc
1134 Description: LInux LOader - The Classic OS loader can load Linux and others
1135 This Package contains lilo (the installer) and boot-record-images to
1136 install Linux, OS/2, DOS and generic Boot Sectors of other OSes.
1137 .
1138 You can use Lilo to manage your Master Boot Record (with a simple text screen)
1139 or call Lilo from other Boot-Loaders to jump-start the Linux kernel.
1140 </example>
1141
1142 <p>
1143 注意,首先列出的是可用软件包,接着列出的是已安装软件包。获取某个软件包的
1144 常规信息可运行:
1145
1146 <p>
1147 <example>
1148 # apt-cache showpkg penguin-command
1149 Package: penguin-command
1150 Versions:
1151 1.4.5-1(/var/lib/apt/lists/download.sourceforge.net_debian_dists_unstable_main_binary-i386_Packages)(/var/lib/dpkg/status)
1152
1153 Reverse Depends:
1154 Dependencies:
1155 1.4.5-1 - libc6 (2 2.2.1-2) libpng2 (0 (null)) libsdl-mixer1.1 (2 1.1.0) libsdl1.1 (0 (null)) zlib1g (2 1:1.1.3)
1156 Provides:
1157 1.4.5-1 -
1158 Reverse Provides:
1159 </example>
1160
1161 <p>
1162 如果仅想了解某软件包的与哪些软件包关联,可运行:
1163
1164 <p>
1165 <example>
1166 # apt-cache depends penguin-command
1167 penguin-command
1168 Depends: libc6
1169 Depends: libpng2
1170 Depends: libsdl-mixer1.1
1171 Depends: libsdl1.1
1172 Depends: zlib1g
1173 </example>
1174
1175 <p>
1176 总之,有一系列工具可帮助我们找到我们想要的软件包。
1177 </sect>
1178
1179 <sect id="dpkg-search">使用dpkg查找软件包名称
1180 <p>
1181 另一个定位软件包的方法是知道软件包中某个关键文件的名称。例如,你编译时需
1182 要某个“<tt>.h</tt>”头文件,查找提供该文件的软件包,你可以运行:
1183
1184 <p>
1185 <example>
1186 # dpkg -S stdio.h
1187 libc6-dev: /usr/include/stdio.h
1188 libc6-dev: /usr/include/bits/stdio.h
1189 perl: /usr/lib/perl/5.6.0/CORE/nostdio.h
1190 </example>
1191
1192 <p>
1193 或者:
1194
1195 <p>
1196 <example>
1197 # dpkg -S /usr/include/stdio.h
1198 libc6-dev: /usr/include/stdio.h
1199 </example>
1200
1201 <p>
1202 解系统中已安装软件的软件包名称十分有用,譬如当你想清理硬盘空间时,可以运行:
1203
1204 <p>
1205 <example>
1206 # dpkg -l | grep mozilla
1207 ii mozilla-browse 0.9.6-7 Mozilla Web Browser
1208 </example>
1209 <p>
1210 这个命令的缺点是它会“截断”软件包的名字。在上例中,软件包的全称是
1211 <tt>mozilla-browser</tt>,解决这个问题可以使用<tt>COLUMNS</tt>环境变量:
1212
1213 <p>
1214 <example>
1215 [kov]@[couve] $ COLUMNS=132 dpkg -l | grep mozilla
1216 ii mozilla-browser 0.9.6-7 Mozilla Web Browser - core and browser
1217 </example>
1218
1219 <p>
1220 或显示成这样:
1221
1222 <p>
1223 <example>
1224 # apt-cache search "Mozilla Web Browser"
1225 mozilla-browser - Mozilla Web Browser
1226 </example>
1227 </sect>
1228
1229 <sect id="auto-apt">如何“按需”安装软件包
1230 <p>
1231 你正在编译某段程序,突然,停住了!一条错误信息报告说你没有它需要的<tt>.h
1232 </tt>头文件。让<prgn>auto-apt</prgn>来救你吧,它问你是否要安装需要
1233 的软件包,然后挂起编译进程,安装好软件包后再恢复编译进程。
1234 <p>
1235 你所要做的仅仅是:
1236
1237 <p>
1238 <example>
1239 # auto-apt run command
1240 </example>
1241
1242 <p>
1243 这里“command”指在运行过程中可能出现“需求文件不存在”问题的命令。例如:
1244
1245 <p>
1246 <example>
1247 # auto-apt run ./configure
1248 </example>
1249
1250 <p>
1251 一会儿,它就会告诉你要安装所需的软件包并自动转到apt-get处理。如果你正在
1252 运行X,就会一个图形界面提示窗口。
1253 <p>
1254 为了提高效率auto-apt所用的数据库需要实时更新。可调用
1255 <tt>auto-apt update</tt>,<tt>auto-apt updatedb</tt>和
1256 <tt>auto-apt update-local</tt>来完成更新。
1257 </sect>
1258
1259 <sect id="apt-file">如何知道文件属于哪个软件包
1260 <p>
1261 如果你想安装某个软件包,但用<prgn>apt-cache</prgn>查不出它的名称,不过你
1262 知道这个程序的文件名,或这个软件包中某些文件的文件名,那么你可以用<prgn>
1263 apt-file</prgn>来查找软件包名称。如下所示:
1264
1265 <p>
1266 <example>
1267 $ apt-file search <var>filename</var>
1268 </example>
1269
1270 <p>
1271 它用起来很象<tt>dpkg -S</tt>,不过它还会列出包含该文件的已删除软件包。它
1272 也可以用来查找哪个软件包包含编译时所缺的文件,当然,解决这类问题<prgn>
1273 auto-apt</prgn>可能是更好的方案,请参考<ref id="auto-apt">。
1274 <p>
1275 用这个命令,你可以列出软件包的内容:
1276
1277 <p>
1278 <example>
1279 $ apt-file list <var>packagename</var>
1280 </example>
1281
1282 <p>
1283 <prgn>apt-file</prgn>用一个数据库来存放所有软件包的内容信息,和auto-apt
1284 一样,这个数据库也需要实时更新,完成更新可以运行:
1285
1286 <p>
1287 <example>
1288 # apt-file update
1289 </example>
1290
1291 <p>
1292 缺省情况下,<prgn>apt-file</prgn>和<prgn>auto-apt</prgn>使用同一个数据库,
1293 参考<ref id="auto-apt">。
1294
1295 </sect>
1296
1297 <sect id="apt-listchanges">如何掌握软件包的变化情况
1298 <p>
1299 在每个软件包被安装以后,都会在文档目录(<tt>/usr/share/doc/packagename</tt>)
1300 生成一个<tt>changelog.Debian.gz</tt>的文件,这个文件记录了该软件包最后一
1301 次更新对系统做了哪些修改,你可以用<tt>zless</tt>阅读这些信息。不过当你对
1302 整个系统进行升级以后,逐个查看软件包的更新信息可不是件容易事。
1303 <p>
1304 有一个工具能帮你完成这项任务,它就是<prgn>apt-listchanges</prgn>。首先你
1305 要装上<prgn>apt-listchanges</prgn>软件包。在安装的过程中,为了进行配
1306 置,Debconf会问你一些问题,按你的要求回答它们就行了。
1307 <p>
1308 第一个问题是问你希望apt-listchanges如何来显示修改日志。你可以让它把信息
1309 通过邮件的方式发送给你,这对于自动更新是非常有用的。或者你可以让它在<prgn>
1310 less</prgn>等程序中显示修改日志,这样在继续升级前你就可以查看它们了。如果
1311 你不希望<prgn>apt-listchanges</prgn>在升级的时候自动的运行,可以
1312 回答<tt>none</tt>。
1313 <p>
1314 安装了apt-listchanges后,每当apt下载软件包之后(不论来源是Internet、光盘
1315 或是硬盘)都会显示这些软件包的系统更新信息。
1316
1317 </sect>
1318 </chapt>
1319
1320 <chapt id="sourcehandling">源码包操作
1321 <sect id="source">下载源码包
1322 <p>
1323 在自由软件的世界里,经常需要学习源码或为程序除错,所以你需要下载它们。APT提
1324 供了一套简便的方法帮你获得发布版中众多程序的源代码以及创建一个.debs所需的
1325 所有文件。
1326 <p>
1327 Debian源码的另一个普遍用途是将unstable发布版的新版程序进行改写以供别的发
1328 布版使用。例如,从stable发布版外引入新的软件包,需要重新生成.debs将它在
1329 原发布版中的关联关系迁移到新的发布版。
1330 <p>
1331 要完成这些工作,<tt>/etc/apt/sources.list</tt>文件中<tt>deb-src</tt>所指
1332 引用镜像源应该是unstable,别忘了将行首的注释符去掉。详情参考
1333 <ref id="sources.list">。
1334 <p>
1335 用下面的命令下载源码包:
1336
1337 <p>
1338 <example>
1339 $ apt-get source packagename
1340 </example>
1341 <p>
1342 通常会下载三个文件:一个<tt>.orig.tar.gz</tt>、一个<tt>.dsc</tt>和一个<tt>
1343 .diff.gz</tt>。对于Debian专用的软件包,不会下载最后一个文件,第一个文件的文
1344 件名中没有“<tt>orig</tt>”项。
1345 <p>
1346 dpkg-source通过<tt>.dsc</tt>文件中的信息,将源码包解包到
1347 <var>packagename-version</var>目录,下载下来的源码包中有一个
1348 <tt>debian/</tt>目录,里面是创建.deb包所需的文件。
1349 <p>
1350 想要下载的源码包自动编译成软件包,只需在命令行中加上<tt>-b</tt>,如下:
1351
1352 <p>
1353 <example>
1354 $ apt-get -b source packagename
1355 </example>
1356
1357 <p>
1358 如果你不打算在下载后就立刻创建.deb文件,你可以在之后用下面的命令创建:
1359
1360 <p>
1361 <example>
1362 $ dpkg-buildpackage -rfakeroot -uc -b
1363 </example>
1364
1365 <p>
1366 上述命令应当在下载后为软件包创建的目录中执行。要安装用这种方式构建好的
1367 软件包,只能直接使用软件包管理器,例如:
1368
1369 <p>
1370 <example>
1371 # dpkg -i <var>file.deb</var>
1372 </example>
1373
1374 <p>
1375 <prgn>apt-get</prgn>的<tt>source</tt>命令与它的其它命令有所不同,普通用
1376 户就可以运行source命令。文件被下载到用户调用<tt>apt-source package</tt>
1377 命令时所处的目录中。
1378 </sect>
1379
1380 <sect id="build-dep">编译源码包所需的软件包
1381 <p>
1382 通常,编译源码包时要用到某些头文件和共享库,所有的源码包的控制文件中都
1383 有一个域“Build-Depends:”,域中指出了编译该源码包需要哪些附加包。
1384 <p>
1385 APT提供了一个简单的方法下载这些附加包,你只需运行<tt>apt-get build-dep
1386 package</tt>,其中“package”就是你打算编译的源码包
1387 名称。见下例:
1388
1389 <p>
1390 <example>
1391 # apt-get build-dep gmc
1392 Reading Package Lists... Done
1393 Building Dependency Tree... Done
1394 The following NEW packages will be installed:
1395 comerr-dev e2fslibs-dev gdk-imlib-dev imlib-progs libgnome-dev libgnorba-dev
1396 libgpmg1-dev
1397 0 packages upgraded, 7 newly installed, 0 to remove and 1 not upgraded.
1398 Need to get 1069kB of archives. After unpacking 3514kB will be used.
1399 Do you want to continue? [Y/n]
1400 </example>
1401
1402 <p>
1403 这些将要被安装的包是用于正确编译<package>gmc</package>的。注意这个命令不
1404 能用来搜索某个软件的源码包,你得另外运行<tt>apt-get source</tt>下载源码包。
1405
1406 <p>
1407 如果你想做的是检查要编译一个软件包需要哪些其它的软件包,<tt>apt-cache show
1408 </tt>可以显示它(从那考<ref id="search">,在众多信息之中,<tt>Build-Depends
1409 </tt>一行会列出那些需要的软件包。
1410
1411 <p>
1412 <example>
1413 # apt-cache showsrc <var>package</var>
1414 </example>
1415
1416 </sect>
1417 </chapt>
1418
1419 <chapt id="erros">如何处理错误
1420 <sect id="erros-comuns">一般错误
1421 <p>
1422 错误总是发生,大部分是因为用户的粗心,下面列举一些常见错误及处理方法。
1423 <p>
1424 如果在运行<tt>apt-get install package</tt>时,你的系统报告如下信息:
1425
1426 <p>
1427 <example>
1428 Reading Package Lists... Done
1429 Building Dependency Tree... Done
1430 W: Couldn't stat source package list 'http://people.debian.org unstable/ Packages' (/var/state/apt/lists/people.debian.org_%7ekov_debian_unstable_Packages) - stat (2 No such file or directory)
1431 W: You may want to run apt-get update to correct these missing files
1432 E: Couldn't find package penguineyes
1433 </example>
1434
1435 <p>
1436 上次你修改<tt>/etc/apt/sources.list</tt>后,忘了运行<tt>apt-get update
1437 </tt>更新。
1438 <p>
1439 如果出现这样的信息:
1440
1441 <p>
1442 <example>
1443 E: Could not open lock file /var/lib/dpkg/lock - open (13 Permission denied)
1444 E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
1445 </example>
1446
1447 <p>
1448
1449 如果你没有root权限,运行除<tt>source</tt>外的其它<prgn>apt-get</prgn>命
1450 令,如会出现上面的错误信息。这是因为你是普通用户。
1451 <p>
1452 当你同时运行两个<prgn>apt-get</prgn>进程,或者当你试图运行<prgn>apt-get
1453 </prgn>时已有一个的<prgn>dpkg</prgn>进程处于激活状态,系统也
1454 会报告与上面相似的错误信息。唯一能与其它命令同时运行的只有<tt>source</tt>
1455 命令。
1456 <p>
1457 如果在安装过程中出现中断,然后你发现该软件包既不能重装又不能删除,试试下
1458 面两个命令:
1459
1460 <p>
1461 <example>
1462 # apt-get -f install
1463 # dpkg --configure -a
1464 </example>
1465
1466 <p>
1467 再试着安装那个软件包,如果不行再次运行上述命令后再试。这两个命令对于那些
1468 使用unstable的玩家非常有用。
1469
1470 <p>
1471 如果你在运行<tt>apt-get update</tt>时看到“E: Dynamic MMap ran out of room”,
1472 那么在<file>/etc/apt/apt.conf</file>加入如下内容:
1473
1474 <example>
1475 APT::Cache-Limit 10000000;
1476 </example>
1477
1478 </sect>
1479
1480 <sect id="help">在哪儿获得帮助?
1481 <p>
1482 如果你发现自己有太多疑问,没关系,有大量的Debian软件包管理系统文档供你参
1483 考。<tt>--help</tt>和帮助文档能为你提供巨大的帮助,这些文档位于<tt>
1484 /usr/share/doc</tt>目录中,如<tt>/usr/share/doc/apt</tt>。
1485 <p>
1486 如果本文档没法帮你排忧解难,可以去Debian邮件列表找找答案,在相关栏目内你
1487 会获得更多信息。Debian的网址是:<url id="http://www.debian.org"
1488 name="http://www.debian.org">。
1489 <p>
1490 记住只有Debian用户才能这些邮件列表和资源,其它操作系统的用户请到相关系统
1491 发布者建立的社区中获取更多资源。
1492 </sect>
1493 </chapt>
1494
1495 <chapt id="distros">哪些发行版支持APT?
1496 <p>
1497
1498 下面是部分使用APT系统的发行版的名称:
1499 <p>
1500 Debian GNU/Linux (<url id="http://www.debian.org" name="http://www.debian.org">)
1501 - APT正是为这个发行版开发的
1502 <p>
1503 Conectiva (<url id="http://www.conectiva.com.br" name="http://www.conectiva.com.br">)
1504 - 这是第一个将APT移植到rpm上的发行版
1505 <p>
1506 Libranet (<url id="http://www.libranet.com" name="http://www.libranet.com">)
1507 <p>
1508 Mandrake (<url id="http://www.mandrake.com" name="http://www.mandrake.com">)
1509 <p>
1510 PLD (<url id="http://www.pld.org.pl" name="http://www.pld.org.pl">)
1511 <p>
1512 Vine (<url id="http://www.vinelinux.org" name="http://www.vinelinux.org">)
1513 <p>
1514 APT4RPM (<url id="http://apt4rpm.sf.net" name="http://apt4rpm.sf.net">)
1515 <p>
1516 Alt Linux (<url id="http://www.altlinux.ru/" name="http://www.altlinux.ru/">)
1517 <p>
1518 Red Hat (<url id="http://www.redhat.com/" name="http://www.redhat.com/">)
1519 <p>
1520 Sun Solaris (<url id="http://www.sun.com/" name="http://www.sun.com/">)
1521 <p>
1522 SuSE (<url id="http://www.suse.de/" name="http://www.suse.de/">)
1523 <p>
1524 Yellow Dog Linux (<url id="http://www.yellowdoglinux.com/"
1525 name="http://www.yellowdoglinux.com/">)
1526 </chapt>
1527
1528 <chapt id="agradecimentos">致谢
1529 <p>
1530 非常感谢你们,我Debian-BR项目组的好朋友们!还有你Debian,始终在我身边帮助
1531 我,给我动力不停工作为全人类做出贡献,帮助我树立拯救世界的理想。:)
1532 <p>
1533 我还要感谢CIPSGA,他们给予我们项目组乃至整个自由软件项目巨大的帮助,是我
1534 们灵感的源泉。
1535 <p>
1536
1537 特别感谢:
1538 <p>
1539 Yooseong Yang &lt;yooseong@debian.org&gt;
1540 <p>
1541 Michael Bramer &lt;grisu@debian.org&gt;
1542 <p>
1543 Bryan Stillwell &lt;bryan@bokeoa.com&gt;
1544 <p>
1545 Pawel Tecza &lt;pawel.tecza@poczta.fm&gt;
1546 <p>
1547 Hugo Mora &lt;h.mora@melix.com.mx&gt;
1548 <p>
1549 Luca Monducci &lt;luca.mo@tiscali.it&gt;
1550 <p>
1551 Tomohiro KUBOTA &lt;kubota@debian.org&gt;
1552 <p>
1553 Pablo Lorenzzoni &lt;spectra@debian.org&gt;
1554 <p>
1555 Steve Langasek &lt;vorlon@netexpress.net&gt;
1556 <p>
1557 Arnaldo Carvalho de Melo &lt;acme@conectiva.com.br&gt;
1558 <p>
1559 Erik Rossen &lt;rossen@freesurf.ch&gt;
1560 <p>
1561 Ross Boylan &lt;RossBoylan@stanfordalumni.org&gt;
1562 <p>
1563 Matt Kraai &lt;kraai@debian.org&gt;
1564 <p>
1565 Aaron M. Ucko &lt;ucko@debian.org&gt;
1566 <p>
1567 Jon &Aring;slund &lt;d98-jas@nada.kth.se&gt;
1568 </chapt>
1569
1570 <chapt id="novas">本使用指南的新版本
1571 <p>
1572 本操作手册由<url id="http://www.debian-br.org" name="Debian-BR项目组">撰
1573 写,我们希望它能为Debian用户提供有效的帮助。
1574 <p>
1575 你可以从Debian文档项目页面获得本文档的新版本:<url
1576 id="http://www.debian.org/doc/ddp" name="http://www.debian.org/doc/ddp">。
1577 <p>
1578 对本文档有任何意见或建议可直接发email给我:<email>kov@debian.org</email>。
1579 (中文用户请发给译者)
1580 </chapt>
1581
1582 </book>
1583
1584 </debiandoc>

  ViewVC Help
Powered by ViewVC 1.1.5