13.9 为Debian安装软件包及其依赖程序

apt-get install [package]

虽然dkpg命令的功能强大,但使用一段时间后,当你试图安装需要依赖其他东西的软件包时,就会很快遇到问题(也就是所谓的“依赖关系地狱(dependency hell)”问题)。为了安装软件包A,还需要下载和安装软件包B和C,但为了安装C,还需要下载和安装软件包D和E,但为了安装E……唉,没完没了!这时就需要apt出手了!

apt命令和它的各个选项可以用于安装、升级和卸载软件包。但apt的最大优点是可以自动处理软件包之间的依赖关系。例如,如果你想安装前面例子中的软件包A,apt就可以自动下载和安装A、B、C等软件包。以后,如果想在系统中删除A,apt也可以卸载它,如果系统中没有其他软件包需要B和C,apt也一并卸载它们。

apt最初是为在Debian系统中作为dpkg的前端使用而开发的。现在在每个基于Debian的Linux系统(例如Debian、K/Ubuntu、Linspire、Xandros以及其他很多Linux系统)中都可以看到apt的身影,而且它是可以让Debian易于使用且功能强大的特性之一。此外,非Debian的Linux系统也意识到了apt是多么优秀,最终Connectiva公司对apt进行了改造,使它能够管理RPM(本章重点介绍在Debian中如何使用apt)。

提示 在基于RPM的Linux发行版本中使用apt的不错的简单介绍,可以参考本书作者的一篇文章“A Very Apropos apt”(2003年10月发行的Linux Magazine杂志中有这篇文章,也可以访问www.linux-mag.com/2003-10/apt_01.html)。除了这篇文章,也应该看看http://apt.freshrpms.net 上最新的RPM库。注意,要访问Linux Magazine的内容,得先进行免费的注册。

假设现在想用apt来安装非常棒的工具sshfs。为此,需要经历以下处理过程(记住必须以root用户来运行这些命令):

  1. # apt-get update
  2. Get:1 http://us.archive.ubuntu.com breezy Release.gpg [189B]
  3. Get:2 http://archive.ubuntu.com breezy Release.gpg [189B]
  4. Hit ftp://ftp.free.fr breezy/free Sources
  5. Hit ftp://ftp.free.fr breezy/non-free Sources
  6. Fetched 140kB in 1m4s (2176B/s)
  7. Reading package lists... Done
  8. [Results truncated for length]
  9. # apt-get install sshfs
  10. Reading package lists... Done
  11. Building dependency tree... Done
  12. The following extra packages will be installed:
  13. fuse-utils libfuse2
  14. The following NEW packages will be installed:
  15. fuse-utils libfuse2 sshfs
  16. Need to get 96.9kB of archives.
  17. After unpacking 344kB of additional disk space will be used.
  18. Do you want to continue [Y/n]? y
  19. Get:1 http://us.archive.ubuntu.com breezy/universe
  20. sshfs 1.1-1 [19.3kB]
  21. ...
  22. Fetched 96.9kB in 10s (9615B/s)
  23. Reading package fields... Done
  24. Reading package status... Done
  25. Preconfiguring packages ...
  26. ...
  27. Selecting previously deselected package sshfs.
  28. Unpacking sshfs (from .../archives/sshfs_1.1-1_i386.deb) ...
  29. Setting up sshfs (1.1-1) ...

实际上,刚才运行了两个命令,我们来看看它们是做什么的。apt-get update命令会从apt服务器[也称为仓库(repository)]下载当前可用的软件包列表,在apt配置文件(/etc/apt/sources.list)中可以设置apt服务器(如需你想看看apt仓库在哪,只需运行cat /etc/apt/sources.list)。如果在运行apt-get update命令以后,在显示信息的第一行看到的是Get,就意味着apt发现远程仓库中的软件列表比本地的更新,所以它就下载这个更新的列表。反之,如果看到的是Ign,就说明远程仓库上的软件列表和你的计算机上的列表是同步的,不需要下载。在做其他事之前先运行apt-get update,就可以确保计算机上的软件包列表是正确的,而且也是最新的。

apt-get install sshfs命令用于取回指定的软件包,以及任何必需的依赖(在这个例子中需要依赖fuse-utilslibfuse2)。在把这些软件包下载到本机以后,apt(其实是dpkg根据apt的指示来进行操作)就会安装好所有软件包。请时刻记住这些命令使用的是包名,而不是文件名。换句话说,应该使用apt-get install sshfs,而不是apt-get install sshfs_1.1-1_i386.deb。可以看到,如果apt发现了正在安装的软件包所要依赖的其他软件包(就像安装sshfs时的情况那样),在apt取回这些依赖包之前,它会要求确认是否确实需要安装它们。

如果想一次安装多个软件包,只需将它们依次都列在命令行上。例如,如果你想安装sshfsshfs-utils,可以用以下命令:

  1. # apt-get install sshfs shfs-utils

只要找到了sshfsshfs-utils的任何依赖包,apt就会询问是否需要安装它们。嗯,apt就这么简单。

提示 还不知道sshfs是什么吗?哦,你应该知道它的!看看本书作者在The Open Source Weblog上写的一篇日志“Mount Remote Drives via SSH with SSHFS”(http://opensource.weblogsinc.com/2005/11/03/mount-remote-drives-via-ssh-with-sshfs/)。