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


22.4 在安装之前运行 Guix

为了保持一个正常的工作环境,你会发现在不实际安装的情况下测试本地源码树签出中的更改是非常有用的。这样你可以更好地区分自己作为“最终用户”和“测试员”的角色。

这样,即使你没有运行 make install,所有的命令行工具都可以使用。为此,你先要有一个全部依赖都可用的环境(see 从 Git 构建),然后简单地为每个命令添加前缀 ./pre-inst-envpre-inst-env 脚本在 Guix 构建树的最顶层,see 从 Git 构建来生成它)。作为例子,以下是你如何构建 hello 包,如同在你的工作树中定义的那样(这假设了 guix-daemon 正在运行于你的系统上;如果是不同的版本也可以):

$ ./pre-inst-env guix build hello

类似地,一个使用 Guix 模块的 Guile 会话的例子:

$ ./pre-inst-env guile -c '(use-modules (guix utils)) (pk (%current-system))'

;;; ("x86_64-linux")

… 以及为了一个 REPL(see 交互式使用 Guix):

$ ./pre-inst-env guile
scheme@(guile-user)> ,use(guix)
scheme@(guile-user)> ,use(gnu)
scheme@(guile-user)> (define snakes
                       (fold-packages
                         (lambda (package lst)
                           (if (string-prefix? "python"
                                               (package-name package))
                               (cons package lst)
                               lst))
                         '()))
scheme@(guile-user)> (length snakes)
$1 = 361

如果你在折腾守护进程及其支持代码,或者 guix-daemon 尚未在系统中运行,你可以直接从构建树中启动它45

$ sudo -E ./pre-inst-env guix-daemon --build-users-group=guixbuild

pre-inst-env 脚本设置好了为了支持这个的所有必要的环境变量,包括 PATHGUILE_LOAD_PATH

注意,./pre-inst-env guix pull 会更新本地源代码树;它只是简单地更新 ~/.config/guix/current 符号链接(see Invoking guix pull)。如果你想更新本地源码树,请运行 git pull

有时,特别是刚刚更新过你的仓库时,运行 ./pre-inst-env 将会打印一个消息,类似于下面的例子:

;;; note: source file /home/user/projects/guix/guix/progress.scm
;;;       newer than compiled /home/user/projects/guix/guix/progress.go

这仅仅是一个提示,你可以安全地忽略它,可以通过运行 make -j4 来避免这条消息。若你不这么做,Guile 就会运行的稍微慢一些,因为它会解释代码而不是使用预备的 Guile 对象 (.go) 文件。

你可以使用 watchexec 包中的 watchexec 在你干活时自动运行 make。例如,若要在每次更新一个包文件后都再次构建,运行‘watchexec -w gnu/packages -- make -j4’。


Footnotes

(45)

sudo-E 选项保证了 GUILE_LOAD_PATH 被正确设置,以便 guix-daemon 及其使用的工具可以找到它们所需的 Guile 模块。