2017-07-17 118 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沒有一個好的界面來反思它的內部,但它仍然是可能的。