2017-07-17 6 views
0

myservice

j'ai écrit un service de Nixos dans myservice.nix et je l'inclure dans /etc/nixos/configuration.nix avec:en utilisant le système de frappe nix avec `nix-instantiate`

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

et plus tard je l'utilise à l'intérieur configuration.nix:

services.myservice.enable = true; 

question

dans un scénario que je ne peux pas utiliser nixos-rebuild switch mais parce que taper nix est lié au options system en utilisant foo = mkOption { type = types.int; ...} je suis obligé d'utiliser le options systems même si je veux juste calculer un fichier de configuration pour nginx en utilisant nix.

comment évaluer ce nginx.conf seulement?

@aszlig m'a écrit cette commande:

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' 

résultats d'exécution dans

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) 

mise à jour

nix-build '<nixpkgs/nixos>' -A config.systemd.services.nixcloud-reverse-proxy.runner -I nixos-config=./configuration.nix 
... 
/nix/store/lp2jbb1wahhlr7qkq81rmfvk84mjk1vk-nixcloud-reverse-proxy-runner 

maintenant je peux l'utiliser pour grep le fichier de configuration:

cat /nix/store/lp2jbb1wahhlr7qkq81rmfvk84mjk1vk-nixcloud-reverse-proxy-runner | grep -o ' /nix/store/.*nginx-reverse-proxy.conf' 

... une sorte de solution de contournement mais pas très précise! Je préfère un fichier de configuration dans un répertoire.

+0

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

Répondre

1

Je vois votre nom de fichier est nginx-reverse-proxy.conf, donc il n'est pas construit avec le système de module NixOS de fantaisie, mais avec d'autres façons. Dans ce cas (vous contrôlez la façon dont vous construisez votre fichier), vous pouvez l'inclure dans le monde:

environment.etc."myconfigs"."nginx-reverse-proxy.conf".text = ...content of that file; 

qui vous parle alors avec

$ nix-instantiate --eval -E ' 
    with import <nixpkgs/nixos> { 
     configuration = { ... }; 
    }; 
    config.environment.etc."myconfigs"."nginx-reverse-proxy.conf".text 
    ' 

Vous avez probablement besoin de décoder cette sortie bien qu'utilisant astuce décrite dans https://gist.github.com/danbst/a9fc068ff26e31d88de9709965daa2bd

qui lui-même est une façon alambiquée de faire

$ cat $(nix-build -E ' 
    with import <nixpkgs/nixos> { 
     configuration = { ... }; 
    }; 
    config.environment.etc."myconfigs"."nginx-reverse-proxy.conf".source 
    ') 

Dans le cas où votre configuration proxy fait partie du script général nginx.conf, alors vous pouvez toujours l'obtenir en utilisant

$ 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' 
) 

Parce que le fichier nginx.conf est privé à nginx module, nous ne pouvons pas référence directement, mais doivent l'extraire directement du site d'utilisation. Dans l'ensemble, NixOS manque d'une bonne interface pour introspecter ses internes, mais c'est toujours possible.