FAQ

配置之后 emerge 为何仍然从源码编译?

Portage 不会直接比较 profile 名称,而是根据当前配置检查二进制包元数据。profile 变更可能改变 USE 与依赖选择,使现有二进制包不再适用;此时 Portage 会改为编译源码。 用 emerge -pv 检查,前缀为 [binary] 才表示采用了二进制包。

stable 与 unstable 有什么区别?

请选择与系统 Gentoo 主树关键字相同的频道。两个频道都接受 gentoo-zh overlay 的 ~amd64 软件包,区别是构建运行期依赖时采用稳定还是测试关键字。

频道Gentoo 主树gentoo-zh overlaysync-uri 路径
频道stable(默认) Gentoo 主树amd64 gentoo-zh overlay~amd64 sync-uri 路径/binpkgs/x86-64
频道unstable Gentoo 主树~amd64 gentoo-zh overlay~amd64 sync-uri 路径/unstable/binpkgs/x86-64

stable 系统只需在 package.accept_keywords 中对 */*::gentoo-zh 接受 ~amd64;unstable 适用于全局设置 ACCEPT_KEYWORDS="~amd64" 的系统。切换前请阅读 Gentoo Wiki 的 ~ARCH system-wide 说明。Portage 会拒绝依赖、USE 或 ABI 不适用的 binpkg 并改为从源码构建。选择匹配的 频道可以提高 binpkg 的适用率。

为什么要用 binrepos.conf,不能直接设 PORTAGE_BINHOST?

因为 PORTAGE_BINHOST 产生的是隐式仓库,无法单独设置 verify-signature。 若为使用本站的包而关闭验签,官方 binhost 的验签会一并关闭。

OpenRC 和 systemd 都能使用吗?

本站只使用一个 profile 构建,不分别生成 OpenRC 与 systemd 产物。 Portage 会按当前 USE 与依赖判断二进制包是否适用;不适用时改为从源码构建。

二进制包是否可能无法在我的 CPU 上运行?

构建环境使用 CFLAGS="-O2 -pipe -march=x86-64 -mtune=generic",不使用 -march=native。该设置不能约束 ebuild 附带的上游预编译对象或程序库; Portage 接受二进制包时也不比较 CFLAGS,因此仍可能存在例外。

如何验证下载的二进制包来自本站且内容未被修改?

签名内嵌在每个 gpkg 包里(image.tar.zst.sig),和官方 binhost 一样。 配置里的 verify-signature = true 让 Portage 拒绝本源里验签不过的包, 它写在 binrepos.conf 里,只作用于本源。

另有一个全局开关 FEATURES=binpkg-request-signature,它对所有来源生效 并覆盖上面那条。它还要求通过 FEATURES=buildpkg 构建的包带签名; 这些包默认没有签名。启用该功能时必须同时配置 binpkg-signing、本机签名密钥,以及让 gpg 能读取 getuto 存放的口令。

不安装 sec-keys 包时,如何取得签名公钥?

下载签名公钥文件,再将配置第 1 步中 --import 的路径指向该文件。 下载不需要 root。

shell
curl -O https://distfiles.gentoozh.org/gentoo-zh-binhost.asc

如何停用?

删除 /etc/portage/binrepos.conf/gentoo-zh.conf。已安装的包不受影响。

有哪些镜像?

源站 distfiles.gentoozh.org、教育网联合镜像站 mirrors.cernet.edu.cn/gentoo-zh、南京大学 mirror.nju.edu.cn/gentoo-zh 、南阳理工学院 mirror.nyist.edu.cn/gentoo-zh 与河南教育网 mirrors.ha.edu.cn/gentoo-zh 均提供二进制包与 distfiles。可在配置页按网络情况切换。 镜像同步本站已签名的产物;切换不改变签名验证要求。

如何避免自动镜像某个包的 distfile?

不希望自动镜像某个包的 distfile 时,在 ebuild 的既有 RESTRICT 值中加入 mirror;没有该变量时可设置 RESTRICT="mirror"RESTRICT 中含 fetch 时,也会阻止同步流程自动获取和镜像文件。

如何自行建立镜像?

rsync 服务公开提供,无需申请。rsync module 包含 binpkgs/distfiles/。同步到本地后用 HTTP 提供即构成一个完整的镜像, 因为索引中的 PATH 是相对路径,不依赖主机名。

rsync
$ rsync -a --delete --delay-updates rsync://distfiles.gentoozh.org/gentoo-zh/ /srv/mirror/gentoo-zh/

建议每日同步一次。rsync 会跳过其判定为未变更的文件;同一路径的文件仍可能因 重新签名或重新生成而需要传输。--delay-updates 会把已传输的变更文件 延后到传输末段逐一替换,但不会将索引与软件包树作为一个整体进行原子切换。 镜像建成后在 GitHub Issues 提出,以便在“有哪些镜像?”一项中登记。

都收录了哪些包?

主体是 gentoo-zh/overlay 的收录清单。除此之外,本站也发布这些包所需、允许 再分发的那部分 ::gentoo 运行期依赖,两者在同一份索引里,用 REPO 字段区分。二进制包的许可证必须属于 @BINARY-REDISTRIBUTABLE,且 RESTRICT 不得包含 bindistacct-group/*acct-user/*virtual/* 在用户 系统本地安装。RESTRICT 中的 bindist 只限制二进制包; distfiles 是否镜像由 mirrorfetch 与每项 SRC_URI 独立决定。附带内容仅包含 这些包的运行期依赖,不替代 Gentoo 官方 binhost。 清单见 gentoo-zh/binhost

如何阅读包列表状态?

包列表分开显示公开索引、直接构建清单、当前发布政策和 distfiles 镜像状态。 同一行可以同时出现多个状态,因为它们说明不同事实。

状态触发条件与常见原因
公开 binpkg 索引已有该包,可以从本站下载。它不表示该包仍在直接构建清单;同时出现 待移除 时,勾号只表示旧产物暂时仍可用。
待构建该包是直接构建目标,但公开索引尚无 binpkg。它可能尚未完成首次构建,也可能最近一次未成功发布;该状态只表示目前没有公开产物。
不构建维护清单明确排除该包。常见原因包括无法构建、缺少支持或需要进一步核对再分发条件;标签提示中会显示记录的具体原因。
本频道不构建该包仍在共用收录清单中,但不符合当前频道的依赖或构建条件,因此本频道不直接构建。另一个频道仍可能发布该包;当前频道尚有旧产物时会同时显示 待移除
清单外该包不是直接构建目标。上游已经提供预编译内容或构建收益较低时通常不会直接收录,但运行期依赖闭包仍可能将它作为依赖发布;包名含 -bin 不会自动决定该状态。
不提供 binpkg当前 ebuild 的 RESTRICT 包含 bindist,因此本站不发布该包的 binpkg。源码包和上游预编译包都可能设置这项限制,常见原因是许可证、上游发布条款或预编译内容的再分发条件不允许本站分发二进制产物;包名含 -bin 本身不是判定依据。distfiles 是否镜像仍按 RESTRICT 中的 mirrorfetch 与每项 SRC_URI 单独判断。
许可证限制当前 ebuild 的 LICENSE 表达式不属于本站固定的 @BINARY-REDISTRIBUTABLE。许可证可能允许附带条件的再分发,但本站不会据此发布 binpkg;该状态与 RESTRICT=bindist 分开判定。
本地安装acct-groupacct-user 由 Portage 在用户系统创建账号,virtual 由 Portage 选择实际实现。这些包无需本站预编译。
待移除公开索引仍有旧 binpkg,但当前 overlay、清单或发布政策已不再提供它。旧产物在新一代索引发布成功后开始移除,每轮移除一部分,避免旧索引指向已删除文件;该状态可以与勾号同时出现。
Distfiles —该包没有声明 distfile、RESTRICT 包含 mirrorfetch,或声明的文件尚未全部进入镜像。破折号提示会区分没有文件与不可用;该状态不表示 binpkg 不可用。

如何在 w3m、lynx 或 curl 中浏览?

包数据表与交互式文件浏览需要脚本;页面标题、说明与链接仍可读取。 纯文本清单供脚本和终端界面查阅:stable 使用 /packages.txt/deps.txt, unstable 使用 /packages-unstable.txt/deps-unstable.txt。Portage 不读取这些清单,频道应通过 配置中的 sync-uri 选择。包清单第二列 bin+src 表示两者都有、 bin 表示只有二进制包、src 表示只有 distfiles。 目录浏览用 /_raw/,那是由 nginx 生成的列表,不需要脚本。 其余各页的正文都写在 HTML 里,文字浏览器直接可读。