Debian和Ubuntu中APT的概要介绍和初级应用(一)

在早期人们使用.tar.gz包安装程序的时候,用户不得不在他们的GNU/Linux系统上自己编译每一个他们希望使用的程序。而当Debian问世时,它创建了一种管理系统中的软件包的方法,这种方法被命名为”dpkg”。就这样,著名的软件包”package”(软件包)概念首先伴随Debian的dpkg系统来到了GNU/Linux家庭,比另一个发行版RedHat发明的”rpm”系统稍早了一些。

后来,GNU/Linux发布者们面临一个新的困扰,那就是用户需要一种快速、实用的方法来安装这些软件包,管理软件包的依赖(dependencies),并在升级时保护用户的配置。这一次,Debian发明了一种高级的软件包工具-APT。后来,Conectiva公司将之移植到rpm系统上使用,目前它已经被其他很多的UNIX/Linux发行版本兼容使用。

APT使用”source-list”来获取软件包,这个”source-list”文件就是”etc/apt”目录下的”sources.list”。

这个文件中的项目一般是这样的:

deb http://host/debian distribution section1 section2 section3
deb-src http://host/debian distribution section1 section2 section3

当然,上面这个只是语法示例,并不能使用。每行的第一个词,deb或者deb-src表示档案的类型:deb表示它包含二进制包,也就是我们平时使用的预编译包;deb-src表示源代码包,也就是原始的程序代码、Debian控制文件(.dsc文件)和包含将程序“debian化”的修改的diff.gz文件。

我们通常会在默认的Debian sources.list中发现下面这样的文字:

     # See sources.list(5) for more information, especially
     # Remember that you can only use http, ftp or file URIs
     # CDROMs are managed through the apt-cdrom tool.
     deb http://http.us.debian.org/debian stable main contrib non-free
     deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
     deb http://security.debian.org stable/updates main contrib non-free

     # Uncomment if you want the apt-get source function to work
     #deb-src http://http.us.debian.org/debian stable main contrib non-free
     #deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free

