X-Git-Url: https://git.grml.org/?p=grml-debootstrap.git;a=blobdiff_plain;f=grml-debootstrap;h=3c55932ee58d937771e268ee4a4d95e13f119d4c;hp=02015ce78c95833a0e9437fbce310d42ee77ee76;hb=ca382b6a00f5bb3232230b5033a4039e4531a25b;hpb=444d8dfca8c5fe66bad93e8e74d7d2eb4777712e diff --git a/grml-debootstrap b/grml-debootstrap index 02015ce..3c55932 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -40,8 +40,10 @@ Bootstrap options: -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: lenny). - -t, --target Target partition (/dev/...) or directory. - -p, --mntpoint Mountpoint used for mounting the target system. + -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. @@ -177,7 +179,7 @@ prompt_for_target() AVAILABLE_PARTITIONS=$(LANG=C fdisk -l 2>/dev/null | \ sed 's/*//' | \ grep -v 'Extended$' | \ - gawk -v num=0 -v ORS=' ' '/^\/dev\// {print $1}'; echo /dev/md*); + gawk -v num=0 -v ORS=' ' '/^\/dev\// {print $1}'; ls /dev/md* 2>/dev/null || true); if [ -z "$AVAILABLE_PARTITIONS" ] ; then dialog --title "$PN" --trim \ @@ -201,22 +203,39 @@ prompt_for_target() prompt_for_bootmanager() { ADDITIONAL_PARAMS="" - for device in sda hda; do - if [ /dev/$device != ${TARGET%[0-9]} ]; then + + if echo "$TARGET" | grep -q "/dev/md" ; then + MBRPART="all disks of Software RAID $TARGET" + else + # figure out whole disk device + found= + for device in /dev/disk/by-id/* + do + [ $(readlink -f $device) = ${TARGET} ] || continue + found=1 + break + done + [ -n "$found" ] && MBRDISK=$(echo ${device}|sed -e 's/-part[0-9][0-9]*$//') + if [ -e "$MBRDISK" ]; then + MBRDISK=$(readlink -f $MBRDISK) + else + # fall back to old behaviour + MBRDISK=$(echo ${TARGET} | sed -e 's/[0-9][0-9]*$/') + fi + + MBRPART="MBR of $MBRDISK" + fi + + for device in cciss/c0d0 sda hda; do + if [ /dev/$device != ${MBRDISK} ]; then grep -q $device /proc/partitions && \ - ADDITIONAL_PARAMS=:$device:"install bootmanager grub into MBR of /dev/${device}" + ADDITIONAL_PARAMS="$ADDITIONAL_PARAMS:$device:install bootmanager grub into MBR of /dev/$device" fi done ADDITIONAL_PARAMS=${ADDITIONAL_PARAMS#:} OIFS="$IFS"; IFS=: - if echo $TARGET | grep -q "/dev/md" ; then - MBRPART="all disks of Software RAID $TARGET" - else - MBRPART="MBR of ${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 $MBRPART" \ @@ -229,10 +248,10 @@ prompt_for_bootmanager() case "$GETMBR" in mbr) # /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}" + if echo "$TARGET" | grep -q "/dev/md" ; then + BOOT_PARTITION="$TARGET" else - BOOT_PARTITION="${TARGET%[0-9]}" + BOOT_PARTITION="$MBRDISK" fi ;; partition) @@ -491,10 +510,11 @@ else # if not running automatic installation display configuration and prompt fo 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" + [ -n "$GRUB" ] && echo " Install grub: $GRUB" || echo " Install grub: no" + [ -n "$RELEASE" ] && echo " Using release: $RELEASE" + [ -n "$MIRROR" ] && echo " Using mirror: $MIRROR" + [ -n "$HOSTNAME" ] && echo " Using hostname: $HOSTNAME" + [ -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] " @@ -734,14 +754,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 @@ -777,7 +797,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/