mirror of
https://github.com/systemd/systemd
synced 2024-10-15 12:34:37 +00:00
units: add an easy-to-use unit template file systemd-nspawn@.service for running containers as system services
This commit is contained in:
parent
0df2d38abf
commit
05947befce
|
@ -442,7 +442,8 @@ nodist_systemunit_DATA = \
|
||||||
units/initrd-parse-etc.service \
|
units/initrd-parse-etc.service \
|
||||||
units/initrd-cleanup.service \
|
units/initrd-cleanup.service \
|
||||||
units/initrd-udevadm-cleanup-db.service \
|
units/initrd-udevadm-cleanup-db.service \
|
||||||
units/initrd-switch-root.service
|
units/initrd-switch-root.service \
|
||||||
|
units/systemd-nspawn@.service
|
||||||
|
|
||||||
dist_userunit_DATA = \
|
dist_userunit_DATA = \
|
||||||
units/user/default.target \
|
units/user/default.target \
|
||||||
|
@ -489,6 +490,7 @@ EXTRA_DIST += \
|
||||||
units/initrd-cleanup.service.in \
|
units/initrd-cleanup.service.in \
|
||||||
units/initrd-udevadm-cleanup-db.service.in \
|
units/initrd-udevadm-cleanup-db.service.in \
|
||||||
units/initrd-switch-root.service.in \
|
units/initrd-switch-root.service.in \
|
||||||
|
units/systemd-nspawn@.service.in \
|
||||||
introspect.awk
|
introspect.awk
|
||||||
|
|
||||||
CLEANFILES += \
|
CLEANFILES += \
|
||||||
|
|
|
@ -1231,9 +1231,13 @@ int main(int argc, char *argv[]) {
|
||||||
log_parse_environment();
|
log_parse_environment();
|
||||||
log_open();
|
log_open();
|
||||||
|
|
||||||
r = parse_argv(argc, argv);
|
k = parse_argv(argc, argv);
|
||||||
if (r <= 0)
|
if (k < 0)
|
||||||
goto finish;
|
goto finish;
|
||||||
|
else if (k == 0) {
|
||||||
|
r = EXIT_SUCCESS;
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
|
||||||
if (arg_directory) {
|
if (arg_directory) {
|
||||||
char *p;
|
char *p;
|
||||||
|
@ -1321,8 +1325,8 @@ int main(int argc, char *argv[]) {
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, newcg, false);
|
k = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, newcg, true);
|
||||||
if (r <= 0 && r != -ENOENT) {
|
if (k <= 0 && k != -ENOENT) {
|
||||||
log_error("Container already running.");
|
log_error("Container already running.");
|
||||||
|
|
||||||
free(newcg);
|
free(newcg);
|
||||||
|
@ -1366,6 +1370,8 @@ int main(int argc, char *argv[]) {
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sd_notify(0, "READY=1");
|
||||||
|
|
||||||
assert_se(sigemptyset(&mask) == 0);
|
assert_se(sigemptyset(&mask) == 0);
|
||||||
sigset_add_many(&mask, SIGCHLD, SIGWINCH, SIGTERM, SIGINT, -1);
|
sigset_add_many(&mask, SIGCHLD, SIGWINCH, SIGTERM, SIGINT, -1);
|
||||||
assert_se(sigprocmask(SIG_BLOCK, &mask, NULL) == 0);
|
assert_se(sigprocmask(SIG_BLOCK, &mask, NULL) == 0);
|
||||||
|
@ -1701,8 +1707,8 @@ int main(int argc, char *argv[]) {
|
||||||
if (saved_attr_valid)
|
if (saved_attr_valid)
|
||||||
tcsetattr(STDIN_FILENO, TCSANOW, &saved_attr);
|
tcsetattr(STDIN_FILENO, TCSANOW, &saved_attr);
|
||||||
|
|
||||||
r = wait_for_terminate(pid, &status);
|
k = wait_for_terminate(pid, &status);
|
||||||
if (r < 0) {
|
if (k < 0) {
|
||||||
r = EXIT_FAILURE;
|
r = EXIT_FAILURE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
1
units/.gitignore
vendored
1
units/.gitignore
vendored
|
@ -57,3 +57,4 @@
|
||||||
/initrd-parse-etc.service
|
/initrd-parse-etc.service
|
||||||
/initrd-switch-root.service
|
/initrd-switch-root.service
|
||||||
/initrd-udevadm-cleanup-db.service
|
/initrd-udevadm-cleanup-db.service
|
||||||
|
/systemd-nspawn@.service
|
||||||
|
|
18
units/systemd-nspawn@.service.in
Normal file
18
units/systemd-nspawn@.service.in
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# This file is part of systemd.
|
||||||
|
#
|
||||||
|
# systemd is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Container %i
|
||||||
|
Documentation=man:systemd-nspawn(1)
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=@bindir@/systemd-nspawn -bjD /var/lib/container/%i
|
||||||
|
ControlGroup=%R/machine/%i.nspawn cpu:/
|
||||||
|
Type=notify
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
Also=multi-user.target
|
Loading…
Reference in a new issue