diff --git a/Makefile.am b/Makefile.am index 170465a..bce467d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -4083,6 +4083,21 @@ if TARGET_FEDORA $(LN_S) ../systemd-modules-load.service systemd-modules-load.service ) endif + $(MKDIR_P) -m 0755 $(DESTDIR)$(systemunitdir)/final.target.wants + ( cd $(DESTDIR)$(systemunitdir)/multi-user.target.wants && \ + rm -f rc-local.service && \ + $(LN_S) $(systemunitdir)/rc-local.service rc-local.service ) + ( cd $(DESTDIR)$(systemunitdir)/final.target.wants && \ + rm -f halt-local.service && \ + $(LN_S) $(systemunitdir)/halt-local.service halt-local.service ) + ( cd $(DESTDIR)$(systemunitdir) && \ + rm -f display-manager.service single.service && \ + $(LN_S) prefdm.service display-manager.service && \ + $(LN_S) rescue.service single.service ) + ( cd $(DESTDIR)$(systemunitdir)/graphical.target.wants && \ + rm -f display-manager.service && \ + $(LN_S) $(systemunitdir)/display-manager.service display-manager.service ) + install-exec-hook: $(INSTALL_EXEC_HOOKS) uninstall-hook: $(UNINSTALL_DATA_HOOKS) $(UNINSTALL_EXEC_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); + + 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)); + } + if (!variables[VARIABLE_LANG]) { variables[VARIABLE_LANG] = strdup("C"); if (!variables[VARIABLE_LANG]) { --- 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)); + } #ifdef HAVE_DEBIAN r = read_one_line_file("/etc/timezone", &tz.zone); if (r < 0) { 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,14 @@ } 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)); } r = EXIT_FAILURE;