[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 下一页 ]


The Debian GNU/Linux FAQ
第 6 章 - Debian 的包管理系统


6.1 什么是 Debian 包?

软件包一般包括实现一系列命令或特殊功能所必须的所有文件. 有两种类型的 Debian 软件包:

软件包体系使用包维护者特制的 "依赖关系(dependencies)" 来安装软件. 这些依赖关系被写在每个包的 控制(control) 文件里. 例如: 安装依赖于 binutils 软件包的 gcc 时,如果没有预先安装 binutils, 包管理系统 (dpkg) 就会停止安装 gcc, 并返回需要 binutils 的错误信息.(解决这类问题,见dpkg(8)). 详见包的关联, 第 6.9 节.

Debian 的打包工具可用于:


6.2 Debian 软件包的格式?

一个 Debian "软件包", 或 Debian 归档文件, 包含可执行文件, 库文件, 附属文档. 名字通常以 .deb 为后缀.

Debian 二进制软件包内部格式描述见deb(5)联机手册. 由于这种内部格式会改变的(特别对于Debian GNU/Linux 的主发行版), 所以通常使用 dpkg-deb(1) 操作.deb文件.


6.3 为什么 Debian 软件包名字这么长?

Debian 二进制软件包的命名格式: <foo>_<版本号>-<Debian修订号>.deb

注意, foo 是假定的软件包名. 作为检验, 你可以通过下面的方法之一了解和软件包名称对应的一个 debian 软件包(.deb 文件):

VVV 是指该软件开发者制定的版本号, 没有什么标准格式, 可能像 "19990513" 和 "1.3.8pre1" 一样有所不同..

RRR 是 Debian 的修订版本号, 由 Debian 开发者(或者创建 Debian 包的用户自己)指定, 反映了 Debian 软件包的修正层次, 一个新的修正版通常在 Debian Makefile (debian/rules)文件 Debian 控制文件, 安装, 删除脚本(debian/p*), 或软件包的配置文件中作了修改.


6.4 Debian 的控制文件是什么?

关于控制文件的详细内容参见 Debian 打包手册, 第 4 章, Debian 系统的其他文档?, 第 11.1 节.

下边是一个 Debian 软件包 hello 的简单配置文件的主要内容:

     包名: hello
     优先级: optional
     类别: devel
     安装大小: 45
     维护者: Adam Heath <doogie@debian.org>
     平台: i386
     版本: 1.3-16
     依赖: libc6 (>= 2.1)
     描述: The classic greeting, and a good example
      The GNU hello program produces a familiar, friendly greeting.  It
      allows nonprogrammers to use a classic computer science tool which
      would otherwise be unavailable to them.
      .
      Seriously, though: this is an example of how to do a Debian package.
      It is the Debian version of the GNU Project's `hello world' program
      (which is itself an example for the GNU Project).

包名(Packahe)字段给出软件包的名称, 这是软件包工具用以识别这个包的名称, 通常(单不是必须)和这个 Debian 软件包的名称的第一个字符串相似.

版本(Version)字段给出上游开发者的版本号和修正版本号,详见为什么 Debian 软件包名字这么长?, 第 6.3 节.

平台(Architecture)字段指定这个二进制包的编译硬件平台.

依赖(Depends)字段给出所依赖的包的列表.

安装大小(Installed-Size)字段说明安装这个包所需磁盘空间, 用于安装前端显示是否有足够的空间安装此程序..

类别(Section)行给出此包在Debian FTP上的存储位置,上存储此包的目录名(详见Debian 的 FTP 上有哪些目录?, 第 5.1 节).

优先级(Priority), 对应安装来说的重要程度, 象 dselect 和 console-apt 一类的半智能软件可以据此对软件安装分类,详见 包的优先级?, 第 6.7 节.

维护者(Maintainer)字段给出当前维护此包负责人的电子信箱..

描述(Description)字段此软件包的简要说明.

更多内容参阅 Debian 打包手册, 第4章, "控制文件及其字段".


6.5 Debian 的配置文件

配置文件(Conffiles)是一个配置文件列表(通常在 /etc 下), 软件升级时不会被覆盖, 以确保所含文件的本地配置不会被破坏, 使得可以在系统运行状态下升级.

运行:

     dpkg --status package

查看 "Conffiles" 段来确定升级时哪些文件被保护.


6.6 Debian 的 preinst, postinst, prerm, 和 postrm 脚本?

这些是软件包安装前后自动运行的可执行脚本. 统称为控制文件, 是 Deian 软件包的"控制"部分..

它们是:

preinst

Debian软件包(".deb")解压前执行的脚本, 为正在被升级的包停止相关服务,直到升级或安装完成.(成功后执行 'postinst' 脚本).

postinst

主要完成软件包(".deb")安装完成后所需的配置工作. 通常, postinst 脚本要求用户输入, 和/或警告用户如果接受默认值, 应该记得按要求返回重新配置这个软件. 一个软件包安装或升级完成后, postinst 脚本驱动命令, 启动或重起相应的服务.

prerm

停止一个软件包的相关进程, 要卸载软件包的相关文件前执行.T.

