# Ignore these signals in non-interactive mode: INT, TERM, SEGV
[ -z "$PS1" ] && trap "" 2 3 11
-if [[ "$(realpath "$(cat /proc/1/cmdline)")" == "/lib/systemd/systemd" ]] ; then
+if [ "$(cat /proc/1/comm 2>/dev/null)" = "systemd" ] ; then
SYSTEMD=true
else
SYSTEMD=false
fi
+service_wrapper() {
+ if [ "$#" -lt 2 ] ; then
+ echo "Usage: service_wrapper <service> <action>" >&2
+ return 1
+ fi
+
+ local service="$1"
+ local action="$2"
+
+ if $SYSTEMD ; then
+ systemctl "$action" "$service"
+ else
+ /etc/init.d/"$service" "$action"
+ fi
+}
+
# zsh stuff
iszsh(){
if [ -n "$ZSH_VERSION" ] ; then
fi
if ! pgrep acpid >/dev/null ; then
einfo "Starting acpi daemon."
- $SYSTEMD && systemctl start acpid.socket
- /etc/init.d/acpid start >>$DEBUG 2>&1 ; eend $?
+ service_wrapper acpid.socket start >>$DEBUG 2>&1 ; eend $?
+ service_wrapper acpid start >>$DEBUG 2>&1 ; eend $?
else
ewarn "acpi daemon already running."
eend 0
return 0
fi
-if [ -x /etc/init.d/loadcpufreq ] ; then
+if ! [ -x /etc/init.d/loadcpufreq ] ; then
+ ewarn "loadcpufreq init script not available, ignoring cpu frequency scaling."
+ eend 0
+ return 0
+else
einfo "Trying to set up cpu frequency scaling:"
eindent
SKIP_CPU_GOVERNOR=''
fi
einfo "Starting secure shell server in background for root and user $localuser"
- /etc/init.d/rmnologin start >>$DEBUG 2>>$DEBUG
- /etc/init.d/ssh start >>$DEBUG 2>>$DEBUG &
+ service_wrapper rmnologin start >>$DEBUG 2>>$DEBUG
+ service_wrapper ssh start >>$DEBUG 2>>$DEBUG &
eend $?
fi
if checkbootparam 'nosyslog'; then
ewarn "Not starting syslog daemon as requested on boot commandline." ; eend 0
else
- SYSLOGD=''
- [ -x /etc/init.d/syslog-ng ] && SYSLOGD='syslog-ng'
- [ -x /etc/init.d/rsyslog ] && SYSLOGD='rsyslog'
- [ -x /etc/init.d/dsyslog ] && SYSLOGD='dsyslog'
- [ -x /etc/init.d/sysklogd ] && SYSLOGD='sysklogd'
- [ -x /etc/init.d/inetutils-syslogd ] && SYSLOGD='inetutils-syslogd'
-
- if [ -z "$SYSLOGD" ] ; then
- eerror "No syslog daemon found." ; eend 1
- else
- einfo "Starting $SYSLOGD in background."
- /etc/init.d/$SYSLOGD start >>$DEBUG &
- eend 0
- fi
+ einfo "Starting rsyslog in background."
+ service_wrapper rsyslog start >>$DEBUG &
+ eend 0
fi
}
# }}}
eerror "No mouse found - not starting GPM." ; eend 1
else
einfo "Starting gpm in background."
- /etc/init.d/gpm start >>$DEBUG &
+ service_wrapper gpm start >>$DEBUG &
# ( while [ ! -e /dev/psaux ]; do sleep 5; done; /etc/init.d/gpm start >>$DEBUG ) &
eend 0
fi
# if they contain the keyword "DO_NO_RUN_IN_BACKGROUND".
if grep -q 'DO_NO_RUN_IN_BACKGROUND' "/etc/init.d/${service}" 2>>$DEBUG ; then
einfo "Starting service ${service}."
- /etc/init.d/${service} start >>$DEBUG
+ service_wrapper "${service}" start >>$DEBUG
else
einfo "Starting service ${service} in background."
- /etc/init.d/${service} start >>$DEBUG &
+ service_wrapper "${service}" start >>$DEBUG &
fi
done
eend $?
# {{{ start X window system via grml-x
config_x_startup(){
+
+ if $SYSTEMD ; then
+ ewarn "The startx boot option isn't yet supported via systemd, sorry." ; eend 0
+ return
+ fi
+
# make sure we start X only if startx is used *before* a nostartx option
# so it's possible to disable automatic X startup using nostart
if checkbootparam 'startx' && ! echo "$CMDLINE" | grep -q 'startx.*nostartx' ; then
if checkbootparam 'nolvm' ; then
ewarn "Skipping LVM code as requested on boot commandline." ; eend 0
else
- # Debian etch provides /etc/init.d/lvm only, newer suites provide /etc/init.d/lvm2
- if ! [ -x /sbin/lvm -a -x /sbin/lvdisplay ] || ! [ -x /etc/init.d/lvm2 -o -x /etc/init.d/lvm ] ; then
+ if ! [ -x /sbin/lvm ] ; then
eerror "LVM not available, can not execute it." ; eend 1
else
if lvdisplay 2>&1 | grep -v 'No volume groups found' >/dev/null 2>&1 ; then
eend 0
if checkbootparam 'lvm' ; then
einfo "Bootoption LVM found. Searching for logical volumes:"
- /etc/init.d/lvm2 start ; eend $?
+ service_wrapper lvm2 start ; eend $?
fi
eoutdent
fi