GLEP 9:Gentoo 软件包更新系统
作者 | John J. Whitney <jjw@linuxmail.org> |
---|---|
类型 | 标准跟踪 |
状态 | 延迟 |
版本 | 1 |
创建日期 | 2003-07-19 |
最后修改日期 | 2014-01-15 |
发布历史 | 2003-07-25 |
GLEP 源代码 | glep-0009.rst |
摘要
本文档提出了一种针对 Gentoo Linux 的正式软件包更新系统。Deltup 项目已为此目的而开发。[1]
随着软件包越来越大,冗余数据量也在不断增加。通过补丁更新现有 tarball 是处理源代码更新的自然方式。
动机
此系统将减少镜像负载(可能还会减少镜像大小)并显著加快下载速度,使 Gentoo 对于低带宽连接的用户更具吸引力。
服务器实现
我建议将补丁放在 Gentoo 镜像上,并存储在一个名为“patchfiles”的新目录中,该目录可以放在“distfiles”旁边。
在 Portage 树中有一个可用的补丁列表将非常有利,以便它可以在“emerge sync”期间更新。可以创建一个名为“dtu.list”的文件并将其放在 $PORTDIR/profiles 中。
如果可以设置一台机器来生成补丁,则它应该包含一个 distfiles 的本地镜像,它可以监控该镜像以添加软件包。当软件包添加到 distfiles 时,机器可以尝试确定以前的 tarball,以便可以制作补丁并将其放在 patchfiles 目录中。此外,可以手动添加特殊情况补丁。
dtu.list 文件将由一个特殊的脚本维护。每当向 patchfiles 目录添加或删除补丁时,脚本都会在 dtu.list 中进行必要的添加/删除。这将在文件中进行最少的更改,以便可以高效地同步。
客户端实现
该系统对用户来说是可选的,可以通过使 Portage 通过 FETCHCOMMAND 环境变量调用 efetch 来启用[3]。
当请求软件包获取时,efetch/fetchcommand 脚本(Deltup 的一部分)将扫描 dtu.list 文件以查找更新,并尝试下载和应用它们(如果存在),或者如果它们不存在或补丁过程失败,则回退到完整软件包下载。
基本原理
最具争议的功能是向 Portage 树中添加 dtu.list,因此在本节中,我将列出我支持它的原因。
- 灵活性。如果没有它,必须有一个标准的命名方案,一旦系统到位,我们就将被困在其中。更改系统将需要严重的兼容性中断。使用 dtu.list 文件,我们可以轻松地更改命名方案,而不会出现问题,甚至可以拥有几种不同的命名方案。
- 功能。如果没有补丁信息,则无法检测不同的升级路径。拆分软件包补丁也将不可能。如果信息可用,我们可以使用它来找到最快的升级路径,例如从 .0 版本跳转,或者如果补丁存在问题,甚至可以禁用某些补丁。
- 在某些情况下,包括重命名的软件包,将无法知道要从哪些软件包升级。
- 知道哪些补丁可用将消除尝试下载不存在的补丁的开销。
dtu.list 文件将包含数百 KB 的数据。这引起了一些关于它如何有效地进行 rsync 的担忧。为了解决这些问题,文件格式将为纯文本,并且已谨慎考虑在进行删除/添加时最大程度地减少更改次数。
向后兼容性
由于 Deltup 可以生成正确的软件包 MD5 校验和,因此没有向后兼容性问题。
结论
我建议我们从缩减规模的实现开始,并在需求增加时提供更多功能。所有必要的代码都已编写并在非正式测试中运行。
参考文献
[1] | http://sourceforge.net/projects/deltup |
[2] | ftp://sunsite.dk/projects/deltup/patchfiles |
[3] | 小型 Deltup 使用方法 (http://www.thedoh.com/linux/HOWTO/deltup) |
版权
此作品根据知识共享署名-相同方式共享 3.0 未更改许可发布。要查看此许可证的副本,请访问 https://creativecommons.org/licenses/by-sa/3.0/。