summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorThomas Tuegel <ttuegel@mailbox.org>2019-11-27 15:44:32 -0600
committerThomas Tuegel <ttuegel@mailbox.org>2019-11-27 15:51:19 -0600
commit757c7f377326205f3e04afe5d053c371600457f7 (patch)
tree3c08bafbfa0a09ef29d31fc39a6921096db13ed7 /nixos
parent0ee0489d42e6f0df5991113caee6feae97bca057 (diff)
downloadnixpkgs-757c7f377326205f3e04afe5d053c371600457f7.tar
nixpkgs-757c7f377326205f3e04afe5d053c371600457f7.tar.gz
nixpkgs-757c7f377326205f3e04afe5d053c371600457f7.tar.bz2
nixpkgs-757c7f377326205f3e04afe5d053c371600457f7.tar.lz
nixpkgs-757c7f377326205f3e04afe5d053c371600457f7.tar.xz
nixpkgs-757c7f377326205f3e04afe5d053c371600457f7.tar.zst
nixpkgs-757c7f377326205f3e04afe5d053c371600457f7.zip
docker-container: Remove /etc symlink
The system output usually contains a symlink from /etc to the static
configuration for the benefit of the stage-1 script in the initrd. The stage-2
script is usually started in the real root without such a symlink. In a
container, there is no stage-1 and the system output is used directly as a real
root. If the symlink is present, setup-etc.pl will create a symlink cycle and
the system cannot boot. There is no reason for the /etc link to exist in a
container because setup-etc.pl will create the necessary files. The container
module will now remove the /etc symlink and create an empty directory. The empty
/etc is for container managers to populate it with site-specific settings; for
example, to set the hostname. This is required to boot NixOS in an LXC container
on another host.

See also: #9735
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/profiles/docker-container.nix9
1 files changed, 8 insertions, 1 deletions
diff --git a/nixos/modules/profiles/docker-container.nix b/nixos/modules/profiles/docker-container.nix
index 5d6b11498b5..183645de36f 100644
--- a/nixos/modules/profiles/docker-container.nix
+++ b/nixos/modules/profiles/docker-container.nix
@@ -2,6 +2,8 @@
 
 with lib;
 
+let inherit (pkgs) writeScript; in
+
 let
  pkgs2storeContents = l : map (x: { object = x; symlink = "none"; }) l;
 
@@ -30,7 +32,12 @@ in {
     ];
 
     # Some container managers like lxc need these
-    extraCommands = "mkdir -p proc sys dev";
+    extraCommands =
+      let script = writeScript "extra-commands.sh" ''
+            rm etc
+            mkdir -p proc sys dev etc
+          '';
+      in script;
   };
 
   boot.isContainer = true;