GLEP 61:Manifest2 压缩
作者 | Robin Hugh Johnson <[email protected]> |
---|---|
类型 | 标准跟踪 |
状态 | 最终 |
版本 | 1 |
创建 | 2008-10-22 |
最后修改 | 2018-04-08 |
发布历史 | 2009-12-01, 2010-01-31 |
要求 | 44 |
GLEP 源代码 | glep-0061.rst |
状态
实现已完成。根据 2018 年 4 月 8 日的 Gentoo 委员会决议,标记为最终。
摘要
处理大型 Manifest2 文件的压缩。
动机
随着 MetaManifest 的引入以及全树 Manifest 覆盖,我们面临着可能拥有非常大型的 Manifest 的情况。
对 MetaManifest 的初步实验表明,仅使用现有的每个软件包的 Manifest,对于包含 metadata/ 的树,完整的 MetaManifest(仅限顶层,没有一级子目录)大小超过 8MiB。应用常见压缩可以将此大小减少 50-60%。
此外,树中一些已经存在的较大的 Manifest 也可以减小。
此 GLEP 对于树签名规范不是强制性的,而是帮助减少大型 Manifest2 文件的大小影响,其中一些已经在树中存在。因此,它也能够独立存在。
规范
创建压缩的 Manifest
建议将 32KiB 作为生成压缩 Manifest2 文件的任意截止点。
压缩仅应在为最终用户创建的树中应用。VCS 中存储的任何 Manifest 都不得在 VCS 中压缩。对于主 gentoo-portage 树,这意味着应该使用 CVS 到 Rsync 过程生成压缩的 Manifest。
Manifest 压缩过程需要确保不存在不一致的压缩版本。
验证 Manifest
在搜索 Manifest2 文件时,如果基本名称形式不存在,则软件包管理器应该在同一位置使用常见的压缩后缀进行搜索,并将压缩文件用作 Manifest2。
如果在给定平台上可用,则应支持 gzip、bzip2、lzma、xz。如果存在多个版本,软件包管理器只需选择一个 - 它们应该相同,仅压缩方式不同。
使用 32KiB 截止点和 gzip 算法的示例结果
截至 2010 年 1 月 30 日,建议的截止点将影响以下 21 个现有 Manifest,节省近 900KiB
Size Path 65788 app-doc/linux-gazette/Manifest 75739 app-office/openoffice-bin/Manifest 40534 app-text/texlive-core/Manifest 41710 dev-texlive/texlive-bibtexextra/Manifest 38197 dev-texlive/texlive-documentation-english/Manifest 129610 dev-texlive/texlive-fontsextra/Manifest 36022 dev-texlive/texlive-humanities/Manifest 686118 dev-texlive/texlive-latexextra/Manifest 43392 dev-texlive/texlive-latexrecommended/Manifest 33375 dev-texlive/texlive-mathextra/Manifest 39781 dev-texlive/texlive-pictures/Manifest 69567 dev-texlive/texlive-pstricks/Manifest 75460 dev-texlive/texlive-publishers/Manifest 50879 dev-texlive/texlive-science/Manifest 36711 kde-base/kde-l10n/Manifest 36539 media-gfx/bootsplash-themes/Manifest 33058 net-fs/autofs/Manifest 39781 www-client/firefox-bin/Manifest 48983 www-client/icecat/Manifest 60213 www-client/mozilla-firefox/Manifest 39065 x11-themes/gkrellm-themes/Manifest
此外,使用 MetaManifest 提案,以下新的 manifest 也将被压缩,节省近 4MiB
Size Path 33442 app-admin/Manifest 71073 app-dicts/Manifest 35923 app-emacs/Manifest 45808 app-misc/Manifest 50169 app-text/Manifest 112786 dev-java/Manifest 65581 dev-libs/Manifest 42619 dev-lisp/Manifest 182163 dev-perl/Manifest 96198 dev-python/Manifest 58963 dev-ruby/Manifest 59736 dev-util/Manifest 58338 eclass/Manifest 55749 kde-base/Manifest 110064 licenses/Manifest 35262 media-gfx/Manifest 53995 media-libs/Manifest 55607 media-plugins/Manifest 71911 media-sound/Manifest 34835 media-video/Manifest 5747849 metadata/Manifest 47452 net-analyzer/Manifest 65989 net-misc/Manifest 316787 profiles/Manifest 67784 sys-apps/Manifest 48971 x11-misc/Manifest 41475 x11-plugins/Manifest
向后兼容性
软件包 Manifest 也应该在 CVS 中保持为仅非压缩。
为了处理所有现有的每个软件包的 Manifest,如果使用压缩,则应该与现有的 Manifest 并行进行,以提供过渡期。新版本的 Portage 之后可能会选择在 emerge --sync 期间排除所有未压缩的 Manifest,如果服务器上保证存在压缩版本。
MetaManifest 可能从一开始就作为压缩形式出现,因为它们没有向后兼容性问题。
作为旁注,这将破坏与 Manifest 的所有手动交互,例如 grep,因此应该仅应用于大型 Manifest2 文件,例如 MetaManifest。
参考
[GLEP44] | Mauch,M. (2005) GLEP44 - Manifest2 格式。 https://gentoolinux.cn/glep/glep-0044.html |
版权
版权所有 (c) 2005-2010 由 Robin Hugh Johnson。
本作品采用 Creative Commons 署名-相同方式共享 3.0 未移植许可协议授权。要查看此许可协议的副本,请访问 https://creativecommons.org/licenses/by-sa/3.0/。