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