软件包 编辑 请登陆,再编辑

前言

本条目简单介绍debian包管理下的软件包基本知识.

软件包的类型

Debian包文件包含了二进制可执行文件、库文件、配置文件和man/info帮助页面等文档。通常Debian包文件的后缀为.deb,因此称为"Deb软件包"。

Debian有两种类型的软件包:二进制软件包(deb)和源码包(deb-src)。

  • 二进制软件包(Binary Packages):包含可执行文件、库文件、配置文件、man/info页面、版权声明和其他文档。

  • 源码包(Source Packages):包含软件源代码、版本修改说明、构建指令以及编译工具等。先由tar工具归档为.tar.gz文件,然后再打包成.dsc文件。

用户不确定一个软件包具体类型时,可以使用file命令查看文件类型。

例如下面命令用于证实一个软件包的文件类型是否是Deb软件包文件,终端执行:

 file  g++_4.1.2-9ubuntu2_i386.deb
g++_4.1.2-9ubuntu2_i386: Debian binary package (format 2.0)

在Ubuntu Linux中,需要说明一个概念--虚拟软件包。

将系统中具有相同或相近功能的多个软件包作为一个软件包集合,称为虚拟软件包,并指定其中一个软件包作为虚拟软件包的默认首选项。提出虚拟软件的意图就是为了防止软件安装过程中发生冲突。例如,exim、sendmail和postfix软件包都是用于邮件传输代理,将"mail-transport-agent"指定为它们的虚拟软件包。当用户安装"mail-transport-agent"时,将选择安装exim、sendmail和postfix其中的首选项。

软件包的命名

在Ubuntu Linux中,软件包的命名遵循以下约定:

    Filename_Version-Reversion_Architecture.deb

其中:

Filename表示软件包文件名

Version表示软件版本号

Reversion表示修订版本号

Architecture表示适用计算机架构。

通常,修订版本号是由Ubuntu开发者或创建这个软件包的人指定。在软件包被修改过之后,将修改版本号加1。

以g++_4.1.2-9ubuntu2_i386.deb软件包为例,g++是软件包名,4.1.2是软件版本号,9ubuntu2是修订版本号,i386是适用的计算机架构。

软件包的优先级

Ubuntu Linux为每个软件包指定了一个优先级,作为软件包管理器选择安装和卸载的一个依据。下图列出了Ubuntu定义的所有软件包优先级描述。

在Ubuntu系统中规定,任何高优先级的软件包都不能依赖于低优先级的软件包。这样可以实现按照优先级一层层冻结系统。在新版本发布准备阶段,优先级的作用就显得更为重要。

基本系统由Required级和Important级软件包组成,属于这类优先级的软件包首先被冻结。由于这些软件包是其他软件包所依赖的,它们能保证整个系统的稳定,这是Ubuntu发布新版本所必需的。然后,冻结Standard级软件包,紧接着,在发布新版本之前对Optional级和Extra级软件包进行冻结。

软件包的状态

在使用系统过程中,用户会不断的安装、卸载软件包。为了记录用户的安装行为,Ubuntu对软件包定义了以下两种状态。

期望状态:标记用户希望将某个软件包处于的状态。

当前状态:标记用户操作该软件包后的最终状态。

软件包依赖

Linux操作系统是一个复杂系统。这个系统包含了大量的软件组件。但是,若要求它们能够成为一个有机整体,支撑Linux系统的正常运转,就必须要求各个组件密切配合。 这就是Linux操作系统最初的设计理念:尽可能提高软件系统内部的耦合度。

换句话说,某个软件组件是否能够正常运行或运行的更好,依赖于其他一些软件组件的存在。这样做的好处是:使系统更加致密、紧凑,减少中间环节可能引发的错误。

两个缺点是:软件组件依赖和软件组件冲突问题。

为了解决这个问题,Debian提出了程序依赖性机制,并做详细的定义。程序依赖性是用来描述独立运行程序与当前系统中程序之间存在的关联程度。

软件包管理器将依据软件包"依赖关系"完成组件的安装或卸载。例如,包含GNU C编译器(gcc)的软件包依赖于包含链接器和汇编器的binutils软件包。如果用户试图在没有安装binutils的情况下安装gcc,软件包管理器将会中止安装,并出现错误提示,要求用户事先安装binutils。

常见问题

如何将RPM包转化成DEB包

在深度操作系统的源上,提供了几乎所有Deb格式的软件,供用户下载和使用。

不推荐用户在深度操作系统中使用Rpm转换成的DEB软件包,因为这样转换成的DEB包很大程度存在软件依赖的问题。

安装alien,终端执行:

     apt-get install alien

使用alien转化deb包,命令格式:

     alien xxx.rpm(转换为deb包的rpm文件)

举例转换xine-skins-1.8-1.lvn5.noarch.rpm为deb包,终端执行:

    sudo alien xine-skins-1.8-1.lvn5.noarch.rpm
    xine-skins-1.8-1.lvn5.noarch.rpm: Header V3 DSA signature: NOKEY, key ID a109b1ec
    xine-skins-1.8-1.lvn5.noarch.rpm: Header V3 DSA signature: NOKEY, key ID a109b1ec
    Unknown host
    xine-skins_1.8-2_all.deb generated

以上命令的执行结果将一个Rpm软件包转化成了Deb格式的软件包,并且输出在与xine-skins-1.8-1.lvn5.noarch.rpm包相同的目录。

来源链接

Ubuntu标准教程