$*REPO 动态变量从哪里获得它的值,如何 change/alter 它们?

Where does the $*REPO dynamic variable obtain its values, and how to change/alter them?

This question is complementary to figuring out why this error (which started as a zef error) occurs.

显然,在某些情况下,可从 $*REPO 访问的存储库链可能会有所不同。即,在 GitHub action such as this one, where raku is part of a Docker image 中,存储库链突然变为:

(inst#/github/home/.raku inst#/usr/share/perl6/site inst#/usr/share/perl6/vendor inst#/usr/share/perl6/core ap# nqp# perl5#)

第一个目录实际不存在;这应该是 /home/raku/.raku 而不是。所以有几个问题

  1. 为什么 rakudo 安装那个不存在的目录作为存储库链的一部分
  2. 是否有任何解决方法可以简单地将该值更改为正确的值?

我真的不明白发生这种情况的原因是什么。初始化容器涉及一个很长的命令行,如下所示:

/usr/bin/docker create --name d043d929507d4885927ac95002160d52_jjmereloalpinerakugha202110_1e6e32 --label 6a6825 --workdir /__w/p6-pod-load/p6-pod-load --network github_network_da048828784a46c3b413990beeaed866  -e "HOME=/github/home" -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work":"/__w" -v "/home/runner/runners/2.285.1/externals":"/__e":ro -v "/home/runner/work/_temp":"/__w/_temp" -v "/home/runner/work/_actions":"/__w/_actions" -v "/opt/hostedtoolcache":"/__t" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" --entrypoint "tail" jjmerelo/alpine-raku:gha-2021.10 "-f" "/dev/null"

实际上似乎有一个环境变量设置为该值。所以可能是环境变量 HOME 决定了这一点,而不是安装中发生的任何事情。但我不知道这是一个功能,还是一个错误。

您需要将 RAKULIB 设置为您的库最初安装的位置,正如所做的那样 here:

# Environment
ENV PATH="${WORKDIR}/.raku/bin:${WORKDIR}/.raku/share/perl6/site/bin:${PATH}" \
    ENV="${WORKDIR}/.profile"\
    RAKULIB="inst#/home/raku/.raku"

这部分文档不足,但 inst# 前缀反映了它包含预编译单元的事实,并且该目录是它最初安装的位置。因此,无论 HOME 在哪里,Rakudo 总能找到原来安装的模块。


原回答

我没有第二部分的答案,但我可以回答第一部分:每次启动 rakudo 时,存储库链中的第一个元素都取自 $HOME。如果安装 zef 或任何其他模块时 $HOME 的值与当前值不同(恰当的例子),一种解决方法是执行类似

的操作
HOME=/home/raku zef --version

也许可以创建一个 shell 函数或这样做的别名,如果您不想那样携带变量。长期解决方案,真的不知道。

Why does rakudo install that unexisting directory as part of the repository chain

因为您将 $HOME 设置为该目录。不出所料,home 存储库引用了 $HOME.

Is there any workaround that allows to simply change that value to the right one?

这不需要解决,而是需要正确设置您的环境。看来您将 $HOME 更改为一个不存在的目录,尝试让 zef 隐式安装到这个新目录(即使它确实存在,如果您不这样做,它也可能没有权限),以及何时那失败了你明确地安装到 /home/raku 并且想知道为什么你的 raku 环境有一个 /github/home 家 directory/repo 没有在 /home/raku 中查找(它怎么可能?)。我的建议是在设置新的 $HOME 目录时找出文件权限问题。