我有两个 Nix Flakes:一个包含一个应用程序,另一个包含该应用程序的插件。当我使用插件构建应用程序时,出现错误error: path '/nix/store/3b7djb5pr87zbscggsr7vnkriw3yp21x-mainapp-go-modules' is not valid我不知道这个错误意味着什么以及如何修复它,但我可以在 macOS 和 Linux 上重现它。有问题的路径是vendor第一步生成的目录buildGoModule。重现错误的最小设置需要一堆文件,因此我提供了一个带注释的 bash 脚本,您可以在空文件夹中执行该脚本来重新创建我的设置:#!/bin/bash# I have two flakes: the main application and a plugin.# the mainapp needs to be inside the plugin directory# so that nix doesn't complain about the path:mainapp# reference being outside the parent's root.mkdir -p plugin/mainapp# each is a go module with minimal setuptee plugin/mainapp/go.mod <<EOF >/dev/nullmodule example.com/mainappgo 1.16EOFtee plugin/go.mod <<EOF >/dev/nullmodule example.com/plugingo 1.16EOF# each contain minimal Go codetee plugin/mainapp/main.go <<EOF >/dev/nullpackage mainimport "fmt"func main() { fmt.Println("Hello, World!")}EOFtee plugin/main.go <<EOF >/dev/nullpackage pluginimport logfunc init() { fmt.Println("initializing plugin")}EOF# the mainapp is a flake that provides a function for building# the app, as well as a default package that is the app# without any plugins.tee plugin/mainapp/flake.nix <<'EOF' >/dev/null{ description = "main application"; inputs = { nixpkgs.url = github:NixOS/nixpkgs/nixos-21.11; flake-utils.url = github:numtide/flake-utils; }; 您需要安装了 Flake 支持的 Nix 来重现错误。在plugin此脚本创建的文件夹中,执行$ nix buildtrace: sources at /nix/store/d5arinbiaspyjjc4ypk4h5dsjx22pcsf-mainapp-with-plugins-sourceerror: path '/nix/store/3b7djb5pr87zbscggsr7vnkriw3yp21x-mainapp-go-modules' is not valid(如果你得到散列不匹配,只需用正确的散列更新薄片;我不太确定在存储库之外散布薄片时散列是否可重现。)源目录(由跟踪显示)确实存在并且看起来不错。错误消息中给出的路径也存在并且包含modules.txt预期的内容。在文件夹mainapp中,nix build确实运行成功,它构建了没有插件的应用程序。那么我对使路径无效的插件做了什么?
1 回答
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
原因是在这种情况下modules.txt
,作为 vendoring 一部分生成的文件将在replace
指令中包含 nix 存储路径。该vendor
目录是一个固定的输出派生,因此不得依赖于任何其他派生。中的引用违反了这一点modules.txt
。
这只能通过将插件的源复制到sources
派生中来解决 - 这样,replace
路径可以是相对的,因此不会引用其他 nix 存储路径。
- 1 回答
- 0 关注
- 82 浏览
添加回答
举报
0/150
提交
取消