summary refs log tree commit diff
path: root/nixos/modules/virtualisation/containers.nix
diff options
context:
space:
mode:
authorNikita Uvarov <uv.nikita@gmail.com>2019-08-21 08:41:00 +0200
committerNikita Uvarov <uv.nikita@gmail.com>2019-08-21 20:48:27 +0200
commit578d712af46c7569f6c7c02a0a7a1ca51a6b6d89 (patch)
tree5e7deebda229a7c73371cb98cda62c128be8de44 /nixos/modules/virtualisation/containers.nix
parentbacf5619e253214212dfc004eb18a6f0be07d367 (diff)
downloadnixpkgs-578d712af46c7569f6c7c02a0a7a1ca51a6b6d89.tar
nixpkgs-578d712af46c7569f6c7c02a0a7a1ca51a6b6d89.tar.gz
nixpkgs-578d712af46c7569f6c7c02a0a7a1ca51a6b6d89.tar.bz2
nixpkgs-578d712af46c7569f6c7c02a0a7a1ca51a6b6d89.tar.lz
nixpkgs-578d712af46c7569f6c7c02a0a7a1ca51a6b6d89.tar.xz
nixpkgs-578d712af46c7569f6c7c02a0a7a1ca51a6b6d89.tar.zst
nixpkgs-578d712af46c7569f6c7c02a0a7a1ca51a6b6d89.zip
nixos/containers: fix imperative containers
Fixes #67174.
Diffstat (limited to 'nixos/modules/virtualisation/containers.nix')
-rw-r--r--nixos/modules/virtualisation/containers.nix14
1 files changed, 10 insertions, 4 deletions
diff --git a/nixos/modules/virtualisation/containers.nix b/nixos/modules/virtualisation/containers.nix
index e1a91f7704e..b65374c9257 100644
--- a/nixos/modules/virtualisation/containers.nix
+++ b/nixos/modules/virtualisation/containers.nix
@@ -70,7 +70,7 @@ let
   startScript = cfg:
     ''
       mkdir -p -m 0755 "$root/etc" "$root/var/lib"
-      mkdir -p -m 0700 "$root/var/lib/private" "$root/root"
+      mkdir -p -m 0700 "$root/var/lib/private" "$root/root" /run/containers
       if ! [ -e "$root/etc/os-release" ]; then
         touch "$root/etc/os-release"
       fi
@@ -248,7 +248,7 @@ let
 
     Type = "notify";
 
-    RuntimeDirectory = [ "containers" ] ++ lib.optional cfg.ephemeral "containers/%i";
+    RuntimeDirectory = lib.optional cfg.ephemeral "containers/%i";
 
     # Note that on reboot, systemd-nspawn returns 133, so this
     # unit will be restarted. On poweroff, it returns 0, so the
@@ -683,8 +683,15 @@ in
     unit = {
       description = "Container '%i'";
 
+      unitConfig.RequiresMountsFor = "/var/lib/containers/%i";
+
       path = [ pkgs.iproute ];
 
+      environment = {
+        root = "/var/lib/containers/%i";
+        INSTANCE = "%i";
+      };
+
       preStart = preStartScript dummyConfig;
 
       script = startScript dummyConfig;
@@ -722,14 +729,13 @@ in
             }
           else {});
         in
-          unit // {
+          recursiveUpdate unit {
             preStart = preStartScript containerConfig;
             script = startScript containerConfig;
             postStart = postStartScript containerConfig;
             serviceConfig = serviceDirectives containerConfig;
             unitConfig.RequiresMountsFor = lib.optional (!containerConfig.ephemeral) "/var/lib/containers/%i";
             environment.root = if containerConfig.ephemeral then "/run/containers/%i" else "/var/lib/containers/%i";
-            environment.INSTANCE = "%i";
           } // (
           if containerConfig.autoStart then
             {