FAQ

配好之后为何 emerge 不使用二进制包,仍然编译?

因为二进制包记录了构建时的 profile 与 USE,所以两者不一致时 portage 不会采用它,而是直接编译源码,且不作提示。 用 emerge -pv 检查,前缀为 [binary] 才表示采用了二进制包。

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

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

OpenRC 和 systemd 都能使用吗?

能。仓库按 CPU 基线切分,不按 init 系统切,这也是官方 binhost 的做法。 清单里只有个位数的包在 IUSE 里出现 systemd,其余产物两边一致。

二进制包会不会在我的 CPU 上跑不起来?

不会。构建在容器里,CFLAGS 是通用的,不带 -march=native。 因为 portage 接受二进制包时不比较 CFLAGS,所以这一点只能在构建端保证。

怎么确认安装的包没被修改?

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

另有一个全局开关 FEATURES=binpkg-request-signature,它对所有来源生效 并覆盖上面那条。因为它同样要求你自己用 FEATURES=buildpkg 编出来的包 带签名,而那些包默认没有签名,所以打开之后每次本地构建都会在合并时报 GnuPG verification failed。要用它就得同时配好 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、南京大学 mirror.nju.edu.cn/gentoo-zh 与南阳理工学院 mirror.nyist.edu.cn/gentoo-zh, 都提供二进制包与 distfiles。国内取校园镜像更快, 在配置页上可以直接切换。 镜像上的包与源站逐字节相同,签名是同一份,换哪个都不影响验签。

怎么自己开一个镜像?

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

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

每日同步一次。因为包名含版本与 build id,内容不再变化,所以已有的文件不会重复传输。 --delay-updates 让这一批文件在末尾一次换入。不加则索引可能先落地, 而它引用的包尚未传完,这段时间下游返回 404。 镜像建成后在 GitHub Issues 提出,加进上面那一条。

都收录了哪些包?

仅收录 gentoo-zh/overlay 自己的包,且许可证允许再分发。带 RESTRICT=bindist 的不收录。 清单见 gentoo-zh/binhost

在 w3m、lynx 或者 curl 里怎么看?

包列表与文件浏览的内容是脚本渲染的,没有脚本时那两页是空的。 纯文本的包清单在 /packages.txt,一行一个包, 第二列 bin 表示有二进制包、src 表示只镜像源码。 目录浏览用 /_raw/,那是 nginx 自己出的列表,不需要脚本。 其余各页的正文都写在 HTML 里,文字浏览器直接可读。