esac
}
+# Check if currently using a framebuffer
+hasfb() {
+ [ -e /dev/fb0 ] && return 0 || return 1
+}
+
# Check wheter a configuration variable (like $CONFIG_TOHD) is
# enabled or not
checkvalue(){
# set default to 'en' in live-cd mode if $LANGUAGE is not yet set:
if [ -z "$INSTALLED" ] ; then
- [ -n "$LANGUAGE" ] || LANGUAGE='us'
+ [ -n "$LANGUAGE" ] || LANGUAGE='en'
fi
- # if bootoption lang is used update /etc/default/locale, otherwise *not*!
- if [ -n "$BOOT_LANGUAGE" -a -x /usr/sbin/grml-setlang ] ; then
- if checkgrmlsmall ; then
- /usr/sbin/grml-setlang "POSIX"
- else
- /usr/sbin/grml-setlang "$LANGUAGE"
- 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"
+ # otherwise default to lang=en
+ else
+ checkgrmlsmall && /usr/sbin/grml-setlang "POSIX" || /usr/sbin/grml-setlang "en"
+ fi
fi
# set console font
else
ewarn "/usr/share/consolefonts/Uni3-Terminus16.psf.gz not available. Please upgrade package console-terminus." ; eend 1
fi
+ if ! hasfb ; then
+ CONSOLEFONT='Lat15-Terminus16'
+ fi
fi
fi
if [ -r /etc/default/locale ] ; then
if grep -q "LANG=.*UTF" /etc/default/locale ; then
einfo "Setting up unicode environment."
- unicode_start ; eend $?
+ unicode_start 2>>$DEBUG ; eend $?
fi
fi
# 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 only on laptops (check via /usr/sbin/laptop-detect) and not inside Virtual Box
+ # * 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
- if /usr/sbin/laptop-detect 1>/dev/null 2>&1 ; then
- # Virtual Box supports ACPI and laptop-detect returns 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
- fi
- einfo "Detected Laptop - trying to use 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="
+ # 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
+ 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" 1>>$DEBUG || modprobe "$MODULE_FALLBACK" 1>>$DEBUG
- RC=$?
- if [[ $RC == 0 ]]; then
- eend 0
- else
- SKIP_CPU_GOVERNOR=1
- eend $1
- 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
+ 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" 1>>$DEBUG || modprobe "$MODULE_FALLBACK" 1>>$DEBUG
+ RC=$?
+ if [[ $RC == 0 ]]; then
+ eend 0
+ else
+ SKIP_CPU_GOVERNOR=1
+ eend $1
+ 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
+ eoutdent
- fi # laptop-detect
fi # cpufreq_check
fi # checkbootparam nocpu
}
}
# }}}
+# {{{ autostart of x11vnc
+config_vnc(){
+
+USER=grml # TODO: make it dynamically configurable
+if checkbootparam 'vnc' ; then
+ VNC_PASSWD=''
+ VNC_PASSWD="$(getbootparam 'vnc' 2>>$DEBUG)"
+ einfo "Bootoption vnc found, trying to set password for user $USER."
+ eindent
+ if [ -z "$VNC_PASSWD" ] ; then
+ if [ -x /usr/bin/apg ] ; then
+ VNC_PASSWD="$(apg -M NL -a 0 -m 8 -x 12 -n 1)"
+ elif [ -x /usr/bin/gpw ] ; then
+ VNC_PASSWD="$(gpw 1)"
+ elif [ -x /usr/bin/pwgen ] ; then
+ VNC_PASSWD="$(pwgen -1 8)"
+ 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}"
+ else
+ VNC_PASSWD=''
+ eerror "Empty passphrase and neither pwgen nor hexdump nor \$RANDOM found. Skipping."
+ eend 1
+ fi
+
+ if [ -n "$VNC_PASSWD" ] ; then
+ ewarn "No given password for vnc found. Using random password: $VNC_PASSWD" ; eend 0
+ fi
+ fi
+ eoutdent
+
+ # finally check if we have a password we can use:
+ if [ -n "$VNC_PASSWD" ] ; then
+
+ VNCDIR="/home/${USER}/.vnc"
+ [ -d "$VNCDIR" ] || mkdir "$VNCDIR"
+
+ if [ ! -x /usr/bin/x11vnc ] ; then
+ eerror "Error: x11vnc not found - can not set up vnc. Please make sure to install the x11vnc package."
+ eend 1
+ else
+ /usr/bin/x11vnc -storepasswd "$VNC_PASSWD" "$VNCDIR"/passwd ; eend $?
+ /bin/chown -R "$USER": "$VNCDIR"
+ fi
+ fi
+fi
+}
+# }}}
+
# {{{ set password for user grml
config_passwd(){
if checkbootparam 'passwd' >>$DEBUG 2>&1; then
# - If myconfig=foo is set on the command line, $dcs-dir is set to
# foo, even if a GRMLCFG partition is present.
DCSDIR=""
+DCSMP="/mnt/grml"
if checkbootparam 'noautoconfig' || checkbootparam 'forensic' ; then
ewarn "Skipping running automount of device(s) labeled GRMLCFG as requested." ; eend 0
else
fi
fi
DCSDEVICE=$(blkid -t LABEL=GRMLCFG | head -1 | awk -F: '{print $1}')
+ if [ -n "$DCSDEVICE" ]; then
+ DCSMP="/mnt/grmlcfg"
+ fi
eoutdent
fi
if [ -n "$DCSDIR" ]; then
ewarn "$DCSDEVICE already mounted on $DCSDIR"; eend 0
else
- [ -d /mnt/grml ] || mkdir /mnt/grml
- umount /mnt/grml 1>>$DEBUG 2>&1 # make sure it is not mounted
- mount -o ro -t auto $DCSDEVICE /mnt/grml ; RC="$?"
+ [ -d $DCSMP ] || mkdir $DCSMP
+ umount $DCSMP 1>>$DEBUG 2>&1 # make sure it is not mounted
+ mount -o ro -t auto $DCSDEVICE $DCSMP ; RC="$?"
if [[ $RC == 0 ]]; then
- einfo "Successfully mounted $DCSDEVICE to /mnt/grml (readonly)." ; eend 0
+ einfo "Successfully mounted $DCSDEVICE to $DCSMP (readonly)." ; eend 0
else
- eerror "Error: mounting $DCSDEVICE to /mnt/grml (readonly) failed." ; eend 1
+ eerror "Error: mounting $DCSDEVICE to $DCSMP (readonly) failed." ; eend 1
fi
- DCSDIR="/mnt/grml"
+ DCSDIR="$DCSMP"
fi
eoutdent
fi
}
config_scripts(){
-if checkbootparam 'scripts' ; then
+if checkbootparam 'scripts' || [ "$DCSMP" = "/mnt/grmlcfg" ]; then
SCRIPTS="$(getbootparam 'scripts' 2>>$DEBUG)"
- if [ -z "$SCRIPTS" ]; then
+ if [ -d ${DCSDIR}/scripts ] && [ -z "$SCRIPTS" ]; then
SCRIPTS="$(cd ${DCSDIR}/scripts; /bin/ls -1d [Gg][Rr][Mm][Ll].[Ss][Hh] 2>>$DEBUG)"
fi
if ! echo $SCRIPTS | grep -q '/'; then
# backwards compatibility: if no path is given get scripts from scripts/
SCRIPTS="scripts/$SCRIPTS"
fi
- SCRIPTS="${DCSDIR}/$SCRIPTS"
- if [ -d "$SCRIPTS" ]; then
- einfo "Bootparameter scripts found. Trying to execute from directory ${SCRIPTS}:"
- run-parts $SCRIPTS
- else
- einfo "Bootparameter scripts found. Trying to execute ${SCRIPTS}:"
- sh -c $SCRIPTS
+ if [ "$DCSMP" = "/mnt/grmlcfg" ]; then
+ # we are executing from a GRMLCFG labeled fs
+ # kick everything we have done before and start over
+ SCRIPTS="$(cd ${DCSDIR}; /bin/ls -1d [Gg][Rr][Mm][Ll].[Ss][Hh] 2>>$DEBUG)"
+ fi
+ if [ -n "$SCRIPTS" ]; then
+ SCRIPTS="${DCSDIR}/$SCRIPTS"
+ if [ "$DCSMP" = "/mnt/grmlcfg" ]; then
+ einfo "Trying to execute ${SCRIPTS}"
+ sh -c $SCRIPTS
+ elif [ -d "$SCRIPTS" ]; then
+ einfo "Bootparameter scripts found. Trying to execute from directory ${SCRIPTS}:"
+ run-parts $SCRIPTS
+ else
+ einfo "Bootparameter scripts found. Trying to execute ${SCRIPTS}:"
+ sh -c $SCRIPTS
+ fi
fi
fi
}
config_config(){
-if checkbootparam 'config' ; then
+if checkbootparam 'config' || [ "$DCSMP" = "/mnt/grmlcfg" ]; then
CONFIG="$(getbootparam 'config' 2>>$DEBUG)"
if [ -z "$CONFIG" ]; then
CONFIG="$(cd ${DCSDIR}; ls -1d [Cc][Oo][Nn][Ff][Ii][Gg].[Tt][Bb][Zz] 2>>$DEBUG)"
fi
fi
fi
-# umount /mnt/grml if it was mounted by finddcsdir
+# umount $DCSMP if it was mounted by finddcsdir
# this doesn't really belong here
-grep -q '/mnt/grml' /proc/mounts && umount /mnt/grml
+grep -q '$DCSMP' /proc/mounts && umount $DCSMP
}
# }}}
# {{{ SW-RAID
config_swraid(){
- if [ -z "$INSTALLED" ] ; then
+ [ -n "$INSTALLED" ] && return 0
+
# notice: checkbootparam "forensic" is just for users who don't know how to really use the bootoption
- if checkbootparam 'noraid' || checkbootparam 'noswraid' -o \
+ if checkbootparam 'noraid' || checkbootparam 'noswraid' || \
checkbootparam 'forensic' || checkbootparam 'raid=noautodetect' ; then
ewarn "Skipping SW-RAID code as requested on boot commandline." ; eend 0
else
fi # is /sbin/mdadm executable?
fi # check for bootoptions
- fi # run only in live-cd mode
+}
+# }}}
+
+# {{{ dmraid
+config_dmraid(){
+ [ -n "$INSTALLED" ] && return 0
+
+ if checkbootparam 'nodmraid' ; then
+ ewarn "Skipping dmraid code as requested on boot commandline." ; eend 0
+ return 0
+ fi
+
+ if ! [ -x /sbin/dmraid ] ; then
+ eerror "dmraid not available, can not execute it." ; eend 1
+ return
+ fi
+
+ dmraid_wrapper() {
+ # usage: dmraid_wrapper <dmraid_option>
+ [ -n "$1" ] || return 1
+
+ IFSOLD=${IFS:-}
+ IFS='
+'
+ eindent
+
+ for line in $(dmraid $1 ; echo errcode:$?); do
+ case $line in
+ *'no raid disks'*)
+ einfo "No active dmraid devices found" ; eend 0
+ break
+ ;;
+ errcode:0)
+ eend 0;
+ ;;
+ errcode:1)
+ eend 1
+ ;;
+ *)
+ einfo "$line"
+ ;;
+ esac
+ done
+
+ eoutdent
+ IFS=$IFSOLD
+ }
+
+ if checkbootparam 'dmraid' ; then
+ local ACTION="$(getbootparam 'dmraid' 2>>$DEBUG)"
+ if [ "$ACTION" = "off" ] ; then
+ # Deactivates all active software RAID sets:
+ einfo "Deactivating present dmraid sets (as requested via dmraid=off):"
+ dmraid_wrapper -an
+ else
+ # Activate all software RAID sets discovered:
+ einfo "Activating present dmraid sets (as requested via dmraid):"
+ dmraid_wrapper -ay
+ fi
+
+ return
+ fi
+
+ # by default (no special bootoptions) discover all software RAID devices:
+ einfo "Searching for any present dmraid sets:"
+ dmraid_wrapper -r
}
# }}}
# {{{ LVM (Logical Volumes)
config_lvm(){
- if [ -z "$INSTALLED" ] ; then
- # notice: checkbootparam "forensic" is just for users who don't know how to really use the bootoption
+ [ -n "$INSTALLED" ] && return 0
+
if checkbootparam 'nolvm' ; then
ewarn "Skipping LVM code as requested on boot commandline." ; eend 0
else
fi
fi # check for lvm binary
fi # check for bootoption nolvm
- fi # run only in live-cd mode
}
# }}}