X-Git-Url: https://git.grml.org/?p=grml-debootstrap.git;a=blobdiff_plain;f=grml-debootstrap;h=43f19ed06f8c999568543f36078e731a645a2d0b;hp=221f8d3516b49cfc37a1827b82a70c1c7e8e8841;hb=ed31724625a40d9d38f084e384c253d9373ef7c7;hpb=a5179c01b059a4f48e63a5b7d2fc3408a1483531 diff --git a/grml-debootstrap b/grml-debootstrap index 221f8d3..43f19ed 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -4,7 +4,6 @@ # 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] ################################################################################ # http://www.debian.org/releases/stable/i386/index.html.en @@ -149,6 +148,14 @@ while [ "$#" -gt "0" ] ; do done # }}} +# welcome screen {{{ +welcome_dialog() +{ + dialog --title "$PN" --yesno "Welcome to the interactive configuration of ${PN}. +Do you want to continue installing Debian using this frontend?" 0 0 +} +# }}} + # ask for target {{{ prompt_for_target() { @@ -199,7 +206,6 @@ prompt_for_bootmanager() case "$GETMBR" in mbr) - USE_MBR=1 # /dev/md0: has to be installed in MBR of /dev/md0 and not in /dev/md: if echo $TARGET | grep -q "*md*" ; then BOOT_PARTITION="${TARGET}" @@ -211,11 +217,9 @@ prompt_for_bootmanager() BOOT_PARTITION="$TARGET" ;; hda) - USE_MBR=1 BOOT_PARTITION="/dev/hda" ;; sda) - USE_MBR=1 BOOT_PARTITION="/dev/sda" ;; nowhere) @@ -250,7 +254,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%' \ @@ -267,37 +271,108 @@ grubdevice() { 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 - echo "$tmp_drive" | sed "s%$%,`expr $tmp_part - 1`%" - else - 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 -q md$i || \ + 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 $(vol_id --type $i 2>/dev/null || echo [no_filesystem_yet]) 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 + +ERRORFILE=$(mktemp) +set +e +# TODO: better error handling? +yes | mdadm --create "${TARGET}" --level="${RAIDLEVEL}" \ + --raid-devices="${NUM_PARTITIONS}" ${SELECTED_PARTITIONS} 1>/dev/null 2>$ERRORFILE +RC=$? +set -e + +if [ "$RC" = 0 ] ; then + dialog --title "$PN" --msgbox \ + "Creating $TARGET was successful." 0 0 + rm -f "$TMPFILE" "$ERRORFILE" +else + dialog --title "$PN" --msgbox \ + "There was an error setting up $TARGET: + +$(cat $ERRORFILE) + +Exiting." 0 0 + rm -f "$TMPFILE" "$ERRORFILE" + exit 1 +fi + +} + +prompt_for_swraid() +{ +if dialog --stdout --title "$PN" \ + --defaultno --yesno "Do you want to configure Software RAID? + +Please notice that currently only RAID levels 1 and 5 are supported by ${PN}. Configuration will 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 - prompt_for_mirror + # FIXME: there seems to be a problem with grubdevice if it's /dev/md* [ -n "$BOOT_PARTITION" ] && GRUB="$(grubdevice $BOOT_PARTITION)" [ -n "$TARGET" ] && GROOT="$(grubdevice $TARGET)" - # FIXME - echo "debug: BOOT_PARTITION=$BOOT_PARTITION" - echo "debug: TARGET=$TARGET" - echo "debug: MIRROR=$MIRROR" - echo "debug: GROOT=$GROOT" - echo "debug: GRUB=$GRUB" - - # TODO - # ask for raid - # ask for lvm + prompt_for_mirror } # run interactive mode if we didn't get the according configuration yet @@ -443,8 +518,8 @@ checkforrun() { dialog --timeout 10 --title "$PN" \ --yesno "Do you want to stop at this stage? -Notice: you are running grml-debootstrap in non-interactive mode. -grml-debootstrap will install Debian ${RELEASE} on ${TARGET}. +Notice: you are running ${PN} in non-interactive mode. +${PN} will install Debian ${RELEASE} on ${TARGET}. Last chance to quit. Timeout of 10 seconds running.... Do you want to stop now?" 0 0 2>/dev/null @@ -647,10 +722,9 @@ done # end dialog of autoinstallation {{{ if [ -n "$AUTOINSTALL" ] ; then dialog --title "$PN" --msgbox \ - "Finished execution of ${0}. -Enjoy your Debian system." 6 60 + "Finished execution of ${PN}. Enjoy your Debian system." 0 0 else - einfo "Finished execution of $PN - enjoy your Debian system." ; eend 0 + einfo "Finished execution of ${PN}. Enjoy your Debian system." ; eend 0 fi # }}}