X-Git-Url: http://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=11dd166d978fd87e5117169623198454802077e6;hp=e129caea21bae19821d8c58758d83d221509c55c;hb=f4a3b6cf30d373a4ef0425b48be2d314a1db7019;hpb=8e5e4e1209a0795dc731c1e3ac2cc8efda9d6b2e diff --git a/autoconfig.functions b/autoconfig.functions index e129cae..11dd166 100755 --- a/autoconfig.functions +++ b/autoconfig.functions @@ -4,7 +4,7 @@ # Authors: grml-team (grml.org), (c) Klaus Knopper , (c) Michael Prokop # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. -# Latest change: Son Mär 25 12:32:37 CEST 2007 [mika] +# Latest change: Mon Apr 16 19:32:25 CEST 2007 [mika] ################################################################################ # {{{ path, variables, signals, umask, zsh @@ -270,39 +270,43 @@ config_language(){ [ -r /etc/sysconfig/keyboard ] && . /etc/sysconfig/keyboard - # Set default keyboard before interactive setup - if [ -n "$KEYTABLE" ] ; then - einfo "Running loadkeys for ${WHITE}${KEYTABLE}${NORMAL} in background" - loadkeys -q $KEYTABLE & - eend $? - fi - - if [ -n "$CONSOLEFONT" ] ; then - einfo "Running consolechars using ${CONSOLEFONT}" - consolechars -f $CONSOLEFONT || consolechars -d - eend $? - fi + # activate unicode console if running within utf8 environment + if [ -r /etc/default/locale ] ; then + if grep -q "LANG=.*UTF" /etc/default/locale ; then + if checkgrmlsmall && [ -z "$INSTALLED" ] ; then + ewarn "Not runnning unicode_start: grml-small with reduced language support detected." ; eend 0 + else + einfo "Setting up unicode environment." + unicode_start 2>>$DEBUG ; eend $? + fi + fi + fi - # we have to set up all consoles, therefore loop it over all ttys: - if [ -n "$CHARMAP" ] ; then - einfo "Running consolechars for ${CHARMAP}" - NUM_CONSOLES=`fgconsole --next-available` - NUM_CONSOLES=`expr ${NUM_CONSOLES} - 1` - [ ${NUM_CONSOLES} -eq 1 ] && NUM_CONSOLES=6 - for vc in `seq 0 ${NUM_CONSOLES}` ; do - consolechars --tty=/dev/tty${vc} -m ${CHARMAP} ; RC=$? - done - eend ${RC} - fi + # Set default keyboard before interactive setup + if [ -n "$KEYTABLE" ] ; then + einfo "Running loadkeys for ${WHITE}${KEYTABLE}${NORMAL} in background" + loadkeys -q $KEYTABLE & + eend $? + fi - # activate unicode console if running within utf8 environment - if [ -r /etc/default/locale ] ; then - if grep -q "LANG=.*UTF" /etc/default/locale ; then - einfo "Setting up unicode environment." - unicode_start - eend $? - 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 + 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=$? + done + eend $RC + fi + if [ -n "$CONSOLEFONT" ] ; then + einfo "Running consolechars using ${CONSOLEFONT}" + for vc in `seq 0 ${NUM_CONSOLES}` ; do + consolechars --tty=/dev/tty${vc} -f $CONSOLEFONT || consolechars --tty=/dev/tty${vc} -d + done + eend $? + fi eoutdent } @@ -388,8 +392,8 @@ if checkbootparam novmware ; then ewarn "Skipping running vmware specific stuff as requested on boot commandline." ; eend 0 else if [ -z "$INSTALLED" ] ; then - if ! checkbootparam qemu ; then - if vmware-detect ; then + if vmware-detect || stringinstring "BOOT_IMAGE=vmware " "$CMDLINE" ; 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 $? @@ -509,10 +513,21 @@ fi # activate serial console {{{ config_console(){ if checkbootparam "console"; then - einfo "Bootoption (for serial) console detected. Activating mgetty." + 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 $? + /sbin/telinit q ; eend $? + eoutdent fi } # }}} @@ -981,118 +996,117 @@ config_fstab(){ NOSWAP="yes" # we do not use swap by default! if checkbootparam "swap" -o checkbootparam "anyswap" ; then NOSWAP='' + checkbootparam "anyswap" && export ANYSWAP='yes' || export ANYSWAP="" fi if checkbootparam "nofstab" -o checkbootparam "forensic" ; then ewarn "Skipping /etc/fstab creation as requested on boot commandline." ; eend 0 else - checkbootparam "anyswap" && export ANYSWAP='yes' || export ANYSWAP="" 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 $? + 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 + ewarn "Command rebuildfstab not found. Install package grml-rebuildfstab." ; eend 1 fi - if [ -e /var/run/rebuildfstab.pid ]; then - # Another instance of rebuildfstab, probably from hotplug, is still running, so just wait. - sleep 8 - fi -fi -# Scan for swap, config, homedir -if [ -z "$NOSWAP" ]; then - einfo "Searching for swap partition(s) as requested." -fi -GRML_IMG="" -GRML_SWP="" -HOMEDIR="$(getbootparam home)" -if [ -n "$partitions" ]; then - while read p m f relax; do - case "$p" in *fd0*|*proc*|*sys*|*\#*) continue;; esac - partoptions="users,exec" - fnew="" - case "$f" in swap) - eindent - if [ -n "$NOSWAP" ]; then - if [ -z "$INSTALLED" ] ; then - ewarn "Ignoring swap partition ${WHITE}$p${NORMAL}. (Force usage via boot option 'swap', or execute grml-swapon)" ; eend 0 - fi - else - case "$(dd if=$p bs=1 count=6 skip=4086 2>/dev/null)" in - S1SUSP|S2SUSP|pmdisk|[zZ]*) - if [ -n "$ANYSWAP" ] ; then - einfo "Using swap partition ${WHITE}${p}${NORMAL} [bootoption anyswap found]." - swapon $p 2>>$DEBUG ; eend $? - else - ewarn "Suspend signature on ${WHITE}${p}${NORMAL} found, not using as swap. (Force usage via boot option: anyswap)" - fi - ;; - *) - if [[ "$p" == LABEL* ]] ; then - p=$(blkid -t $p | awk -F: '{print $1}') - fi - if grep -q $p /proc/swaps ; then - ewarn "Not using swap partition ${WHITE}${p}${NORMAL} as it is already in use." ; eend 0 - else - einfo "Using swap partition ${WHITE}${p}${NORMAL}." - swapon $p 2>>$DEBUG ; eend $? - fi - ;; - esac - fi - eoutdent - continue - ;; - esac -# Create mountdir if not already present, but don't try to create stuff like /proc/bus/usb -# Notice: grml-rebuildfstab >= 0.3-1 handles this now -# case "$m" in *none*|*proc*|*sys*|'') continue ;; esac -# [ -d "$m" ] || mkdir -p "$m" -# WARNING: NTFS RW mounts are only safe since Kernel 2.6.11 - [ "$f" = "ntfs" -a "${KERNEL%.*}" != "2.6" ] && continue - MOUNTOPTS="ro" - case "$f" in - vfat|msdos|ntfs) MOUNTOPTS="$MOUNTOPTS,uid=${fstabuser},gid=${fstabuser}" ;; - ext2|ext3|reiserfs|jfs|reiser4|xfs) MOUNTOPTS="$MOUNTOPTS,noatime" ;; - *) continue ;; - # *) NONEFOUND='1'; continue ;; - esac - if [ -z "$NOSWAP" ] ; then - mount -o "$MOUNTOPTS" -t $f $p $m 2>>$DEBUG || continue - # Activate swapfile, if exists - SWAPFILE="$(/bin/ls -1d $m/[Gg][Rr][Mm][Ll].[Ss][Ww][Pp] 2>/dev/null)" - fi - if [ -z "$NOSWAP" -a -n "$SWAPFILE" -a -f "$SWAPFILE" ]; then - mount -o remount,rw $m - if swapon "$SWAPFILE" 2>>$DEBUG ; then - einfo "Using GRML swapfile ${SWAPFILE}." - fnew="$SWAPFILE swap swap defaults 0 0" - stringinfile "$fnew" "/etc/fstab" || echo "$fnew" >> /etc/fstab - GRML_SWP="$GRML_SWP $SWAPFILE" - eend 0 - fi - mount -o remount,ro $m 2>>$DEBUG - fi - IMAGE="$(/bin/ls -1d $m/[Gg][Rr][Mm][Ll].[Ii][Mm][Gg] 2>/dev/null)" - if [ -z "$INSTALLED" -a -z "$GRML_IMG" -a -n "$IMAGE" -a -f "$IMAGE" ]; then - if [ -n "$HOMEDIR" ]; then - if [ "$HOMEDIR" != "scan" -a "$HOMEDIR" != "$IMAGE" -a "$HOMEDIR" != "${IMAGE%/*.*}" ]; then - continue - fi - fi - if type -a grml-image >/dev/null 2>&1 && grml-image "$IMAGE" /dev/console 2>&1; then - GRML_IMG="$IMAGE" - mount -o remount,ro $m 2>>$DEBUG - fi - fi - eend 0 - # Umount, if not in use - umount -r $m 2>/dev/null - done </dev/null)" in + S1SUSP|S2SUSP|pmdisk|[zZ]*) + if [ -n "$ANYSWAP" ] ; then + einfo "Using swap partition ${WHITE}${p}${NORMAL} [bootoption anyswap found]." + swapon $p 2>>$DEBUG ; eend $? + else + ewarn "Suspend signature on ${WHITE}${p}${NORMAL} found, not using as swap. (Force usage via boot option: anyswap)" + fi + ;; + *) + if [[ "$p" == LABEL* ]] ; then + p=$(blkid -t $p | awk -F: '{print $1}') + fi + if grep -q $p /proc/swaps ; then + ewarn "Not using swap partition ${WHITE}${p}${NORMAL} as it is already in use." ; eend 0 + else + einfo "Using swap partition ${WHITE}${p}${NORMAL}." + swapon $p 2>>$DEBUG ; eend $? + fi + ;; + esac # dd-check + fi # -n "$NOSWAP + eoutdent + continue + ;; + esac # it's a swap partition? + + # mount read-only + MOUNTOPTS="ro" + case "$f" in + vfat|msdos|ntfs) MOUNTOPTS="$MOUNTOPTS,uid=${fstabuser},gid=${fstabuser}" ;; + ext2|ext3|reiserfs|jfs|reiser4|xfs) MOUNTOPTS="$MOUNTOPTS,noatime" ;; + *) continue ;; + # *) NONEFOUND='1'; continue ;; + esac + + # use a swapfile + if [ -z "$NOSWAP" ] ; then + mount -o "$MOUNTOPTS" -t $f $p $m 2>>$DEBUG || continue + # Activate swapfile, if exists + SWAPFILE="$(/bin/ls -1d $m/[Gg][Rr][Mm][Ll].[Ss][Ww][Pp] 2>/dev/null)" + fi + if [ -z "$NOSWAP" -a -n "$SWAPFILE" -a -f "$SWAPFILE" ]; then + mount -o remount,rw $m && MOUNTED=1 + if swapon "$SWAPFILE" 2>>$DEBUG ; then + einfo "Using GRML swapfile ${SWAPFILE}." + fnew="$SWAPFILE swap swap defaults 0 0" + stringinfile "$fnew" "/etc/fstab" || echo "$fnew" >> /etc/fstab + GRML_SWP="$GRML_SWP $SWAPFILE" + eend 0 + fi + mount -o remount,ro $m 2>>$DEBUG && MOUNTED=1 + fi + + # use a image as home + IMAGE="$(/bin/ls -1d $m/[Gg][Rr][Mm][Ll].[Ii][Mm][Gg] 2>/dev/null)" + if [ -z "$GRML_IMG" -a -n "$IMAGE" -a -f "$IMAGE" ]; then + if [ -n "$HOMEDIR" ]; then + if [ "$HOMEDIR" != "scan" -a "$HOMEDIR" != "$IMAGE" -a "$HOMEDIR" != "${IMAGE%/*.*}" ]; then + continue + fi + fi + if type -a grml-image >/dev/null 2>&1 && grml-image "$IMAGE" /dev/console 2>&1; then + GRML_IMG="$IMAGE" + mount -o remount,ro $m 2>>$DEBUG && MOUNTED=1 + fi + fi + eend 0 + + # Umount, if not in use + [ -n "$MOUNTED" ] && umount -r $m 2>/dev/null + + done <&1)" - RC="$?" - fi - [ "$RC" = "0" ] && eend 0 || ( eerror "${ERROR}" ; eend 1 ) - fi - break + HOMEDIR="$(getbootparam home)" + MYHOMEDEVICE="" + MYHOMEMOUNTPOINT="" + MYHOMEDIR="" + if [ -n "$HOMEDIR" ]; then + einfo "Bootoption home detected." && eend 0 + case "$HOMEDIR" in + /dev/*) + MYHOMEDEVICE="${HOMEDIR##/dev/}" + MYHOMEDEVICE="/dev/${MYHOMEDEVICE%%/*}" + MYHOMEMOUNTPOINT="/mnt/${MYHOMEDEVICE##/dev/}" + MYHOMEDIR="/mnt/${HOMEDIR##/dev/}" + ;; + /mnt/*) + MYHOMEDEVICE="${HOMEDIR##/mnt/}" + MYHOMEDEVICE="/dev/${MYHOMEDEVICE%%/*}" + MYHOMEMOUNTPOINT="/mnt/${MYHOMEDEVICE##/dev/}" + MYHOMEDIR="$HOMEDIR" ;; - esac - done <&1)" + RC="$?" + fi # -f $MYHOMEDIR + + [ "$RC" = "0" ] && eend 0 || ( eerror "${ERROR}" ; eend 1 ) + + fi # mount -o remount,rw,... + break + ;; + esac # case "$mountpoint" in *$MYHOMEMOUNTPOINT*) + done <>$DEBUG EOF chmod 755 /etc/init.d/xstartup - sed -i 's#^6:.*#6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /bin/zsh"#' /etc/inittab + # 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 + 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 + fi /sbin/telinit q ; eend $? @@ -2073,47 +2096,142 @@ fi # {{{ grml2hd: automatic installation config_grml2hd(){ +if stringinstring "BOOT_IMAGE=grml2hd " "$CMDLINE" ; then + if checkbootparam "user" ; then - NEWUSER='' - NEWUSER="$(getbootparam 'user' 2>>$DEBUG)" - sed -i "s/^NEWUSER=.*/NEWUSER=$NEWUSER/" /etc/grml2hd/config || export GRML2HD_FAIL=1 + 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 + 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<|/usr/bin/grml2hd_noninteractive<|/usr/bin/grml-debootstrap_noninteractive<