X-Git-Url: http://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=3cc12ee3ca8d9b067c2c03c8fe4a888b3f6ac552;hp=f9a70ba364c0c3b323b5534290b565188146535e;hb=34be1a5b46d770b134219692d080aa7f82070c09;hpb=771a04d032d43e9a45ad7ac4c9c03d82ed08ba7c diff --git a/autoconfig.functions b/autoconfig.functions index f9a70ba..3cc12ee 100755 --- a/autoconfig.functions +++ b/autoconfig.functions @@ -222,13 +222,14 @@ config_language(){ [ -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 @@ -353,8 +354,9 @@ config_hostname(){ if checkbootparam 'hostname' ; then HOSTNAME="$(getbootparam 'hostname' 2>>$DEBUG)" einfo "Setting hostname to $HOSTNAME as requested." - sed -i "s/^127.0.0.1.*localhost/127.0.0.1 $HOSTNAME localhost/" /etc/hosts - hostname $HOSTNAME ; eend $? + grml-hostname $HOSTNAME >>$DEBUG ; RC=$? + [ "$RC" = "0" ] && hostname $HOSTNAME + eend $RC else hostname --file /etc/hostname fi @@ -1501,6 +1503,56 @@ fi } # }}} +# {{{ 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 @@ -2291,9 +2343,10 @@ fi # {{{ 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 @@ -2354,14 +2407,79 @@ config_swraid(){ 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 + [ -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 @@ -2382,7 +2500,6 @@ config_lvm(){ fi fi # check for lvm binary fi # check for bootoption nolvm - fi # run only in live-cd mode } # }}}