X-Git-Url: https://git.grml.org/?p=grml-debootstrap.git;a=blobdiff_plain;f=grml-debootstrap;h=79f10ad912d2a1b6f22fe1064d16aacb9f67873e;hp=16e1e2d5c02a11751e7779b341d6f2fd7f8e3dda;hb=f7894c712f146f42cedcd4352f1f3b2f90ce64c2;hpb=301721cec809fe020147a0c999e593ee81bbb98e diff --git a/grml-debootstrap b/grml-debootstrap index 16e1e2d..79f10ad 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 02:41:00 CEST 2008 [mika] ################################################################################ # http://www.debian.org/releases/stable/i386/index.html.en @@ -152,8 +151,8 @@ done # welcome screen {{{ welcome_dialog() { - dialog --title "$PN" --msgbox "Welcome to the interactive configuration of grml-debootstrap." 0 0 - # TODO: improve message + dialog --title "$PN" --yesno "Welcome to the interactive configuration of ${PN}. +Do you want to continue installing Debian using this frontend?" 0 0 } # }}} @@ -230,6 +229,18 @@ prompt_for_bootmanager() } # }}} +# ask for Debian release {{{ +prompt_for_release() +{ + RELEASE="$(dialog --stdout --title "${PN}" --default-item etch --menu \ + "Please enter the Debian release you would like to use for installation:" \ + 0 50 3 \ + etch Debian/stable \ + lenny Debian/testing \ + sid Debian/unstable)" +} +# }}} + # ask for Debian mirror {{{ prompt_for_mirror() { @@ -289,7 +300,7 @@ RAIDLEVEL=$(dialog --stdout --title "$PN" --default-item raid1 \ [ $? -eq 0 ] || bailout 20 MD_LIST=$(for i in $(seq 0 9) ; do - awk '{print $4}' /proc/partitions | grep md$i /proc/partitions || \ + awk '{print $4}' /proc/partitions | grep -q md$i || \ echo "/dev/md$i /dev/md$i" done) @@ -305,26 +316,45 @@ AVAILABLE_PARTITIONS=$(LANG=C fdisk -l 2>/dev/null | \ 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) +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) +SELECTED_PARTITIONS="$(cat $TMPFILE)" NUM_PARTITIONS=0 for i in $(cat $TMPFILE) ; do - NUM_PARTITIONS=$(($NUM_PARTITIONS+1)) + NUM_PARTITIONS=$((${NUM_PARTITIONS}+1)) done -echo " -Debug: +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 -mdadm --create --verbose $TARGET --level=$RAIDLEVEL - --raid-devices=$NUM_PARTITIONS $SELECTED_PARTITIONS -" } prompt_for_swraid() @@ -332,14 +362,61 @@ 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 +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 } # }}} +# make sure the user is aware of the used configuration {{{ +checkconfiguration() +{ +if [ -n "$AUTOINSTALL" ] ; then + if checkforrun ; then + eerror "Exiting as requested" ; eend 0 + exit 1 + fi +elif [ -n "$INTERACTIVE" ] ; then + + INFOTEXT="Please recheck configuration before execution: + " + [ -n "$TARGET" ] && INFOTEXT="$INFOTEXT + Target: $TARGET" + [ -n "$GRUB" ] && INFOTEXT="$INFOTEXT + Install grub: $GRUB" + [ -n "$RELEASE" ] && INFOTEXT="$INFOTEXT + Using release: $RELEASE" + [ -n "$MIRROR" ] && INFOTEXT="$INFOTEXT + Using mirror: $MIRROR" + + INFOTEXT="$INFOTEXT + +Is this ok for you? Notice: canceling will exit ${PN}." + + dialog --title "$PN" \ + --yesno "$INFOTEXT" 0 0 + +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: $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] " + read a + if ! [ "$a" = 'y' -o "$a" = 'Y' ] ; then + eerror "Exiting as requested." ; eend 1 + exit 1 + fi +fi +} +# }}} + # interactive mode {{{ interactive_mode() { @@ -352,14 +429,25 @@ interactive_mode() prompt_for_bootmanager - [ -n "$BOOT_PARTITION" ] && GRUB="$(grubdevice $BOOT_PARTITION)" - [ -n "$TARGET" ] && GROOT="$(grubdevice $TARGET)" + prompt_for_release + + # FIXME: there seems to be a problem with grubdevice if it's /dev/md* + if echo "$TARGET" | grep -q '/dev/md' ; then + echo "debug: SELECTED_PARTITIONS = $SELECTED_PARTITIONS">&2 + else + [ -n "$BOOT_PARTITION" ] && GRUB="$(grubdevice $BOOT_PARTITION)" + [ -n "$TARGET" ] && GROOT="$(grubdevice $TARGET)" + fi prompt_for_mirror + + checkconfiguration } # run interactive mode if we didn't get the according configuration yet if [ -z "$TARGET" -o -n "$INTERACTIVE" ] ; then + # only target might be unset, so make sure the INTERACTIVE flag is set as well + INTERACTIVE=1 interactive_mode fi # }}} @@ -501,38 +589,13 @@ 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 } -if [ -n "$AUTOINSTALL" ] ; then - if checkforrun ; then - eerror "Exiting as requested" ; eend 0 - exit 1 - fi -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: $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] " - read a - if ! [ "$a" = 'y' -o "$a" = 'Y' ] ; then - eerror "Exiting as requested." ; eend 1 - exit 1 - fi -fi -# }}} - # create filesystem {{{ mkfs() { if [ -n "$MKFS" ] ; then @@ -602,6 +665,12 @@ preparechroot() { # make sure we have our files for later use via chroot-script cp /etc/debootstrap/config $MNTPOINT/etc/debootstrap/ + # make sure we adjust the configuration variables accordingly: + sed -i "s/RELEASE=.*/RELEASE='${RELEASE}'/" $MNTPOINT/etc/debootstrap/config + sed -i "s/TARGET=.*/TARGET='${TARGET}'/" $MNTPOINT/etc/debootstrap/config + sed -i "s/GRUB=.*/GRUB='${GRUB}'/" $MNTPOINT/etc/debootstrap/config + sed -i "s/GROOT=.*/GROOT='${GROOT}'/" $MNTPOINT/etc/debootstrap/config + cp /etc/debootstrap/packages $MNTPOINT/etc/debootstrap/packages cp $CHROOT_VARIABLES $MNTPOINT/etc/debootstrap/variables # do NOT use $CHROOT_VARIABLES inside chroot! @@ -610,6 +679,12 @@ preparechroot() { # make sure we can access network [relevant for cdebootstrap] [ -f "$MNTPOINT/etc/resolv.conf" ] || cp /etc/resolv.conf $MNTPOINT/etc/resolv.conf + # provide system's /etc/hosts to the target: + if ! [ -f "$MNTPOINT/etc/hosts" ] ; then + cp /etc/hosts $MNTPOINT/etc/hosts + sed -i "s/127.0.0.1 .*/127.0.0.1 localhost $HOSTNAME/" /etc/hosts + fi + # setup default locales [ -n "$LOCALES" ] && cp /etc/debootstrap/locale.gen $MNTPOINT/etc/locale.gen @@ -650,6 +725,14 @@ chrootscript() { grub_install() { if [ -z "$GRUB" -o -z "$GROOT" ] ; then echo "Notice: \$GRUB or \$GROOT not defined, will not install grub therefor." + elif [ -n "$SELECTED_PARTITIONS" ] ; then # using sw-raid + for device in $SELECTED_PARTITIONS ; do + GRUB=$(grubdevice $device) + einfo "Installing grub on ${GRUB}:" + [ -x /usr/sbin/grub-install ] && GRUBINSTALL=/usr/sbin/grub-install || GRUBINSTALL=/sbin/grub-install + $GRUBINSTALL --root-directory="$MNTPOINT" "(${GRUB})" + eend $? + done else einfo "Installing grub on ${GRUB}:" [ -x /usr/sbin/grub-install ] && GRUBINSTALL=/usr/sbin/grub-install || GRUBINSTALL=/sbin/grub-install @@ -693,7 +776,7 @@ fscktool() { for i in mkfs tunefs mount_target debootstrap_system preparechroot \ chrootscript grub_install umount_chroot fscktool ; do if stage "${i}" ; then - $i && stage "${i}" done || bailout 2 "i" + $i && ( stage "${i}" done && rmdir "${STAGES}/${1}" ) || bailout 2 "i" fi done # }}} @@ -705,10 +788,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 # }}}