开源软件介绍之Jigdo
2010-03-11 10:23:18 阿炯

本文介绍 Jigdo。Jigdo 一词是 Jigsaw Download 缩写,意思是拼图式的下载工具。这是 Debian 推荐的下载 Debian GNU/Linux 光盘的工具。Jigdo 不仅是一个好用的下载大型文件(比如 CD 和 DVD 光盘映像文件)的实用工具,它也从一个侧面展示了 Debian GNU/Linux 的一些有别于其它 GNU/Linux Distribution 的特点。
Debian GNU/Linux 的规模
Debian 是一个完全由志愿者组成的组织,他们来自世界各地,其中也有来自中国大陆和港台的成员。这些志愿者有一个共同的兴趣,就是 Debian GNU/Linux 这个系统。大概估计一下,现在 Debian 有 1000 名左右的志愿开发者,他们把散见于网络各处的自由软件打包整理,再经过品管质保,包装成 Debian GNU/Linux 这个系统。然后,再经过遍布全球的 Debian 镜像网络,把一个完全由自由软件组成的系统送到用户的手中。这个遍布全球的 Debian 镜像网络也是由志愿者所维护的,其中也有相当多来自于各国的大学、科研机构以及商业公司的资源支持。
Debian 支持十几种计算机架构,其中包括 i386、Power PC、Sparc、S/390 以及 ARM 等等。Debian 在 i386 架构上,支持有将近一万个软件包,体积超过 3G 字节。一个完整的 Debian 镜像大概要占据超过 50G 字节的硬盘空间。可以想象,一个繁忙的 Debian Mirror 站点会需要多少网络带宽。不但如此,据估计,每过十二个月,Debian 的体积就会翻上一番。此外,在 Debian 将近要发布一个新版本的时候,由于 Debian 的品管质保等方面的工作,Debian 的体积也会增加。等到 Debian 发布了一个新版本以后,庞大的 CD 光盘映像文件又要向 Debian 的全球镜像网络发起新一轮的冲锋。而且,Debian 最近又已经开始支持用更加庞大的 DVD 光盘映像文件来发布 Debian 系统。由于 Debian 的如此庞大的规模,Debian 镜像网络的站点都有些不堪重负。这其中,受到冲击最严重的,就是 CD 和 DVD 光盘映像文件的分发。

Jigdo 和 Package Pool
Jigdo 就是为了缓解庞大的 CD 和 DVD 光盘映像文件对 Debian 镜像网络造成的冲击而开发出来的。在介绍 Jigdo 之前,先让我们对 Debian 镜像站点的构成,有一个初步的了解。
Debian 镜像站点围绕着 Package Pool 这个结构展开。Package Pool,确实就好像是一个承载软件包的池子。Debian 志愿者把散见于网络上各处的自由软件打包整理,放进这个池子。这以后,其他的人就可以根据各种规则,从这个池子中打捞出他们所需要的文件。这个池子本身则负担有垃圾收集的责任,过时的软件包就给淘汰掉。Package Pool 一刻不停地进行着新陈代谢和 Debian 软件包的管理工作。
Debian 最让用户称道的 Apt-Get 升级工具,就得益于 Package Pool 结构。最近,Debian 的新版本的发布也开始围绕着 Package Pool 来进行。确实可以说,Package Pool 是 Debian 的基础架构(Infrastructure)中最重要的一环。
每个 Debian 镜像站点都至少镜像了 Package Pool 的一个完整的部分,比如,包含全部 i386 架构的那一部分。另一方面,由于 CD 光盘映像文件的巨大体积,以及 CD 光盘映像文件所要消耗的巨大的网络带宽资源,许多镜像站点都不愿意为它们做镜像。我们故事的主角 Jigdo 就在此时登场。
Jigdo 为每一个光盘映像文件生成了一个索引,这个索引文件就如同许多钓在 Debian 的 Package Pool 上的渔钩,钩住了一个个的软件包。需要下载 CD 光盘映像文件的用户,只需要运行 Jigdo,告诉它索引文件的位置,Jigdo 就会自动从 Package Pool 里面把需要的软件包钓出来,然后在用户的计算机上,把它们制成所需要的 CD 光盘映像文件。这样一来,Debian 的镜像站点就不再需要为 Debian 的 CD 光盘映像文件作镜像了,他们只需要为 Package Pool 的一个完整的部分,比如,包括 i386 架构的全部软件包的那一部分,做上镜像就可以了。可以说,Jigdo 在相当程度上缓解了分发 Debian 的 CD 光盘映像文件为 Debian 的镜像网络带来的压力。
另一方面,由于有了 Jigdo 的支持,Debian 现在可以发布更多的 CD 光盘映像文件了。因为发布一个光盘映像文件,实际上就等于发布一个新的 Jigdo 索引文件。

