Make starting a container synchronous
So now "systemctl start container@foo" will only return after the container has reached multi-user.target.
This commit is contained in:
parent
269926df0d
commit
1ad9a654be
@ -53,6 +53,20 @@ with lib;
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
systemd.services.container-startup-done =
|
||||||
|
{ description = "Container Startup Notification";
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "multi-user.target" ];
|
||||||
|
script =
|
||||||
|
''
|
||||||
|
if [ -p /var/lib/startup-done ]; then
|
||||||
|
echo done > /var/lib/startup-done
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
serviceConfig.Type = "oneshot";
|
||||||
|
serviceConfig.RemainAfterExit = true;
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
@ -150,11 +150,21 @@ in
|
|||||||
path = [ pkgs.iproute ];
|
path = [ pkgs.iproute ];
|
||||||
|
|
||||||
environment.INSTANCE = "%i";
|
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 =
|
script =
|
||||||
''
|
''
|
||||||
root="/var/lib/containers/$INSTANCE"
|
mkdir -p -m 0755 "$root/etc" "$root/var/lib"
|
||||||
mkdir -p -m 0755 "$root/etc"
|
|
||||||
if ! [ -e "$root/etc/os-release" ]; then
|
if ! [ -e "$root/etc/os-release" ]; then
|
||||||
touch "$root/etc/os-release"
|
touch "$root/etc/os-release"
|
||||||
fi
|
fi
|
||||||
@ -209,6 +219,13 @@ in
|
|||||||
"$SYSTEM_PATH/init"
|
"$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 =
|
preStop =
|
||||||
''
|
''
|
||||||
pid="$(cat /sys/fs/cgroup/systemd/machine/$INSTANCE.nspawn/system/tasks 2> /dev/null)"
|
pid="$(cat /sys/fs/cgroup/systemd/machine/$INSTANCE.nspawn/system/tasks 2> /dev/null)"
|
||||||
@ -238,8 +255,10 @@ in
|
|||||||
. "/etc/containers/$INSTANCE.conf"
|
. "/etc/containers/$INSTANCE.conf"
|
||||||
fi
|
fi
|
||||||
echo $SYSTEM_PATH/bin/switch-to-configuration test | \
|
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
|
# Generate a configuration file in /etc/containers for each
|
||||||
|
Loading…
x
Reference in New Issue
Block a user