Debian安装软件包的时候会用到它们。第一行表示的是官方的软件包档案位置,第二行表示非US(Non-US)的软件包档案位置,第三行表示Debian安全更新的位置。
最后的被注释掉的那两行(使用’#'号注释掉了,APT会忽略它们)是deb-src行,他们指示Debian源代码包的位置。如果你经常下载程序源代码来测试和重新编译,可以取消这里的注释。
“/etc/apt/sources.list”文件可以包含许多类型的行,APT会懂得如何处理http,ftp,file(本地文件,例如一个mounte好的ISO9660文件系统的目录),ssh等各种类型的软件包档案位置。
修改了”sources.list”文件后,千万别忘记运行”apt-get update”,这样才能让APT从你更新指定的源(source)那里获取软件包。

一个新的问题出现了:我们应该把哪些Debian镜像源放到sources.list中?其实有很多方法,高手们也许会写一个脚本来衡量那些镜像站点的ping时延。不过,其实有一个程序可以帮我们,那就是netselect。

这样安装netselect到你的系统:

     # apt-get install netselect

不加任何参数直接执行netselect将显示该命令的帮助文件。将多个镜像站点主机网络名用空格隔开来作为netselect的参数,它将会返回其中的一台主机名,并给出他给这台主机计算的分数。这个分数是根据主机的ping时延和距本机的网络中转跳数来决定的,它与用户从该主机下载软件包的速度成反比。那台返回的主机就是分数最低也就是速度最快的选择(如果你也要看其他那些主机的分数,敲入命令时加上-vv选项即可)。下面是一个实例:

     # netselect ftp.debian.org http.us.debian.org ftp.at.debian.org download.unesp.br ftp.debian.org.br
       365 ftp.debian.org.br
     #

这样,你就可以从众多主机站点中选出适合你的列表了。这里有很多主机站点可供你测试和选择。

如果你希望APT使用光盘作为源来安装软件包或者更新系统,你可以使用apt-cdrom程序,就像这样:

     # apt-cdrom add

将Debian系统的光盘放入光驱,系统将mount光驱并搜寻光盘上的软件包信息。你还可以用下面的参数这样设置对光驱作特别设置:

     -h           - 查看帮助文件
     -d directory - CD-ROM mount 的目录位置
     -r           - Rename a recognized CD-ROM
     -m           - No mounting
     -f           - Fast mode, don't check package files
     -a           - Thorough scan mode

例如:

     # apt-cdrom -d /home/kov/mycdrom add

你还可以扫描一张光盘,但不将其加入源列表:

     # apt-cdrom ident

注意,只有在光驱已经在/etc/fstab正确设置好了之后,apt-cdrom程序才能正常工作。

Debian的软件包管理系统使用一个私有的数据库来保存已安装的、未安装的以及可安装的软件包记录。apt-get程序使用这个数据库来寻找如何安装用户请求安装的软件包,以及还需要哪些额外的软件包来使之工作正常。

要想更新这个数据库,你需要使用apt-get update命令。这个命令在source-list中列出的站点寻找和更新软件包列表。

经常使用apt-get update更新是一个好习惯,它可以让你的系统保持最新状态,尤其重要的是不会错过一些安全更新。

好,你期待已久的步骤终于到来!你可以使用apt-get命令来获取和安装软件包啦!例如,你可以这样输入:

     # apt-get install xchat

APT将搜索它的数据库来寻找软件包的最新版本并且从sources list相应的软件包站点来获取。如果这个软件包还需要依赖其他包(就像现在这个例子一样)的话,APT也会检查到这个依赖,并自动安装它们。看下面的例子:

     # apt-get install nautilus
     Reading Package Lists... Done
     Building Dependency Tree... Done
     The following extra packages will be installed:
       bonobo libmedusa0 libnautilus0
     The following NEW packages will be installed:
       bonobo libmedusa0 libnautilus0 nautilus
     0 packages upgraded, 4 newly installed, 0 to remove and 1  not upgraded.
     Need to get 8329kB of archives. After unpacking 17.2MB will be used.
     Do you want to continue? [Y/n]

上例中,nautilus这个软件包依赖一些共享库,因此APT同时也获取了它们。如果你也在apt-get命令行中指定了这些库的名字,那么APT不会再询问你是否继续安装这些库;它将自动接受并安装。

也就是说,APT只会对那些你没有在命令行中特别指出的依赖软件包来征求你是否安装。

下面是一些非常有用的apt-get命令的选项:

     -h  This help text.显示帮助文件
     -d  Download only - do NOT install or unpack archives 仅下载软件包但并不安装和解包
     -f  Attempt to continue if the integrity check fails 如果完整性检查失败仍然尝试继续
     -s  No-act. Perform ordering simulation
     -y  Assume Yes to all queries and do not prompt
     -u  Show a list of upgraded packages as well

多个软件包可以在一个apt-get命令中一起被安装。
安装包被下载到目录”/var/cache/apt/archives“中以备安装。

你也可以在这个“安装”命令中删除软件包,仅仅需要在被删除的软件包名字后面加一个“-”号。就像这样:

     # apt-get install nautilus gnome-panel-
     Reading Package Lists... Done
     Building Dependency Tree... Done
     The following extra packages will be installed:
       bonobo libmedusa0 libnautilus0
     The following packages will be REMOVED:
       gnome-applets gnome-panel gnome-panel-data gnome-session
     The following NEW packages will be installed:
       bonobo libmedusa0 libnautilus0 nautilus
     0 packages upgraded, 4 newly installed, 4 to remove and 1  not upgraded.
     Need to get 8329kB of archives. After unpacking 2594kB will be used.
     Do you want to continue? [Y/n]

如果不小心损坏了某个安装好的软件,或者就是重新安装某个软件包,你可以使用–reinstall选项来实现:

     # apt-get --reinstall install gdm
     Reading Package Lists... Done
     Building Dependency Tree... Done
     0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1  not upgraded.
     Need to get 0B/182kB of archives. After unpacking 0B will be used.
     Do you want to continue? [Y/n]

------分割线------

注:本文在http://www.debian.org/doc/manuals/apt-howto基础上翻译而出,作为阅读笔记以备忘。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>