以Debian的方式系列(IN THE DEBIAN WAY):
Debian 的软件包管理系统介绍
etony C.F.AN etony@tom.com
v0.0.1, 2006-3-22
本文档是针对 Debian 的软件包管理系统的一般性介绍.
1. 声明
- 版本信息:
本文档的最新版本将张贴于: LinuxSir.Org论坛
也可以从
- 反馈:
所有评论, 错误报告, 其他信息以及批评, 请邮寄到
或在LinuxSir.Org论坛
- 版权信息:
本文档的版权
(c)2006-2007
归etony C.F.AN
所有.转载请注明源自
2. 我们为什么需要关软件包管理系统?
绝大多数人使用计算机的目的是应用, 没有人愿意每周都要花费大量的时间用于软件安装和排错. 如果那样的话, 一个管理大量计算机的管理员将痛不欲生.
一个优秀的软件包管理系统应当可以简化软件的安装和卸载.在安装时记录在系统中添加的文件和对系统所做的修改, 以便在以后可以将其卸载干净.
一个程序可能需要很多共享库支持, 或在运行时需要调用其它程序来协同完成作业.一个好的软件包管理系统,不仅能完成软件的安装, 还应该可以自动识别软件包的依赖问题, 并自动的给出解决方案,以确保软件,在完成安装后可以很好的运行.
由于程序的不断更新, 软件的平滑升级也需要一个优秀的软件包管理系统提供支持.
3. 有哪些著名的软件包管理系统?
目前在各 Linux 发行版中, 比较著名的软件包管理系统有(此处为泛泛而谈,并不严谨):
- RPM: Red Hat/Fedora, Suse, Mandriva 使用的是这类管理系统.
- DEB: Debian 使用的是这类管理系统.
- TGZ: SlackWare 使用的是这类管理系统.
各种软件包管理系统见得比较, 参阅: .
4. Debian 软件包管理系统
如果您接触过 Debian GNU/Linux 操作系统, 或对其有一定了解, 那么您一定会惊讶于 Debian 软件包管理系统的超级牛力(man apt-get). 事实上,问任何人 Debian 最重要的特性是什么,得到的回答十有八九是它的软件包管理系统。
5. Debian 软件包类型
在Debian中存在两种类型的软件包:
- 源代码包
源代码包, 包括一个描述源代码包的 .dsc 文件, 一个包含 gzip-tar 归档压缩格式的未经修改源码的 .orig.tar.gz 文件, 一个包含对源代码作Debian特有修改的 .diff.gz 文件. 可以使用 dpkg-source 打包和解压 debian 源码文档. 详见联机手册.
- 二进制包
二进制包以 .deb 扩展名来表示,这些文件通常称为DEB文件,其中包含可执行文件,文档,配置文件和版权信息及其它一些东西.可以使用 Debian 的 dpkg 工具解包(安装).但除去版权信息(和 changelog.Debian 文件)不讲,二进制包也可以是空的,这种软件包作为过渡包或关联包(也称虚拟包),它们的唯一的作用是用于满足依赖性.
一般而言, 我们只和二进制包打交道, 只有在某些特殊情况下才会求助于源代码包.
软件包命名约定
Debian软件包命名遵循下列约定: <foo>_<版本号>-<Debian修订号>.deb
6. 软件包的优先级
每个Debian软件包均被发布者指点了一个优先级,作为软件包管理系统的一个辅助参数,Debian策略定义了五种优先级:
- required(必需)
系统正常运行所必需的软件包。这些软件包不能被移除,否则系统可能会崩溃, 一个只包含必需软件包的系统也许无法正常使用,但是它为系统管理员启动系统安装其它软件提供足够的功能.
- important(重要)
任何在类Unix系统都会有的程序被划定为重要软件包,此类包构成基本系统. 这类包会影响其它软件包的运行.
- standard(标准)
这些软件包为用户提供了一个体积小而功能相对较全的系统。该级别的软件包(以及上面两个级别的软件包)组成了Debian的最小化安装。不包括大型应用软件
- optional(可选)
软件包包含了所有的你想要安装的文件, 即使对它们并不熟悉. 包括X窗口、完整的TeX发布版以及许多应用程序。注意可选软件包彼此间不应存在冲突。 这包括 X11, 所有的 TeX 和许多应用程序.
- extra(附加)
该级别软件包可能与其它高级别软件包冲突,仅当你知道其用途时才会使用它们,或者有运行它们有专门要求,这些都使它们不适合定为"Optional"级。
在Debian系统上, 不同的优先级从两个方面来影响系统.首先,策略规定,任何高优先级的软件包都不能依赖于低优先级的软件包.这也暗示了用户可以将系统限定在某个优先级,如可选优先级,以确保没有安装任何附加级软件包.
在新版本发布准备阶段,优先级的作用更显得重要.基础系统由必需级和重要级软件包组成,属于这类优先级的软件包首先被冻结,由于这些软件包是其它软 件包所依赖的,它们能保证整个架构的稳定,这是发布Debian新版本所必需的.接下来,标准级软件包被冻结,接着,在发布新版本之前对可选级和附加级软 件包进行冻结.
7. 软件包中都有些什么?
本文档以nano-tiny_1.2.4-5_i386.deb 软件包为例,进行示范.
$ ar -x nano-tiny_1.2.4-5_i386.deb #apt-get -d install nano-tiny$ls -l-rw-r--r-- 1 tony tony 1063 Mar 22 20:44 control.tar.gz-rw-r--r-- 1 tony tony 86530 Mar 22 20:44 data.tar.gz-rw-r--r-- 1 tony tony 4 Mar 22 20:44 debian-binary-rw-r--r-- 1 tony tony 87786 Mar 22 20:43 nano-tiny_1.2.4-5_i386.deb
这三个文件涵盖了软件包的所有功能,并且是根据内容拆分的:
- debian-binary
这是Debian软件包的神奇所在。它包含所使用软件包格式的版本号
$ cat debian-binary2.0
- control.tar.gz
这是包含了软件包管理工具所需信息的tarball文件。
$ tar ztvf control.tar.gzdrwxr-xr-x root/root 0 2005-04-10 01:35:23 ./-rwxr-xr-x root/root 263 2005-04-10 01:35:23 ./postinst-rwxr-xr-x root/root 111 2005-04-10 01:35:23 ./prerm-rw-r--r-- root/root 818 2005-04-10 01:35:23 ./control-rw-r--r-- root/root 404 2005-04-10 01:35:23 ./md5sums
- data.tar.gz
tarball文件data.tar.gz 包括这个Debian软件包的覆盖区,即root文件系统中的位置。用dpkg解包软件包,而不配置就等同于将这个tarball文件解压到/。
$ tar ztvf data.tar.gzdrwxr-xr-x root/root 0 2005-04-10 01:35:22 ./drwxr-xr-x root/root 0 2005-04-10 01:35:22 ./bin/-rwxr-xr-x root/root 35128 2005-04-10 01:35:22 ./bin/nano-tinydrwxr-xr-x root/root 0 2005-04-10 01:35:17 ./usr/drwxr-xr-x root/root 0 2005-04-10 01:35:21 ./usr/share/drwxr-xr-x root/root 0 2005-04-10 01:35:21 ./usr/share/doc/drwxr-xr-x root/root 0 2005-04-10 01:35:22 ./usr/share/doc/nano-tiny/-rw-r--r-- root/root 501 2005-04-10 01:34:23 ./usr/share/doc/nano-tiny/copyright-rw-r--r-- root/root 10269 2005-04-10 01:34:23 ./usr/share/doc/nano-tiny/changelog.Debian.gz-rw-r--r-- root/root 53142 2004-06-28 10:36:22 ./usr/share/doc/nano-tiny/changelog.gzdrwxr-xr-x root/root 0 2005-04-10 01:35:21 ./usr/share/man/drwxr-xr-x root/root 0 2005-04-10 01:35:22 ./usr/share/man/man1/-rw-r--r-- root/root 1147 2005-04-10 01:34:23 ./usr/share/man/man1/nano-tiny.1.gzdrwxr-xr-x root/root 0 2005-04-10 01:35:21 ./usr/share/man/fr/drwxr-xr-x root/root 0 2005-04-10 01:35:22 ./usr/share/man/fr/man1/-rw-r--r-- root/root 1663 2005-04-10 01:34:23 ./usr/share/man/fr/man1/nano-tiny.1.gz
使用ar和tar就可获取DEB软件包中的所有文件和数据. 这里选择使用ar和tar,而不仅仅是tar,可能会另您感到好奇,这是因为DEB文件是使用ar打包的,这样可以以节约空间,因为tar会存储每个文件 否认更多相关信息(比如权限,所有者,日期 ...),对于这三个文件这没有什么意义.
查看二进制包
less的预处理程序lesspipe能识别DEB文件,并可提取出有关文件的大多数的重要数据.可以考虑根据您使用的shell, 在启动脚本中设置这一变量。
$eval $(lessfile)$less nano-tiny_1.2.4-5_i386.deb
在Debian的软件库中,mc软件包中的mc文件导航器,提供了一个用于访问DEB文件,以及查看它们的内容的虚拟文件系统。在mc中,您可以简单的定位您要查看的DEB文件,选中,键入回车。将会在./DEBIAN下找到控制文件,列表则是在./CONTENTS下。
Name Size MTime /.. UP--DIR /CONTENTS 0 Mar 22 21:01 /DEBIAN 0 Mar 22 21:01 INFO 1157 Mar 22 21:01 *INSTALL 424 Mar 22 21:01
8. 控制文件介绍
一个Debian二进制包在提供控制信息的同时还包括有效数据(软件和所有的辅助文件). 控制信息包含在被称作控制文件的一系列文件中.这些文件的内容用于控制软件包管理器,存储关联数据,如依赖关系,并提供软件包的一般信息,如所包含软件的 描述等.Debian软件包格式明确指定如下控制文件, 除了第一个以外其余的都是可选的:
- contral
这个文件提供软件包的关联信息, 用于软件包管理器显示软件包的信息,以及用于安装前校验的依赖关系.这是唯一一个必需提供的文件。
$ apt-cache show nano-tiny 看到的就是这部分的内容
- preinst
preinst脚本在安装或升级软件包以前执行。如果升级失败,老版本的preinst文件将会重作作为升级一部分的任何配置。
- postinst
postinst脚本在解包之后,作为配置过程的一部分运行。
- prerm
prerm脚本在软件包卸载以前执行。如果是软件包升级,老版的软件包的prerm脚本也会执行。
- postrm
postrm脚本在软件包从系统中卸载以后执行。dpkg告知这个脚本软件包是否已被卸载或清除。当因为冲突或升级,软件包被其它软件包卸载时也会执行这个脚本。
- md5sums
在这个文件中提供软件包要安装的所有文件的MD5编码,可用于校验已安装的文件。
dpkg-deb可以在安装前从DEB文件中提取软件包的所有重要信息。
$dpkg-deb --control nano-tiny_1.2.4-5_i386.deb DEBIAN$ tree.|-- DEBIAN| |-- control| |-- md5sums| |-- postinst| `-- prerm`-- nano-tiny_1.2.4-5_i386.deb$ dpkg-deb --extract nano-tiny_1.2.4-5_i386.deb ./$ tree.|-- bin| `-- nano-tiny|-- nano-tiny_1.2.4-5_i386.deb`-- usr `-- share |-- doc | `-- nano-tiny | |-- changelog.Debian.gz | |-- changelog.gz | `-- copyright `-- man |-- fr | `-- man1 | `-- nano-tiny.1.gz `-- man1 `-- nano-tiny.1.gz
9. 参考文档