################################################################################
# {{{ path, variables, signals, umask, zsh
-export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin"
+export PATH="/bin:/sbin:/usr/bin:/usr/sbin"
DEBUG="/dev/null"
KERNEL="$(uname -r)"
ARCH="$(uname -m)"
# old linuxrc version:
[ -d /cdrom ] && export LIVECD_PATH=/cdrom
-# new initramfs layout:
+# initramfs layout until around December 2012:
[ -d /live/image ] && export LIVECD_PATH=/live/image
+# initramfs layout since around December 2012:
+[ -d /lib/live/mount/medium ] && export LIVECD_PATH=/lib/live/mount/medium
# Ignore these signals in non-interactive mode: INT, TERM, SEGV
[ -z "$PS1" ] && trap "" 2 3 11
# if CMDLINE was set from the outside, we're debugging.
# otherwise, take CMDLINE from Kernel and config files.
CMDLINE="$(cat /proc/cmdline)"
- [ -d /cdrom/bootparams/ ] && CMDLINE="$CMDLINE $(cat /cdrom/bootparams/* | tr '\n' ' ')"
- [ -d /live/image/bootparams/ ] && CMDLINE="$CMDLINE $(cat /live/image/bootparams/* | tr '\n' ' ')"
+ [ -d ${LIVECD_PATH}/bootparams/ ] && CMDLINE="$CMDLINE $(cat ${LIVECD_PATH}/bootparams/* | tr '\n' ' ')"
+ modprobe 9p 2>/dev/null || true
+ if grep -q 9p /proc/filesystems ; then
+ TAG="grml-parameters"
+ if grep -q "$TAG" /sys/bus/virtio/devices/*/mount_tag 2>/dev/null ; then
+ MOUNTDIR="$(mktemp -d)"
+ mount -t 9p -o trans=virtio,ro "$TAG" "$MOUNTDIR"
+ CMDLINE="$CMDLINE $(cat "$MOUNTDIR"/* 2>/dev/null | tr '\n' ' ')"
+ umount "$MOUNTDIR"
+ rmdir "$MOUNTDIR"
+ fi
+ fi
fi
# }}}
grep -q small /etc/grml_version 2>>$DEBUG && return 0 || return 1
}
-# execute flite only if it's present
-flitewrapper() {
- [ -x /usr/bin/flite ] && flite -o play -t "$*"
+# if no password is set return a random password
+set_passwd() {
+ [ -n "$PASSWD" ] && return 0
+
+ if [ -x /usr/bin/apg ] ; then
+ PASSWD="$(apg -M NL -a 0 -m 8 -x 12 -n 1)"
+ elif [ -x /usr/bin/gpw ] ; then
+ PASSWD="$(gpw 1)"
+ elif [ -x /usr/bin/pwgen ] ; then
+ PASSWD="$(pwgen -1 8)"
+ elif [ -x /usr/bin/hexdump ] ; then
+ PASSWD="$(dd if=/dev/urandom bs=14 count=1 2>/dev/null | hexdump | awk '{print $3 $4}')"
+ elif [ -n "$RANDOM" ] ; then
+ PASSWD="grml${RANDOM}"
+ else
+ PASSWD=''
+ eerror "Empty passphrase and neither apg, gpw, pwgen, hexdump nor \$RANDOM available. Skipping."
+ eend 1
+ return 1
+ fi
}
+
### }}}
# {{{ filesystems (proc, pts, sys) and fixes
# {{{ Check if we are running in live mode or from HD
INSTALLED=""
[ -e /etc/grml_cd ] || INSTALLED="yes"
+# }}}
-# testcd
-TESTCD=""
-checkbootparam 'testcd' >>$DEBUG 2>&1 && TESTCD="yes"
+# {{{ provide information about virtual environments
+VIRTUAL=false # assume physical system by default
+KVM=false
+VIRTUALBOX=false
+VMWARE=false
+
+if vmware-detect &>/dev/null; then
+ VIRTUAL=true; VMWARE=true; VIRTUAL_ENV='VMware'
+elif [ "$(virt-what 2>/dev/null)" = "kvm" ] || \
+ [ "$(imvirt 2>/dev/null)" = "KVM" ] ; then
+ VIRTUAL=true; KVM=true; VIRTUAL_ENV='KVM'
+elif [ "$(virt-what 2>/dev/null)" = "virtualbox" ] || \
+ [ "$(imvirt 2>/dev/null)" = "VirtualBox" ] ; then
+ VIRTUAL=true; VIRTUALBOX=true; VIRTUAL_ENV='VirtualBox'
+fi
# }}}
# {{{ source lsb-functions , color handling
fi
if [ -f /sys/class/firmware/timeout ] ; then
einfo "Setting timeout for firmware loading to ${TIMEOUT}."
- echo 100 > /sys/class/firmware/timeout ; eend $?
+ echo $TIMEOUT > /sys/class/firmware/timeout ; eend $?
fi
}
# }}}
if [ -x /usr/sbin/grml-setlang ] ; then
# if bootoption lang is used update /etc/default/locale accordingly
if [ -n "$BOOT_LANGUAGE" ] ; then
- checkgrmlsmall && /usr/sbin/grml-setlang "POSIX" || /usr/sbin/grml-setlang "$LANGUAGE"
+ /usr/sbin/grml-setlang "$LANGUAGE"
# otherwise default to lang=en
else
- checkgrmlsmall && /usr/sbin/grml-setlang "POSIX" || /usr/sbin/grml-setlang "en"
+ /usr/sbin/grml-setlang "en"
fi
fi
fi
# export it now, so error messages get translated, too
- if checkgrmlsmall ; then
- export LANG='C' # grml-small does not provide any further locales
- else
- [ -r /etc/default/locale ] && . /etc/default/locale
- export LANG LANGUAGE
- fi
+ [ -r /etc/default/locale ] && . /etc/default/locale
+ export LANG LANGUAGE
# configure keyboard layout, read in already set values first:
[ -r /etc/sysconfig/keyboard ] && . /etc/sysconfig/keyboard
if [ -r /etc/default/locale ] ; then
if grep -q "LANG=.*UTF" /etc/default/locale ; then
einfo "Setting up unicode environment."
- unicode_start 2>>$DEBUG ; eend $?
+ unicode_start >>$DEBUG 2>&1 ; eend $?
fi
fi
fi
# we have to set up all consoles, therefore loop it over all ttys:
- NUM_CONSOLES=$(fgconsole --next-available)
- NUM_CONSOLES=$(expr ${NUM_CONSOLES} - 1)
- [ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6
- CUR_CONSOLE=$(fgconsole)
+ NUM_CONSOLES=$(fgconsole --next-available 2>/dev/null)
+ if [ -n "$NUM_CONSOLES" ] ; then
+ NUM_CONSOLES=$(expr ${NUM_CONSOLES} - 1)
+ [ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6
+ fi
+ CUR_CONSOLE=$(fgconsole 2>/dev/null)
+
+ if [ -x "$(which setfont)" ] ; then
+ use_setfont=true
+ elif [ -x "$(which consolechars)" ] ; then
+ use_consolechars=true
+ else
+ eerror "Neither setfont nor consolechars tool present, can not set font."
+ eend 1
+ return 1
+ fi
if [ -n "$CHARMAP" ] ; then
- einfo "Running consolechars for ${CHARMAP}"
- for vc in `seq 0 ${NUM_CONSOLES}` ; do
- consolechars --tty=/dev/tty${vc} -m ${CHARMAP} ; RC=$?
+ einfo "Setting font to ${CHARMAP}"
+ RC=0
+ for vc in $(seq 0 ${NUM_CONSOLES}) ; do
+ if $use_setfont ; then
+ setfont -C /dev/tty${vc} $CHARMAP ; RC=$?
+ elif $use_consolechars ; then
+ consolechars --tty=/dev/tty${vc} -m ${CHARMAP} ; RC=$?
+ fi
done
- [ -n "$CUR_CONSOLE" ] && chvt $CUR_CONSOLE
+ if [ -n "$CUR_CONSOLE" ] ; then
+ [ "$CUR_CONSOLE" != "serial" ] && chvt $CUR_CONSOLE
+ fi
eend $RC
fi
ewarn "Skipping setting console font as requested on boot commandline." ; eend 0
else
if [ -n "$CONSOLEFONT" ] ; then
- einfo "Running consolechars using ${CONSOLEFONT}"
- for vc in `seq 0 ${NUM_CONSOLES}` ; do
- consolechars --tty=/dev/tty${vc} -f $CONSOLEFONT ; RC=$?
+ einfo "Setting font to ${CONSOLEFONT}"
+ RC=0
+ for vc in $(seq 0 ${NUM_CONSOLES}) ; do
+ if $use_setfont ; then
+ setfont -C /dev/tty${vc} ${CONSOLEFONT} ; RC=$?
+ elif $use_consolechars ; then
+ consolechars --tty=/dev/tty${vc} -f ${CONSOLEFONT} ; RC=$?
+ fi
done
- [ -n "$CUR_CONSOLE" ] && chvt $CUR_CONSOLE
- eend $?
+ if [ -n "$CUR_CONSOLE" ] ; then
+ [ "$CUR_CONSOLE" != "serial" ] && chvt $CUR_CONSOLE
+ fi
+ eend $RC
fi
fi
# {{{ Set hostname
config_hostname(){
- if checkbootparam 'hostname' ; then
+ if ! checkbootparam 'hostname' ; then
+ return 0
+ fi
+
HOSTNAME="$(getbootparam 'hostname' 2>>$DEBUG)"
+ if [ -z "$HOSTNAME" ] && [ -x /usr/bin/random-hostname ] ; then
+ einfo "Generating random hostname as no hostname was specified."
+ HOSTNAME="$(/usr/bin/random-hostname)"
+ eend $?
+ fi
+
einfo "Setting hostname to $HOSTNAME as requested."
- grml-hostname $HOSTNAME >>$DEBUG ; RC=$?
- [ "$RC" = "0" ] && hostname $HOSTNAME
- eend $RC
- else
- hostname --file /etc/hostname
- fi
+ grml-hostname $HOSTNAME >>$DEBUG
+ eend $?
}
# }}}
# fstabuser (needed when running from harddisk with username != grml {{{
config_userfstab(){
+ # force load of build-in and local config
[ -r /etc/grml/autoconfig ] && . /etc/grml/autoconfig
+ [ -r /etc/grml/autoconfig ] && . /etc/grml/autoconfig.local
+
+ # 1st. try configured fstab user
if [ -n "$CONFIG_FSTAB_USER" ] ; then
- fstabuser="$CONFIG_FSTAB_USER"
+ fstabuser=$(getent passwd $CONFIG_FSTAB_USER | cut -d: -f1)
+ fi
+
+ # 2nd. use standard user id
+ [ -n "$fstabuser" ] || fstabuser=$(getent passwd 1000 | cut -d: -f1)
+
+ # 3rd. use standard user name
+ [ -n "$fstabuser" ] || fstabuser=$(getent passwd grml | cut -d: -f1)
+
+ # if not yet set fall back to 'root' user, avoid bad /etc/fstab
+ [ -n "$fstabuser" ] || fstabuser='root'
+}
+# }}}
+
+# local_user (needed when running with username != grml {{{
+config_userlocal() {
+
+ # force load of build-in and local config
+ [ -r /etc/grml/autoconfig ] && . /etc/grml/autoconfig
+ [ -r /etc/grml/autoconfig ] && . /etc/grml/autoconfig.local
+
+ # 1st. try id of primary user
+ localuser=$(getent passwd 1000 | cut -d: -f1)
+
+ # 2nd. use name standard user
+ [ -n "$localuser" ] || localuser=$(getent passwd grml | cut -d: -f1)
+}
+# }}}
+
+# {{{ mount configfs
+config_configfs() {
+ einfo "Mounting configfs"
+ CONFIGFS_DIR=/sys/kernel/config/
+ modprobe configfs 2>/dev/null 1>&2
+ if ! [ -d "$CONFIGFS_DIR" ] ; then
+ eindent
+ einfo "$CONFIGFS_DIR does not exist, can't mount directory"
+ eend 1
+ eoutdent
else
- fstabuser=$(getent passwd 1000 | cut -d: -f1)
+ mount -t configfs configfs "$CONFIGFS_DIR" 2>/dev/null 1>&2
+ eend $?
fi
- # if not yet set fall back to default 'grml' user
- [ -n "$fstabuser" ] || fstabuser='grml'
}
# }}}
[ -z "$KTZ" ] && [ -r /etc/timezone ] && KTZ=$(cat /etc/timezone)
if [ ! -f "/usr/share/zoneinfo/$KTZ" ] ; then
ewarn "Warning: unknown timezone $KTZ" ; eend 1
- KTZ="Europe/Vienna"
+ KTZ="UTC"
ewarn "Falling back to timezone $KTZ" ; eend 0
fi
# {{{ print kernel info
config_kernel(){
- vmware-detect &>/dev/null && VMWARE="inside ${WHITE}VMware/Qemu${NORMAL}"
- [ -d /proc/xen ] && VMWARE='' # vmware-detect returns '0' when running with a Xen-enabled kernel
- einfo "Running Linux Kernel $KERNEL $VMWARE" ; eend 0
+ if $VIRTUAL && [ -n "$VIRTUAL_ENV" ] ; then
+ einfo "Running Linux Kernel $KERNEL inside $VIRTUAL_ENV" ; eend 0
+ else
+ einfo "Running Linux Kernel $KERNEL" ; eend 0
+ fi
+
if [ -r /proc/cpuinfo ] ; then
- if egrep -q '^flags.*(vmx|svm)' /proc/cpuinfo ; then
- eindent
- einfo 'CPU(s) featuring virtualization technology detected' ; eend 0
- eoutdent
- fi
+ if egrep -q '^flags.*(vmx|svm)' /proc/cpuinfo ; then
+ eindent
+ einfo 'CPU(s) featuring virtualization technology detected' ; eend 0
+ eoutdent
+ fi
fi
+
if [ -d /proc/xen ] ; then
- eindent
- einfo 'Running kernel featuring support for Xen detected' ; eend 0
- eoutdent
+ eindent
+ einfo 'Running kernel featuring support for Xen detected' ; eend 0
+ eoutdent
fi
}
# }}}
-# {{{ vmware specific stuff
-config_vmware(){
-if checkbootparam 'novmware' ; then
- ewarn "Skipping running vmware specific stuff as requested on boot commandline." ; eend 0
-else
- if [ -z "$INSTALLED" ] ; then
- if vmware-detect || checkbootparam "BOOT_IMAGE=vmware" ; then
- if ! checkbootparam 'qemu' ; then
- if [ -r /etc/X11/xorg.conf.vmware ] ; then
- einfo "VMware: Copying /etc/X11/xorg.conf.vmware to /etc/X11/xorg.conf"
- cp /etc/X11/xorg.conf.vmware /etc/X11/xorg.conf ; eend $?
- fi
- fi
- elif [ -r /proc/acpi/battery/BAT0/info -a -r /etc/X11/xorg.conf.virtualbox ] ; then
- if grep -q 'OEM info: innotek' /proc/acpi/battery/BAT0/info ; then
- einfo 'Virtual Box: Copying /etc/X11/xorg.conf.virtualbox to /etc/X11/xorg.conf'
- cp /etc/X11/xorg.conf.virtualbox /etc/X11/xorg.conf ; eend $?
- fi
- fi
- fi
-fi
-}
-# }}}
-
-# {{{ qemu specific stuff
-config_qemu(){
-if checkbootparam 'qemu' ; then
- if [ -r /etc/X11/xorg.conf.example ] ; then
- einfo "Qemu: Copying /etc/X11/xorg.conf.example to /etc/X11/xorg.conf"
- cp /etc/X11/xorg.conf.example /etc/X11/xorg.conf ; eend $?
- fi
-fi
-}
-# }}}
-
# {{{ ld.so.cache + depmod
config_ld_mod(){
if [ -n "$INSTALLED" ]; then
config_fast(){
if checkbootparam 'fast'; then
ewarn "Bootoption fast detected. Skipping startup of grml-quickconfig."
- sed -i 's#^1:.*#1:12345:respawn:/usr/bin/openvt -f -c 1 -w -- /bin/zsh#' /etc/inittab
+ sed -i '/1:/s#/usr/share/grml-scripts/run-welcome#/bin/zsh#' /etc/inittab
/sbin/telinit q ; eend $?
fi
}
# activate serial console {{{
config_console(){
if checkbootparam 'console'; then
- einfo "Bootoption (for serial) console detected."
- eindent
- if [ -r /etc/mgetty/mgetty.config ] ; then
- MODE=$(getbootparam 'console' | awk -F, '{print $2}')
- MODE=${MODE%%n*}
- [ -n "$MODE" ] || MODE=9600 # default mode
- einfo "Setting speed in /etc/mgetty/mgetty.config to $MODE bps"
- sed -i "s/speed [0-9]*/speed $MODE/" /etc/mgetty/mgetty.config ; eend $?
- fi
-
- einfo "Activating mgetty."
- sed -i 's/^#T0/T0/' /etc/inittab
- sed -i 's/^#T1/T1/' /etc/inittab
- /sbin/telinit q ; eend $?
- eoutdent
-fi
-}
-# }}}
-
-# For burning on IDE-CD-Roms, k3b (and others) check for special permissions {{{
-config_cdrom_perm(){
-CDROMS=""
-for DEVICE in /proc/ide/hd?; do
- [ "$(cat $DEVICE/media 2>/dev/null)" = "cdrom" ] && CDROMS="$CDROMS /dev/${DEVICE##*/}"
-done
-[ -n "$CDROMS" ] && { chown root.cdrom $CDROMS; chmod 666 $CDROMS; } 2>/dev/null
-}
-# }}}
+ local line
+ local ws
+ ws=' '
-# {{{ Bring up loopback interface now
-config_local_net(){
- if [ -z "$INSTALLED" ] ; then
- if grep -q 'iface lo inet loopback' /etc/network/interfaces 2>/dev/null ; then
- grep -q lo=lo /etc/network/run/ifstate 2>/dev/null || ifup lo
- else
- ifconfig lo up
- fi
- fi
-}
-# }}}
+ einfo "Bootoption for serial console detected:"
+
+ line="$CMDLINE x "
+ this=""
+ line="${line#*[$ws]}"
+ local telinitq=""
+ while [ -n "$line" ]; do
+ case "$this" in
+ console=*)
+ local serial="$this"
+ local device="${this%%,*}"
+ local device="${device##*=}"
+ if echo $serial | grep -q ttyS ; then
+ local option="${serial##*,}"
+ # default (works for kvm & CO):
+ local speed="115200,57600,38400,19200,9600,4800,2400,1200";
+ # ... unless overriden by command line:
+ case "$option" in
+ 115200*) speed=115200 ;;
+ 57600*) speed=57600 ;;
+ 38400*) speed=38400 ;;
+ 19200*) speed=19200 ;;
+ 9600*) speed=9600 ;;
+ 4800*) speed=4800 ;;
+ 2400*) speed=2400 ;;
+ 1200*) speed=1200 ;;
+ esac
+ eindent
+ einfo "Activating console login on device ${device} with speed ${speed}."
+ local number="${device#ttyS}"
+ sed -i "/^T$number:/d;/^#grmlserial#/iT$number:23:respawn:/bin/bash -c \"/sbin/getty -L $device -l /usr/share/grml-scripts/run-welcome $speed vt100 || sleep 30\"" /etc/inittab
+ eend $?
+ telinitq="1"
+ eoutdent
+ fi
+ ;;
+ esac
+ this="${line%%[$ws]*}"
+ line="${line#*[$ws]}"
+ done
-# firewire devices {{{
-# the raw1394 driver does not yet export info into SYSFS,
-# so let's create raw1394 device manually
-# http://www.michael-prokop.at/blog/index.php?p=352
-config_firewire_dev(){
-if checkbootparam 'nofirewiredev' ; then
- ewarn "Skipping creating some firewire devices as requested on boot commandline." ; eend 0
-else
-#if [ "${KERNEL%-*}" == "2.6.11" ] ; then
- einfo "Creating some firewire devices (fix kernel 2.6-bug)."
-# cd /dev && MAKEDEV video1394 raw1394
- [ -r /dev/raw1394 ] || mknod /dev/raw1394 c 171 0
- [ -r /dev/video1394 ] || mknod -m 666 /dev/video1394 c 171 16
-# mknod -m 666 /dev/dv1394 c 171 32 # for NTSC
- [ -r /dev/dv1394 ] || mknod -m 666 /dev/dv1394 c 171 34 # for PAL
- chown -R root:video /dev/raw1394 /dev/video1394 /dev/dv1394
- chmod -R 664 /dev/raw1394 /dev/video1394 /dev/dv1394 ; eend $?
+ if [ -n "$telinitq" ]; then
+ /sbin/telinit q
+ fi
+ eend $?
fi
-#fi
}
# }}}
# {{{ CD Checker
config_testcd(){
-if [ -n "$TESTCD" ]; then
- einfo "Checking CD data integrity as requested by '${WHITE}testcd${NORMAL}' boot option."
- einfo "Reading files and checking against GRML/md5sums, this may take a while..."
- echo -n "${RED}"
+if checkbootparam 'testcd' ; then
+ einfo "Checking CD data integrity as requested by '${WHITE}testcd${NORMAL}' boot option."
+ eindent
- if [ -n "${LIVECD_PATH}"/GRML ] ; then
- ( cd "${LIVECD_PATH}"/GRML ; rm -f /tmp/md5sum.log ; md5sum -c md5sums 2>&1 | tee /tmp/md5sum.log ; RC=$? )
- else
- echo "${RED} *** Error: Could not find md5sum file. ***"
- fi
+ local ERROR=true
+ local FOUND_FILE=false
+ local logfile='/tmp/md5sum.log'
- if [ "$RC" = "0" ]; then
- einfo "Everything looks OK" ; eend 0
- else
- eerror 'Checksum failed for theses files:' ; eend 1
- egrep -v '(^md5sum:|OK$)' /tmp/md5sum.log
- eerror 'Data on the grml medium is possibly incomplete/damaged or...'
- eerror '... RAM of your computer is broken.' ; eend 1
- einfon "Hit return to continue, or press the reset button to quit."
- read a
- fi
+ rm -f "$logfile"
- eend 0
-fi
-}
-# }}}
-
-# {{{ hardware detection via discover
-config_discover(){
-if checkbootparam 'nodisc' ; then
- ewarn "Skipping hardware detection via discover as requested on boot commandline." ; eend 0
-else
- if [ -x /sbin/discover ] ; then
- einfo "Discovering hardware. Trying to load the following modules in background:"
- eindent
- einfo "$(discover --data-path=linux/module/name --data-path=linux/modules/options --format="%s %s" --data-version=`uname -r` --enable-bus all | sort -u | xargs echo)"
- eoutdent
- /sbin/discover-modprobe -v >>$DEBUG 2>&1 &
- eend 0
- else
- eerror "Application discover not available. Information: udev should handle hardware recognition." ; eend 0
- fi
-fi
-}
-# }}}
+ for md5 in $(find "${LIVECD_PATH}" -name md5sums) ; do
+ einfo "Checking files against $md5, this may take a while..."
-# {{{ hardware detection via hwinfo
-config_hwinfo(){
-if checkbootparam 'hwinfo' >>$DEBUG 2>&1; then
- einfo "Discovering hardware via hwinfo:"
- MODULES=$(su grml hwinfo | grep "Cmd: \"modprobe" | awk '{print $5}' | sed 's/"//')
- echo -n " Loading modules: "
- for i in `echo $MODULES` ; do echo -n $i && modprobe $i ; done
- eend 0
-fi
-}
-# }}}
-
-# {{{ disable hotplug agents on request
-config_hotplug_agent(){
-if checkbootparam 'noagent' ; then
- AGENT="$(getbootparam 'noagent' 2>>$DEBUG)"
- AGENTLIST=$(echo "$AGENT" | sed 's/,/\\n/g')
- AGENTNL=$(echo "$AGENT" | sed 's/,/ /g')
- einfo "Disabling hotplug-agent(s) $AGENTNL"
- for agent in $(echo -e $AGENTLIST) ; do
- mv /etc/hotplug/${agent}.rc /etc/hotplug/${agent}.norc
+ FOUND_FILE=true
+ OLD_PWD=$(pwd)
+ cd $(dirname "$md5")
+ md5sum -c $(basename "$md5") |& tee -a "${logfile}"
+ if [ $pipestatus[1] -eq 0 ] ; then
+ ERROR=false
+ fi
+ cd "${OLD_PWD}"
done
- [ "$?" == "0" ] ; eend $?
-fi
-}
-# }}}
-# {{{ blacklist of hotplug-modules
-config_hotplug_blacklist(){
-if checkbootparam 'black' ; then
- BLACK="$(getbootparam 'black' 2>>$DEBUG)"
- BLACKLIST=$(echo "$BLACK" | sed 's/,/\\n/g')
- BLACKNL=$(echo "$BLACK" | sed 's/,/ /g')
- einfo "Blacklisting $BLACKNL via /etc/hotplug/blacklist.d/hotplug-light"
- echo -e "$BLACKLIST" >> /etc/hotplug/blacklist.d/hotplug-light
- echo -e "$BLACKLIST" >> /etc/hotplug/blacklist
- eend 0
-fi
-}
-# }}}
+ if ! $FOUND_FILE ; then
+ eerror 'Error: Could not find md5sum file' ; eend 1
+ return
+ fi
-# {{{ run hotplug
-config_hotplug(){
-if checkbootparam 'nohotplug' ; then
- ewarn "Skipping running hotplug as requested on boot commandline." ; eend 0
-else
- if [ -r /etc/init.d/hotplug ] ; then
- einfo "Starting hotplug system in background."
- /etc/init.d/hotplug start >>$DEBUG 2>>$DEBUG &
- eend 0
- elif [ -r /etc/init.d/hotplug-light ] ; then
- einfo "Starting hotplug-light system in background."
- /etc/init.d/hotplug-light start >>$DEBUG 2>>$DEBUG &
- eend 0
+ if ! $ERROR ; then
+ einfo "Everything looks OK" ; eend 0
else
- ewarn "No hotplug system found. Should be handled by udev. Skipping execution." ; eend 0
+ eerror 'Checksum failed for theses files:' ; eend 1
+ egrep -v '(^md5sum:|OK$)' "${logfile}"
+ eerror 'Data on the medium is possibly incomplete/damaged or RAM of your system is broken.' ; eend 1
+ einfon "Hit return to continue, or press the power button to shut down system."
+ read a
fi
+
+ eoutdent
fi
}
# }}}
# }}}
# {{{ ACPI
-config_acpi_apm(){
-if [ -d /proc/acpi ]; then
- if checkbootparam 'noacpi'; then
- ewarn "Skipping ACPI Bios detection as requested via noacpi on boot commandline." ; eend 0
- elif checkbootparam 'nogrmlacpi' ; then
- ewarn "Skipping ACPI Bios detection as requested via nogrmlacpi on boot commandline." ; eend 0
- else
- einfo "ACPI Bios found, activating modules (disable via bootoption 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"
- done
- if [ -n "$found" ] ; then
- einfo "$BASE" ; eend 0
- else
- ewarn "(none)" ; eend 1
- fi
- if ! ps x | grep -q /usr/sbin/acpid ; then
- if ! [ -r /var/run/dbus/pid ] ; then
- einfo "Starting acpi daemon."
- /etc/init.d/acpid start >>$DEBUG 2>&1 ; eend $?
- else
- eerror "acpid error: it seems you are running d-bus/hal, but acpid needs to be started before d-bus."
- eerror "Solution: please activate acpid via /etc/runlevel.conf"
- eend 1
- fi
- else
- ewarn "acpi daemon already running."
- eend 0
- fi
- eoutdent
- fi
+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
-# APM
- if checkbootparam 'noapm'; then
- ewarn "Skipping APM Bios detection as requested on boot commandline." ; eend 0
+ 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"
+ done
+ if [ -n "$found" ] ; then
+ einfo "$BASE" ; eend 0
else
- modprobe apm power_off=1 >>$DEBUG 2>&1
- if [ "$?" = "0" ] ; then
- if [ -x /etc/init.d/apmd ] ;then
- einfo "APM Bios found, enabling power management functions."
- /etc/init.d/apmd start ; eend $?
- fi
- else
- eerror "Loading apm module failed." ; eend 1
- fi
+ ewarn "(none)" ; eend 1
fi
-fi
-}
-# }}}
-
-# {{{ PCMCIA Check/Setup
-# This needs to be done before other modules are being loaded (by hwsetup)
-config_pcmcia(){
-if checkbootparam 'nopcmcia'; then
- ewarn "Skipping PCMCIA detection as requested on boot commandline." ; eend 0
-else
- if /usr/sbin/laptop-detect ; then
- einfo "Detected Laptop - checking for PCMCIA." && eend 0
- modprobe pcmcia_core >>$DEBUG 2>&1
- # Try Cardbus or normal PCMCIA socket drivers
- modprobe yenta_socket >>$DEBUG 2>&1 || modprobe i82365 >>$DEBUG 2>&1 || modprobe pd6729 >>$DEBUG 2>&1 || modprobe tcic >>$DEBUG 2>&1
- if [ "$?" = "0" ]; then
- modprobe ds >>$DEBUG 2>&1
- if [ -d /proc/bus/pccard ] ; then
- if [ -x /sbin/cardmgr ] ; then
- einfo "PCMCIA found, starting cardmgr."
- cardmgr >>$DEBUG 2>&1 && sleep 6 && eend 0
- else
- eerror "No cardmgr found. Make sure package pcmciautils is installed, it should handle it instead." ; eend 1
- fi
- fi
- fi
- fi
-fi
-}
-# }}}
-
-# {{{ run software synthesizer via speakup
-config_swspeak(){
- if checkbootparam 'swspeak' ; then
- einfo "Bootoption swspeak found."
-
- if [ ! -d /proc/speakup/ ] && ! grep -q speakup_soft /proc/modules ; then
- ewarn "Kernel does not support software speakup - trying to load kernel module:" ; eend 0
- eindent
- einfo "Loading speakup_soft"
- if modprobe speakup_soft ; then
- eend 0
- else
- flitewrapper "Fatal error setting up software speakup"
- eend 1
- return 1
- fi
- eoutdent
- fi
-
- if [ -d /proc/speakup/ ] || grep -q speakup_soft /proc/modules ; then
- einfo "Kernel supports speakup." ; eend 0
- eindent
- einfo "Just run swspeak if you want to use software synthesizer via speakup."
- flitewrapper "Finished activating software speakup. Just run swspeak when booting finished."
- eoutdent
- else
- eerror "Kernel does not seem to support speakup. Skipping swspeak." ; eend 1
- flitewrapper "Kernel does not seem to support speakup. Sorry."
- fi
- fi
-}
-# }}}
-
-# {{{ support hardware synthesizer via speakup
-config_hwspeak(){
- if checkbootparam 'speakup.synth' ; then
- einfo "Bootoption speakup.synth found."
- eindent
-
- module="$(getbootparam 'speakup.synth' 2>>$DEBUG)"
- if [ -z "$module" ] ; then
- eerror "Sorry, no speakup module specified for bootoption speakup.synth."
- flitewrapper "Sorry, no speakup module specified for bootoption speakup.synth."
- else
- einfo "Trying to load $module"
- modprobe "speakup_${module}"
- eend $?
- fi
-
- if [ -d /proc/speakup/ ] || grep -q speakup /proc/modules ; then
- einfo "Kernel should support speakup now." ; eend 0
- flitewrapper "Kernel should support speakup now."
- else
- eerror "Kernel or hardware do not seem to support speakup. Skipping hwspeak." ; eend 1
- flitewrapper "Kernel or hardware do not seem to support speakup. Sorry."
- fi
-
- eoutdent
-
- # hwspeak:
- elif checkbootparam 'hwspeak' ; then
- einfo "Bootoption hwspeak found."
-
- if [ ! -d /proc/speakup/ ] && ! grep -q speakup /proc/modules ; then
- ewarn "Kernel does not support hardware speakup - trying to load kernel modules:" ; eend 0
- eindent
- if ! [ -d "/lib/modules/${KERNEL}/extra/speakup/" ] ; then
- eerror "Kernel does not provide speakup modules, sorry." ; eend 1
- else
- for module in $(find "/lib/modules/${KERNEL}/extra/speakup/" -name \*.ko | \
- sed 's#.*speakup/##g ; s#.ko$##g' | \
- grep -ve speakup_soft -ve speakup_dummy | sort -u) ; do
- einfo "Trying to load $module"
- modprobe $module
- eend $?
- done
- fi
- eoutdent
- fi
-
- if [ -d /proc/speakup/ ] || grep -q speakup /proc/modules ; then
- einfo "Kernel should support speakup now." ; eend 0
- flitewrapper "Kernel should support speakup now."
- else
- eerror "Kernel or hardware do not seem to support speakup. Skipping hwspeak." ; eend 1
- flitewrapper "Kernel or hardware do not seem to support speakup. Sorry."
- fi
- fi
-}
-# }}}
-
-# {{{ Check for blind option or brltty
-config_blind(){
-BLIND=""
-checkbootparam 'blind' && BLIND="yes"
-BRLTTY="$(getbootparam 'brltty' 2>>$DEBUG)"
-
-if [ -n "$BLIND" -o -n "$BRLTTY" ]; then
- if [ -x /sbin/brltty ]; then
- # Blind option detected, start brltty now.
- # modprobe serial_core parport_serial generic_serial && echo "done"
- CMD=brltty
- BRLTYPE=""
- BRLDEV=""
- BRLTEXT=""
- if [ -n "$BRLTTY" ]; then
- # Extra options
- BRLTYPE="${BRLTTY%%,*}"
- R="${BRLTTY#*,}"
- if [ -n "$R" -a "$R" != "$BRLTTY" ]; then
- BRLTTY="$R"
- BRLDEV="${BRLTTY%%,*}"
- R="${BRLTTY#*,}"
- if [ -n "$R" -a "$R" != "$BRLTTY" ]; then
- BRLTTY="$R"
- BRLTEXT="${BRLTTY%%,*}"
- R="${BRLTTY#*,}"
- fi
- fi
- fi
- [ -n "$BRLTYPE" ] && CMD="$CMD -b $BRLTYPE"
- [ -n "$BRLDEV" ] && CMD="$CMD -d $BRLDEV"
- [ -n "$BRLTEXT" ] && CMD="$CMD -t $BRLTEXT"
- einfo "Starting braille-display manager."
-# ( exec $CMD & )
- ( sh -c "$CMD" & )
- sleep 2 && BLINDSOUND="yes"
- eend 0
- fi
-fi
-}
-# }}}
-
-# {{{ Interactive configuration
-config_interactive(){
- ewarn "config_interactive is deprecated nowadays."
- ewarn "Please set CONFIG_INTERACTIVE='no' in /etc/grml/autoconfig" ; eend 0
-}
-# }}}
-
-# {{{ AGP
-config_agp(){
-if checkbootparam 'forceagp' ; then
-# Probe for AGP. Hope this can fail safely
- grep -q "AGP" "/proc/pci" 2>>$DEBUG && { modprobe agpgart || modprobe agpgart agp_try_unsupported=1; } >>$DEBUG 2>&1 && einfo "AGP bridge detected." ; eend 0
-fi
-}
-# }}}
-
-# {{{ automount(er)
-config_automounter(){
-if checkbootparam 'automounter' ; then
- RUNLEVEL="$(runlevel)"
- AUTOMOUNTER=""
- [ -x /etc/init.d/autofs ] && [ "$RUNLEVEL" != "N 1" ] && [ "$RUNLEVEL" != "N S" ] && AUTOMOUNTER="yes"
-
-addautomount(){
-# /dev/ice options
- d="${1##*/}"
- if [ -n "$AUTOMOUNTER" ]; then
- [ -d "/mnt/$d" -a ! -L "/mnt/$d" ] && rmdir /mnt/$d
- [ -d "/mnt/auto/$d" ] || mkdir -p "/mnt/auto/$d"
- [ -L "/mnt/$d" ] || ln -s "/mnt/auto/$d" "/mnt/$d"
- anew="$d -fstype=auto,$2 :$i"
- grep -q "$anew" "/etc/auto.mnt" || echo "$anew" >> /etc/auto.mnt
- AUTOMOUNTS="$AUTOMOUNTS $d"
- new="$1 /mnt/auto/$d auto users,noauto,exec,$2 0 0"
+ if ! pgrep acpid >/dev/null ; then
+ einfo "Starting acpi daemon."
+ /etc/init.d/acpid start >>$DEBUG 2>&1 ; eend $?
else
- [ -d /mnt/$d ] && mkdir -p /mnt/$d
- new="$1 /mnt/$d auto users,noauto,exec,$2 0 0"
+ ewarn "acpi daemon already running."
+ eend 0
fi
- grep -q "$new" "/etc/fstab" || echo "$new" >> /etc/fstab
-}
-
- AUTOMOUNTS="floppy cdrom"
-# Add new devices to /etc/fstab and /etc/auto.mnt
- for i in /dev/cdrom?*; do
- if [ -L $i ]; then
- addautomount "$i" "ro"
- fi
- done
-fi
-
-if [ -n "$AUTOMOUNTER" ]; then
-# Check for floppy dir, reinstall with automounter
- [ -d /mnt/floppy -a ! -L /mnt/floppy ] && rmdir /mnt/floppy
- [ -d /mnt/auto/floppy ] || mkdir -p /mnt/auto/floppy
- [ -L /mnt/floppy ] || ln -s /mnt/auto/floppy /mnt/floppy
- [ -d /mnt/cdrom -a ! -L /mnt/cdrom ] && rmdir /mnt/cdrom
- [ -d /mnt/auto/cdrom ] || mkdir -p /mnt/auto/cdrom
- [ -L /mnt/cdrom ] || ln -s /mnt/auto/cdrom /mnt/cdrom
- rm -f /etc/fstab.new
-# Replace paths from bootfloppy
- sed 's|/mnt/cdrom|/mnt/auto/cdrom|g;s|/mnt/floppy|/mnt/auto/floppy|g' /etc/fstab > /etc/fstab.new
- mv -f /etc/fstab.new /etc/fstab
-# Start automounter now
- einfo "Starting automounter for ${AUTOMOUNTS}."
- /etc/init.d/autofs start >>$DEBUG ; eend $?
+ eoutdent
fi
}
# }}}
check_partitions >/dev/null 2>&1 # avoid output "check_partitions:3: read-only file system"
# }}}
+# {{{ Start brltty
+config_brltty() {
+ if checkbootparam 'brltty' ; then
+ [ -x /lib/brltty/brltty.sh ] && /lib/brltty/brltty.sh
+ fi
+}
+# }}}
+
# {{{ Enable DMA for all IDE drives now if not disabled
# Notice: Already done by linuxrc, but make sure it's done also on harddisk-installed systems
config_dma(){
checkbootparam 'anyswap' && export ANYSWAP='yes' || export ANYSWAP=""
fi
-if checkbootparam 'nofstab' || checkbootparam 'forensic' ; then
- ewarn "Skipping /etc/fstab creation as requested on boot commandline." ; eend 0
-else
- einfo "Scanning for harddisk partitions and creating /etc/fstab. (Disable this via boot option: nofstab)"
- iszsh && setopt nonomatch
- if [ -x /usr/sbin/rebuildfstab ] ; then
- config_userfstab || fstabuser=grml
- /usr/sbin/rebuildfstab -r -u $fstabuser -g $fstabuser ; eend $?
- else
- ewarn "Command rebuildfstab not found. Install package grml-rebuildfstab." ; eend 1
- fi
-fi # checkbootparam nofstab/forensic
-
# Scan for swap, config, homedir - but only in live-mode
if [ -z "$INSTALLED" ] ; then
[ -z "$NOSWAP" ] && einfo "Searching for swap partition(s) as requested."
}
# }}}
-# {{{ Fat-Client-Version: DHCP Broadcast for IP address
-config_dhcp(){
-if checkbootparam 'nodhcp'; then
- ewarn "Skipping DHCP broadcast/network detection as requested on boot commandline." ; eend 0
-else
- NETDEVICES="$(awk -F: '/eth.:|tr.:|wlan.:/{print $1}' /proc/net/dev 2>>$DEBUG)"
- rm -rf /etc/network/status ; mkdir -p /etc/network/status
- for DEVICE in `echo "$NETDEVICES"` ; do
- einfo "Network device ${WHITE}${DEVICE}${NORMAL} detected, DHCP broadcasting for IP. (Backgrounding)"
- trap 2 3 11
- ifconfig $DEVICE up >>$DEBUG 2>&1
- ( pump -i $DEVICE --script=/usr/lib/grml-autoconfig/pump-runparts >>$DEBUG 2>&1 && echo finished_running_pump > /etc/network/status/$DEVICE ) &
- trap "" 2 3 11
- sleep 1
- eend 0
- done
- if [ -n "$INSTALLED" ] ; then
- ewarn 'If you want to disable automatic DHCP requests set CONFIG_DHCP=no in /etc/grml/autoconfig.'
- eend 0
- fi
-fi
-}
-# }}}
-
# {{{ CPU-detection
config_cpu(){
if checkbootparam 'nocpu'; then
ewarn "Skipping CPU detection as requested on boot commandline." ; eend 0
+ return 0
+fi
+
+if [[ $(grep -c processor /proc/cpuinfo) -gt 1 ]] ; then
+ einfo "Found CPU:"
+ CPU=$(awk -F: '/^processor/{printf " Processor"$2" is"};/^model name/{printf $2};/^vendor_id/{printf vendor};/^cpu MHz/{printf " %dMHz",int($2)};/^cache size/{printf ","$2" Cache"};/^$/{print ""}' /proc/cpuinfo 2>>$DEBUG)
+ echo $CPU | sed 's/ \{1,\}/ /g'
+ eend 0
else
- # check module dependencies
- cpufreq_check() {
- if ! [ -e /lib/modules/${KERNEL}/kernel/arch/x86/kernel/cpu/cpufreq ] ; then
- if [ -e /lib64 ] ; then
- [ -e /lib/modules/${KERNEL}/kernel/arch/x86_64/kernel/cpufreq ] || return 1
+ einfo "Found CPU: `awk -F: '/^processor/{printf " Processor"$2" is"};/^model name/{printf $2};/^vendor_id/{printf vendor};/^cpu MHz/{printf " %dMHz",int($2)};/^cache size/{printf ","$2" Cache"};/^$/{print ""}' /proc/cpuinfo 2>>$DEBUG` " ; eend 0
+fi
+
+# no cpufreq setup inside VirtualBox
+if $VIRTUALBOX ; then
+ einfo 'Virtual Box detected, skipping cpufreq setup.' ; eend 0
+ return 0
+fi
+
+if [ -x /etc/init.d/loadcpufreq ] ; then
+ einfo "Trying to set up cpu frequency scaling:"
+ eindent
+ SKIP_CPU_GOVERNOR=''
+ LOADCPUFREQ=$(mktemp)
+ /etc/init.d/loadcpufreq start >"$LOADCPUFREQ" 2>&1 ; RC=$?
+ if grep -q FATAL "$LOADCPUFREQ" ; then
+ eindent
+ SKIP_CPU_GOVERNOR=1
+ oldIFS="$IFS"
+ IFS="
+"
+ for line in $(grep FATAL "$LOADCPUFREQ" | sed 's/.*FATAL: //; s/ (.*)//') ; do
+ eerror "$line" ; eend $RC
+ done
+ IFS="$oldIFS"
+ eoutdent
+ elif grep -q done "$LOADCPUFREQ" ; then
+ MODULE=$(grep done "$LOADCPUFREQ" | sed 's/.*done (\(.*\))./\1/')
+ if [ -n "$MODULE" -a "$MODULE" != none ]; then
+ einfo "Loading cpufreq kernel module $MODULE" ; eend 0
else
- [ -e /lib/modules/${KERNEL}/kernel/arch/i386/kernel/cpu/cpufreq -o ! -e /lib/modules/${KERNEL}/kernel/drivers/cpufreq ] || return 1
+ SKIP_CPU_GOVERNOR=1
+ ewarn "Could not find an appropriate kernel module for cpu frequency scaling." ; eend 1
fi
fi
- }
- if [[ `grep -c processor /proc/cpuinfo` -gt 1 ]] ; then
- einfo "Detecting CPU:"
- CPU=$(awk -F: '/^processor/{printf " Processor"$2" is"};/^model name/{printf $2};/^vendor_id/{printf vendor};/^cpu MHz/{printf " %dMHz",int($2)};/^cache size/{printf ","$2" Cache"};/^$/{print ""}' /proc/cpuinfo 2>>$DEBUG)
- echo $CPU | sed 's/ \{1,\}/ /g'
- eend 0
- else
- einfo "Detecting CPU: `awk -F: '/^processor/{printf " Processor"$2" is"};/^model name/{printf $2};/^vendor_id/{printf vendor};/^cpu MHz/{printf " %dMHz",int($2)};/^cache size/{printf ","$2" Cache"};/^$/{print ""}' /proc/cpuinfo 2>>$DEBUG` " ; eend 0
- fi
+ rm -f $LOADCPUFREQ
- # Disclaimer: sorry for the tons of if/then/else... but this makes sure we use:
- # * it only if we have the according kernel modules available
- # * cpufreq not inside Virtual Box
- # * current version of /etc/init.d/loadcpufreq from Debian (to stay in sync)
- # -> parse output of the initscript and output it according to our look'n'feel
- # * our own cpufreq-detect.sh if /etc/init.d/loadcpufreq isn't present
- if ! cpufreq_check ; then
- ewarn "Skipping cpufreq setup as module dependencies are not fulfilled." ; eend 1
- else
- # Virtual Box supports ACPI and laptop-detect would return with '0', so check for it:
- if [ -r /proc/acpi/battery/BAT0/info ] ; then
- if grep -q 'OEM info: innotek' /proc/acpi/battery/BAT0/info ; then
- einfo 'Virtual Box detected, skipping cpufreq setup.' ; eend 0
- return 0
- fi
+ if [ -z "$SKIP_CPU_GOVERNOR" ] ; then
+ if grep -vq ondemand /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors; then
+ einfo "Loading cpufreq_ondemand"
+ modprobe cpufreq_ondemand
+ eend $?
fi
- einfo "Trying to set up cpu frequency scaling:"
- eindent
- if [ -x /etc/init.d/loadcpufreq ] ; then
- SKIP_CPU_GOVERNOR=''
- LOADCPUFREQ=$(mktemp)
- /etc/init.d/loadcpufreq start >"$LOADCPUFREQ" 2>&1 ; RC=$?
- if grep -q FATAL "$LOADCPUFREQ" ; then
- eindent
- SKIP_CPU_GOVERNOR=1
- oldIFS="$IFS"
- IFS="
-"
- for line in $(grep FATAL "$LOADCPUFREQ" | sed 's/.*FATAL: //; s/ (.*)//') ; do
- eerror "$line" ; eend $RC
- done
- IFS="$oldIFS"
- eoutdent
- elif grep -q done "$LOADCPUFREQ" ; then
- MODULE=$(grep done "$LOADCPUFREQ" | sed 's/.*done (\(.*\))./\1/')
- if [ -n "$MODULE" -a "$MODULE" != none ]; then
- einfo "Loading cpufreq kernel module $MODULE" ; eend 0
- else
- ewarn "Could not find an appropriate kernel module for cpu frequency scaling." ; eend 1
- fi
- fi
- rm -f $LOADCPUFREQ
- elif [ -r /usr/bin/cpufreq-detect.sh ] ; then
- . /usr/bin/cpufreq-detect.sh
- if [ -n "$MODULE" -a "$MODULE" != none ]; then
- einfo "Loading modules ${MODULE}"
- modprobe "$MODULE" >>$DEBUG || modprobe "$MODULE_FALLBACK" >>$DEBUG
- RC=$?
- if [[ $RC == 0 ]]; then
- eend 0
- else
- SKIP_CPU_GOVERNOR=1
- eend $RC
- fi
- else
- ewarn "Could not detect an appropriate CPU for use with cpu frequency scaling - skipping."
- eend 1
- fi # $MODULE
- fi # loadcpufreq
-
- if [ -z "$SKIP_CPU_GOVERNOR" ] ; then
- einfo "Loading cpufreq_ondemand, setting ondemand governor"
- if modprobe cpufreq_ondemand ; RC=$? ; then
- for file in $(find /sys/devices/system/cpu/ -name scaling_governor 2>/dev/null) ; do
- echo ondemand > $file
- done
- fi
- eend $RC
- fi # cpu-governor
- eoutdent
+ einfo "Setting ondemand governor"
+ RC=0
+ for file in $(find /sys/devices/system/cpu/ -name scaling_governor 2>/dev/null) ; do
+ echo ondemand > $file || RC=1
+ done
+ eend $RC
+ fi # cpu-governor
- fi # cpufreq_check
-fi # checkbootparam nocpu
+ eoutdent
+fi
}
# }}}
# {{{ autostart of ssh
config_ssh(){
if checkbootparam 'ssh' ; then
- SSH_PASSWD=''
- SSH_PASSWD="$(getbootparam 'ssh' 2>>$DEBUG)"
- einfo "Bootoption ssh found, trying to set password for user grml."
- eindent
- if [ -z "$SSH_PASSWD" ] ; then
- if [ -x /usr/bin/apg ] ; then
- SSH_PASSWD="$(apg -M NL -a 0 -m 8 -x 12 -n 1)"
- elif [ -x /usr/bin/gpw ] ; then
- SSH_PASSWD="$(gpw 1)"
- elif [ -x /usr/bin/pwgen ] ; then
- SSH_PASSWD="$(pwgen -1 8)"
- elif [ -x /usr/bin/hexdump ] ; then
- SSH_PASSWD="$(dd if=/dev/urandom bs=14 count=1 2>/dev/null | hexdump | awk '{print $3 $4}')"
- elif [ -n "$RANDOM" ] ; then
- SSH_PASSWD="grml${RANDOM}"
- else
- SSH_PASSWD=''
- eerror "Empty passphrase and neither pwgen nor hexdump nor \$RANDOM found. Skipping."
- eend 1
- fi
+ local PASSWD
+ PASSWD="$(getbootparam 'ssh' 2>>$DEBUG)"
- if [ -n "$SSH_PASSWD" ] ; then
- ewarn "No given password for ssh found. Using random password: $SSH_PASSWD" ; eend 0
- fi
+ config_userlocal
+ einfo "Bootoption ssh found, trying to set password for root and user $localuser"
+ [ -z "$localuser" ] && eend 1
+
+ eindent
+ if [ -z "$PASSWD" ] ; then
+ set_passwd && ewarn "No given password for found. Using random password: $PASSWD" && eend 0
fi
eoutdent
- # finally check if we have a password we can use:
- if [ -n "$SSH_PASSWD" ] ; then
- # chpasswd sucks, seriously.
+ if [ -n "$PASSWD" ] ; then
+ chpass_options=""
if chpasswd --help 2>&1 | grep -q -- '-m,' ; then
- echo "grml:$SSH_PASSWD" | chpasswd -m
- else
- echo "grml:$SSH_PASSWD" | chpasswd
+ chpass_options="-m"
fi
+
+ echo "$localuser:$PASSWD" | chpasswd $chpass_options
+ echo "root:$PASSWD" | chpasswd $chpass_options
+
+ eindent
+ ewarn "Warning: please change the password for root and user $localuser as soon as possible!"
+ eoutdent
fi
- einfo 'Starting secure shell server in background.'
+ 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 &
eend $?
- eindent
- ewarn 'Warning: please change the password for user grml as soon as possible!'
- eoutdent
fi
}
+
+# }}}
+
+# {{{ display hostkeys of SSH server
+config_display_ssh_fingerprints() {
+ if ! ls /etc/ssh/ssh_host_\*_key >/dev/null 2>&1 ; then
+ return 0 # no SSH host keys present
+ fi
+
+ einfo "SSH key fingerprints:"
+ for file in /etc/ssh/ssh_host_*_key ; do
+ einfon
+ ssh-keygen -l -f $file
+ done | column -t
+ eend $?
+}
# }}}
# {{{ autostart of x11vnc
config_vnc(){
-
-USER=grml # TODO: make it dynamically configurable
if checkbootparam 'vnc' ; then
+ config_userlocal
VNC_PASSWD=''
VNC_PASSWD="$(getbootparam 'vnc' 2>>$DEBUG)"
- einfo "Bootoption vnc found, trying to set password for user $USER."
+ einfo "Bootoption vnc found, trying to set password for user $localuser."
eindent
if [ -z "$VNC_PASSWD" ] ; then
if [ -x /usr/bin/apg ] ; then
elif [ -x /usr/bin/hexdump ] ; then
VNC_PASSWD="$(dd if=/dev/urandom bs=14 count=1 2>/dev/null | hexdump | awk '{print $3 $4}')"
elif [ -n "$RANDOM" ] ; then
- VNC_PASSWD="${USER}${RANDOM}"
+ VNC_PASSWD="${localuser}${RANDOM}"
else
VNC_PASSWD=''
eerror "Empty passphrase and neither pwgen nor hexdump nor \$RANDOM found. Skipping."
# finally check if we have a password we can use:
if [ -n "$VNC_PASSWD" ] ; then
- VNCDIR="/home/${USER}/.vnc"
+ VNCDIR="/home/${localuser}/.vnc"
[ -d "$VNCDIR" ] || mkdir "$VNCDIR"
if [ ! -x /usr/bin/x11vnc ] ; then
eend 1
else
/usr/bin/x11vnc -storepasswd "$VNC_PASSWD" "$VNCDIR"/passwd ; eend $?
- /bin/chown -R "$USER": "$VNCDIR"
+ /bin/chown -R "$localuser": "$VNCDIR"
fi
fi
+ if checkbootparam 'vnc_connect' ; then
+ VNC_CONNECT=''
+ VNC_CONNECT="$(getbootparam 'vnc_connect' 2>>$DEBUG)"
+ einfo "Bootoption vnc_connect found, will start vnc with connect to $VNC_CONNECT."
+ #store the options in a file
+ VNCDIR="/home/${localuser}/.vnc"
+ [ -d "$VNCDIR" ] || mkdir "$VNCDIR"
+ echo " --connect $VNC_CONNECT " >> $VNCDIR/options
+ fi
fi
}
# }}}
-# {{{ set password for user grml
+# {{{ set password for root and default user
config_passwd(){
if checkbootparam 'passwd' >>$DEBUG 2>&1; then
- einfo "Bootoption passwd found."
+ local PASSWD
PASSWD="$(getbootparam 'passwd' 2>>$DEBUG)"
- if [ -n "$PASSWD" ] ; then
- echo "grml:$PASSWD" | chpasswd -m ; eend $?
- else
- eerror "No given password for ssh found. Autostart of SSH will not work." ; eend 1
- fi
- eindent
- ewarn "Warning: please change the password for user grml set via bootparameter as soon as possible!"
- eoutdent
-fi
-}
-# }}}
-# {{{ Check for persistent homedir option and eventually mount /home from there, or use a loopback file.
-config_homedir(){
-if checkbootparam 'home' ; then
- ewarn "The \"home\" bootoption is deprecated, please use the persistency feature instead."; eend 1
-fi
-}
-# }}}
-
-# {{{ Sound
-
-config_mixer(){
-if ! [ -x /usr/bin/amixer ] ; then
- eerror "amixer binary not available. Can not set sound volumes therefore." ; eend 1
-else
+ config_userlocal
+ einfo "Bootoption passwd found, trying to set password for root and user $localuser"
+ [ -z "$localuser" ] && eend 1
- if ! [ -r /proc/asound/cards ] ; then
- ewarn "No soundcard present, skipping mixer settings therefore." ; eend 0
- return
+ eindent
+ if [ -z "$PASSWD" ] ; then
+ set_passwd && ewarn "No given password for found. Using random password: $PASSWD" && eend 0
fi
+ eoutdent
- if checkbootparam 'vol' ; then
- VOL="$(getbootparam 'vol' 2>>$DEBUG)"
- if [ -z "$VOL" ] ; then
- eerror "Bootoption vol found but no volume level/parameter given. Using defaults." ; eend 1
- VOL='75' # default
+ if [ -n "$PASSWD" ] ; then
+ chpass_options=""
+ if chpasswd --help 2>&1 | grep -q -- '-m,' ; then
+ chpass_options="-m"
fi
- else
- VOL='75' # default
+
+ echo "$localuser:$PASSWD" | chpasswd $chpass_options
+ echo "root:$PASSWD" | chpasswd $chpass_options
+
+ eindent
+ ewarn "Warning: please change the password for root and user $localuser as soon as possible!"
+ eoutdent
fi
- if checkbootparam 'nosound' ; then
- einfo "Muting sound devices on request."
+fi
- fix_ibm_sound 0
- # mute the master, this should be sufficient
- ERROR=$(amixer -q set Master mute)
- RC=$?
+if checkbootparam 'encpasswd' >>$DEBUG 2>&1; then
+ local PASSWD
+ PASSWD="$(getbootparam 'encpasswd' 2>>$DEBUG)"
- if [ -n "$ERROR" ] ; then
- eindent
- eerror "Problem muting sound devices: $ERROR"
- eoutdent
- fi
- eend $RC
- elif [ -z "$INSTALLED" ]; then
- einfo "Setting mixer volumes to level ${WHITE}${VOL}${NORMAL}."
+ if [ -z "$PASSWD" ] ; then
+ eerror "No hashed password found, can not set password."
+ eend 1
+ return
+ fi
- fix_ibm_sound ${VOL}
+ config_userlocal
+ einfo "Bootoption encpasswd found, trying to set hashed password for root and user $localuser"
+ [ -z "$localuser" ] && eend 1
- # by default assume '0' as volume for microphone:
- if checkbootparam 'micvol' ; then
- MICVOL="$(getbootparam 'micvol' 2>>$DEBUG)"
- else
- MICVOL=0
- fi
+ if [ -n "$PASSWD" ] ; then
+ chpass_options="-e"
- # finally set the volumes:
- RC=0
- for CONTROL in Master PCM ; do
- amixer -q set ${CONTROL} ${VOL}%
- if [ $? -ne 0 ] ; then RC=$? ; fi
- done
- # dont know how to set microphone volume for all soundcards with amixer,
- # so use aumix instead :/
- if [ ${MICVOL} -ne 0 -a -x /usr/bin/aumix ] ; then
- aumix -m $MICVOL &>/dev/null
- if [ $? -ne 0 ] ; then RC=$? ; fi
- fi
+ echo "$localuser:$PASSWD" | chpasswd $chpass_options
+ echo "root:$PASSWD" | chpasswd $chpass_options
- eend $RC
+ eindent
+ ewarn "Warning: please change the password for root and user $localuser as soon as possible!"
+ eoutdent
fi
fi
}
+# }}}
-# on some IBM notebooks the front control has to be toggled
-fix_ibm_sound() {
- if [ -z $1 ] ; then
- return
- fi
+# {{{ Sound
+config_mixer () {
+ if ! [ -x /usr/bin/amixer ] ; then
+ eerror "amixer binary not available. Can not set sound volumes therefore."
+ eend 1
+ else
+ if ! [ -r /proc/asound/cards ] ; then
+ ewarn "No soundcard present, skipping mixer settings therefore."
+ eend 0
+ return
+ fi
- VOL=${1}
+ for card in $(cat /proc/asound/cards| grep -e '^\s*[0-9]' | awk '{print $1}') ; do
+ einfo "Configuring soundcard \"$(awk -F\[ '/^ *'$card' \[/{ FS=" "; $0=$2; print $1}' < /proc/asound/cards)\""
+ eindent
- if [ -x /usr/bin/amixer ] ; then
- if amixer -q get Front >/dev/null 2>>$DEBUG ; then
- amixer -q set Front unmute &>/dev/null
- amixer -q set Front ${VOL}% &>/dev/null
- fi
- fi
+ if checkbootparam 'vol' ; then
+ VOL="$(getbootparam 'vol' 2>>$DEBUG)"
+ if [ -z "$VOL" ] ; then
+ eerror "Bootoption vol found but no volume level/parameter given. Using defaults (75%)."
+ VOL='75'
+ eend 1
+ fi
+ else
+ VOL='75'
+ fi
+
+ if checkbootparam 'nosound' ; then
+ einfo "Muting sound devices on request."
+ ERROR=$(amixer -q set Master mute)
+ RC=$?
+ if [ -n "$ERROR" ] ; then
+ eindent
+ eerror "Problem muting sound devices: $ERROR"
+ eoutdent
+ fi
+ eend $RC
+ elif [ -z "$INSTALLED" ] ; then
+ einfo "Setting mixer volumes to level ${WHITE}${VOL}${NORMAL}."
+
+ if checkbootparam 'micvol' ; then
+ MICVOL="$(getbootparam 'micvol' 2>>$DEBUG)"
+ einfo "Setting microphone to ${WHITE}${MICVOL}${NORMAL}."
+ else
+ MICVOL=0
+ fi
+
+ CONTROLS=$(amixer -c $card scontrols | awk -F"Simple mixer control " '{print $2}')
+ IFSOLD=${IFS:-}
+ IFS='
+'
+ for CONTROL in ${=CONTROLS} ; do
+ # such devices can not be controlled with amixer ... unmute
+ [[ "$CONTROL" == *Console* ]] && continue
+
+ if ! echo "${CONTROL}" | grep -q -i "mic" ; then
+ if amixer -c $card sget "${CONTROL}" | grep -q 'Capabilities:.*pswitch' ; then
+ amixer -c $card -q set "${CONTROL}" unmute
+ fi
+ if amixer -c $card sget "${CONTROL}" | grep -q -P 'Capabilities:.*(pvolume| volume)' ; then
+ amixer -c $card -q set "${CONTROL}" "${VOL}"%
+ fi
+ fi
+
+ if [ ${MICVOL} -ne 0 ] ; then
+ if amixer -c $card sget "${CONTROL}" | grep -q 'Capabilities:.*cswitch' ; then
+ amixer -c $card -q set "${CONTROL}" unmute
+ fi
+ if amixer -c $card sget "${CONTROL}" | grep -q 'Capabilities:.*cvolume' ; then
+ amixer -c $card -q set "${CONTROL}" $MICVOL%
+ fi
+ eend $?
+ fi
+ done
+ IFS=$IFSOLD
+ fi # checkbootparam 'nosound'
+ eoutdent
+ done
+ fi
}
# }}}
}
# }}}
-# {{{ keyboard add-ons
-config_setkeycodes(){
-if checkbootparam 'setkeycodes' ; then
- einfo "Setting keycodes as requested via bootparameter 'setkeycodes'."
- # MS MM keyboard add-on
- # fix
- setkeycodes e001 126 &>/dev/null
- setkeycodes e059 127 &>/dev/null
- # fn keys
- setkeycodes e03b 59 &>/dev/null
- setkeycodes e008 60 &>/dev/null
- setkeycodes e007 61 &>/dev/null
- setkeycodes e03e 62 &>/dev/null
- setkeycodes e03f 63 &>/dev/null
- setkeycodes e040 64 &>/dev/null
- setkeycodes e041 65 &>/dev/null
- setkeycodes e042 66 &>/dev/null
- setkeycodes e043 67 &>/dev/null
- setkeycodes e023 68 &>/dev/null
- setkeycodes e057 87 &>/dev/null
- setkeycodes e058 88 &>/dev/null
- # hp keycodes
- setkeycodes e00a 89 e008 90 &>/dev/null
- eend 0
-fi
-}
-# }}}
-
# {{{ wondershaper
config_wondershaper(){
if checkbootparam 'wondershaper' ; then
SERVICE="$(getbootparam 'services' 2>>$DEBUG)"
SERVICELIST=$(echo "$SERVICE" | sed 's/,/\\n/g')
SERVICENL=$(echo "$SERVICE" | sed 's/,/ /g')
- einfo "Starting service(s) ${SERVICENL} in background."
for service in $(echo -e $SERVICELIST) ; do
- /etc/init.d/${service} start >>$DEBUG &
+ # support running (custom) init scripts in non-blocking mode
+ # 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
+ else
+ einfo "Starting service ${service} in background."
+ /etc/init.d/${service} start >>$DEBUG &
+ fi
done
- [ "$?" == "0" ] ; eend $?
+ eend $?
fi
}
# }}}
if get_remote_file ${CONFIG} ${SCRIPTFILE} ; then
chmod +x ${SCRIPTFILE}
- einfo "Running ${WHITE}${SCRIPTFILE}${NORMAL}:" && ${SCRIPTFILE} ; eend $?
+ einfo "Running ${WHITE}${SCRIPTFILE}${NORMAL}:" && NETSCRIPT=${CONFIG} ${SCRIPTFILE} ; eend $?
fi
fi
}
# }}}
-# {{{ blindsound
-config_blindsound(){
- if checkbootparam 'blind' ; then
- beep
- flitewrapper "welcome to the gremel system"
- fi
-}
-# }}}
+# {{{ stats
+config_stats() {
+ if ! checkbootparam 'nostats' ; then
+ BASE_URL="http://stats.grml.org/report/"
+ ACTION_NAME=Boot
+
+ HOST_ID=$(cat /proc/sys/kernel/random/boot_id)
+
+ grep -q " lm " /proc/cpuinfo && HAS_64BIT="1" || HAS_64BIT="0"
+ DATE_STRING=$(date +'h=%H&m=%M&s=%S')
+ [ -e /etc/grml_version ] && VERSION=$(cat /etc/grml_version) || \
+ VERSION=$(lsb_release -d | awk -F: '{gsub(/^[ \t]+/, "", $2); print $2}')
+
+ PARAMS="$( echo "$CMDLINE" | sed -e 's/=[^ ]*/=x/g' | tr " " "\n"|sort|tr "\n" " " )"
+
+ echo "$CMDLINE" | grep -q -e "fetch" -e "nfsroot" && BOOT="remote"
+ [ -z "$BOOT" ] && BOOT="local"
-# {{{ welcome sound
-config_welcome(){
- if checkbootparam 'welcome' ; then
- flitewrapper "welcome to the gremel system"
+ ADDITIONAL_PARAMS=""
+ ( [ -n "$COLUMNS" ] && [ -n "$LINES" ] ) && \
+ ADDITIONAL_PARAMS="$ADDITIONAL_PARAMS&res=$((COLUMNS * 8))x$((LINES * 16))"
+
+ URI='$BASE_URL?action=${ACTION_NAME}\&$DATE_STRING\&unique_id=${HOST_ID}\&support_64bit=$HAS_64BIT\&version=$VERSION\&bootup=$BOOT\¶ms=$PARAMS$ADDITIONAL_PARAMS'
+
+ get_remote_file "$URI" "/dev/null" >/dev/null 2>&1 &!
fi
}
# }}}
}
# }}}
-# {{{ create all /mnt-directories
-create_mnt_dirs(){
- ewarn "create_mnt_dirs is deprecated as grml-rebuildfstab does all we need."
- ewarn "Please set CONFIG_CREATE_MNT_DIRS='no' in /etc/grml/autoconfig" ; eend 0
-}
-# }}}
-
# {{{ 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
- if [ -x $(which X) ] ; then
+ if [ -x "$(which X)" ] ; then
if [ -z "$INSTALLED" ] ; then
WINDOWMANAGER="$(getbootparam 'startx' 2>>$DEBUG)"
if [ -z "$WINDOWMANAGER" ] ; then
- einfo "No window manager specified. Taking ${WHITE}wm-ng${NORMAL} as default." && eend 0
- WINDOWMANAGER="wm-ng"
+ einfo "No window manager specified. Using default one." && eend 0
else
einfo "Window manager ${WHITE}${WINDOWMANAGER}${NORMAL} found as bootoption." && eend 0
fi
- einfo "Changing to runlevel 5 for starting grml-x ${WINDOWMANAGER}. Just exit X windows system to get full featured consoles."
- config_userfstab || fstabuser='grml'
+ 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
#!/bin/sh
-# su - $fstabuser -c 'grml-x "$WINDOWMANAGER"'
-sudo -u $fstabuser -i /usr/bin/grml-x $WINDOWMANAGER >>$DEBUG
+su $localuser -c "/usr/bin/grml-x ${WINDOWMANAGER}"
EOF
chmod 755 /etc/init.d/xstartup
# adjust inittab for xstartup
if grep -q '^6:' /etc/inittab ; then
- sed -i 's|^6:.*|6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /bin/zsh"|' /etc/inittab
+ 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
else # just append tty6 to inittab if no definition is present:
- echo '6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /bin/zsh"' >> /etc/inittab
+ 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
fi
/sbin/telinit q ; eend $?
eerror " -> Please use something like xdm, gdm or kdm for starting X on a harddisk system!" ; eend 1
fi
else
- eerror "/usr/X11R6/bin/X is not present on this grml flavour."
+ eerror "/usr/bin/X is not present on this grml flavour."
eerror " -> Boot parameter startx does not work therefore." ; eend 1
fi
fi
# foo, even if a GRMLCFG partition is present.
DCSDIR=""
DCSMP="/mnt/grml"
+# autoconfig, see issue673
+GRMLCFG="$(getbootparam 'autoconfig' 2>>$DEBUG)"
+[ -n "$GRMLCFG" ] || GRMLCFG="GRMLCFG"
if checkbootparam 'noautoconfig' || checkbootparam 'forensic' ; then
- ewarn "Skipping running automount of device(s) labeled GRMLCFG as requested." ; eend 0
+ DCSDIR="${LIVECD_PATH}" # set default so it works for "scripts" boot option as expected
+ ewarn "Skipping running automount of device(s) labeled $GRMLCFG as requested." ; eend 0
else
if [ -z "$INSTALLED" ] ; then
if checkbootparam 'myconfig' ; then
eerror "Error: No device for bootoption myconfig provided." ; eend 1
fi # [ -z "$DCSDEVICE" ]
elif checkvalue $CONFIG_MYCONFIG; then # checkbootparam myconfig
- einfo "Searching for device(s) labeled with GRMLCFG. (Disable this via boot option: noautoconfig)" ; eend 0
+ einfo "Searching for device(s) labeled with $GRMLCFG. (Disable this via boot option: noautoconfig)" ; eend 0
eindent
- # We do need the following fix so floppy disk is available to blkid in any case :-/
- if [ -r /dev/fd0 ] ; then
- einfo "Floppy device detected. Trying to access floppy disk."
- if timeout 4 dd if=/dev/fd0 of=/dev/null bs=512 count=1 >>$DEBUG 2>&1 ; then
- blkid /dev/fd0 >>$DEBUG 2>&1
- fi
+ DCSDEVICE=$(blkid -t LABEL=$GRMLCFG | head -1 | awk -F: '{print $1}')
+
+ modprobe 9p 2>/dev/null || true
+ if [ -z "$DCSDEVICE" ] && grep -q 9p /proc/filesystems ; then
+ if grep -q "$GRMLCFG" /sys/bus/virtio/devices/*/mount_tag 2>/dev/null ; then
+ einfo "Found 9p-virtio fs with mount_tag $GRMLCFG"
+ DCSDEVICE="$GRMLCFG"
+ MOUNTOPTIONS="ro,trans=virtio"
+ DCSFS="9p"
+ fi
fi
- DCSDEVICE=$(blkid -t LABEL=GRMLCFG | head -1 | awk -F: '{print $1}')
+
if [ -n "$DCSDEVICE" ]; then
DCSMP="/mnt/grmlcfg"
fi
# if not specified/present then assume default:
if [ -z "$DCSDEVICE" ]; then
- DCSDIR="/live/image"
+ DCSDIR="${LIVECD_PATH}"
else
eindent
einfo "debs, config, scripts are read from $DCSDEVICE." ; eend 0
else
[ -d $DCSMP ] || mkdir $DCSMP
umount $DCSMP >>$DEBUG 2>&1 # make sure it is not mounted
- mount -o ro -t auto $DCSDEVICE $DCSMP ; RC="$?"
+ mount -o ${MOUNTOPTIONS:-ro} -t ${DCSFS:-auto} $DCSDEVICE $DCSMP ; RC="$?"
if [[ $RC == 0 ]]; then
einfo "Successfully mounted $DCSDEVICE to $DCSMP (readonly)." ; eend 0
else
fi
fi
-if [ -n "$DCSDIR" -a "$DCSDIR" != "/live/image" ] ; then
+if [ -n "$DCSDIR" -a "$DCSDIR" != "${LIVECD_PATH}" ] ; then
einfo "Debs, config, scripts (if present) will be read from $DCSDIR." ; eend 0
elif checkbootparam 'debs' || checkbootparam 'config' || checkbootparam 'scripts'; then
einfo "Debs, config, scripts will be read from the live image directly." ; eend 0
# {{{ /cdrom/.*-options
config_debs(){
if checkbootparam 'debs' ; then
+ iszsh && setopt localoptions shwordsplit
DEBS="$(getbootparam 'debs' 2>>$DEBUG)"
+ if [ -z "$DEBS" ] ; then
+ DEBS="*.deb"
+ fi
if ! echo $DEBS | grep -q '/'; then
# backwards compatibility: if no path is given get debs from debs/
DEBS="debs/$DEBS"
if [ "$DCSMP" = "/mnt/grmlcfg" ]; then
einfo "Trying to execute ${SCRIPTS}"
sh -c $SCRIPTS
+ eend $?
elif [ -d "$SCRIPTS" ]; then
einfo "Bootparameter scripts found. Trying to execute from directory ${SCRIPTS}:"
- run-parts $SCRIPTS
+ run-parts --regex '.*' $SCRIPTS
+ eend $?
else
einfo "Bootparameter scripts found. Trying to execute ${SCRIPTS}:"
sh -c $SCRIPTS
+ eend $?
fi
fi
fi
fi
fi
fi
-# umount $DCSMP if it was mounted by finddcsdir
-# this doesn't really belong here
-grep -q '$DCSMP' /proc/mounts && umount $DCSMP
+}
+# }}}
+
+# {{{ confing_umount_dcsdir
+config_umount_dcsdir(){
+ # umount $DCSMP if it was mounted by finddcsdir
+ grep -q "$DCSMP" /proc/mounts && umount "$DCSMP"
}
# }}}
}
# }}}
-# {{{ 915resolution
-config_915resolution(){
-if checkbootparam '915resolution' ; then
- OPTIONS="$(getbootparam '915resolution' 2>>$DEBUG)"
- if [ -x /usr/sbin/915resolution ]; then
- CMD=915resolution
- MODE=""
- XRESO=""
- YRESO=""
- if [ -n "$OPTIONS" ]; then
- # Extra options
- MODE="${OPTIONS%%,*}"
- R="${OPTIONS#*,}"
- if [ -n "$R" -a "$R" != "$OPTIONS" ]; then
- OPTIONS="$R"
- XRESO="${OPTIONS%%,*}"
- R="${OPTIONS#*,}"
- if [ -n "$R" -a "$R" != "$OPTIONS" ]; then
- OPTIONS="$R"
- YRESO="${OPTIONS%%,*}"
- R="${OPTIONS#*,}"
- fi
- fi
- fi
- einfo "Running 915resolution with options ${MODE} ${XRESO} ${YRESO}."
- [ -n "$MODE" ] && [ -n "$XRESO" ] && [ -n "$YRESO" ] && ( sh -c "$CMD $MODE $XRESO $YRESO" & )
- eend 0
- fi
-fi
-}
-# }}}
-
# {{{ SW-RAID
config_swraid(){
[ -n "$INSTALLED" ] && return 0
checkbootparam 'forensic' || checkbootparam 'raid=noautodetect' ; then
ewarn "Skipping SW-RAID code as requested on boot commandline." ; eend 0
else
+ [ -e /proc/mdstat ] || modprobe md_mod
if ! [ -x /sbin/mdadm ] ; then
eerror "mdadm not available, can not execute it." ; eend 1
else
# {{{ debnet: setup network based on an existing one found on a partition
config_debnet(){
if checkbootparam 'debnet' ; then
- iszsh && setopt shwordsplit
- DEVICES="$(< /proc/partitions tail -n +3 | awk '{print "/dev/"$4}' | tr "\n" " ")"
- DEVICES="$DEVICES $(ls /dev/mapper/*)"
- FOUND_DEBNET=""
-
einfo "Bootoption 'debnet' found. Searching for Debian network configuration: "
- eindent
- if ! mount | grep '/mnt ' >/dev/null 2>&1 ; then
- for i in $DEVICES; do
- if mount -o ro -t auto "$i" /mnt >/dev/null 2>&1; then
- einfo "Scanning on $i"
- if [ -f /mnt/etc/network/interfaces ]; then
- einfo "/etc/network/interfaces found on ${i}" ; eend 0
- FOUND_DEBNET="$i"
- break
- fi
- umount /mnt
- fi
- done
-
- if [ -n "$FOUND_DEBNET" ]; then
- einfo "Stopping network."
- pump -k >/dev/null 2>&1
- /etc/init.d/networking stop >/dev/null 2>&1 ; eend $?
- einfo "Copying Debian network configuration from $FOUND_DEBNET to running system."
- rm -rf /etc/network/run
- cp -a /mnt/etc/network /etc
- rm -rf /etc/network/run
- mkdir /etc/network/run
- umount /mnt ; eend $?
- einfo "Starting network."
- invoke-rc.d networking start ; eend $?
- else
- eerror "/etc/network/interfaces not found." ; eend 1
- fi
- eoutdent
- else
- eerror "Error: /mnt already mounted." ; eend 1
- fi
+ /usr/sbin/debnet
fi
}
# }}}
-# {{{ check for broken ipw3945 driver which causes problems (especially on hd install)
-config_ipw3945() {
- if grep -q ipw3945 /proc/modules ; then
- if ! iwconfig 2>/dev/null| grep -qe 'IEEE 802' -qe 'unassociated' ; then
- ewarn "Broken ipw3945 network interface found, reloading module."
- rmmod ipw3945
- modprobe ipw3945
- eend $?
- fi
- fi
-}
-# }}}
-
# {{{ disable console blanking
config_blanking(){
if checkbootparam 'noblank' ; then
if mount -o rw "$TARGET" "$MOUNTDIR" ; then
einfo "Copyring live system to $TARGET - this might take a while"
- rsync -a --progress /live/image/live $MOUNTDIR
+ rsync -a --progress ${LIVECD_PATH}/live $MOUNTDIR
sync
umount "$MOUNTDIR"
eend $?
}
# }}}
-# {{{ grml2hd: automatic installation
-config_grml2hd(){
-
-if checkbootparam "BOOT_IMAGE=grml2hd" ; then
-
-if checkbootparam 'user' ; then
- NEWUSER=''
- NEWUSER="$(getbootparam 'user' 2>>$DEBUG)"
- sed -i "s/^NEWUSER=.*/NEWUSER=$NEWUSER/" /etc/grml2hd/config || export GRML2HD_FAIL=1
-fi
-
-if checkbootparam 'filesystem' ; then
- FILESYSTEM=''
- FILESYSTEM="$(getbootparam 'filesystem' 2>>$DEBUG)"
- sed -i "s/^FILESYSTEM=.*/FILESYSTEM=$FILESYSTEM/" /etc/grml2hd/config || export GRML2HD_FAIL=1
-fi
-
-if checkbootparam 'partition' ; then
- PARTITION=''
- PARTITION="$(getbootparam 'partition' 2>>$DEBUG)"
- # notice: the following checks whether the given partition is available, if not the skip
- # execution of grml2hd as it might result in data loss...
- if [ -r $PARTITION ] ; then
- sed -i "s#^PARTITION=.*#PARTITION=$PARTITION#" /etc/grml2hd/config || export GRML2HD_FAIL=1
- else
- ewarn "Partition $PARTITION does not exist. Skipping execution of grml2hd therefore." ; eend 1
- fi
-fi
-
-if checkbootparam 'mbr' ; then
- BOOT_PARTITION=''
- BOOT_PARTITION="$(getbootparam 'mbr' 2>>$DEBUG)"
- sed -i "s#^BOOT_PARTITION=.*#BOOT_PARTITION=$BOOT_PARTITION#" /etc/grml2hd/config || export GRML2HD_FAIL=1
-fi
-
-cat>|/usr/bin/grml2hd_noninteractive<<EOF
-#!/bin/sh
-GRML2HD_NONINTERACTIVE='yes' grml2hd
-EOF
-
-chmod 755 /usr/bin/grml2hd_noninteractive
-einfo "Bootoption grml2hd found. Running automatic installation via grml2hd using /etc/grml2hd/config." && eend 0
-if [ -z "$GRML2HD_FAIL" ] ; then
- screen /usr/bin/grml2hd_noninteractive ; einfo "Invoking a shell, just exit to continue booting..." ; /bin/zsh
-else
- ewarn "There was an error adjusting /etc/grml2hd/config. Skipping execution of grml2hd for security reasons." ; eend 1
-fi
-
-fi # if checkbootparam "BOOT_IMAGE=grml2hd ...
-}
-# }}}
-
# {{{ debootstrap: automatic installation
config_debootstrap(){
-if checkbootparam "BOOT_IMAGE=debian2hd" ; then
+if checkbootparam "BOOT_IMAGE=debian2hd" || checkbootparam "debian2hd" ; then
einfo "Bootoption debian2hd found. Setting up environment for automatic installation via grml-debootstrap." ; eend 0
}
# }}}
+config_virtualbox_shared_folders() {
+if $VIRTUALBOX ; then
+ einfo "VirtualBox detected, trying to set up Shared Folders."
+ if ! modinfo vboxsf &>/dev/null ; then
+ ewarn "vboxsf driver not present, not setting up VirtualBox Shared Folders."
+ eend 0
+ elif ! [ -x /usr/sbin/VBoxService ] ; then
+ ewarn "virtualbox-guest-utils not installed, not setting up VirtualBox Shared Folders."
+ eend 0
+ else
+ eindent
+
+ einfo "Loading vboxsf driver."
+ lsmod | grep -q vboxsf || modprobe vboxsf
+ eend $?
+
+ einfo "Adjusting /dev/vboxguest."
+ chown root:vboxsf /dev/vboxguest
+ chmod 660 /dev/vboxguest
+ eend $?
+
+ config_userfstab
+
+ einfo "Adding $fstabuser to group vboxsf."
+ adduser grml vboxsf &>/dev/null
+ eend $?
+
+ einfo "Starting VBoxService."
+ VBoxService >/dev/null &
+ eend $?
+
+ eoutdent
+ fi
+fi
+}
+
# {{{ Support customization
config_distri(){
if checkbootparam 'distri'; then
}
# }}}
-### {{{ backwards compatible stuff
-config_environment(){
- ewarn "config_environment is deprecated. Please set CONFIG_ENVIRONMENT in /etc/grml/autoconfig to 'no'." ; eend 0
-}
-config_keyboard(){
- ewarn "config_keyboard is deprecated. Please set CONFIG_KEYBOARD in /etc/grml/autoconfig to 'no'." ; eend 0
-}
-# }}}
-
## END OF FILE #################################################################
-# vim:foldmethod=marker expandtab ai ft=zsh shiftwidth=3
+# vim:foldmethod=marker expandtab ai ft=zsh shiftwidth=2