Next: , Previous: , Up: 贡献   [Contents][Index]


22.2 从 Git 构建

如果你想折腾 Guix 本身,建议使用 Git 仓库里最新的版本:

git clone https://git.savannah.gnu.org/git/guix.git

如何确保已获得存储库的真实副本?为此请运行 guix git authenticate,将 channel introduction(see 调用guix git authenticate)的提交和 OpenPGP 指纹传给它:

git fetch origin keyring:keyring
guix git authenticate 9edb3f66fd807b096b48283debdcddccfea34bad \
  "BBB0 2DDF 2CEA F6A8 0D1D  E643 A2A0 6DF2 A33A 54FA"

此命令完成后,若成功则退出代码为零;否则打印一条错误消息,以非零代码退出。

正如你所看到的,这里存在一个先决条件的问题:你首先需要安装 Guix。典型地,你会安装 Guix 系统(see 系统安装)或在 另一个发行版上安装 Guix(see 二进制文件安装);无论哪种情况,你 都需要在安装介质上验证 OpenPGP 签名。这“引导”了信任链。

设置 Guix 开发环境的最简单的方式当然是使用 Guix!下面这些命令启动一个 shell,所有的依赖和环境变量都为折腾 Guix 设置好了:

guix shell -D guix -CPW

或者,从一个 Git worktree 内部使用 Guix:

guix shell -CPW

如果 -C--container 的缩写)在你的系统上不被支持,请尝试使用 --pure 来代替 -CPW。有关该命令的更多信息见 See 调用guix shell

如果在从检出中构建 Guix 时无法使用 Guix,则除了安装说明中提到的 软件包(see 需求)外,以下是所需的软件包。

在 Guix 上,额外的依赖也可以通过 guix shell 添加:

guix shell -D guix help2man git strace --pure

在这里你可以使用 Autoconf 和 Automake 生成构建系统的基础设施:

./bootstrap

若你得到一个像这样的错误:

configure.ac:46: error: possibly undefined macro: PKG_CHECK_MODULES

它可能意味着 Autoconf 无法找到由 pkg-config 提供的 pkg.m4。请确保 pkg.m4 可用。由 Guile 提供的 guile.m4 宏也类似。假如你的 Automake 安装在 /usr/local,那么它不会从 /usr/share 里寻找 .m4 文件。这种情况下,你必须执行下面这个命令:

export ACLOCAL_PATH=/usr/share/aclocal

更多信息请参考 See Macro Search Path in The GNU Automake Manual.

然后,运行:

./configure

Optionally, --localstatedir and --sysconfdir can also be provided as arguments. By default, localstatedir is /var (see 仓库, for information about this) and sysconfdir is /etc. Note that you will probably not run make install at the end (you don’t have to) but it’s still important to pass the right localstatedir and sysconfdir values, which get recorded in the (guix config) Guile module.

最后,你可以构建 Guix。若你希望,还可以运行测试 (see 运行测试套件):

make
make check

如果遇到任何错误,请参考“安装指导”(see 安装)或者给邮件列表发邮件。

从这开始,你可以运行下面的命令认证检出中的所有提交:

guix git authenticate \
  9edb3f66fd807b096b48283debdcddccfea34bad \
  "BBB0 2DDF 2CEA F6A8 0D1D  E643 A2A0 6DF2 A33A 54FA"

The first run takes a couple of minutes, but subsequent runs are faster. On subsequent runs, you can run the command without any arguments since the introduction (the commit ID and OpenPGP fingerprints above) will have been recorded44:

guix git authenticate

或者,当你的本地 Git 仓库与默认的不符时,你可以通过环境变量 GUIX_GIT_KEYRING 提供一个对keyring 分支的引用。下面的例子假设你有一个名为 ‘myremote’ 的 Git 远程分支,它指向官方仓库:

guix git authenticate \
  -k myremote/keyring \
  9edb3f66fd807b096b48283debdcddccfea34bad \
  "BBB0 2DDF 2CEA F6A8 0D1D  E643 A2A0 6DF2 A33A 54FA"

See 调用guix git authenticate,以获得关于此命令的更多信息。

注: By default, hooks are installed such that guix git authenticate is invoked anytime you run git pull or git push.

在每次更新仓库后,make 可能会因为一个错误而失败,就像下面的例子:

error: failed to load 'gnu/packages/linux.scm':
ice-9/eval.scm:293:34: In procedure abi-check: #<record-type <origin>>: record ABI mismatch; recompilation needed

它的意思是 Guix 定义的一个记录类型变动了(在这个例子中,为 origin 记录),并且全部 guix 都需要重编译来让这个变动生效。运行 make clean-gomake 来重新编译。

Should make fail with an Automake error message after updating, you need to repeat the steps outlined in this section, commencing with ./bootstrap.


Footnotes

(44)

This requires a recent version of Guix, from May 2024 or more recent.


Next: 运行测试套件, Previous: 需求, Up: 贡献   [Contents][Index]