第五章 获得软件包信息
对于APT系统来说有许多的前后端程序可以使得我们很容易的得到可以获得的安装包和已经安装的安装包列表,同时还可以得到一些诸如一个安装包所在的部分,他的优先级及其描述等等一些信息.
但是在这里我们的目的是要学习如何使用纯粹的APT.所以我们如何查找到我们要安装的软件包的名字呢?
对于这个任务我们有许多的办法.我们要从apt-cache开始.这个程序是APT系统用来维护他的数据库的.我们要简单的看一些实际的程序.
5.1 获得安装包名
例如,所如我们要怀念一下Atari 2600的日子.我们可以使用APT安装一个Atari模拟器,然后下载一些游戏.我们可以这样的来做:
# apt-cache search atari
aranym - Atari Running on Any Machine
atari-fdisk-cross - Partition editor for Atari (running on non-Atari)
stella - Atari 2600 Emulator for SDL & X windows
xmess-x - X binaries for the Multi Emulator Super System
这样我们就可以查到许多与我们所希望的安装包相关的软件包,同时附有一些简要的说明.如果要得以某一个安装包更为详细的说明信息,我们可以用下面的命令:
# apt-cache show stella
Package: stella
Priority: optional
Section: contrib/otherosfs
Installed-Size: 1628
Maintainer: Tom Lear <tom@trap.mtview.ca.us>
Architecture: i386
Version: 1.4.1-1
Depends: libc6 (>= 2.3.2.ds1-4), libgcc1 (>= 1:3.4.1-3), libpng12-0 (>= 1.2.5.0-4), libsdl1.2debian (>> 1.2.7-0), libstdc++5 (>= 1:3.3.4-1), zlib1g (>= 1:1.2.1)
Filename: pool/contrib/s/stella/stella_1.4.1-1_i386.deb
Size: 481058
MD5sum: fa90ff4ea5e2692ac6c649e140515376
Description: Atari 2600 Emulator for SDL & X windows
Stella is a portable emulator of the old Atari 2600 video-game console
written in C++. You can play most Atari 2600 games with it.
.
Homepage: http://stella.sf.net/
Tag: hardware::emulation, uitoolkit::sdl
在这个输出中,我们可以得到我们要安装(或是不要安装的)软件包的详细信息,同时附有关于这个软件包的全部的描述.如果我们的系统已经安装了一个软件包了同时也有一个更新的版本,我们就会得到这两个版本的信息.例如:
apt-cache show grub
Package: grub
Priority: optional
Section: admin
Installed-Size: 676
Maintainer: Grub Maintainers <pkg-grub-devel@lists.alioth.debian.org>
Architecture: i386
Version: 0.97-3
Depends: libc6 (>= 2.3.5-1), libncurses5 (>= 5.4-5)
Suggests: grub-doc, grubconf
Filename: pool/main/g/grub/grub_0.97-3_i386.deb
Size: 357734
MD5sum: 5ce5fdba383383e99616b9cc77ec7d9f
Description: GRand Unified Bootloader
GRUB is a GPLed bootloader intended to unify bootloading across x86
operating systems. In addition to loading the Linux kernel,
it implements the Multiboot standard, which allows for flexible loading
of multiple boot images (needed for modular kernels such as the GNU Hurd).
Tag: admin::boot, interface::shell, interface::text-mode, role::sw:application, uitoolkit::ncurses
Package: grub
Priority: optional
Section: admin
Installed-Size: 660
Maintainer: Grub Maintainers <pkg-grub-devel@lists.alioth.debian.org>
Architecture: i386
Version: 0.95+cvs20040624-19
Depends: libc6 (>= 2.3.5-1), libncurses5 (>= 5.4-5)
Suggests: grub-doc, grubconf
Filename: pool/main/g/grub/grub_0.95+cvs20040624-19_i386.deb
Size: 349222
MD5sum: ac7663a4869cec83212f95274298d61d
Description: GRand Unified Bootloader
GRUB is a GPLed bootloader intended to unify bootloading across x86
operating systems. In addition to loading the Linux kernel,
it implements the Multiboot standard, which allows for flexible loading
of multiple boot images (needed for modular kernels such as the GNU Hurd).
Tag: admin::boot, interface::shell, interface::text-mode, role::sw:application, uitoolkit::ncurses
Package: grub
Priority: optional
Section: admin
Installed-Size: 668
Maintainer: Grub Maintainers <pkg-grub-devel@lists.alioth.debian.org>
Architecture: i386
Version: 0.95+cvs20040624-17
Depends: libc6 (>= 2.3.2.ds1-4), libncurses5 (>= 5.4-1)
Suggests: grub-doc, grubconf
Filename: pool/main/g/grub/grub_0.95+cvs20040624-17_i386.deb
Size: 358684
MD5sum: be75f23a365eca1270960d305a70da54
Description: GRand Unified Bootloader
GRUB is a GPLed bootloader intended to unify bootloading across x86
operating systems. In addition to loading the Linux kernel,
it implements the Multiboot standard, which allows for flexible loading
of multiple boot images (needed for modular kernels such as the GNU Hurd).
在这里我们要注意到在这个列中第一个可以获得安装的软件包而第二个是我们已经安装的安装包.要得到关于某一个软件包的一般信息,我们可以用下面的命令:
# apt-cache showpkg penguin-command
Package: penguin-command
Versions:
1.6.10-1(/var/lib/apt/lists/10.1.10.8_mirror_debian_dists_testing_main_binary-i386_Packages)(/var/lib/apt/lists/10.1.10.8_mirror_debian_dists_unstable_main_binary-i386_Packages)
1.6.7-2(/var/lib/apt/lists/10.1.10.8_mirror_debian_dists_stable_main_binary-i386_Packages)
Reverse Depends:
Dependencies:
1.6.10-1 - libc6 (2 2.3.2.ds1-4) libsdl-image1.2 (2 1.2.3) libsdl-mixer1.2 (2 1.2.5) libsdl1.2debian (4 1.2.7+1.2.8)
1.6.7-2 - libc6 (2 2.3.1-1) libjpeg62 (0 (null)) libpng12-0 (0 (null)) libsdl-mixer1.2 (2 1.2.4-3) libsdl1.2debian (4 1.2.3) zlib1g (2 1:1.1.4)
Provides:
1.6.10-1 -
1.6.7-2 -
Reverse Provides:
而如果我们只是希望找出这个软件包的依赖关系,我们可以用下面的命令:
# apt-cache depends penguin-command
penguin-command
依赖: libc6
依赖: libsdl-image1.2
依赖: libsdl-mixer1.2
依赖: libsdl1.2debian
总之,我们可以有一系列的方法可以查找出我们要安装的软件包的名字.
5.2 使用dpkg查找软件包名
定位一个软件包名字的一个方法就是要知道可以在这个软件包中找到的一个重要文件的名字.例如要查找一个提供常规的".h"文件以供编译用的软件包,我们可以运行下面的命令:
$ dpkg -S stdio.h
libc6-dev: /usr/include/bits/stdio.h
perl: /usr/lib/perl/5.8.7/CORE/nostdio.h
libglib2.0-dev: /usr/include/glib-2.0/glib/gstdio.h
libc6-dev: /usr/include/stdio.h
或是用下面命令:
$ dpkg -S /usr/include/stdio.h
libc6-dev: /usr/include/stdio.h
要查找一些在我们的系统上已经安装了软件包,这样的查找方法是相当有用的.例如,如果我们要清除我们的硬件驱动,我们可以用下面的命令:
# dpkg -l | grep mozilla
ii flashplayer-mozilla 7.0.25-0.1 Macromedia Flash Player
ii mozilla-browser 1.7.12-1 The Mozilla Internet application suite - cor
ii mozilla-psm 1.7.12-1 The Mozilla Internet application suite - Per
使用这个命令会存在一个"打断(break)"软件包名字的问题.在上面的例子中,软件包的全名是mozilla-browser.要修正这个问题,我们可以用下面的方法来使用COLUMNS环境变量:
$ COLUMNS=132 dpkg -l | grep mozilla
ii flashplayer-mozilla 7.0.25-0.1 Macromedia Flash Player
ii mozilla-browser 1.7.12-1 The Mozilla Internet application suite - core and browser
ii mozilla-psm 1.7.12-1 The Mozilla Internet application suite - Personal Security Manager (PS
或是用下面的方法:
$ apt-cache search "Mozilla Web Browser"
mozilla - The Mozilla Internet application suite - meta package
mozilla-chatzilla - Mozilla Web Browser - irc client
mozilla-mailnews - The Mozilla Internet application suite - mail and news support
mozilla-psm - The Mozilla Internet application suite - Personal Security Manager (PSM)
flashplayer-mozilla - Macromedia Flash Player
5.3 如何安装所需的软件包
假设我们正在编译一个程序,但是突然出现一个错误,因为他需要一个我们所没有的.h文件.而这时auto-apt程序可以解决我们的问题.如果我们需要一个软件包,他就会询问我们安装这个软件包,停止相关的进程并会在软件包安装后继续执行.
我们所需要做只是运行下面的命令:
# auto-apt run command
在这里command就是我们要执行的也许会需要一些我们并没有的文件的命令.例如:
# auto-apt run ./configure
然后他会询问安装一些必需的软件包并会自动调用apt-get程序.如果我们正在运行X,就会使用一个图形界面而不是默认的文本界面.
auto-apt会保持一个有效顺序更新所需的数据库.这是由命令auto-apt update,auto-apt updatedb,auto-apt update-local来完成的.
5.4 如何查找一个文件属于哪一个软件包
如果我们要安装一个软件包而我们使用apt-cache并不能查找到搜索时用到的名字,但是我们却知道程序自己的名字,或是其他的一些属于这个安装包的文件名字,这时我们可以使用apt-file来查找这个软件包的名字.命令格式如下:
# apt-file search filename
他的工作方式与dpkg -S相类似,但是前者也会显示出一些我们并没有安装的而却包含这个文件的软件包.他可以用来查找哪些软件包包含我们在编译程序时丢失的文件,当然这样的问题我们也可以用auto-apt来解决.
我们可以用下面的命令来列出一个软件包中的内容:
# apt-file list packagename
apt-file保持一个含有包文件的数据库,这与auto-apt相类似,但是前者需要更新(up-to-date).我们可以用下面的命令来完成:
# apt-file update
在默认的情况下,apt-file会使用auto-apt的数据库.
5.5 如何保持一个软件包的更改信息
每一个软件包都会在他的文档安装目录(/usr/share/doc/packagename)安装一个名为changelog.Debian.gz的文件,在这个文件中包含有这个软件包自上一版本以来所做的更改.我们可以使用zless的帮助来阅读这些更新日志.但是在我们进行了一次完整的系统更新以后,要查找每一个软件包的更新日志并不是一件很容易的事情.
一个名为apt-listchanges的程序可以自动完成这样的任务.但是我们要保证我们的系统已经安装了这个软件包.在这个软件包的安装过程中,Debconf会对他进行配置.一些问题依赖于我们设置的Debconf所使用的优先级而并不会显示.依据我们所希望的来回答这些问题.
第一个问题是询问我们apt-listchanges如何显示更新.我们可以要他们发信给我们,这对于自动更新是一个不错的选择,或者是我们可以要他们在如less的一类的分页器中进行显示,这样我们就可以在继续更新以前进行检查.如果我们并不希望apt-listchanges在更新时自动运行我们可以回答none.
在安装了apt-listchanges以后,一旦apt有软件包下载(或是从CD得到或是磁盘),他就会在我们安将这些软件包之前显示更新列表.