# Ignore these signals in non-interactive mode: INT, TERM, SEGV
[ -z "$PS1" ] && trap "" 2 3 11
+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
# {{{ source lsb-functions , color handling
if checkbootparam 'nocolor'; then
- RC_NOCOLOR=yes
. /etc/grml/lsb-functions
einfo "Disabling colors in bootsequence as requested on commandline." ; eend 0
else
. /etc/grml/lsb-functions
- . /etc/grml_colors
fi
# }}}
if [ -z "$INSTALLED" ]; then
# The default hardware clock timezone is stated as representing local time.
UTC="--localtime"
- grep -q "^UTC=" /etc/default/rcS || echo "UTC=no" >> /etc/default/rcS
- checkbootparam 'utc' >>$DEBUG 2>&1 && sed -i "s|^UTC=.*$|UTC=yes|" /etc/default/rcS
- checkbootparam 'gmt' >>$DEBUG 2>&1 && sed -i "s|^UTC=.*$|UTC=yes|" /etc/default/rcS
- checkbootparam 'localtime' >>$DEBUG 2>&1 && sed -i "s|^UTC=.*$|UTC=no|" /etc/default/rcS
- grep -q -i "^UTC=yes" /etc/default/rcS && UTC="-u"
+
+ if [ -f /etc/default/rcS ] ; then
+ grep -q "^UTC=" /etc/default/rcS || echo "UTC=no" >> /etc/default/rcS
+ checkbootparam 'utc' >>$DEBUG 2>&1 && sed -i "s|^UTC=.*$|UTC=yes|" /etc/default/rcS
+ checkbootparam 'gmt' >>$DEBUG 2>&1 && sed -i "s|^UTC=.*$|UTC=yes|" /etc/default/rcS
+ checkbootparam 'localtime' >>$DEBUG 2>&1 && sed -i "s|^UTC=.*$|UTC=no|" /etc/default/rcS
+ grep -q -i "^UTC=yes" /etc/default/rcS && UTC="-u"
+ # recent initscripts package versions don't ship /etc/default/rcS anymore, instead rely on /etc/adjtime
+ elif [ -f /etc/adjtime ] ; then
+ checkbootparam 'utc' >>$DEBUG 2>&1 && sed -i "s/^LOCAL/UTC/" /etc/adjtime
+ checkbootparam 'gmt' >>$DEBUG 2>&1 && sed -i "s/^LOCAL/UTC/" /etc/adjtime
+ checkbootparam 'localtime' >>$DEBUG 2>&1 && sed -i "s/^UTC$/LOCAL/" /etc/adjtime
+ grep -q "^UTC$" /etc/adjtime && UTC="-u"
+ fi
+
# hwclock uses the TZ variable
KTZ="$(getbootparam 'tz' 2>>$DEBUG)"
[ -z "$KTZ" ] && [ -r /etc/timezone ] && KTZ=$(cat /etc/timezone)
}
# }}}
+# {{{ secure boot
+config_secureboot(){
+ if [ -x /usr/bin/mokutil ] ; then
+ local secstate=$(mokutil --sb-state 2>/dev/null) # "SecureBoot enabled"
+ if [ -n "$secstate" ] ; then
+ einfo "SecureBoot is enabled" ; eend 0
+ else
+ ewarn "SecureBoot not detected" ; eend 0
+ fi
+ else
+ if modprobe efivars &>/dev/null ; then
+ if od -An -t u1 /sys/firmware/efi/vars/SecureBoot-*/data 2>/dev/null | grep -q 1 ; then
+ einfo "SecureBoot is enabled" ; eend 0
+ else
+ ewarn "SecureBoot not detected" ; eend 0
+ fi
+ fi
+ fi
+}
+# }}}
+
# {{{ timezone
config_timezone(){
# don't touch the files if running from harddisk:
# {{{ ACPI
config_acpi(){
-if checkbootparam 'noacpi'; then
- ewarn "ACPI: Not loading modules as requested by boot option \"noacpi\"." ; eend 0
-elif checkbootparam 'nogrmlacpi' ; then
- ewarn "ACPI: Not loading modules as requested by boot option \"nogrmlacpi\"." ; eend 0
-elif [ ! -d /proc/acpi ] ; then
- ewarn "ACPI: Kernel support not present." ; eend 0
-else
- einfo "ACPI: Loading modules (disable with boot option noacpi / nogrmlacpi): "
- eindent
- found=""
- for a in /lib/modules/$KERNEL/kernel/drivers/acpi/*; do
- basename="${a##*/}"
- basename="${basename%%.*}"
- case "$basename" in *_acpi)
- egrep -qi "${basename%%_acpi}" /proc/acpi/dsdt 2>>$DEBUG || continue ;;
+ if $SYSTEMD ; then
+ echo "systemd detected, no acpi(d) stuff needed." >>"$DEBUG"
+ return
+ fi
+
+ if checkbootparam 'noacpi'; then
+ ewarn "ACPI: Not loading modules as requested by boot option \"noacpi\"." ; eend 0
+ elif checkbootparam 'nogrmlacpi' ; then
+ ewarn "ACPI: Not loading modules as requested by boot option \"nogrmlacpi\"." ; eend 0
+ elif [ ! -d /proc/acpi ] ; then
+ ewarn "ACPI: Kernel support not present." ; eend 0
+ else
+ einfo "ACPI: Loading modules (disable with boot option noacpi / nogrmlacpi): "
+ eindent
+ found=""
+ for a in /lib/modules/$KERNEL/kernel/drivers/acpi/*; do
+ basename="${a##*/}"
+ basename="${basename%%.*}"
+ case "$basename" in *_acpi)
+ egrep -qi "${basename%%_acpi}" /proc/acpi/dsdt 2>>$DEBUG || continue ;;
esac
modprobe $basename >>$DEBUG 2>&1 && found="yes"
local BASE="$BASE $basename"
fi
if ! pgrep acpid >/dev/null ; then
einfo "Starting acpi daemon."
- /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
}
# }}}
# {{{ gpm
config_gpm(){
- if checkbootparam 'nogpm'; then
- ewarn "Not starting GPM as requested on boot commandline." ; eend 0
- else
- if ! [ -r /dev/input/mice ] ; then
+ if checkbootparam 'nogpm'; then
+ ewarn "Not starting GPM as requested on boot commandline." ; eend 0
+ else
+ if ! [ -r /dev/input/mice ] ; then
eerror "No mouse found - not starting GPM." ; eend 1
- else
+ 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
- fi
+ fi
+ 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(){
+
+
# 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
fi
einfo "Setting up and invoking grml-x ${WINDOWMANAGER}. Just exit X windows system to get full featured consoles."
config_userlocal
- cat>|/etc/init.d/xstartup<<EOF
+ if $SYSTEMD ; then
+ cat>|/etc/init.d/startx<<EOF
#!/bin/sh
-su $localuser -c "/usr/bin/grml-x ${WINDOWMANAGER}"
+chgrp tty \${TTY}
+chmod g=rw \${TTY}
+sudo -u "${localuser}" /usr/bin/grml-x ${WINDOWMANAGER}
EOF
- chmod 755 /etc/init.d/xstartup
+ chmod 755 /etc/init.d/startx
+ chvt 6
+ return
+ fi
+ cat>|/etc/init.d/startx<<EOF
+#!/bin/sh
+su "${localuser}" -c "/usr/bin/grml-x ${WINDOWMANAGER}"
+EOF
+ chmod 755 /etc/init.d/startx
- # adjust inittab for xstartup
+ # adjust inittab for startx
if grep -q '^6:' /etc/inittab ; then
- sed -i 's|^6:.*|6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /usr/share/grml-scripts/run-welcome" >/dev/tty6 2>\&1 </dev/tty6|' /etc/inittab
+ sed -i 's|^6:.*|6:2345:respawn:/bin/zsh --login -c "/etc/init.d/startx ; /usr/share/grml-scripts/run-welcome" >/dev/tty6 2>\&1 </dev/tty6|' /etc/inittab
else # just append tty6 to inittab if no definition is present:
- echo '6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /usr/share/grml-scripts/run-welcome" >/dev/tty6 2>&1 < /dev/tty6' >> /etc/inittab
+ echo '6:2345:respawn:/bin/zsh --login -c "/etc/init.d/startx ; /usr/share/grml-scripts/run-welcome" >/dev/tty6 2>&1 < /dev/tty6' >> /etc/inittab
fi
/sbin/telinit q ; eend $?
if ! checkbootparam 'swraid' ; then
eindent
- einfo "Just run 'Start mdadm-raid' to assemble md arrays or boot using 'swraid' as bootoption for autostart."
+ if $SYSTEMD ; then
+ einfo "Just run 'Start mdmonitor' to assemble md arrays or boot using 'swraid' as bootoption for autostart."
+ else
+ einfo "Just run 'Start mdadm-raid' to assemble md arrays or boot using 'swraid' as bootoption for autostart."
+ fi
eoutdent
else
einfo "Bootoption swraid found. Searching for software RAID arrays:"
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
einfo "You seem to have logical volumes (LVM) on your system."
eindent
- einfo "Just run 'Start lvm2' to activate them or boot using 'lvm' as bootoption for autostart."
+ if $SYSTEMD ; then
+ einfo "Just run 'Start lvm2-lvmetad' to activate them or boot using 'lvm' as bootoption for autostart."
+ else
+ einfo "Just run 'Start lvm2' to activate them or boot using 'lvm' as bootoption for autostart."
+ fi
eend 0
if checkbootparam 'lvm' ; then
einfo "Bootoption LVM found. Searching for logical volumes:"
- /etc/init.d/lvm2 start ; eend $?
+ if $SYSTEMD ; then
+ service_wrapper lvm2-lvmetad start ; eend $?
+ else
+ service_wrapper lvm2 start ; eend $?
+ fi
fi
eoutdent
fi