这是个很不错的话题,我就我所了解的说几句。

On Mon, Feb 11, 2008 at 10:49:08AM +0800, 任晓磊 wrote:
> 
> virtual package:
> 1 一类功能相同的包的统称
> 2 不真实存在,而是由那些功能相同的包Provide之

没错。Virtual package 的概念在 policy 3.6 [1] 里有很清楚的定义,主要作用
就是让软件包在依赖关系中可以使用 virtual package 的名字,从而使得这些功
能相同的软件包中每一个都能满足依赖关系。

不过严格说来,virtual package 并不是统称,而是特指 Provides 关系提到的那
个软件包名称。

1. http://www.debian.org/doc/debian-policy/ch-binary.html#s-virtual_pkg

> meta package:
> 1 本身没内容
> 2 有依赖关系,可以作为安装一系列相关联的包的方法

要解释清这个概念就要说一下 meta- 这个前缀的意思。这个前缀有几个不同的意
思,而在计算机及网络相关领域中一般都是指 "A of A's" 的意思。所以
metapackage (我习惯写成一个词) 就是 "package of packages",也就是 "装了
各种软件包的软件包" (和一般软件包装的都是目录和文件相比)。

具体到 Debian 的软件包管理系统而言,metapackage 就是指没有实质内容,而是
通过依赖关系包括一系列相关相关包的软件包。Metapackage 还有一点用处就是其
本身也可以作为别的软件包的依赖关系,以避免需要一一注明各个软件包的麻烦。

> dummy package:
> 啥意思?

顾名思义就是假的,没有实际内容的软件包。从这个意义上来讲,metapackage 也
可以算是一种 dummy package。不过提到 dummy package,最常见的情况是指帮助
平滑升级的过渡性软件包 (transitional package),即在一个包改名之后,为了
让原来的用户能够自动升级成新名字的软件包,就保留旧名字的包,但是其中没有
内容,只是依赖于新名字的包。这个旧名字的空软件包就叫做 dummy package。

Metapackage 和 dummy package 都是实际存在,有 .deb 文件的软件包,这是和
virtual package 最本质的不同。

> tasksel里面的task好像和meta package功能类似嘛,这俩是不是有点重复?

Task 和 metapackage 的一大区别是安装 task 时并不要求 task 里所有包括的软
件包都必须安装。这在安装系统过程中很重要,因为比如如果只用第一张光盘安装,
上面不一定会有所有 task 所包含的软件包,但是这时仍然可以安装 task,只是
忽略找不到的软件包而已。Task 和 metapackage 肯定还有其它的区别,但是我就
不太清楚了。

Ming
2008.02.13

回复