GLEP 82:仓库配置文件 (layout.conf)

作者 Michał Górny <mgorny@gentoo.org>
类型 标准跟踪
状态 最终版
版本 1.2
创建日期 2021-05-19
最后修改日期 2021-09-12
发布历史 2021-05-19, 2021-06-18, 2021-08-01
GLEP 源码 glep-0082.rst

摘要

metadata/layout.conf文件格式指定为 Portage 和 pkgcore 使用的格式。描述了一组标准的配置键,包括当前在 Gentoo 仓库中使用的键。

动机

metadata/layout.conf文件于 2011 年 10 月首次添加到 Gentoo 仓库,以方便设置 Manifest2 文件中使用的哈希值。2012 年 3 月,它用于指示向新的md5-dict缓存格式的过渡。2013 年 7 月,它开始用于指示仓库的主服务器,并有效地成为所有仓库的必备项。

如今,layout.conf用于各种仓库配置旋钮,这些旋钮可以表示为简单的值,因此无需向仓库添加新文件。这主要涉及开发工具的配置,但也包括一些与软件包管理器行为相关的键。

然而,layout.conf目前没有任何正式规范涵盖。PMS 完全忽略了它的存在,使用的键大致由其在 Portage 或 pkgcore 中的首次使用定义。本 GLEP 旨在通过提供该文件的正式规范以及允许的配置键的最新列表来克服此问题。

规范

layout.conf 文件格式

每个 ebuild 仓库都必须包含一个metadata/layout.conf文件。该文件使用面向行的键值格式

# comments are allowed
key = value
key2 = value2

