summaryrefslogtreecommitdiff
path: root/src/core/main.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2014-06-17 03:25:34 +0200
committerLennart Poettering <lennart@poettering.net>2014-06-17 03:29:23 +0200
commit5f5c2f3855a87566e8885c7c0ae504782917a9b0 (patch)
tree0118ca81902fe2b311847483e4147d1544d3c1a3 /src/core/main.c
parent489388fbc0be89e2b978258d277b5ff2da573174 (diff)
core: populate unit file set with preset data if we boot with empty /etc
Diffstat (limited to 'src/core/main.c')
-rw-r--r--src/core/main.c15
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));