这是个很不错的话题,我就我所了解的说几句。 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