| From 28dd66ecfce743b1ea9046c7bb501e0fcaeff724 Mon Sep 17 00:00:00 2001 |
| From: Luca Bruno <luca.bruno@coreos.com> |
| Date: Sun, 6 Aug 2017 13:24:24 +0000 |
| Subject: [PATCH] core: evaluate presets after generators have run (#6526) |
| |
| This commit moves the first-boot system preset-settings evaluation out |
| of main and into the manager startup logic itself. Notably, it reverses |
| the order between generators and presets evaluation, so that any changes |
| performed by first-boot generators are taken into the account by presets |
| logic. |
| |
| After this change, units created by a generator can be enabled as part |
| of a preset. |
| |
| Upstream-Status: Backport |
| |
| Signed-off-by: Catalin Enache <catalin.enache@windriver.com> |
| --- |
| src/core/main.c | 12 ++---------- |
| src/core/manager.c | 8 ++++++++ |
| 2 files changed, 10 insertions(+), 10 deletions(-) |
| |
| diff --git a/src/core/main.c b/src/core/main.c |
| index dfedc3d..11ac9cf 100644 |
| --- a/src/core/main.c |
| +++ b/src/core/main.c |
| @@ -1809,18 +1809,10 @@ int main(int argc, char *argv[]) { |
| if (prctl(PR_SET_CHILD_SUBREAPER, 1) < 0) |
| log_warning_errno(errno, "Failed to make us a subreaper: %m"); |
| |
| - if (arg_system) { |
| + if (arg_system) |
| + /* Bump up RLIMIT_NOFILE for systemd itself */ |
| (void) bump_rlimit_nofile(&saved_rlimit_nofile); |
| |
| - if (empty_etc) { |
| - r = unit_file_preset_all(UNIT_FILE_SYSTEM, 0, NULL, UNIT_FILE_PRESET_ENABLE_ONLY, NULL, 0); |
| - if (r < 0) |
| - log_full_errno(r == -EEXIST ? LOG_NOTICE : LOG_WARNING, r, "Failed to populate /etc with preset unit settings, ignoring: %m"); |
| - else |
| - log_info("Populated /etc with preset unit settings."); |
| - } |
| - } |
| - |
| r = manager_new(arg_system ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, arg_action == ACTION_TEST, &m); |
| if (r < 0) { |
| log_emergency_errno(r, "Failed to allocate manager object: %m"); |
| diff --git a/src/core/manager.c b/src/core/manager.c |
| index 1aadb70..fb5e2b5 100644 |
| --- a/src/core/manager.c |
| +++ b/src/core/manager.c |
| @@ -1328,6 +1328,14 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds) { |
| if (r < 0) |
| return r; |
| |
| + if (m->first_boot && m->unit_file_scope == UNIT_FILE_SYSTEM) { |
| + q = unit_file_preset_all(UNIT_FILE_SYSTEM, 0, NULL, UNIT_FILE_PRESET_ENABLE_ONLY, NULL, 0); |
| + if (q < 0) |
| + log_full_errno(q == -EEXIST ? LOG_NOTICE : LOG_WARNING, q, "Failed to populate /etc with preset unit settings, ignoring: %m"); |
| + else |
| + log_info("Populated /etc with preset unit settings."); |
| + } |
| + |
| lookup_paths_reduce(&m->lookup_paths); |
| manager_build_unit_path_cache(m); |
| |
| -- |
| 2.10.2 |
| |