2017-07-17 198 views
0

为MyService

我在myservice.nix写了nixos服务,我用它列入/etc/nixos/configuration.nix使用尼克斯打字系统`尼克斯-instantiate`

imports [ /path/to/myservice.nix ]; 

后来我使用它里面configuration.nix

services.myservice.enable = true; 

问题

在一个我不能使用nixos-rebuild switch,但因为使用foo = mkOption { type = types.int; ...}链接到nix链接到options system即使我只是想使用nix计算nginx的配置文件,我也不得不使用options systems

如何仅评估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' 

...有种解决方法,但不是非常精确!我宁愿喜欢目录中的配置文件。

+0

clever: nix-build''-A config.systemd.services.nixcloud-reverse-proxy.runner -I nixos-config =/etc/nixos/configuration.nix – qknight

回答

1

我看到你的文件名是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没有一个好的界面来反思它的内部,但它仍然是可能的。