Jigdo 使用起来很简单
Jigdo 可以在 Linux 和 Windows 上运行。说了上面那么多,下面我们来看看Jigdo 使用起来到底怎么样。
第一步,是要确认您有一个工作良好的光盘刻录机。;) 此外,你还需要足够大的硬盘空间。由于 Jigdo 的良好设计,您的硬盘上可以只需要能放得下一张 CD 光盘映像文件的自由空间,大概有 650M 字节左右。Jigdo 在从 Debian 的 Package Pool 上下载了需要的软件包之后,会立即把它写入 CD 光盘映像文件,然后就把这个软件包删除,再开始下载下一个软件包,这样一来,有效的使用了硬盘空间。所以您不用担心,由于 Jigdo 一边下载软件包,一边制作 ISO 文件,会浪费多少硬盘空间。
第二步,是到 Jigdo 的主页上( http://home.in.tum.de/~atterer/jigdo/)下载 Jigdo 的软件。当然,如果你是要在 Windows 上运行 Jigdo 的话,你要下载 Jigdo 的 Windows 版本。这个软件体积很小,不到 1M 字节。下载之后,把 ZIP 包打开就可以运行,不需要编译。
第三步,运行 jigdo-lite 这个程序,它会问你要一个 .jigdo 文件,这就是它要的索引。如果你是准备下载 Debian 的最新版本的 CD 光盘映像文件的话,可以从这里( http://us.cdimage.debian.org/jigdo-area/current/jigdo/)得到一份这个 CD 光盘映像文件的 .jigdo 索引文件。
然后呢,然后就没有什么特别的事情要做了。如果一切顺利的话,就等着下载完毕,就可以刻光盘了。你看,从用户的角度来说,Jigdo 使用起来是非常简单的,对不对?而且,Jigdo 充分利用了 Debian 的环绕全球的镜像网络。以往下载一个 CD 光盘映像文件只能从一个站点慢慢的下载。而现在,Jigdo 把一个庞大的映像文件分割成了许多的小软件包,就可以从靠近用户的多个镜像站点同时下载了。这样一来,下载速度也提高了不少。

Jigdo-file
Jigdo 软件包里面主要包括三个工具,下面我们来一一的介绍这三个工具。首先是 Jigdo-file,这是给站点管理员用来扫描一个 CD 光盘映像文件,以生成一份相应的 .jigdo 索引文件。Jigdo-file 不仅可以处理 Debian 的 CD 光盘映像文件,它其实还可以处理任何网站管理员需要分割开来下载的大型文件。比如一个大型的 DivX 电影文件,或者是一个巨大的 ZIP 压缩包。Jigdo-file 为了要处理这个大文件,需要知道这个大文件的组成部分都在哪里。下面我们用一个例子来说明。
假设我们在 /pub/project/snapshot 下放了我们的一个自由软件项目的全部需要备份的文件。然后,我们把这个目录下的所有内容刻成了一张 ISO9660 格式的 CD 光盘映像文件。接下来,我们需要让大家能够下载这个 ISO 文件,以便让网络上更多的自由软件开发者了解我们的自由软件项目的进展。假设我们有许多支持者作我们的镜像网站,他们已经 mirror 了我们的主站上的 /pub/project/snapshot 目录,但是他们不想再从我们这里下载一份 ISO 文件,因为他们的带宽和硬盘资源都很有限。那么,我们如何利用 Jigdo 呢?
我们只要运行 Jigdo-file,告诉它,我们要处理的是 snapshot.iso,它的内容来自于 /pub/project/snapshot 目录下面的文件。这样,Jigdo-file 就会生成一份 .jigdo 索引。我们的镜像网站只需要 mirror 这一个小小的索引文件就可以了。这以后,当用户需要下载这个 ISO 文件的时候,它可以用 Jigdo-lite 从靠近的镜像站点上下载这些独立的小文件,然后把它们在自己的机器上组装成一个 CD 光盘映像文件。
那么,如果我们不是要处理一个 ISO9660 格式的光盘映像文件,而是要处理一个巨大的 DivX 电影文件怎么办呢?我们可以用 split 命令把一个大文件分割成若干个小文件。关于 split 命令,可以参看它的 Man Page。这以后,你的镜像站点可以只 mirror 这些由 split 生成的小文件。但是对于用户来说,他们还是可以从你的镜像站点下载完整的 DivX 文件。
关于 Jigdo-file 的命令行选项,我们就不在这里介绍了,它的手册( http://home.in.tum.de/~atterer/jigdo/jigdo-file.html)才是权威的参考。
这一节的最后,说明一下 Jigdo-file 生成的 .template 文件,这是 Jigdo 从诸多小文件组装一个大文件时所用到的模版。大文件里面可能有一些没有包括在任何一个小文件中的内容,这些内容就被 Jigdo 放在 template 里面。

Jigdo-lite
Jigdo-lite 就是用户用来下载好多个小文件,然后把它们在自己的机器上组装成一个大文件的工具。它的用法我们已经在前面讲过了,用户只要告诉它从哪里找到一个 .jigdo 索引就可以了,剩下的一切就交给它去做。直到最后用户得到那个想要的完整的大文件,比如是 CD 光盘映像文件,或者 DivX 电影文件等等。

Jigdo-mirror
Jigdo-mirror 是镜像站点管理员所用的工具。用来从主站点把那许多个小文件 mirror 下来。需要做镜像的文件有 .jigdo 索引文件、.template 模版文件,以及所有的分割开的独立的小文件。Jigdo-mirror 还要做一些额外的维护工作,所以最好是用 Jigdo-mirror 做镜像,这样也方便。关于 Jigdo-mirror 的命令行选项,请参考 Jigdo-mirror 的手册( http://home.in.tum.de/~atterer/jigdo/jigdo-mirror.html)。我们这里就不再多说了。

结语
Jigdo良好的设计,使得它可以有许多额外的用途。比如,可以更新一个 CD 光盘映像文件。Debian 每天都有最新的测试版的 CD 光盘映像文件可以通过 Jigdo 下载。用了 Jigdo,你就可以不必每次都从头开始下载那么大的文件。因为每天的映像文件都是在前一天的映像文件的基础上更新的,你可以用 Jigdo 每天在本地计算机上更新一下前一天下载的映像文件就可以了。这样大大节约了网络带宽。从管理员方面来说,他或她也可以更加频繁的更新 CD 光盘映像文件。因为,比如说,如果有一个 Debian Package Pool 的镜像的话,发放一个新的 CD 光盘映像文件,等于是只要在镜像网络上放一个新的 .jigdo 索引文件就可以了。

参考资料
1. 标出了 Debian Developer 的大概地理位置的世界地图: http://www.debian.org/devel/developers.loc地图上的每一个红点代表一个 Debian 志愿者。
2. 关于 Debian 的规模的图表: http://ftp-master.debian.org/~mmagallo/
3. 关于 Debian GNU/Linux 的 CD 光盘映像文件的主站点: http://www.debian.org/CD/
4. Debian 的最新版本的 CD 光盘映像文件的 Jigdo 索引: http://us.cdimage.debian.org/jigdo-area/current/jigdo/i386/
5. Jigdo 的主页: http://home.in.tum.de/~atterer/jigdo/

该文章最后由 阿炯 于 2010-03-11 02:25:19 更新,目前是第 2 版。