mirror of
https://github.com/systemd/systemd.git
synced 2025-01-21 22:04:01 +03:00
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
This commit is contained in:
parent
6e25b33cdd
commit
1de4d79bf5
31
Makefile.am
31
Makefile.am
@ -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 && \
|
||||
|
10
configure.ac
10
configure.ac
@ -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;
|
||||
|
26
src/util.c
26
src/util.c
@ -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]
|
||||
|
24
units/mandriva/prefdm.service
Normal file
24
units/mandriva/prefdm.service
Normal file
@ -0,0 +1,24 @@
|
||||
# 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
|
||||
|
Loading…
x
Reference in New Issue
Block a user