以井号 (#) 开头的行表示注释,将被忽略,完全由空格组成的行也将被忽略。

键可以是任何字符串,并且不能包含空格。值的准确形式取决于键。对于某些键,允许值包含空格,并且不能加引号。在某些情况下,允许使用空值。元素之间的空格是可选的,最终会被去除。每个键在文件中最多只能出现一次。

配置键

本 GLEP 指定了许多标准配置键。将来可能会向其中添加新的键。强烈建议在使用任何新键之前将其添加到规范中。

软件包管理器可以实现列出键的子集。未知键应被忽略。

以下键必须出现在layout.conf文件中

masters = <用空格分隔的仓库名称>

指定此仓库的主仓库。对于独立仓库,这必须设置为一个空值。否则,它可以列出一个或多个用空格分隔的仓库。必须指定此键。

示例

# most common case
masters = gentoo
# stand-alone repository
masters =
# multiple masters
masters = gentoo python

以下键是可选的

manifest-hashes = <用空格分隔的哈希名称>

指定 Manifest 文件中新 distfile 应使用的哈希列表。如果开发工具没有更新指定 distfile 的校验和,或者不支持相关哈希,则它可能会创建指定哈希的一个子集。哈希名称在 GLEP 74 中指定。 [1] 哈希的默认集是实现定义的。

示例

manifest-hashes = BLAKE2B SHA512
manifest-required-hashes = <用空格分隔的哈希名称>
指定 Manifest 文件中必须使用的哈希列表。开发工具必须支持那里列出的所有哈希,并更新 distfile 校验和以使用这些哈希(如有必要重新获取)。这必须是 manifest-hashes 的一个子集。如果未指定,则所有来自 manifest-hashes(或默认集)的哈希都被认为是必需的。
use-manifests =严格,
指示创建和使用 Manifest 文件的策略。如果设置为严格,则创建 Manifest 文件,并且要求文件与 Manifest 中找到的摘要匹配。如果设置为,则创建 Manifest,但忽略摘要不匹配。如果设置为,则根本不使用 Manifest。默认值为严格.
update-changelog =
指示开发工具是否应该写入 ChangeLog 文件。默认值为.
cache-formats = <用空格分隔的格式名称>

指定仓库使用的一种或多种缓存格式。当前定义的值为pms用于 PMS 中指定的原始格式,以及md5-dict用于 Portage 2.2.0_alpha68 中引入的 md5-dict 格式。默认值为实现定义的。

示例

# modern repo
cache-formats = md5-dict
# backwards compatibility case
cache-formats = md5-dict pms
eapis-deprecated = <用空格分隔的 EAPI 名称>

指定一个或多个 EAPI,开发工具应将其视为 ebuild 中已弃用,即其使用应触发警告。如果未指定,则没有 EAPI 已弃用。此键不适用于配置文件中的 EAPI 使用。

示例

eapis-deprecated = 0 1 2 3 4
eapis-banned = <用空格分隔的 EAPI 名称>
指定一个或多个 EAPI,开发工具应将其视为 ebuild 中已禁用,即其使用应被阻止。如果未指定,则没有 EAPI 已禁用。此键不适用于配置文件中的 EAPI 使用。
eapis-testing = <用空格分隔的 EAPI 名称>
指定一个或多个 EAPI,在 ebuild 中使用稳定关键字时不能(尚未)使用,即开发工具应阻止在这些 ebuild 中使用它们。
profile-eapis-deprecated = <用空格分隔的 EAPI 名称>
指定一个或多个 EAPI,开发工具应将其视为配置文件中已弃用,即在profiles/profiles.desc中列出的任何配置文件或其父配置文件中使用它们应触发警告。如果未指定,则没有 EAPI 已弃用。
profile-eapis-banned = <用空格分隔的 EAPI 名称>
指定一个或多个 EAPI,开发工具应将其视为配置文件中已禁用,即在profiles/profiles.desc中列出的任何配置文件或其父配置文件中使用它们应被阻止。如果未指定,则没有 EAPI 已禁用。
repo-name = <字符串>
指定仓库名称。如果指定,则必须等于profiles/repo_name的内容。如果未指定,则默认为相同的值。不建议使用。
aliases = <用空格分隔的名称>

指定一个或多个其他名称,这些名称可用于引用仓库(例如,在仓库依赖项中)。如果未指定,则不定义任何别名。

示例

# gen2 is a fork of Gentoo that can be used in place of the Gentoo
# repository
repo-name = gen2
aliases = gentoo
thin-manifests =
如果启用,则软件包目录中的 Manifest 文件必须仅包含DIST条目。如果禁用,则软件包目录中的 Manifest 文件必须列出软件包目录和文件目录中找到的所有文件的摘要。默认值为.
sign-commits =
指示是否应签署 git 提交(使用git commit --gpg-sign)。默认值为.
sign-manifests =
指示是否应 PGP 签署各个软件包 Manifest。请注意,这指的是签署各个 Manifest 的历史行为,而不是 GLEP 74 签署顶级 Manifest 的行为。 [1] 默认值为如果配置了 PGP 签名。
properties-allowed = <用空格分隔的属性标记>

指定允许在 ebuild 中使用的PROPERTIES标记列表。如果存在,则如果PROPERTIES包含此处未列出的任何标记,则开发工具应发出警告。如果未指定,则允许所有标记。

示例

properties-allowed = live
restrict-allowed = <用空格分隔的限制标记>
与 properties-allowed 相同,但针对RESTRICT.
profile-formats = <用空格分隔的格式名称>

指定配置文件及其扩展使用的格式。默认值为pms,指示 PMS 中指定的格式。其他值是实现定义的。

示例

profile-formats = portage-1
profile-formats = portage-2 profile-set

完整示例

以下是一个带有 Gentoo 作为主服务器的 git 仓库的配置示例

masters = gentoo

# git: do not use ChangeLog, use thin, unsigned Manifests
update-changelog = false
thin-manifests = true
sign-manifests = false

# force the new md5-dict cache format
cache-formats = md5-dict

基本原理

本 GLEP 是在layout.conf最初引入近 10 年后编写的。这使得有必要以这样一种方式编写它,即 Portage 和 pkgcore 中的现代和历史实现,以及在 Gentoo 仓库和相当大一部分其他仓库中的使用都将保持兼容。

假设masters = gentoo在未指定时的历史默认值被省略,因为它不可移植并且在 Portage 中已弃用多年。所有仓库都必须明确指定其主仓库,或者如果它们是独立仓库,则指定空值。

Manifest 哈希和缓存格式的默认值保留为实现定义的,因为默认值随着时间的推移而改变,并且在软件包管理器之间不匹配。特别是,Portage 尝试自动检测当前在给定仓库中使用的缓存格式。

repo-name 键最初被添加为profiles/repo_name的替代方案。但是,后一个文件仍然是 PMS 兼容性所必需的。此外,鉴于它更容易解析,似乎没有令人信服的理由来努力替换该文件。这意味着,出于所有实际目的,repo-name 键是冗余的,仅出于完整性在此处列出。

profile-formats 键已引入,允许 Portage 特定的配置文件目录扩展,而无需引入自定义 EAPI。确切的扩展被认为在本规范的范围之外。

向后兼容性

Portage 和 pkgcore 中现有的实现符合此规范,Gentoo 仓库中的文件也符合。metadata/layout.confGentoo 仓库中找到的文件。

参考实现

metadata/layout.conf的支持已经是 Portage 和 pkgcore 的一部分。

参考文献

[1](1, 2) GLEP 74:使用清单文件进行全树验证 (https://gentoolinux.cn/glep/glep-0074.html)