diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-06-17 03:25:34 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-06-17 03:29:23 +0200 |
commit | 5f5c2f3855a87566e8885c7c0ae504782917a9b0 (patch) | |
tree | 0118ca81902fe2b311847483e4147d1544d3c1a3 /src | |
parent | 489388fbc0be89e2b978258d277b5ff2da573174 (diff) |
core: populate unit file set with preset data if we boot with empty /etc
Diffstat (limited to 'src')
-rw-r--r-- | src/core/main.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/core/main.c b/src/core/main.c index 82852d6401..c4dfe8cca6 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -1307,6 +1307,7 @@ int main(int argc, char *argv[]) { bool loaded_policy = false; bool arm_reboot_watchdog = false; bool queue_default_job = false; + bool empty_etc = false; char *switch_root_dir = NULL, *switch_root_init = NULL; static struct rlimit saved_rlimit_nofile = { 0, 0 }; @@ -1578,6 +1579,9 @@ int main(int argc, char *argv[]) { if (in_initrd()) log_info("Running in initial RAM disk."); + empty_etc = dir_is_empty("/etc") > 0; + if (empty_etc) + log_info("Running with unpopulated /etc."); } else { _cleanup_free_ char *t = uid_to_name(getuid()); log_debug(PACKAGE_STRING " running in user mode for user "PID_FMT"/%s. (" SYSTEMD_FEATURES ")", @@ -1634,9 +1638,18 @@ int main(int argc, char *argv[]) { } } - if (arg_running_as == SYSTEMD_SYSTEM) + if (arg_running_as == SYSTEMD_SYSTEM) { bump_rlimit_nofile(&saved_rlimit_nofile); + if (empty_etc) { + r = unit_file_preset_all(UNIT_FILE_SYSTEM, false, NULL, UNIT_FILE_PRESET_FULL, false, NULL, 0); + if (r < 0) + log_warning("Failed to populate /etc with preset unit settings, ignoring: %s", strerror(-r)); + else + log_info("Populated /etc with preset unit settings."); + } + } + r = manager_new(arg_running_as, &m); if (r < 0) { log_error("Failed to allocate manager object: %s", strerror(-r)); |