文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>The Debian GNU/Linux FAQ(中文版) part IIX

The Debian GNU/Linux FAQ(中文版) part IIX

时间:2005-11-14  来源:ghostzhu

The Debian GNU/Linux FAQ

version CVS, 14 February 2003
 Authors, Section 15.1
 中文翻译: eTony [email protected]
>------------------------------------------------------------------------------

概述

本文档解答一些关于Debian GNU/Linux的常见问题.

>------------------------------------------------------------------------------

[请点击阅读全文]

                                                                      ——by ghostzhu

The Debian GNU/Linux FAQ

6. Debian的包管理系统
-------------------------------------------------------------------------

6.1 什么是Debian包

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

 ·二进制包,包含可执行文件,配置文件,man/info 手册,版权信息,以及其它文档.
以一种Debian特有的格式分发,(详见6.2Debian软件包的格式 ),通常以 .deb 作为后
缀.可以使用Debian的dpkg工具解包(安装).

 ·源代码包,包括一个描述源代码包的.dsc文件,一个包含gzip-tar归档压缩格式
的未经修改源码的.orig.tar.gz文件,一个包含对源代码作Debian特有修改的.diff.gz
文件.可以使用dpkg-source打包和解压debian源码文档.详见手册.

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

Debian的打包工具可用于:
 ·维护和管理软件包或部分软件包,
 ·用于大软件包的切割,如,需要使用小容量软盘来传输,
 ·帮助开发者构建软件包
 ·帮助用户进行远程(FTP)安装.

-------------------------------------------------------------------------

6.2 Debian软件包的格式

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

Debian二进制软件包内部格式描述见deb(5)帮助页面。由于这种内部格式会改变的
(特别对于Debian的新旧发布版),所以要操作.deb文件请参阅dpkg-deb(8)。

-------------------------------------------------------------------------

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

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

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

 ·检查Debian FTP站点下的"Packages" 文件,文件中包含对于每个(软件)包的描
述段,每个描述段的第一个字段就是正式包名.
 ·使用dpkg --info foo_VVV-RRR.deb(VVV和RRR是被查询包的版本和修订版本)
命令. 显示的内容中将包含软件包的对应名称.

  VVV是指该软件开发者制定的版本号,没有什么标准格式,可能像"19990513" 和
"1.3.8pre1"一样有所不同.
  RRR是Debian的修订版本号,由Debian开发者(或者创建Debian包的用户自己)指
定,反映了Debian软件包的修正层次,一个新的修正版通常在 Debian Makefile (debia
n/rules)文件Debian控制文件(debian/control),安装,删除脚本(debian/p*), 或(软
件)包的配置文件中作了修改

-------------------------------------------------------------------------

6.4 Debian的控制文件

关于控制文件的详细内容参见11.1Debian GNU/Linux的其他文档

下边是一个Debian(软件)包 hello 的简单配置文件的主要内容:
  包名: hello
  优先级: optional
  类别: devel
  安装大小: 45
  维护者: Adam Heath <[email protected]>
  平台: i386
  版本: 1.3-16
  依赖: libc6 (>= 2.1)
  描述: The classic greeting, and a good example
     The GNU hello program produces a familiar,
     friendly greetingItallows 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 )字段给出上游开发者的版本号和修正版本号,详见6.3为什么Debia
n包名字这么长
 平台(Architecture)字段指定这个二进制包的编译硬件平台
 依赖(Depends )字段给出所依赖的包的列表
 安装大小(Installed-Size )字段说明安装这个包所需磁盘空间,用于安装前端显
示是否有足够的空间安装此程序.
 类别(Section)行给出此包在Debian FTP上的存储位置,上存储此包的目录名(详见
5.1Debian的FTP上有哪些目录)
 优先级(Priority),对应安装来说的重要程度,象dselect 和 console-apt一类的
半智能软件可以据此对软件安装分类,详见6.7包的优先级
 维护者(Maintainer)字段给出当前维护此包负责人的电子信箱.
 描述(Description)字段此软件包的简要说明.

更多内容详见Debian Packaging Manual

-------------------------------------------------------------------------

6.5 Debian的配置文件

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

 运行:
 dpkg --status package

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

-------------------------------------------------------------------------

6.6 preinst, postinst, prerm, 和 postrm脚本

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

 preinst
  Debian软件包解压前执行的脚本,为正在被升级的包停止相关服务,直到升级或
安装完成.(成功后执行 postinst 脚本)
 postinst
  主要完成软件包安装完成后所需的配置工作.通常,postinst脚本要求用户输入,
