GLEP 60: Manifest2 文件类型

作者 Robin Hugh Johnson <[email protected]>
类型 标准跟踪
状态 已替换
版本 1
创建日期 2008-10-22
上次修改日期 2018-04-07
发布历史 2009-12-01, 2010-01-31
需求 44
被谁替换 74
GLEP 源代码 glep-0060.rst

摘要

澄清 Manifest2 [GLEP44] 规范,包括帮助树签名规范的新类型。

动机

[GLEP44] 对文件类型说明符的使用并不完全清楚。本文档旨在提供 Portage 在编写时使用的一些内部逻辑,以及添加新类型以涵盖树的其余部分,用于树签名覆盖。

此 GLEP 对于树签名规范不是强制性的,而是旨在澄清 Manifest2 文件类型说明符的使用,并注意哪些类型表示允许从树中丢失的文件(例如,用户排除软件包或类别)。因此,它也可以独立存在。

规范

一般

对于任何具有 Manifest 文件的目录,位于该目录或子目录中的每个文件都必须列在该 Manifest 文件中,除非以下部分另有说明。Manifest 文件不得包含自身条目的条目。

排除文件

在生成或验证 Manifest 或提交到版本控制系统时,包管理器应努力忽略版本控制系统创建的文件,例如文本编辑器的备份文件。这里建议一个非详尽的列表CVS/, .svn/, .bzr/, .git/, .hg/, .#*, *.rej, *.orig, *.bak, *~.

此外,对于过渡的 Manifest1->Manifest2 系统,位于“files/”目录中的旧式摘要文件可以从 Manifest2 生成中排除,或者包含 MISC 类型。

在严格的安全条件下,如果文件的存

现有文件类型

AUX

  • AUX 类型用于“files”子目录下的所有项目。
  • 它们应相对于 $FILESDIR 进行验证。
  • 字符串“files/”从 Manifest 行中省略。
  • AUX 提及的文件不存在应被视为错误。
  • AUX 类型旨在表示可能的可执行内容(直接或间接),如果修改或缺失,则必须将其视为错误。

EBUILD

  • EBUILD 类型仅用于以 .ebuild 结尾的文件,或 EAPI 定义的其他后缀。
  • 这些文件位于与 Manifest 文件相同的目录中。
  • EBUILD 提及的文件修改或缺失必须被视为错误。

DIST

  • DIST 类型用于 distfiles。
  • 它们可以通过包管理器的 $DISTDIR 设置直接找到。
  • 在简单验证 Manifest 期间,丢失的 DIST 文件不应被视为验证错误(但它确实无法获取或解压缩)。

MISC

  • MISC 类型涵盖目录中所有剩余的文件。
  • MISC 旨在标记所有未以直接影响包管理器执行的方式使用的内容。
  • 这包括 metadata.xml 和 ChangeLog 条目,以及任何其他纯粹的信息内容。
  • 如果文件丢失,MISC 条目可以选择性地被非严格包管理器忽略。
  • 应该能够在从树中删除所有 MISC 条目后安装软件包。

新文件类型

_INFO(新,抽象)

  • 这是旧 AUX 的功能,但不包括路径中的隐式“files/”前缀,并且相对于工作目录而不是 $FILESDIR 进行验证。
  • 除非包管理器尝试严格,否则列为 _INFO 派生类型的文件修改或缺失不是错误。

_CRIT(新,抽象)

  • _CRIT 基于 _INFO 类型。
  • 列为 _CRIT 派生类型的文件修改或缺失必须被视为错误。

EBUILD

  • 现在从 _CRIT 派生。
  • 其他方面保持不变。

DIST

  • 现在从 _CRIT 派生。
  • 其他方面保持不变。

MISC

  • 现在从 _INFO 派生。
  • 其他方面保持不变。

