我的服务
我用myservice.nix编写了一个nixos服务,并将它包含在/etc/nixos/configuration.nix中:
imports [ /path/to/myservice.nix ]; 稍后,我在configuration.nix中使用它
services.myservice.enable = true;问题
在一个场景中,我不能使用nixos-rebuild switch,但是由于输入nix是通过foo = mkOption { type = types.int; ...}链接到options system的,所以我不得不使用options systems,即使我只想使用nix为nginx计算一个配置文件。
如何评估nginx.conf?
@aszlig给我写了这个命令:
nix-instantiate --eval --strict -E '(import <nixpkgs/nixos> { configuration = { imports = [ nixcloud-reverse-proxy/nixcloud-reverse-proxy.nix ]; services.nixcloud-reverse-proxy.enable = true; }; }).config.system.build.configsFromPath'执行结果
nix-instantiate --eval --strict -E '(import <nixpkgs/nixos> { configuration = { imports = [ ./nixcloud-reverse-proxy.nix ]; services.nixcloud-reverse-proxy.enable = true; }; }).config.system.build.configsFromPath'
error: attribute ‘configsFromPath’ missing, at (string):1:1
(use ‘--show-trace’ to show detailed location information)更新
nix-build '<nixpkgs/nixos>' -A config.systemd.services.nixcloud-reverse-proxy.runner -I nixos-config=./configuration.nix
...
/nix/store/lp2jbb1wahhlr7qkq81rmfvk84mjk1vk-nixcloud-reverse-proxy-runner现在,我可以将它用于grep -- conf文件:
cat /nix/store/lp2jbb1wahhlr7qkq81rmfvk84mjk1vk-nixcloud-reverse-proxy-runner | grep -o ' /nix/store/.*nginx-reverse-proxy.conf'..。这是一种解决办法,但不是很精确!我希望目录中有一个配置文件。
发布于 2017-09-10 00:01:21
我看到您的文件名是nginx-reverse-proxy.conf,所以它不是用花哨的NixOS模块系统构建的,而是用其他方式构建的。在这种情况下(您控制如何构建您的文件),您可以全局地包含它:
environment.etc."myconfigs"."nginx-reverse-proxy.conf".text = ...content of that file;你指的是
$ nix-instantiate --eval -E '
with import <nixpkgs/nixos> {
configuration = { ... };
};
config.environment.etc."myconfigs"."nginx-reverse-proxy.conf".text
'您可能需要通过使用https://gist.github.com/danbst/a9fc068ff26e31d88de9709965daa2bd中描述的技巧来解码输出
这本身就是一种复杂的方法
$ cat $(nix-build -E '
with import <nixpkgs/nixos> {
configuration = { ... };
};
config.environment.etc."myconfigs"."nginx-reverse-proxy.conf".source
')如果代理配置是通用nginx.conf脚本的一部分,那么仍然可以使用
$ cat $(cat $(nix-build -E '
with import <nixpkgs/nixos> {
configuration = ...;
};
config.system.build.units."nginx.service".unit
')/nginx.service \
| grep nginx.conf \
| sed -r 's/.* (.*nginx.conf).*/\1/g'
)因为nginx.conf文件对nginx模块是私有的,所以我们不能直接引用它,而是必须直接从使用站点提取它。
总的来说,NixOS缺乏一个很好的界面来内省它的内部,但它仍然是可能的。
https://stackoverflow.com/questions/45146294
复制相似问题