和/或 警告用户如果接受默认值,应该记得按要求返回重新配置这个软件.一个(软件)
包安装或升级完成后,postinst 脚本驱动命令,启动或重起相应的服务.
 prerm
  停止一个软件包的相关进程,删除(要卸载软件)包的相关文件前执行.
 postrm
修改相关文件或连接,和/或删除(卸载软件)包所创建的文件(见6.8什么是虚拟包)

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

-------------------------------------------------------------------------

6.7 包的优先级

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

这些优先级是:
 ·必须的(Required):系统运转所必须的软件包.
  包括修复系统缺陷所必须的所有工具.不能删除这些软件包,否则系统可能会崩
溃,且甚至有可能无法用dpkg恢复.仅有这类包的系统是不可用的,但是它为系统管理员
启动系统安装其它软件提供足够的功能.

 ·重要的(Important):在任何类Unix系统上均安装有该级别软件包
  没有这类包,其它的包无法在系统上正常运转或使用,Emacs , X11 , TeX 等大
型应用程序不在此列.此类包构成基本系统.

 ·一般的(Standard ):Linux系统里的一般软件包,构成小型字符系统.
  这是用户什么也不选也会默认安装的软件包.不包括大型软件,但是Emacs(与其
说它是一个应用软件,不如说它是基础构件)一小部分TeX 和 LaTeX(不支持X)除外

 ·可选的(Optional): 软件包包含了所有的你想要安装的文件,如果你一开始不
知道它是什么.或者没有特殊的需要
  包括X11,所有的TeX和许多应用程序.

 ·额外的(Extra):这类包不是与其它高优先级的软件冲突,只有知道它的用途才
可能对你有用,就是因为特别的原因而不能进入"可选"优先级.

-------------------------------------------------------------------------

6.8 什么是虚拟包

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

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

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

-------------------------------------------------------------------------

6.9 包的关联

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

 ·软件包A Depends 软件包B,指运行A必须安装B,某些情况下A不仅依赖于B,还依
赖于它的版本.这种情况通常有最低版限制,A更依赖于B的最新版而不是特定版.
 ·软件包A recommends 软件包B,如果软件维护者认为用户更喜欢B提供功能支持
的A.
 ·软件包A suggests 软件包B,如果B的某些软件与A的功能有关(通常是增强).
 ·软件包A 与软件包Bconflicts 指 如果系统中有B则A不能运行.通常是因为A包
含了B中文件的改进而出现冲突, "Conflicts""replaces"经常同时出现.
 ·软件包Areplaces软件包B,指 A安装时,B中的文件会被A的删除和覆盖
 ·软件包Aprovides软件包B,指A会提供B所有的功能和文件,这种机制为那些磁盘
空间受限用户提供了一个方法,即只安装A中需要的部分.

使用以上条目的更详细信息参Debian Policy Manual和策略手册.

-------------------------------------------------------------------------

6.10 Pre-Depends什么意思

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

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

更多信息,详见Debian Policy Manual.

-------------------------------------------------------------------------

6.11 包的状态(unknown, install, remove purge 和 hold)

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

它们的意思是:
 ·unknown - 用户并没指出他想对软件包进行的操作。
 ·install - 用户希望对软件包进行安装或升级。
 ·remove - 用户希望删除软件包,但不想删除它的配置文件。
 ·purge - 用户希望完全删除软件包,包括配置文件。
 ·hold - 用户希望软件包保持现状,例如,用户希望保持当前的版本状态。

-------------------------------------------------------------------------

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文
件中写入了相应的"deb-src" 源,通过运行apt-get source foo 来下载源代码包

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

 apt-get build-dep foo

你就知道它的用处了

-------------------------------------------------------------------------

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

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

 如果你已经安装了 dpkg-dev (软件)包 运行一下命令:

  dpkg-source -x foo_version-revision.dsc

 将释放包到foo-version目录.

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

 创建包(注意,需要fakeroot软件包),然后
  dpkg -i ../foo_version-revision_arch.deb

 来安装新创建的包.

-------------------------------------------------------------------------

6.15 自己制作Debian包

更多细节,阅读 New Maintainers  Guide,该文档在maint-guide包中,或浏览http:
//www.debian.org/doc/manuals/maint-guide/。

-------------------------

相关阅读 更多 +
排行榜 更多 +
别惹神枪手安卓版

别惹神枪手安卓版

冒险解谜 下载
坦克战争世界

坦克战争世界

模拟经营 下载
丛林反击战

丛林反击战

飞行射击 下载