MANIFEST(新)

  • MANIFEST 类型明确用于涵盖所有嵌套的 Manifest 文件。
  • 在验证期间,这表明包管理器可能需要检查子树 Manifest 文件。
  • 丢失的 MANIFEST 文件可以被视为轻微(例如,排除整个类别)或严重验证失败。
  • 只有在直接由此 Manifest 覆盖的文件丢失时,失败才应被视为严重。在保留软件包的同时删除类别级 Manifest 是禁止的。删除整个类别是允许的。

ECLASS(新)

  • 使用 _CRIT。
  • 此类型应仅用于所有 eclasses。

DATA(新)

  • 使用 _CRIT。
  • DATA 类型应用于直接影响包管理器的所有文件,例如 metadata/cache/* 和 profiles/。

EXEC(新)

  • 使用 _CRIT。
  • 如果文件被源代码化、执行或导致源代码或执行方式发生变化(补丁),它属于 EXEC 文件类型。
  • 此文件类型应用于存储库的脚本目录中,用于存放重要文件。
  • 此文件类型不限于在 files/ 子目录中使用。

OTHER(新)

  • 使用 _CRIT。
  • 所有其他未被其他类型涵盖的文件应被视为“OTHER”。
  • 任何进一步的新文件类型应被引入以从“OTHER”集中减去文件。
  • 如果包管理器遇到未知的 Manifest2 类型,它应该被视为“OTHER”。

关于膨胀

如果重复使用公共路径前缀被视为膨胀问题,则应在公共目录内添加一个 Manifest 文件,但是不应盲目执行此操作,因为对于大多数用例而言,inode 的膨胀更为显著。另见 [GLEP58] 关于 Manifest 大小缩减的内容。

选择文件类型

  1. 匹配Manifest
    => MANIFEST,停止。
  2. 匹配*.ebuild
    => EBUILD,停止。
  3. 匹配*.eclass
    => ECLASS,停止。
  4. 列在 SRC_URI 中
    => DIST,停止。
  5. 匹配files/*
    => AUX,继续 [见注释]。
  6. 匹配任何以下内容*.sh, *.bashrc, *.patch, ...
    => EXEC,停止。
  7. 匹配任何以下内容metadata/cache/*, profiles/, package.*, use.mask*, ...
    => DATA,停止。
  8. 匹配任何以下内容ChangeLog, metadata.xml, *.desc, ...
    => MISC,停止。
  9. 未被任何其他规则匹配
    => OTHER,停止。

5、6、7 后面的逻辑确保每个可能因其存在或缺失而存在危险的项目都应始终严格处理。(考虑给定补丁目录的 epatch${FILESDIR}/${PV}/,它会盲目地将它们包含在内,或者,package.mask 文件或配置文件被更改/丢失)。

上述文件模式列表并非旨在详尽无遗,而仅仅是演示性的。

注释:仅当生成支持较旧版本 Portage 的兼容 Manifest 时,才应生成 AUX 条目。它们应与新类型一起生成。

向后兼容性

对于现有软件包 Manifest 的生成,AUX 条目必须为了标准的 Portage 弃用周期而继续存在。新的条目可能已经包含在所有 Manifest 文件中,因为它们会被较旧的 Portage 版本忽略。随着时间的推移,ECLASS、DATA、EXEC、OTHER 可能取代现有的 AUX 类型。

采用此提案也会影响 [GLEP58] 作为此 GLEP 系列的一部分,但此 GLEP 是该 GLEP 中研究的偏移量。

感谢

我要感谢以下人士对此 GLEP 的意见。- Marius Mauch (genone) & Zac Medico (zmedico): Portage Manifest2

参考文献

[GLEP44](1, 2) Mauch, M. (2005) GLEP44 - Manifest2 格式。 https://gentoolinux.cn/glep/glep-0044.html
[GLEP58](1, 2) Gentoo 软件分发安全 - 基础设施到用户分发 - 元 Manifest https://gentoolinux.cn/glep/glep-0058.html