Commit 1de4d79b authored by Andrey Borzenkov's avatar Andrey Borzenkov Committed by Lennart Poettering
Browse files

build-sys: add Mandriva distribution support

This merges several separate patches that I carry as part of
Mandriva systemd RPM. They touch those parts that are very
unlikely to be changed in near future and do not impose any
functionality change for systemd core. I also think it is
useful for troubleshooting to have real distribution name in
system logs, espicially when someone reports problem upstream.

The patch looks bigger than sum of replaced patches because

- previous patches were applied on top of distro=fedora, now
I need to add all those bits for distro=mandriva as well

- part of patch was done as spec file magic, but it seems more
logical to ship all these bits together
parent 6e25b33c
......@@ -84,6 +84,12 @@ AM_CPPFLAGS += \
-DKBD_SETFONT=\"/usr/bin/setfont\" \
-DDEFAULT_FONT=\"LatArCyrHeb-16\"
else
if TARGET_MANDRIVA
AM_CPPFLAGS += \
-DKBD_LOADKEYS=\"/bin/loadkeys\" \
-DKBD_SETFONT=\"/bin/setfont\" \
-DDEFAULT_FONT=\"LatArCyrHeb-16\"
else
AM_CPPFLAGS += \
-DKBD_LOADKEYS=\"/bin/loadkeys\" \
-DKBD_SETFONT=\"/bin/setfont\" \
......@@ -91,6 +97,7 @@ AM_CPPFLAGS += \
endif
endif
endif
endif
rootbin_PROGRAMS = \
systemd \
......@@ -337,6 +344,13 @@ dist_systemunit_DATA += \
units/fedora/halt-local.service
endif
if TARGET_MANDRIVA
dist_systemunit_DATA += \
units/mandriva/prefdm.service \
units/fedora/rc-local.service \
units/fedora/halt-local.service
endif
if HAVE_PLYMOUTH
dist_systemunit_DATA += \
units/plymouth-start.service \
......@@ -1357,6 +1371,23 @@ if TARGET_FEDORA
rm -f display-manager.service && \
$(LN_S) $(systemunitdir)/display-manager.service display-manager.service )
endif
if TARGET_MANDRIVA
$(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 && \
$(LN_S) prefdm.service display-manager.service )
( cd $(DESTDIR)$(systemunitdir)/graphical.target.wants && \
rm -f display-manager.service && \
$(LN_S) $(systemunitdir)/display-manager.service display-manager.service )
endif
if TARGET_DEBIAN_OR_UBUNTU
( cd $(DESTDIR)$(systemunitdir) && \
rm -f runlevel5.target && \
......
......@@ -282,6 +282,7 @@ if test "z$with_distro" = "z"; then
test -f "/etc/slackware-version" && with_distro="slackware"
test -f "/etc/frugalware-release" && with_distro="frugalware"
test -f "/etc/altlinux-release" && with_distro="altlinux"
test -f "/etc/mandriva-release" && with_distro="mandriva"
if test "x`lsb_release -is 2>/dev/null`" = "xUbuntu"; then
with_distro="ubuntu"
fi
......@@ -373,6 +374,14 @@ case $with_distro in
M4_DISTRO_FLAG=-DTARGET_ALTLINUX=1
have_plymouth=true
;;
mandriva)
SYSTEM_SYSVINIT_PATH=/etc/rc.d/init.d
SYSTEM_SYSVRCND_PATH=/etc/rc.d
SPECIAL_SYSLOG_SERVICE=rsyslog.service
AC_DEFINE(TARGET_MANDRIVA, [], [Target is Mandriva])
M4_DISTRO_FLAG=-DTARGET_MANDRIVA=1
have_plymouth=true
;;
other)
AS_IF([test "x$with_syslog_service" = "x"],
[AC_MSG_ERROR([With --distro=other, you must pass --with-syslog-service= to configure])])
......@@ -430,6 +439,7 @@ AM_CONDITIONAL(TARGET_GENTOO, test x"$with_distro" = xgentoo)
AM_CONDITIONAL(TARGET_SLACKWARE, test x"$with_distro" = xslackware)
AM_CONDITIONAL(TARGET_FRUGALWARE, test x"$with_distro" = xfrugalware)
AM_CONDITIONAL(TARGET_ALTLINUX, test x"$with_distro" = xaltlinux)
AM_CONDITIONAL(TARGET_MANDRIVA, test x"$with_distro" = xmandriva)
AM_CONDITIONAL(HAVE_PLYMOUTH, test -n "$have_plymouth")
......
......@@ -121,7 +121,7 @@ static int parse_proc_cmdline(void) {
arg_skip = true;
else if (startswith(w, "fsck.mode"))
log_warning("Invalid fsck.mode= parameter. Ignoring.");
#ifdef TARGET_FEDORA
#if defined(TARGET_FEDORA) || defined(TARGET_MANDRIVA)
else if (strneq(w, "fastboot", l))
arg_skip = true;
else if (strneq(w, "forcefsck", l))
......
......@@ -30,7 +30,7 @@
#include "util.h"
#include "log.h"
#if defined(TARGET_FEDORA) || defined(TARGET_ALTLINUX)
#if defined(TARGET_FEDORA) || defined(TARGET_ALTLINUX) || defined(TARGET_MANDRIVA)
#define FILENAME "/etc/sysconfig/network"
#elif defined(TARGET_SUSE) || defined(TARGET_SLACKWARE) || defined(TARGET_FRUGALWARE)
#define FILENAME "/etc/HOSTNAME"
......@@ -87,7 +87,7 @@ static int read_and_strip_hostname(const char *path, char **hn) {
static int read_distro_hostname(char **hn) {
#if defined(TARGET_FEDORA) || defined(TARGET_ARCH) || defined(TARGET_GENTOO) || defined(TARGET_ALTLINUX)
#if defined(TARGET_FEDORA) || defined(TARGET_ARCH) || defined(TARGET_GENTOO) || defined(TARGET_ALTLINUX) || defined(TARGET_MANDRIVA)
int r;
FILE *f;
......
......@@ -181,6 +181,28 @@ int locale_setup(void) {
if (r != -ENOENT)
log_warning("Failed to read /etc/profile.env: %s", strerror(-r));
}
#elif defined(TARGET_MANDRIVA)
if (r <= 0 &&
(r = parse_env_file("/etc/sysconfig/i18n", NEWLINE,
"LANG", &variables[VARIABLE_LANG],
"LC_CTYPE", &variables[VARIABLE_LC_CTYPE],
"LC_NUMERIC", &variables[VARIABLE_LC_NUMERIC],
"LC_TIME", &variables[VARIABLE_LC_TIME],
"LC_COLLATE", &variables[VARIABLE_LC_COLLATE],
"LC_MONETARY", &variables[VARIABLE_LC_MONETARY],
"LC_MESSAGES", &variables[VARIABLE_LC_MESSAGES],
"LC_PAPER", &variables[VARIABLE_LC_PAPER],
"LC_NAME", &variables[VARIABLE_LC_NAME],
"LC_ADDRESS", &variables[VARIABLE_LC_ADDRESS],
"LC_TELEPHONE", &variables[VARIABLE_LC_TELEPHONE],
"LC_MEASUREMENT", &variables[VARIABLE_LC_MEASUREMENT],
"LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION],
NULL)) < 0) {
if (r != -ENOENT)
log_warning("Failed to read /etc/sysconfig/i18n: %s", strerror(-r));
}
#endif
if (!variables[VARIABLE_LANG]) {
......
......@@ -50,7 +50,7 @@ static int parse_proc_cmdline(void) {
arg_skip = true;
else if (startswith(w, "quotacheck.mode"))
log_warning("Invalid quotacheck.mode= parameter. Ignoring.");
#ifdef TARGET_FEDORA
#if defined(TARGET_FEDORA) || defined(TARGET_MANDRIVA)
else if (strneq(w, "forcequotacheck", l))
arg_force = true;
#endif
......@@ -61,8 +61,8 @@ static int parse_proc_cmdline(void) {
}
static void test_files(void) {
#ifdef TARGET_FEDORA
/* This exists only on Fedora */
#if defined(TARGET_FEDORA) || defined(TARGET_MANDRIVA)
/* This exists only on Fedora or Mandriva */
if (access("/forcequotacheck", F_OK) >= 0)
arg_force = true;
#endif
......
......@@ -275,7 +275,13 @@ static int sysv_translate_facility(const char *name, const char *filename, char
static const char * const table[] = {
/* LSB defined facilities */
"local_fs", SPECIAL_LOCAL_FS_TARGET,
#ifndef TARGET_MANDRIVA
/* Due to unfortunate name selection in Mandriva,
* $network is provided by network-up which is ordered
* after network which actually starts interfaces.
* To break the loop, just ignore it */
"network", SPECIAL_NETWORK_TARGET,
#endif
"named", SPECIAL_NSS_LOOKUP_TARGET,
"portmap", SPECIAL_RPCBIND_TARGET,
"remote_fs", SPECIAL_REMOTE_FS_TARGET,
......
......@@ -4042,7 +4042,7 @@ static int install_info_apply(const char *verb, LookupPaths *paths, InstallInfo
}
if (!f) {
#if defined(TARGET_FEDORA) && defined (HAVE_SYSV_COMPAT)
#if (defined(TARGET_FEDORA) || defined(TARGET_MANDRIVA)) && defined (HAVE_SYSV_COMPAT)
if (endswith(i->name, ".service")) {
char *sysv;
......
......@@ -3252,6 +3252,32 @@ void status_welcome(void) {
if (!ansi_color)
const_color = "0;33"; /* Orange/Brown for Ubuntu */
#elif defined(TARGET_MANDRIVA)
if (!pretty_name) {
char *s, *p;
if ((r = read_one_line_file("/etc/mandriva-release", &s) < 0)) {
if (r != -ENOENT)
log_warning("Failed to read /etc/mandriva-release: %s", strerror(-r));
} else {
p = strstr(s, " release ");
if (p) {
*p = '\0';
p += 9;
p[strcspn(p, " ")] = '\0';
/* This corresponds to standard rc.sysinit */
if (asprintf(&pretty_name, "%s\x1B[0;39m %s", s, p) > 0)
const_color = "1;36";
else
log_warning("Failed to allocate Mandriva version string.");
} else
log_warning("Failed to parse /etc/mandriva-release");
free(s);
}
}
#endif
if (!pretty_name && !const_pretty)
......
......@@ -146,6 +146,9 @@ int main(int argc, char **argv) {
char *vc_font_unimap = NULL;
#ifdef TARGET_GENTOO
char *vc_unicode = NULL;
#endif
#ifdef TARGET_MANDRIVA
char *vc_keytable = NULL;
#endif
int fd = -1;
bool utf8;
......@@ -345,6 +348,64 @@ int main(int argc, char **argv) {
if (r != -ENOENT)
log_warning("Failed to read /etc/conf.d/keymaps: %s", strerror(-r));
}
#elif defined(TARGET_MANDRIVA)
if ((r = parse_env_file("/etc/sysconfig/i18n", NEWLINE,
"SYSFONT", &vc_font,
"SYSFONTACM", &vc_font_map,
"UNIMAP", &vc_font_unimap,
NULL)) < 0) {
if (r != -ENOENT)
log_warning("Failed to read /etc/sysconfig/i18n: %s", strerror(-r));
}
if ((r = parse_env_file("/etc/sysconfig/keyboard", NEWLINE,
"KEYTABLE", &vc_keytable,
"KEYMAP", &vc_keymap,
"UNIKEYTABLE", &vc_keymap,
"GRP_TOGGLE", &vc_keymap_toggle,
NULL)) < 0) {
if (r != -ENOENT)
log_warning("Failed to read /etc/sysconfig/i18n: %s", strerror(-r));
}
if (vc_keytable) {
if (vc_keymap)
free(vc_keymap);
if (utf8) {
if (endswith(vc_keytable, ".uni") || strstr(vc_keytable, ".uni."))
vc_keymap = strdup(vc_keytable);
else {
char *s;
if ((s = strstr(vc_keytable, ".map")))
vc_keytable[s-vc_keytable+1] = '\0';
vc_keymap = strappend(vc_keytable, ".uni");
}
} else
vc_keymap = strdup(vc_keytable);
free(vc_keytable);
if (!vc_keymap) {
log_error("Out of memory.");
goto finish;
}
}
if (access("/etc/sysconfig/console/default.kmap", F_OK) >= 0) {
char *t;
if (!(t = strdup("/etc/sysconfig/console/default.kmap"))) {
log_error("Out of memory.");
goto finish;
}
free(vc_keymap);
vc_keymap = t;
}
#endif
}
......
......@@ -21,6 +21,9 @@ After=local.service
m4_ifdef(`TARGET_ALTLINUX',
After=rc-local.service
)m4_dnl
m4_ifdef(`TARGET_MANDRIVA',
After=rc-local.service
)m4_dnl
# If additional gettys are spawned during boot then we should make
# sure that this is synchronized before getty.target, even though
......
......@@ -23,6 +23,9 @@ Names=runlevel5.target
m4_ifdef(`TARGET_ALTLINUX',
Names=runlevel5.target
)m4_dnl
m4_ifdef(`TARGET_MANDRIVA',
Names=runlevel5.target
)m4_dnl
AllowIsolate=yes
[Install]
......
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
[Unit]
Description=Display Manager
After=syslog.target livesys-late.service rc-local.service systemd-user-sessions.service
After=network.target acpid.service fs.service haldaemon.service
# Do not stop plymouth, it is done in prefdm if required
Conflicts=plymouth-quit.service
After=plymouth-quit.service
# Hide SysV script
Names=dm.service
[Service]
ExecStart=/etc/X11/prefdm
Type=forking
Restart=always
RestartSec=0
......@@ -29,6 +29,9 @@ m4_dnl On Debian/Ubuntu Runlevel 2, 3, 4 and 5 are multi-user
Names=runlevel2.target runlevel3.target runlevel4.target runlevel5.target
)m4_dnl
)m4_dnl
m4_ifdef(`TARGET_MANDRIVA',
Names=runlevel3.target
)m4_dnl
AllowIsolate=yes
[Install]
......
......@@ -13,6 +13,9 @@ DefaultDependencies=no
Conflicts=shutdown.target
After=basic.target
Before=shutdown.target
m4_ifdef(`TARGET_MANDRIVA',
`# Hide SysV script
Names=single.service')
[Service]
Environment=HOME=/root
......@@ -22,7 +25,10 @@ ExecStartPre=-/bin/echo 'Welcome to rescue mode. Use "systemctl default" or ^D t
m4_ifdef(`TARGET_FEDORA',
`EnvironmentFile=/etc/sysconfig/init
ExecStart=-/bin/bash -c "exec ${SINGLE}"',
`ExecStart=-/sbin/sulogin')
m4_ifdef(`TARGET_MANDRIVA',
`EnvironmentFile=/etc/sysconfig/init
ExecStart=-/bin/bash -c "exec ${SINGLE}"',
`ExecStart=-/sbin/sulogin'))
ExecStopPost=-/bin/systemctl --fail default
StandardInput=tty-force
KillMode=process-group
......
......@@ -21,6 +21,9 @@ After=local.service
m4_ifdef(`TARGET_ALTLINUX',
After=rc-local.service
)m4_dnl
m4_ifdef(`TARGET_MANDRIVA',
After=rc-local.service
)m4_dnl
# If additional gettys are spawned during boot then we should make
# sure that this is synchronized before getty.target, even though
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment