; rest of target-pld.patch logic in systemd.spec --- systemd-stable-248/src/shared/hostname-setup.h.orig 2021-03-30 22:59:02.000000000 +0200 +++ systemd-stable-248/src/shared/hostname-setup.h 2021-04-07 00:02:26.813489363 +0200 @@ -18,6 +18,7 @@ int shorten_overlong(const char *s, char **ret); +int read_etc_hostname_distro(const char *path, char **ret); int read_etc_hostname_stream(FILE *f, char **ret); int read_etc_hostname(const char *path, char **ret); --- systemd-stable-248/src/shared/hostname-setup.c.orig 2021-03-30 22:59:02.000000000 +0200 +++ systemd-stable-248/src/shared/hostname-setup.c 2021-04-07 00:04:58.955649812 +0200 @@ -7,6 +7,7 @@ #include #include "alloc-util.h" +#include "env-file.h" #include "fd-util.h" #include "fileio.h" #include "fs-util.h" @@ -130,13 +131,34 @@ } } +int read_etc_hostname_distro(const char *path, char **ret) { + int r; + char *p = NULL; + r = parse_env_file(NULL, "/etc/sysconfig/network", "HOSTNAME", &p); + if (r < 0) + return r; + if (!p) /* EOF without any hostname? the file is empty, let's treat that exactly like no file at all: ENOENT */ + return -ENOENT; + hostname_cleanup(p); + if (!hostname_is_valid(p, true)) + return -EBADMSG; + *ret = p; + return 0; +} + + int read_etc_hostname(const char *path, char **ret) { _cleanup_fclose_ FILE *f = NULL; assert(ret); - if (!path) + if (!path) { + int r; path = "/etc/hostname"; + r = read_etc_hostname_distro(path, ret); + if (r == 0) + return r; + } f = fopen(path, "re"); if (!f) --- systemd-240/src/shared/locale-setup.c.orig 2019-01-13 09:27:36.718995151 +0100 +++ systemd-240/src/shared/locale-setup.c 2019-01-13 09:29:37.548993771 +0100 @@ -21,6 +21,7 @@ locale_context_clear(c); r = proc_cmdline_get_key_many(PROC_CMDLINE_STRIP_RD_PREFIX, + "LANG", &c->locale[VARIABLE_LANG], "locale.LANG", &c->locale[VARIABLE_LANG], "locale.LANGUAGE", &c->locale[VARIABLE_LANGUAGE], "locale.LC_CTYPE", &c->locale[VARIABLE_LC_CTYPE], @@ -59,6 +60,17 @@ if (fstat(fd, &st) < 0) return log_debug_errno(errno, "Failed to stat /etc/locale.conf: %m"); + if (r < 0 && stat("/etc/sysconfig/i18n", &st) == 0) { + locale_context_clear(c); + if ((r = parse_env_file(NULL, "/etc/sysconfig/i18n", + "LANG", &c->locale[VARIABLE_LANG] + )) < 0) { + + if (r != -ENOENT) + log_warning_errno(r, "Failed to read /etc/sysconfig/i18n: %m"); + } + } + /* If the file is not changed, then we do not need to re-read the file. */ if (stat_inode_unmodified(&c->st, &st)) return 0; --- systemd-240/src/basic/time-util.c.orig 2019-01-13 09:27:36.718995151 +0100 +++ systemd-240/src/basic/time-util.c 2019-01-13 09:31:12.275659356 +0100 @@ -14,6 +14,7 @@ #include #include "alloc-util.h" +#include "env-file.h" #include "fd-util.h" #include "fileio.h" #include "fs-util.h" @@ -1385,8 +1385,16 @@ return r; /* returns EINVAL if not a symlink */ e = PATH_STARTSWITH_SET(t, "/usr/share/zoneinfo/", "../usr/share/zoneinfo/"); - if (!e) - return -EINVAL; + if (!e) { + r = parse_env_file(NULL, "/etc/sysconfig/timezone" + "TIMEZONE", &e + ); + if (r < 0) { + if (r != -ENOENT) + log_warning_errno(r, "Failed to read /etc/sysconfig/timezone: %m"); + return -EINVAL; + } + } if (!timezone_is_valid(e, LOG_DEBUG)) return -EINVAL; --- systemd-240.orig/src/vconsole/vconsole-setup.c 2013-08-13 22:02:47.000000000 +0200 +++ systemd-240/src/vconsole/vconsole-setup.c 2014-01-09 15:17:49.000000000 +0100 @@ -284,6 +284,17 @@ int main(int argc, char **argv) { if (r < 0 && r != -ENOENT) log_warning_errno(r, "Failed to read /etc/vconsole.conf, ignoring: %m"); + if (r < 0) { + int r1 = parse_env_file(NULL, "/etc/sysconfig/console" + "CONSOLEFONT", &vc_font, + "CONSOLEMAP", &vc_font_map, + "CONSOLESCREENFONTMAP", &vc_font_unimap, + "KEYTABLE", &vc_keymap + ); + if (r1 < 0 && r1 != -ENOENT) + log_warning_errno(r1, "Failed to read /etc/sysconfig/console: %m"); + } + /* Let the kernel command line override /etc/vconsole.conf (highest priority) */ r = proc_cmdline_get_key_many( PROC_CMDLINE_STRIP_RD_PREFIX,