X-Git-Url: https://git.grml.org/?p=grml-autoconfig.git;a=blobdiff_plain;f=autoconfig.functions;h=c0c1111b4f9c23ffbbb631421af3e94a08f065a9;hp=a010368be28a8ec7d9d40f8a9946bacf328a24e2;hb=975698c289322e14b730adaae36a907b30fc251e;hpb=965b86e04b7ab20220eb0ba35212e67080ada6b0 diff --git a/autoconfig.functions b/autoconfig.functions index a010368..c0c1111 100755 --- a/autoconfig.functions +++ b/autoconfig.functions @@ -302,7 +302,7 @@ config_language(){ 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 @@ -314,17 +314,21 @@ config_language(){ 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 [ -n "$CHARMAP" ] ; then einfo "Running consolechars for ${CHARMAP}" - for vc in `seq 0 ${NUM_CONSOLES}` ; do + RC=0 + for vc in $(seq 0 ${NUM_CONSOLES}) ; do consolechars --tty=/dev/tty${vc} -m ${CHARMAP} ; RC=$? done - [ -n "$CUR_CONSOLE" ] && chvt $CUR_CONSOLE + if [ -n "$CUR_CONSOLE" ] ; then + [ "$CUR_CONSOLE" != "serial" ] && chvt $CUR_CONSOLE + fi eend $RC fi @@ -333,11 +337,14 @@ config_language(){ else if [ -n "$CONSOLEFONT" ] ; then einfo "Running consolechars using ${CONSOLEFONT}" - for vc in `seq 0 ${NUM_CONSOLES}` ; do + RC=0 + for vc in $(seq 0 ${NUM_CONSOLES}) ; do consolechars --tty=/dev/tty${vc} -f $CONSOLEFONT ; RC=$? done - [ -n "$CUR_CONSOLE" ] && chvt $CUR_CONSOLE - eend $? + if [ -n "$CUR_CONSOLE" ] ; then + [ "$CUR_CONSOLE" != "serial" ] && chvt $CUR_CONSOLE + fi + eend $RC fi fi @@ -568,21 +575,10 @@ 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 + einfo "Bootoption for serial console detected, activating console login." + sed -i 's/^#grmlserial#//' /etc/inittab + /sbin/telinit q + eend $? fi } # }}} @@ -1293,59 +1289,6 @@ fi } # }}} -# {{{ helper functions -findfile(){ -FOUND="" -# search all partitions for a file in the root directory -for i in /mnt/[sh]d[a-z] /mnt/[sh]d[a-z][1-9] /mnt/[sh]d[a-z][1-9]?*; do -# See if it's already mounted - [ -f "$i/$1" ] && { echo "$i/$1"; return 0; } - if [ -d "$i" ] && mount -r "$i" 2>>$DEBUG; then - [ -f "$i/$1" ] && FOUND="$i/$1" - umount -l "$i" 2>>$DEBUG - [ -n "$FOUND" ] && { echo "$FOUND"; return 0; } - fi -done -return 2 -} - -fstype(){ -case "$(file -s $1)" in - *[Ff][Aa][Tt]*|*[Xx]86*) echo "vfat"; return 0;; - *[Rr][Ee][Ii][Ss][Ee][Rr]*) echo "reiserfs"; return 0;; - *[Xx][Ff][Ss]*) echo "xfs"; return 0;; - *[Ee][Xx][Tt]3*) echo "ext3"; return 0;; - *[Ee][Xx][Tt]2*) echo "ext2"; return 0;; - *data*) echo "invalid"; return 0;; - *) echo "auto"; return 0;; -esac -} - -# Try to mount this filesystem read-only, without or with encryption -trymount(){ -# Check if already mounted -case "$(cat /proc/mounts)" in *\ $2\ *) return 0;; esac -# Apparently, mount-aes DOES autodetect AES loopback files. -[ -b "$1" ] && { mount -t auto -o ro "$1" "$2" 2>>$DEBUG; RC="$?"; } -# We need to mount crypto-loop files with initial rw support -[ -f "$1" ] && { mount -t auto -o loop,rw "$1" "$2" 2>>$DEBUG; RC="$?"; } -# Mount succeeded? -[ "$RC" = "0" ] && return 0 -echo "" -einfo "Filesystem not autodetected, trying to mount $1 with AES256 encryption." -a="y" -while [ "$a" != "n" -a "$a" != "N" ]; do -# We need to mount crypto-loop files with initial rw support - mount -t auto -o loop,rw,encryption=AES256 "$1" "$2" && return 0 - echo -n "${RED}Mount failed, retry? [Y/n] ${NORMAL}" - # Problem with ioctl() from getpasswd()? - # read a - read a -done -return 1 -} -# }}} - # {{{ CPU-detection config_cpu(){ if checkbootparam 'nocpu'; then @@ -1419,7 +1362,7 @@ else einfo "Loading modules ${MODULE}" modprobe "$MODULE" >>$DEBUG || modprobe "$MODULE_FALLBACK" >>$DEBUG RC=$? - if [[ $RC == 0 ]]; then + if [[ "$RC" == 0 ]]; then eend 0 else SKIP_CPU_GOVERNOR=1 @@ -1433,6 +1376,7 @@ else if [ -z "$SKIP_CPU_GOVERNOR" ] ; then einfo "Loading cpufreq_ondemand, setting ondemand governor" + RC=0 if modprobe cpufreq_ondemand ; RC=$? ; then for file in $(find /sys/devices/system/cpu/ -name scaling_governor 2>/dev/null) ; do echo ondemand > $file @@ -1570,84 +1514,8 @@ fi # {{{ Check for persistent homedir option and eventually mount /home from there, or use a loopback file. config_homedir(){ if checkbootparam 'home' ; then - 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" - ;; - [Aa][Uu][Tt][Oo]|[Ss][Cc][Aa][Nn]|[Ff][Ii][Nn][Dd]) - MYHOMEDIR="$(findfile grml.img)" - MYHOMEDEVICE="${MYHOMEDIR##/mnt/}" - MYHOMEDEVICE="/dev/${MYHOMEDEVICE%%/*}" - MYHOMEMOUNTPOINT="/mnt/${MYHOMEDEVICE##/dev/}" - ;; - *) - eerror "Invalid home= option '$HOMEDIR' specified (must start with /dev/ or /mnt/ or 'scan')." ; eend 1 - eerror "Option ignored." ; eend 1 - ;; - esac - fi # -n $HOMEDIR - - if [ -n "$MYHOMEDIR" ]; then - if trymount "$MYHOMEDEVICE" "$MYHOMEMOUNTPOINT"; then - [ -f "$MYHOMEMOUNTPOINT/grml.img" ] && MYHOMEDIR="$MYHOMEMOUNTPOINT/grml.img" - while read device mountpoint fs relax; do - case "$mountpoint" in *$MYHOMEMOUNTPOINT*) - case "$fs" in - *[Nn][Tt][Ff][Ss]*) - umount "$MYHOMEMOUNTPOINT"; eerror "Error: will not mount NTFS filesystem on $MYHOMEDEVICE read/write!" ; eend 1 - break - ;; - *[Ff][Aa][Tt]*) - # Note: This currently won't work with encrypted partitions - umount "$MYHOMEMOUNTPOINT"; mount -t vfat -o rw,uid=grml,gid=grml,umask=002 "$MYHOMEDEVICE" "$MYHOMEMOUNTPOINT" - if [ ! -f "$MYHOMEDIR" ]; then - ewarn "WARNING: FAT32 is not a good filesystem option for /home/grml (missing socket/symlink support)." - ewarn "WARNING: Better use an ext2 loopback file on this device, and boot with home=$MYHOMEDEVICE/grml.img." - fi - ;; - esac - - if mount -o remount,rw "$MYHOMEMOUNTPOINT"; then - einfo "Mounting ${WHITE}$MYHOMEDIR${NORMAL} as ${WHITE}/home/grml${NORMAL}." - if [ -f "$MYHOMEDIR" ]; then - # It's a loopback file, mount it over the /home/grml directory - trymount "$MYHOMEDIR" /home/grml - RC="$?" - [ "$RC" = "0" ] && ERROR="$(mount -o remount,rw /home/grml 2>&1)" - RC="$?" - else - # Do a --bind mount - ERROR="$(mount --bind "$MYHOMEDIR" /home/grml 2>&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 <|/etc/init.d/xstartup<>$DEBUG +su $fstabuser -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/bin/zsh-login" >/dev/tty6 2>\&1 > /etc/inittab + echo '6:2345:respawn:/bin/zsh --login -c "/etc/init.d/xstartup ; /usr/bin/zsh-login" >/dev/tty6 2>&1 < /dev/tty6' >> /etc/inittab fi /sbin/telinit q ; eend $?