X-Git-Url: https://git.grml.org/?p=grml-debootstrap.git;a=blobdiff_plain;f=grml-debootstrap;h=16e1e2d5c02a11751e7779b341d6f2fd7f8e3dda;hp=d11a8923b256fd2a6eb2dcf97b363da06953734c;hb=301721cec809fe020147a0c999e593ee81bbb98e;hpb=8c6f711136560ee132b84aa730f2ec1dac79a3f7 diff --git a/grml-debootstrap b/grml-debootstrap index d11a892..16e1e2d 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -4,7 +4,7 @@ # Authors: grml-team (grml.org), (c) Michael Prokop # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. -# Latest change: Wed Aug 27 01:46:13 CEST 2008 [mika] +# Latest change: Wed Aug 27 02:41:00 CEST 2008 [mika] ################################################################################ # http://www.debian.org/releases/stable/i386/index.html.en @@ -59,7 +59,7 @@ Send bugreports to the grml-team: bugs@grml.org || http://grml.org/bugs/ " } -if [ "$1" = '-h' ] || [ "$1" == '-help' ] ; then +if [ "$1" = '-h' ] || [ "$1" = '-help' ] ; then usage echo 'Please notice that this script requires root permissions!' exit 0 @@ -149,6 +149,14 @@ while [ "$#" -gt "0" ] ; do done # }}} +# welcome screen {{{ +welcome_dialog() +{ + dialog --title "$PN" --msgbox "Welcome to the interactive configuration of grml-debootstrap." 0 0 + # TODO: improve message +} +# }}} + # ask for target {{{ prompt_for_target() { @@ -182,44 +190,42 @@ prompt_for_bootmanager() OIFS="$IFS"; IFS=: - [[ $TARGET == *md* ]] && MBRPART=$TARGET || MBRPART="${TARGET%[0-9]}" + if echo $TARGET | grep -q "*md*" ; then + MBRPART=$TARGET + else + MBRPART="${TARGET%[0-9]}" + fi GETMBR=$(dialog --stdout --title "$PN" --default-item mbr \ --menu "Where do you want to install the bootmanager grub?" 0 0 0 \ mbr "install bootmanager into MBR of $MBRPART" \ partition "install bootmanager into partition $TARGET" \ - nowhere "do NOT install bootmanager at all" \ + nowhere "do not install bootmanager at all" \ ${ADDITIONAL_PARAMS}) [ $? -eq 0 ] || bailout 3 IFS="$OIFS" case "$GETMBR" in mbr) - USE_MBR=1 # /dev/md0: has to be installed in MBR of /dev/md0 and not in /dev/md: - if [[ $TARGET == *md* ]] ; then - BOOT_PARTITION=${TARGET} + if echo $TARGET | grep -q "*md*" ; then + BOOT_PARTITION="${TARGET}" else - BOOT_PARTITION=${TARGET%[0-9]} + BOOT_PARTITION="${TARGET%[0-9]}" fi ;; partition) BOOT_PARTITION="$TARGET" ;; hda) - USE_MBR=1 BOOT_PARTITION="/dev/hda" ;; sda) - USE_MBR=1 BOOT_PARTITION="/dev/sda" ;; - none) + nowhere) BOOT_PARTITION='' ;; - *) - BOOT_PARTITION="$GETMBR" - ;; esac } # }}} @@ -233,8 +239,8 @@ prompt_for_mirror() } # }}} -# get grub's syntax for /dev/ice -# usage example: 'grubdevice /dev/hda2' returns '(hd0,1)' +# get grub's syntax for /dev/ice {{{ +# usage example: 'grubdevice /dev/sda2' returns 'hd0,1' grubdevice() { if [ -z "$1" ] ; then echo "Usage: grubdevice ">&2 @@ -249,7 +255,7 @@ grubdevice() { echo 'quit' | grub --device-map="$device_map" 1>/dev/null 2>&1 fi - # taken from d-i's trunk/packages/arch/i386/grub-installer/grub-installer: + # based on code from d-i's trunk/packages/arch/i386/grub-installer/grub-installer: tmp_disk=`echo "$device" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \ -e 's%\(fd[0-9]*\)$%\1%' \ -e 's%/part[0-9]*$%/disc%' \ @@ -260,38 +266,96 @@ grubdevice() { -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \ -e 's%.*c[0-7]d[0-9]*p*%%'` tmp_drive=$(grep -v '^#' $device_map | grep "$tmp_disk *$" | sed 's%.*\([hf]d[0-9][a-g0-9,]*\).*%\1%') - GRUB="$(echo "$tmp_drive")" case $1 in /dev/[sh]d[a-z]) # we expect something like 'hd0' - GROOT="$(echo "$tmp_drive")" + echo "$tmp_drive" ;; *) # we expect something like 'hd0,0' - # make sure we don't install into MBR if $USE_MBR is not set - if [ -z "$USE_MBR" ] ; then - GROOT="$(echo "$tmp_drive" | sed "s%)$%,`expr $tmp_part - 1`)%")" - else - GROOT="$(echo "$tmp_drive" | sed "s%,[0-9]%%")" - fi + echo "$tmp_drive" | sed "s%$%,`expr $tmp_part - 1`%" # FIXME => md0 ;; esac } +# }}} + +# software raid setup {{{ +config_swraid_setup() +{ +TMPFILE=$(mktemp) +RAIDLEVEL=$(dialog --stdout --title "$PN" --default-item raid1 \ + --menu "Which RAID level do you want to use?" 0 0 0 \ + raid1 "Software RAID level 1" \ + raid5 "Software RAID level 5") +[ $? -eq 0 ] || bailout 20 + +MD_LIST=$(for i in $(seq 0 9) ; do + awk '{print $4}' /proc/partitions | grep md$i /proc/partitions || \ + echo "/dev/md$i /dev/md$i" + done) + +TARGET=$(dialog --stdout --title "$PN" --default-item /dev/md0 \ +--menu "Which device do you want to use for ${RAIDLEVEL}? + +Notice: activated devices will not be listed for security reasons. Anyway, please make sure the selected device is not in use already!" 0 0 0 \ +$MD_LIST) +[ $? -eq 0 ] || bailout 20 + +AVAILABLE_PARTITIONS=$(LANG=C fdisk -l 2>/dev/null | \ + sed 's/*//' | \ + grep -v 'Extended$' | \ + gawk -v num=0 -v ORS=' ' '/^\/dev\// {print $1}') +[ -n "$AVAILABLE_PARTITIONS" ] || echo "FIXME: no partitions available?" +PARTITION_LIST=$(for i in $(echo $AVAILABLE_PARTITIONS) ; do echo "$i $i off" ; done) + +dialog --title "$PN" \ + --single-quoted \ + --checklist "Please select the partitions you would like to use for your $RAIDLEVEL on ${TARGET}:" 0 0 0 \ + $PARTITION_LIST 2>$TMPFILE +RETVAL=$? +SELECTED_PARTITIONS=$(cat $TMPFILE) + +NUM_PARTITIONS=0 +for i in $(cat $TMPFILE) ; do + NUM_PARTITIONS=$(($NUM_PARTITIONS+1)) +done + +echo " +Debug: + +mdadm --create --verbose $TARGET --level=$RAIDLEVEL + --raid-devices=$NUM_PARTITIONS $SELECTED_PARTITIONS +" +} + +prompt_for_swraid() +{ +if dialog --stdout --title "$PN" \ + --defaultno --yesno "Do you want to configure Software RAID? + +Notice: currently only RAID levels 1 and 5 are +supported by ${PN}. Configuration will be +take place using mdadm." 0 0 ; then + config_swraid_setup +fi +} +# }}} # interactive mode {{{ interactive_mode() { - prompt_for_target + welcome_dialog + + prompt_for_swraid + + # do not prompt for partition dialog if swraid has been configured already + [ -n "$TARGET" ] || prompt_for_target + prompt_for_bootmanager + + [ -n "$BOOT_PARTITION" ] && GRUB="$(grubdevice $BOOT_PARTITION)" + [ -n "$TARGET" ] && GROOT="$(grubdevice $TARGET)" + prompt_for_mirror - grubdevice $TARGET - - # FIXME - echo "debug: BOOT_PARTITION=$BOOT_PARTITION" - echo "debug: TARGET=$TARGET" - echo "debug: MIRROR=$MIRROR" - echo "debug: GROOT=$GROOT" - # ask for raid - # ask for lvm } # run interactive mode if we didn't get the according configuration yet @@ -414,7 +478,7 @@ bailout(){ exit "$EXIT" } -trap bailout 1 2 3 15 +trap bailout HUP INT QUIT TERM # we want to execute all the functions only once, simple check for it: stage() { @@ -452,13 +516,12 @@ if [ -n "$AUTOINSTALL" ] ; then else # if not running automatic installation display configuration and prompt for execution: einfo "$PN - Please recheck configuration before execution:" echo - echo " Target: $TARGET" - case "$MNTPOINT" in "$TARGET") ;; *) echo " Mount point: $MNTPOINT" ;; esac - [ -n "$GRUB" ] && echo " Install grub to: $GRUB" - [ -n "$GROOT" ] && echo " Use root partition in grub: $GROOT" - [ -n "$RELEASE" ] && echo " Using release: $RELEASE" - [ -n "$MIRROR" ] && echo " Using mirror: $MIRROR" - [ -n "$ISO" ] && echo " Using iso: $ISO" + echo " Target: $TARGET" + case "$MNTPOINT" in "$TARGET") ;; *) echo " Mount point: $MNTPOINT" ;; esac + [ -n "$GRUB" ] && echo " Install grub: $GRUB" || echo " Install grub: no" + [ -n "$RELEASE" ] && echo " Using release: $RELEASE" + [ -n "$MIRROR" ] && echo " Using mirror: $MIRROR" + [ -n "$ISO" ] && echo " Using iso: $ISO" case "$MNTPOINT" in "$TARGET") ;; *) echo " Important! Continuing will delete all data from ${TARGET}!" ;; esac echo einfon "Is this ok for you? [y/N] "