diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-04-01 16:02:53 +0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-04-03 16:36:23 +0200 |
commit | 1ad9a654be1120a6844c9eb7520188e874178ebe (patch) | |
tree | 82a855f1deffb13075e878ad3c42e38339e644e7 /nixos/modules/virtualisation/containers.nix | |
parent | 269926df0d1e0b03b9697f84e5b9720fa966b293 (diff) | |
download | nixlib-1ad9a654be1120a6844c9eb7520188e874178ebe.tar nixlib-1ad9a654be1120a6844c9eb7520188e874178ebe.tar.gz nixlib-1ad9a654be1120a6844c9eb7520188e874178ebe.tar.bz2 nixlib-1ad9a654be1120a6844c9eb7520188e874178ebe.tar.lz nixlib-1ad9a654be1120a6844c9eb7520188e874178ebe.tar.xz nixlib-1ad9a654be1120a6844c9eb7520188e874178ebe.tar.zst nixlib-1ad9a654be1120a6844c9eb7520188e874178ebe.zip |
Make starting a container synchronous
So now "systemctl start container@foo" will only return after the container has reached multi-user.target.
Diffstat (limited to 'nixos/modules/virtualisation/containers.nix')
-rw-r--r-- | nixos/modules/virtualisation/containers.nix | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/nixos/modules/virtualisation/containers.nix b/nixos/modules/virtualisation/containers.nix index 6c8a6f876c8d..9be79cec3695 100644 --- a/nixos/modules/virtualisation/containers.nix +++ b/nixos/modules/virtualisation/containers.nix @@ -150,11 +150,21 @@ in path = [ pkgs.iproute ]; environment.INSTANCE = "%i"; + environment.root = "/var/lib/containers/%i"; + + preStart = + '' + mkdir -p -m 0755 $root/var/lib + + # Create a named pipe to get a signal when the container + # has finished booting. + rm -f $root/var/lib/startup-done + mkfifo $root/var/lib/startup-done + ''; script = '' - root="/var/lib/containers/$INSTANCE" - mkdir -p -m 0755 "$root/etc" + mkdir -p -m 0755 "$root/etc" "$root/var/lib" if ! [ -e "$root/etc/os-release" ]; then touch "$root/etc/os-release" fi @@ -209,6 +219,13 @@ in "$SYSTEM_PATH/init" ''; + postStart = + '' + # This blocks until the container-startup-done service + # writes something to this pipe. + read x < $root/var/lib/startup-done + ''; + preStop = '' pid="$(cat /sys/fs/cgroup/systemd/machine/$INSTANCE.nspawn/system/tasks 2> /dev/null)" @@ -238,8 +255,10 @@ in . "/etc/containers/$INSTANCE.conf" fi echo $SYSTEM_PATH/bin/switch-to-configuration test | \ - ${pkgs.socat}/bin/socat unix:/var/lib/containers/$INSTANCE/var/lib/root-shell.socket - + ${pkgs.socat}/bin/socat unix:$root/var/lib/root-shell.socket - ''; + + serviceConfig.SyslogIdentifier = "container %i"; }; # Generate a configuration file in /etc/containers for each |