我在从 github 拉取文件时遇到了一些麻烦,我想知道是否有人可以帮我拉下它并将其视为我/etc文件夹中的文本(或源)。理想情况下,我正在尝试执行以下操作(但使用.text):
environment.etc."sb_hosts".source = (builtins.filterSource
(path: type: path == "hosts" && type == "regular")
(fetchFromGitHub {
owner = "StevenBlack";
repo = "hosts";
rev = "v2.1.19";
sha256 = "1wrwlgcy46vwji0n1imnmlci03ln0v4qd27cw8cwpag57w06n4z7";
}));
Run Code Online (Sandbox Code Playgroud)
但是我收到了以下影响的错误:
string '/nix/store/r3xnh6ricqa7lnnbb0ka5vb0h6rw28ap-source' cannot refer to other paths, at /etc/nixos/configuration.nix:13:38
Run Code Online (Sandbox Code Playgroud)
为了进行比较,我可以fetchFromGitHub直接使用 .source运行,这会/etc/sb_hosts/按预期将 git repo 拉下来。
到目前为止,我已经尝试使用builtins.filterSource,如Nix 手册中所述:15.5。内置函数,我也尝试使用cleanSourceWith——主要是因为我找不到builtins.filterSource. 这两个都会产生相同的错误,即使我访问.outPathof lib.cleanSourceWith(回想起来,只是调用filterSource)。
如果这是不可能的,那么推荐的方法是什么?最后的输出是我想从整个网络收集已知的、版本化的广告块主机文件,然后将它们与我自己的本地主机文件合并。
编辑:我在发布后意识到raw.githubusercontent.com遵守标记版本;与fetchurl此会回答我原来的问题。现在我只是想知道为什么上面的代码块不起作用以及我如何实现相同的效果。
您可以使用path+ string-concatenation获取单个文件/子目录。
environment.etc."sb_hosts".source =
fetchFromGitHub {
owner = "StevenBlack";
repo = "hosts";
rev = "v2.1.19";
sha256 = "1wrwlgcy46vwji0n1imnmlci03ln0v4qd27cw8cwpag57w06n4z7";
} + "/hosts";
Run Code Online (Sandbox Code Playgroud)
您可以将路径与字符串连接起来以引用子路径(它也可以是path)。派生类(例如fetchFromGitHub args)隐式强制到它们一旦构建将产生的路径。
builtins.filterSource(及其兄弟,lib.cleanSource{,With})将path在删除所有未通过谓词的文件后将a 复制到存储中。值得注意的是,存储副本(以及相应的缓存)发生在应用谓词之后。
这主要用于与它们打包的源代码内联的 Nix 定义,以避免在不相关的文件(例如__pycache__或.git文件夹)更改时导致重建。
这对于派生来说没有多大意义,因为它们已经在 Nix 存储中,并且由它们的构建输入而不是它们的输出来标识。
/nix/store/r3xnh6ricqa7lnnbb0ka5vb0h6rw28ap-source是派生的输出,因此 Nix 强制它存在(或构建),然后才能依次构建使用它的任何东西。为什么他们选择称这种关系refers为我的理解范围之外。
您可以/etc/hosts使用networking.extraHosts选项向您添加额外的条目。此属性将内容直接作为字符串,但这可以使用builtins.readFile解决。
因此:
networking.extraHosts = builtins.readFile
(fetchFromGitHub {
owner = "StevenBlack";
repo = "hosts";
rev = "v2.1.19";
sha256 = "1wrwlgcy46vwji0n1imnmlci03ln0v4qd27cw8cwpag57w06n4z7";
} + "/hosts");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1844 次 |
| 最近记录: |