X-Git-Url: https://git.grml.org/?p=grml-debootstrap.git;a=blobdiff_plain;f=grml-debootstrap;h=0d2efbb1f2f8f68aa469c679618ed73f48ea25e3;hp=761945d94a84d55f36e6f019bc960c0e7ea9f12a;hb=87394f3ff5c561c572d786c96c4231503ccfb2f2;hpb=edb714ea01d5094f37966a00fd279f8c97b504e7 diff --git a/grml-debootstrap b/grml-debootstrap index 761945d..0d2efbb 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -11,7 +11,7 @@ set -e # exit on any error # variables {{{ PN="$(basename $0)" -VERSION='0.27' +VERSION='0.28' MNTPOINT="/mnt/debootstrap.$$" # inside the chroot system locales might not be available, so use minimum: @@ -39,10 +39,12 @@ Bootstrap options: -m, --mirror Mirror which should be used for apt-get/aptitude. -i, --iso Mountpoint where a Debian ISO is mounted to, for use instead of fetching packages from a mirror. - -r, --release Release of new Debian system (default: stable). - -t, --target Target partition (/dev/...) or directory. - -p, --mntpoint Mountpoint used for mounting the target system. - --debopt Extra parameters passed to the debootstrap. + -r, --release Release of new Debian system (default: lenny). + -t, --target Target partition (/dev/...) or directory where the + system should be installed to. + -p, --mntpoint Mountpoint used for mounting the target system, + has no effect if -t is given and represents a directory. + --debopt Extra parameters passed to the debootstrap command. --interactive Use interactive mode (frontend). --nodebootstrap Skip debootstrap, only do configuration to the target. --groot Root device for usage in grub, corresponds with @@ -298,9 +300,25 @@ prompt_for_password() # ask for Debian mirror {{{ prompt_for_mirror() { - MIRROR="$(dialog --stdout --title "${PN}" --inputbox \ - "Please enter Debian mirror you would like to use for installing packages." \ - 0 0 $MIRROR)" + [ -n "$ISO" ] && DEFAULT_MIRROR='local' || DEFAULT_MIRROR='net' + + CHOOSE_MIRROR=$(dialog --stdout --title "$PN" --default-item $DEFAULT_MIRROR \ + --menu "Where do you want to install from?" 0 0 0 \ + net "install via network (downloading from mirror)" \ + local "install from local directory/mirror" + ) + + if [ "$CHOOSE_MIRROR" = 'net' ] ; then + [ -n "$MIRROR" ] || MIRROR='ftp://ftp.de.debian.org/debian' + MIRROR="$(dialog --stdout --title "${PN}" --inputbox \ + "Please enter Debian mirror you would like to use for installing packages." \ + 0 0 $MIRROR)" + else # CHROOT_VARIABLES == local + [ -n "$ISO" ] || ISO='/mnt/mirror' + ISO="$(dialog --stdout --title "${PN}" --inputbox \ + "Please enter directory name you would like to use for installing packages." \ + 0 0 $ISO)" + fi } # }}} @@ -460,6 +478,8 @@ elif [ -n "$INTERACTIVE" ] ; then Using hostname $HOSTNAME" [ -n "$MIRROR" ] && INFOTEXT="$INFOTEXT Using mirror: $MIRROR" + [ -n "$ISO" ] && INFOTEXT="$INFOTEXT + Using ISO: $ISO" INFOTEXT="$INFOTEXT @@ -476,7 +496,7 @@ else # if not running automatic installation display configuration and prompt fo [ -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" + [ -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] " @@ -496,8 +516,7 @@ interactive_mode() prompt_for_swraid - # do not prompt for partition dialog if swraid has been configured already - [ -n "$TARGET" ] || prompt_for_target + prompt_for_target prompt_for_bootmanager @@ -620,7 +639,12 @@ bailout(){ [ -x "$MNTPOINT"/bin/umount ] && chroot "$MNTPOINT" umount /proc 1>/dev/null 2>&1 [ -x "$MNTPOINT"/bin/umount ] && chroot "$MNTPOINT" umount /proc 1>/dev/null 2>&1 [ -d "$MNTPOINT/$ISODIR" ] && umount "$MNTPOINT/$ISODIR" 1>/dev/null 2>&1 - einfo "Unmounting $MNTPOINT" ; umount "$MNTPOINT" ; eend $? + + if [ -n "$DIRECTORY" ] ; then + einfo "Not unmounting $MNTPOINT as you requested me to install into a directory of your own choice." ; eend 0 + else + einfo "Unmounting $MNTPOINT" ; umount "$MNTPOINT" ; eend $? + fi if [ -n "$STAGES" ] ; then echo -n "Removing stages directory ${STAGES}: " @@ -658,11 +682,21 @@ stage() { # create filesystem {{{ mkfs() { - if [ -n "$MKFS" ] ; then - einfo "Running $MKFS on $TARGET" - $MKFS $TARGET - TARGET_UUID="$(vol_id -u $TARGET 2>/dev/null || echo '')" - eend $? + if [ -n "$DIRECTORY" ] ; then + einfo "Running grml-debootstrap on a directory, skipping mkfs stage." + else + if grep -q "$TARGET" /proc/mounts ; then + eerror "$TARGET already mounted, exiting to avoid possible damage. (Manually unmount $TARGET)" ; eend 1 + exit 1 + fi + + if [ -n "$MKFS" ] ; then + einfo "Running $MKFS on $TARGET" + $MKFS $TARGET + TARGET_UUID="$(vol_id -u $TARGET 2>/dev/null || echo '')" + eend $? + fi + fi } # }}} @@ -683,7 +717,7 @@ mount_target() { einfo "Running grml-debootstrap on a directory, nothing to mount." else if grep -q $TARGET /proc/mounts ; then - eerror "$TARGET already mounted, exiting." + ewarn "$TARGET already mounted, continuing anyway." ; eend 0 else [ -d "$MNTPOINT" ] || mkdir -p "$MNTPOINT" einfo "Mounting $TARGET to $MNTPOINT" @@ -702,14 +736,14 @@ mount_target() { # install main chroot {{{ debootstrap_system() { - if ! grep -q $MNTPOINT /proc/mounts ; then + if ! grep -q "$MNTPOINT" /proc/mounts ; then mount_target fi if [ "$_opt_nodebootstrap" ]; then einfo "Skipping debootstrap as requested." return fi - if grep -q $MNTPOINT /proc/mounts || [ -n "$DIRECTORY" ] ; then + if grep -q "$MNTPOINT" /proc/mounts || [ -n "$DIRECTORY" ] ; then einfo "Running $DEBOOTSTRAP $DEBOOTSTRAP_OPT for release ${RELEASE}${ARCHINFO} using ${MIRROR}${ISO}" [ -n "$MIRROR" ] && $DEBOOTSTRAP $ARCHCMD $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $MIRROR || \ $DEBOOTSTRAP $ARCHCMD $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $ISO @@ -745,7 +779,7 @@ preparechroot() { cp $VERBOSE $CONFFILES/chroot-script $MNTPOINT/bin/chroot-script chmod 755 $MNTPOINT/bin/chroot-script - mkdir $MNTPOINT/etc/debootstrap/ + [ -d "$MNTPOINT"/etc/debootstrap/ ] || mkdir "$MNTPOINT"/etc/debootstrap/ # make sure we have our files for later use via chroot-script cp $VERBOSE $CONFFILES/config $MNTPOINT/etc/debootstrap/ @@ -875,6 +909,7 @@ umount_chroot() { eend $? fi fi + if grep -q "$MNTPOINT" /proc/mounts ; then if [ -n "$PARTITION" ] ; then einfo "Unmount $MNTPOINT"