diff --git a/Makefile.am b/Makefile.am index 170465a..bce467d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -196,6 +196,8 @@ SYSINIT_TARGET_WANTS = SOCKETS_TARGET_WANTS = TIMERS_TARGET_WANTS = +FINAL_TARGET_WANTS = +GRAPHICAL_TARGET_WANTS = SYSTEM_UNIT_ALIASES = USER_UNIT_ALIASES = @@ -214,6 +216,8 @@ what="$(SOCKETS_TARGET_WANTS)" && wants=sockets.target && $(add-wants) what="$(TIMERS_TARGET_WANTS)" && wants=timers.target && $(add-wants) what="$(SLICES_TARGET_WANTS)" && wants=slices.target && $(add-wants) + what="$(FINAL_TARGET_WANTS)" && wants=final.target && $(add-wants) + what="$(GRAPHICAL_TARGET_WANTS)" && wants=graphical.target && $(add-wants) define add-wants [ -z "$$what" ] || ( \ @@ -3388,9 +3392,16 @@ $(systemdstatedir) MULTI_USER_TARGET_WANTS += \ + rc-local.service \ systemd-logind.service \ systemd-user-sessions.service +FINAL_TARGET_WANTS += \ + halt-local.service + +GRAPHICAL_TARGET_WANTS += \ + display-manager.service + SYSTEM_UNIT_ALIASES += \ systemd-logind.service dbus-org.freedesktop.login1.service @@ -3790,6 +3801,10 @@ uninstall-hook: $(UNINSTALL_DATA_HOOKS) $(UNINSTALL_EXEC_HOOKS) install-data-hook: $(INSTALL_DATA_HOOKS) + ( cd $(DESTDIR)$(systemunitdir) && \ + rm -f display-manager.service single.service && \ + $(LN_S) prefdm.service display-manager.service && \ + $(LN_S) rescue.service single.service ) distclean-local: $(DISTCLEAN_LOCAL_HOOKS) diff --git a/src/core/hostname-setup.c b/src/core/hostname-setup.c index 2c2f10c..754f0c7 100644 --- a/src/core/hostname-setup.c +++ b/src/core/hostname-setup.c @@ -64,13 +64,84 @@ static int read_and_strip_hostname(const char *path, char **hn) { return 0; } +static int read_distro_hostname(char **hn) { + int r; + _cleanup_fclose_ FILE *f = NULL; + + assert(hn); + + f = fopen("/etc/sysconfig/network", "re"); + if (!f) + return -errno; + + for (;;) { + char line[LINE_MAX]; + char *s, *k; + + if (!fgets(line, sizeof(line), f)) { + if (feof(f)) + break; + + r = -errno; + goto finish; + } + + s = strstrip(line); + + if (!startswith_no_case(s, "HOSTNAME=")) + continue; + + k = strdup(s+9); + if (!k) { + r = -ENOMEM; + goto finish; + } + + hostname_cleanup(k, false); + + if (isempty(k)) { + free(k); + r = -ENOENT; + goto finish; + } + + *hn = k; + r = 0; + goto finish; + } + + r = -ENOENT; + +finish: + return r; +} + +static int read_hostname(char **hn) { + int r; + + assert(hn); + + /* First, try to load the generic hostname configuration file, + * that we support on all distributions */ + + r = read_and_strip_hostname("/etc/hostname", hn); + if (r < 0) { + if (r == -ENOENT) + return read_distro_hostname(hn); + + return r; + } + + return 0; +} + int hostname_setup(void) { int r; _cleanup_free_ char *b = NULL; const char *hn; bool enoent = false; - r = read_and_strip_hostname("/etc/hostname", &b); + r = read_hostname(&b); if (r < 0) { if (r == -ENOENT) enoent = true; diff --git a/src/core/locale-setup.c b/src/core/locale-setup.c index 7f692e9..0a45854 100644 --- a/src/core/locale-setup.c +++ b/src/core/locale-setup.c @@ -74,6 +74,7 @@ int locale_setup(void) { if (detect_container(NULL) <= 0) { r = parse_env_file("/proc/cmdline", WHITESPACE, + "LANG", &variables[VARIABLE_LANG], "locale.LANG", &variables[VARIABLE_LANG], "locale.LANGUAGE", &variables[VARIABLE_LANGUAGE], "locale.LC_CTYPE", &variables[VARIABLE_LC_CTYPE], @@ -121,6 +121,15 @@ int locale_setup(void) { log_warning("Failed to read /etc/locale.conf: %s", strerror(-r)); } + if (r <= 0 && + (r = parse_env_file("/etc/sysconfig/i18n", NEWLINE, + "LANG", &variables[VARIABLE_LANG], + NULL)) < 0) { + + if (r != -ENOENT) + log_warning("Failed to read /etc/sysconfig/i18n: %s", strerror(-r)); + } + for (i = 0; i < _VARIABLE_MAX; i++) { if (variables[i]) { if (setenv(variable_names[i], variables[i], 1) < 0) { --- systemd-196/src/timedate/timedated.c~ 2012-10-16 23:35:40.589269718 +0200 +++ systemd-196/src/timedate/timedated.c 2012-12-21 11:46:13.545086335 +0100 @@ -175,6 +175,13 @@ } } + r = parse_env_file("/etc/sysconfig/timezone", NEWLINE, + "TIMEZONE", &tz.zone, + NULL); + if (r < 0) { + if (r != -ENOENT) + log_warning("Failed to read /etc/sysconfig/timezone: %s", strerror(-r)); + } have_timezone: if (isempty(tz.zone)) { free(tz.zone); diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c index 9196789..1d1a916 100644 --- a/src/vconsole/vconsole-setup.c +++ b/src/vconsole/vconsole-setup.c @@ -358,6 +358,17 @@ if (r < 0 && r != -ENOENT) log_warning("Failed to read /etc/vconsole.conf: %s", strerror(-r)); } + + if (r <= 0) { + r = parse_env_file("/etc/sysconfig/console", NEWLINE, + "CONSOLEFONT", &vc_font, + "CONSOLEMAP", &vc_font_map, + "CONSOLESCREENFONTMAP", &vc_font_unimap, + "KEYTABLE", &vc_keymap, + NULL); + if (r < 0 && r != -ENOENT) + log_warning("Failed to read /etc/sysconfig/console: %s", strerror(-r)); + } if (utf8) enable_utf8(fd);