diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-handle-empty-etc-os-release.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-handle-empty-etc-os-release.patch deleted file mode 100644 index c4c7654e3c..0000000000 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/211-handle-empty-etc-os-release.patch +++ /dev/null @@ -1,25 +0,0 @@ -From foo@baz Wed Mar 12 23:13:38 +0000 -Date: Wed, 12 Mar 2014 23:13:38 +0000 -From: Greg Kroah-Hartman -Subject: Handle empty /etc/os-release - -systemd uses /etc/os-release as a "flag" file to see if the filesystem -really is an operating system image or not. As we "know" we will always -boot a valid filesystem, and we want to be able to handle an empty /etc -directory (tmpfiles will recreate it, it is a symlink) just comment out -the check and move on with our lives. - - -diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c -index 30f28b6e2cd6..a270834f47d8 100644 ---- a/src/core/dbus-manager.c -+++ b/src/core/dbus-manager.c -@@ -1133,7 +1133,7 @@ static int method_switch_root(sd_bus *bus, sd_bus_message *message, void *userda - - /* Safety check */ - if (isempty(init)) { -- if (! path_is_os_tree(root)) -+ if (0) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Specified switch root path %s does not seem to be an OS tree. /etc/os-release is missing.", root); - } else { - _cleanup_free_ char *p = NULL; diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/212-0002-job-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/212-0002-job-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch new file mode 100644 index 0000000000..04307bffdc --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/212-0002-job-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch @@ -0,0 +1,35 @@ +From ff790a30ceae4e64249544f9719f78c385308f67 Mon Sep 17 00:00:00 2001 +From: Brandon Philips +Date: Fri, 25 Apr 2014 09:31:59 -0600 +Subject: [PATCH 2/4] job: add waiting jobs to run queue in unit_coldplug + +When we have job installed and added to run queue for service which is +still in dead state and systemd initiates reload then after reload we +never add deserialized job to the run queue again. This is caused by +check in service_coldplug() where we check if deserialized state is +something else than dead state, which is not the case thus we never call +service_set_state() and finally unit_notify() where we would have added +job to the run queue. + +Thanks to Michal Sekletar for the original patch. +--- + src/core/job.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/core/job.c b/src/core/job.c +index 35a9de6..835cfe1 100644 +--- a/src/core/job.c ++++ b/src/core/job.c +@@ -1066,6 +1066,9 @@ int job_coldplug(Job *j) { + if (j->timer_event_source) + j->timer_event_source = sd_event_source_unref(j->timer_event_source); + ++ if (j->state == JOB_WAITING) ++ job_add_to_run_queue(j); ++ + r = sd_event_add_time( + j->manager->event, + &j->timer_event_source, +-- +1.8.5.5 + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/212-0002-unit-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/212-0002-unit-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch deleted file mode 100644 index 8e4c225cc8..0000000000 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/212-0002-unit-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 7b6a4f0380c0f95e0ce1beccddd82b6c4aecc8bc Mon Sep 17 00:00:00 2001 -From: Michal Sekletar -Date: Tue, 1 Apr 2014 18:45:54 +0200 -Subject: [PATCH] unit: add waiting jobs to run queue in unit_coldplug - -When we have job installed and added to run queue for service which is still in -dead state and systemd initiates reload then after reload we never add -deserialized job to the run queue again. This is caused by check in -service_coldplug() where we check if deserialized state is something else -than dead state, which is not the case thus we never call service_set_state() -and finally unit_notify() where we would have added job to the run queue. ---- - src/core/unit.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/src/core/unit.c b/src/core/unit.c -index 153b79b..bb7893b 100644 ---- a/src/core/unit.c -+++ b/src/core/unit.c -@@ -2558,6 +2558,9 @@ int unit_coldplug(Unit *u) { - r = job_coldplug(u->job); - if (r < 0) - return r; -+ -+ if (u->job->state == JOB_WAITING) -+ job_add_to_run_queue(u->job); - } else if (u->deserialized_job >= 0) { - /* legacy */ - r = manager_add_job(u->manager, u->deserialized_job, u, JOB_IGNORE_REQUIREMENTS, false, NULL, NULL); --- -1.8.3.2 - diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/212-0003-device-add-stub-serialization-methods-to-enable-job.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/212-0003-device-add-stub-serialization-methods-to-enable-job.patch deleted file mode 100644 index 929d312ae6..0000000000 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/212-0003-device-add-stub-serialization-methods-to-enable-job.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 5572e8cef02a1d769a94c5da4c407c0f472535f2 Mon Sep 17 00:00:00 2001 -From: Michael Marineau -Date: Tue, 6 May 2014 18:39:59 -0700 -Subject: [PATCH] device: Add stub serialization methods to enable job - serialization. - -If a unit type doesn't provide its own serialization methods then -none of the generic serialization will happen either. For devices this -means jobs used for waiting on device dependencies are dropped during -reloads, breaking dependency state that was relying on those jobs. ---- - src/core/device.c | 22 ++++++++++++++++++++++ - 1 file changed, 22 insertions(+) - -diff --git a/src/core/device.c b/src/core/device.c -index 444286e..07c0860 100644 ---- a/src/core/device.c -+++ b/src/core/device.c -@@ -130,6 +130,25 @@ static void device_dump(Unit *u, FILE *f, const char *prefix) { - prefix, strna(d->sysfs)); - } - -+static int device_serialize(Unit *u, FILE *f, FDSet *fds) { -+ assert(u); -+ assert(f); -+ assert(fds); -+ -+ return 0; -+} -+ -+static int device_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) { -+ assert(u); -+ assert(key); -+ assert(value); -+ assert(fds); -+ -+ log_debug("Unknown serialization key '%s'", key); -+ -+ return 0; -+} -+ - _pure_ static UnitActiveState device_active_state(Unit *u) { - assert(u); - -@@ -693,6 +712,9 @@ const UnitVTable device_vtable = { - - .dump = device_dump, - -+ .serialize = device_serialize, -+ .deserialize_item = device_deserialize_item, -+ - .active_state = device_active_state, - .sub_state_to_string = device_sub_state_to_string, - --- -1.8.5.5 - diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/212-0003-job-always-add-waiting-jobs-to-run-queue-during-cold.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/212-0003-job-always-add-waiting-jobs-to-run-queue-during-cold.patch new file mode 100644 index 0000000000..ea0e62f488 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/212-0003-job-always-add-waiting-jobs-to-run-queue-during-cold.patch @@ -0,0 +1,39 @@ +From 05728416aba07cf66e6933e65c5c076643a1d62b Mon Sep 17 00:00:00 2001 +From: Michael Marineau +Date: Mon, 12 May 2014 09:26:16 +0200 +Subject: [PATCH 3/4] job: always add waiting jobs to run queue during coldplug + +commit 20a83d7bf was not equivalent to the original bug fix proposed by +Michal Sekletar . The committed version only added +the job to the run queue if the job had a timeout, which most jobs do +not have. Just re-ordering the code gets us the intended functionality +--- + src/core/job.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/core/job.c b/src/core/job.c +index 835cfe1..dc4f441 100644 +--- a/src/core/job.c ++++ b/src/core/job.c +@@ -1060,15 +1060,15 @@ int job_coldplug(Job *j) { + if (r < 0) + return r; + ++ if (j->state == JOB_WAITING) ++ job_add_to_run_queue(j); ++ + if (j->begin_usec == 0 || j->unit->job_timeout == 0) + return 0; + + if (j->timer_event_source) + j->timer_event_source = sd_event_source_unref(j->timer_event_source); + +- if (j->state == JOB_WAITING) +- job_add_to_run_queue(j); +- + r = sd_event_add_time( + j->manager->event, + &j->timer_event_source, +-- +1.8.5.5 + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/212-0004-core-make-sure-to-serialize-jobs-for-all-units.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/212-0004-core-make-sure-to-serialize-jobs-for-all-units.patch new file mode 100644 index 0000000000..33c7215853 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/files/212-0004-core-make-sure-to-serialize-jobs-for-all-units.patch @@ -0,0 +1,118 @@ +From fb7fe351e092bb591a6fc24c76fd4a8effec644d Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 16 May 2014 01:15:03 +0200 +Subject: [PATCH 4/4] core: make sure to serialize jobs for all units + +Previously we wouldn't serialize jobs for units that themselves have +nothing to serialize. + +http://lists.freedesktop.org/archives/systemd-devel/2014-May/019051.html +--- + src/core/manager.c | 3 --- + src/core/unit.c | 43 +++++++++++++++++++++---------------------- + 2 files changed, 21 insertions(+), 25 deletions(-) + +diff --git a/src/core/manager.c b/src/core/manager.c +index 224106c..0b91db3 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -2129,9 +2129,6 @@ int manager_serialize(Manager *m, FILE *f, FDSet *fds, bool switching_root) { + if (u->id != t) + continue; + +- if (!unit_can_serialize(u)) +- continue; +- + /* Start marker */ + fputs(u->id, f); + fputc('\n', f); +diff --git a/src/core/unit.c b/src/core/unit.c +index 153b79b..9147686 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -2287,25 +2287,25 @@ bool unit_can_serialize(Unit *u) { + } + + int unit_serialize(Unit *u, FILE *f, FDSet *fds, bool serialize_jobs) { +- ExecRuntime *rt; + int r; + + assert(u); + assert(f); + assert(fds); + +- if (!unit_can_serialize(u)) +- return 0; +- +- r = UNIT_VTABLE(u)->serialize(u, f, fds); +- if (r < 0) +- return r; ++ if (unit_can_serialize(u)) { ++ ExecRuntime *rt; + +- rt = unit_get_exec_runtime(u); +- if (rt) { +- r = exec_runtime_serialize(rt, u, f, fds); ++ r = UNIT_VTABLE(u)->serialize(u, f, fds); + if (r < 0) + return r; ++ ++ rt = unit_get_exec_runtime(u); ++ if (rt) { ++ r = exec_runtime_serialize(rt, u, f, fds); ++ if (r < 0) ++ return r; ++ } + } + + dual_timestamp_serialize(f, "inactive-exit-timestamp", &u->inactive_exit_timestamp); +@@ -2367,17 +2367,14 @@ void unit_serialize_item(Unit *u, FILE *f, const char *key, const char *value) { + } + + int unit_deserialize(Unit *u, FILE *f, FDSet *fds) { +- size_t offset; + ExecRuntime **rt = NULL; ++ size_t offset; + int r; + + assert(u); + assert(f); + assert(fds); + +- if (!unit_can_serialize(u)) +- return 0; +- + offset = UNIT_VTABLE(u)->exec_runtime_offset; + if (offset > 0) + rt = (ExecRuntime**) ((uint8_t*) u + offset); +@@ -2494,17 +2491,19 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) { + continue; + } + +- if (rt) { +- r = exec_runtime_deserialize_item(rt, u, l, v, fds); ++ if (unit_can_serialize(u)) { ++ if (rt) { ++ r = exec_runtime_deserialize_item(rt, u, l, v, fds); ++ if (r < 0) ++ return r; ++ if (r > 0) ++ continue; ++ } ++ ++ r = UNIT_VTABLE(u)->deserialize_item(u, l, v, fds); + if (r < 0) + return r; +- if (r > 0) +- continue; + } +- +- r = UNIT_VTABLE(u)->deserialize_item(u, l, v, fds); +- if (r < 0) +- return r; + } + } + +-- +1.8.5.5 + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-212-r6.ebuild b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-212-r7.ebuild similarity index 98% rename from sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-212-r6.ebuild rename to sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-212-r7.ebuild index 187e3770e4..616f696a5f 100644 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-212-r6.ebuild +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/systemd/systemd-212-r7.ebuild @@ -117,13 +117,11 @@ fi epatch "${FILESDIR}"/212-0001-sd-rtnl-fix-off-by-one.patch # fix stuck jobs after daemon-reload - epatch "${FILESDIR}"/212-0002-unit-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch + epatch "${FILESDIR}"/212-0002-job-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch + epatch "${FILESDIR}"/212-0003-job-always-add-waiting-jobs-to-run-queue-during-cold.patch # fix broken device dependencies after daemon-reload - epatch "${FILESDIR}"/212-0003-device-add-stub-serialization-methods-to-enable-job.patch - - # CoreOs specific hacks^Wfeatures - epatch "${FILESDIR}"/211-handle-empty-etc-os-release.patch + epatch "${FILESDIR}"/212-0004-core-make-sure-to-serialize-jobs-for-all-units.patch # patch to make journald work at first boot epatch "${FILESDIR}"/211-tmpfiles.patch