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
This commit is contained in:
parent
0ee0489d42
commit
757c7f3773
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
|
let inherit (pkgs) writeScript; in
|
||||||
|
|
||||||
let
|
let
|
||||||
pkgs2storeContents = l : map (x: { object = x; symlink = "none"; }) l;
|
pkgs2storeContents = l : map (x: { object = x; symlink = "none"; }) l;
|
||||||
|
|
||||||
@ -30,7 +32,12 @@ in {
|
|||||||
];
|
];
|
||||||
|
|
||||||
# Some container managers like lxc need these
|
# 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;
|
boot.isContainer = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user