postrm

修改相关文件或连接, 和/或卸载软件包所创建的文件(见 什么是虚拟包?, 第 6.8 节.)

当前的所有配置文件都可在 /var/lib/dpkg/info 目录下找到, 与 foo 软件包相关的命名以 "foo" 开头,以 "preinst", "postinst", 等为扩展.这个目录下的 foo.list 文件列出了软件包安装的所有文件.(注意这些文件的位置是dpkg确定的;可能会因Debina版本而异)


6.7 包的优先级?

每个软件包都有一个维护者指定的优先级, 用于包管理系统. 这些优先级是:


6.8 什么是虚拟包?

是指一组具有近似功能的软件的统称, 例如 tintrn 都是新闻阅读程序, 为系统中其它需要新闻阅读的程序提供支持. 因此可以说它们都提供了"新闻阅读(news-reader)"的虚拟包.

同样, smailsendmail 都提供了邮件传输代理的功能. 因此说它们提供了"邮件传输代理(mail transport agent)"的虚拟包,两者安装都可以满足其它程序对于"邮件传输代理(mail transport agent)"虚拟包的需求.

Debian 提供这样一种, 如果系统中提供同一虚拟包的软件了安装了多个, 系统管理员可以指定一个为首选. 相关的命令是 update-alternatives, 更多描述详见Debian 对不同喜好的支持?, 第 10.10 节.


6.9 包的关联

Debian 的软件包管理系统有一套包"依赖性"概念, 用以标示(一个标志符号)系统中程序 A 对于现存程序 B 的依赖程度:

以上条目的更详细信息参阅打包手册和策略手册


6.10 Pre-Depends 什么意思?

"Pre-Depends" 是一种特别的依赖关系, 很多软件, 不管系统中它的依赖包是否存在, dpkg 都会将其(即, .deb 文件)解包, 解包通常是指释放出包中的安装文件, 如果系统中不存在依赖的包, dpkg 将会拒绝完成安装(执行它的"配置"动作).

但是, 对于某些包, 在依赖性问题解决前, dpkg 甚至拒绝解包, 这就称作, 这种包对某些包有 "Pre-depend" 关系. Debian 项目提供这种机制是为了系统由 a.out 格式安全升级到 ELF 格式, 这种情况对于解包要求非常严格. 对于其它的重要升级这种方法也非常有用, 比如对那些 "required" 级并有 LibC 关联的软件包.

更多信息,详见 打包手册.


6.11 包的状态( unknown, install, remove purgehold)?

这些 "want" 标志位描述了用户打算如何操作一个软件包(既可以使用 dselect 的 "Select" 菜单,也可以直接调用dpkg).

它们的意思是:


6.12 如何锁定一个包?

有两种办法锁定软件包, 使用dpkg 或 dselect.

使用dpkg, 仅需要导出软件包选择列表:

     dpkg --get-selections \* > selections.txt

然后编辑 selections.txt 文件, 修改你要锁定的包的所在行, 例如 libc6将:

     libc6                                           install

改为:

     libc6                                           hold

然后存盘再把它导入 dpkg 数据库:

     dpkg --set-selections < selections.txt

使用dselect, 仅需要进入 [S]elect 屏幕, 找到要锁定的(软件)包,按下 `=' 键 (或 `H'). 离开 [S]elect 屏幕后,改动马上生效.


6.13 如何安装一个 source 包?

Debian 源代码包实际上不能"安装", 只是解包到你欲创建二进制包的目录.

大多数二进制软件包的镜像站点都提供源代码包, 如果在你的 APT 的 sources.list(5) 文件中写入了相应的 "deb-src" 源, 通过运行

     apt-get source foo

来下载源代码包

Debian 源代码包提供了所谓的构造-依赖机制, 即源代码包的维护者提供了一个创建包所依赖的包的列表, 创建二进制包前运行

     apt-get build-dep foo

你就知道它的用处了.


6.14 如何从源码创建二进制包?

编译源码, 你需要所有的ffoo_*.dsc, foo_*.tar.gz 和 foo_*.diff.gz (注意, 对于由 Debian 开发的软件包, 没有 .diff.gz 文件)(注: 指对于 foo 软件包).

完成后(如何安装一个 source 包?, 第 6.13 节), 如果你已经安装了 dpkg-dev (软件)包,运行一下命令:

     dpkg-source -x foo_version-revision.dsc

将释放包到 foo-version 目录.

如果仅想编译这个包,进入 foo-version 目录, 执行命令

     dpkg-buildpackage -rfakeroot -b

创建包(注意, 需要 fakeroot package 软件包), 然后

     dpkg -i ../foo_version-revision_arch.deb

来安装新创建的包.


6.15 如何自己制作 Debian 包?

更多细节, 阅读 新维护者指南, 该文档在 maint-guide 包中, 或浏览 http://www.debian.org/doc/devel-manuals#maint-guide.


[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 下一页 ]


The Debian GNU/Linux FAQ

version 8.0, 1 May 2015

translator: etony C.F.AN mailto:etony@tom.com
Debian FAQ Authors