X-Git-Url: https://git.grml.org/?p=grml-debootstrap.git;a=blobdiff_plain;f=grml-debootstrap;h=cc97ebd91e25ec3b3ded40c2f7885c97525137f3;hp=3cf7612fc3f38b11ec8a82db0d8ba4fd207afa3b;hb=7540b11c2352b5895e11b957a3200e8a12209c26;hpb=c4abd9bf4ad9a894a2301f556e22fd91d0572f6c diff --git a/grml-debootstrap b/grml-debootstrap index 3cf7612..cc97ebd 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -11,7 +11,7 @@ set -e # exit on any error # variables {{{ PN="$(basename $0)" -VERSION='0.30' +VERSION='0.31' MNTPOINT="/mnt/debootstrap.$$" # inside the chroot system locales might not be available, so use minimum: @@ -328,7 +328,7 @@ prompt_for_mirror() ) if [ "$CHOOSE_MIRROR" = 'net' ] ; then - [ -n "$MIRROR" ] || MIRROR='ftp://ftp.de.debian.org/debian' + [ -n "$MIRROR" ] || MIRROR='http://cdn.debian.net/debian' MIRROR="$(dialog --stdout --title "${PN}" --inputbox \ "Please enter Debian mirror you would like to use for installing packages." \ 0 0 $MIRROR)" @@ -350,33 +350,48 @@ grubdevice() { fi device="$1" - device_map=/boot/grub/device.map + device_map=$(mktemp) # create device.map - if ! [ -f "$device_map" ] ; then - echo 'quit' | grub --device-map="$device_map" 1>/dev/null 2>&1 + if which grub >/dev/null 2>&1 ; then + echo 'quit' | grub --device-map="$device_map" >/dev/null 2>&1 + elif which grub-mkdevicemap >/dev/null 2>&1 ; then + grub-mkdevicemap --no-floppy --device-map="$device_map" >/dev/null 2>&1 + else + echo "Error: neither grub nor grub-mkdevicemap command found." >&2 + return 1 fi # 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%' \ + tmp_disk=$(echo "$device" | sed -e 's%\(\(s\|h\|v\|xv\)d[a-z]\)[0-9]*$%\1%' \ -e 's%\(fd[0-9]*\)$%\1%' \ -e 's%/part[0-9]*$%/disc%' \ - -e 's%\(c[0-7]d[0-9]*\).*$%\1%'` - tmp_part=`echo "$device" | sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' \ + -e 's%\(c[0-7]d[0-9]*\).*$%\1%' \ + -e 's%\(mmcblk[0-9]d[0-9]*\).*$%\1%' \ + -e 's%\(/mapper/mpath[0-9]\+\)-part[0-9]\+$%\1%') + tmp_part=$(echo "$device" | sed -e 's%.*/\(s\|h\|v\|xv\)d[a-z]\([0-9]*\)$%\2%' \ -e 's%.*/fd[0-9]*$%%' \ -e 's%.*/floppy/[0-9]*$%%' \ -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \ - -e 's%.*c[0-7]d[0-9]*p*%%'` + -e 's%.*c[0-7]d[0-9]*p*%%' \ + -e 's%.*mmcblk[0-9]d[0-9]*p%%' \ + -e 's%.*/mapper/mpath[0-9]\+-part\([0-9]\+\)%\1%') tmp_drive=$(grep -v '^#' $device_map | grep "$tmp_disk *$" | sed 's%.*\([hf]d[0-9][a-g0-9,]*\).*%\1%') + if [ -z "$tmp_drive" ]; then + echo "Error: $device does not have any corresponding BIOS drive." >&2 + return 1 + fi + case $1 in /dev/[sh]d[a-z]) # we expect something like 'hd0' echo "$tmp_drive" ;; *) # we expect something like 'hd0,0' - echo "$tmp_drive" | sed "s%$%,`expr $tmp_part - 1`%" # FIXME => md0 + echo "$tmp_drive" | sed "s%$%,$(expr $tmp_part - 1)%" # FIXME => md0 ;; esac + rm -f "$device_map" } # }}} @@ -559,7 +574,6 @@ interactive_mode() TMPDEVICE=$(echo ${SELECTED_PARTITIONS} | awk '{print $1}') # use first disk only GRUB="$(grubdevice ${TMPDEVICE%%[0-9]})" # like: hd0 GROOT="$(grubdevice ${TMPDEVICE})" # like: hd0,0 - echo "debug: GRUB = $GRUB - GROOT = $GROOT" >/tmp/debug # FIXME fi else [ -n "$BOOT_PARTITION" ] && GRUB="$(grubdevice $BOOT_PARTITION)" @@ -790,18 +804,19 @@ preparechroot() { touch $CHROOT_VARIABLES chmod 600 $CHROOT_VARIABLES # make sure nobody except root can read it echo "# Configuration of ${PN}" > $CHROOT_VARIABLES - [ -n "$ARCH" ] && echo "ARCH=$ARCH" >> $CHROOT_VARIABLES - [ -n "$GROOT" ] && echo "GROOT=$GROOT" >> $CHROOT_VARIABLES - [ -n "$GRUB" ] && echo "GRUB=$GRUB" >> $CHROOT_VARIABLES - [ -n "$HOSTNAME" ] && echo "HOSTNAME=$HOSTNAME" >> $CHROOT_VARIABLES - [ -n "$ISODIR" ] && echo "ISODIR=$ISO" >> $CHROOT_VARIABLES - [ -n "$ISO" ] && echo "ISO=$ISO" >> $CHROOT_VARIABLES - [ -n "$MIRROR" ] && echo "MIRROR=$MIRROR" >> $CHROOT_VARIABLES + [ -n "$ARCH" ] && echo "ARCH=$ARCH" >> $CHROOT_VARIABLES + [ -n "$GROOT" ] && echo "GROOT=$GROOT" >> $CHROOT_VARIABLES + [ -n "$GRUB" ] && echo "GRUB=$GRUB" >> $CHROOT_VARIABLES + [ -n "$HOSTNAME" ] && echo "HOSTNAME=$HOSTNAME" >> $CHROOT_VARIABLES + [ -n "$INSTALL_NOTES" ] && echo "INSTALL_NOTES=$INSTALL_NOTES" >> $CHROOT_VARIABLES + [ -n "$ISODIR" ] && echo "ISODIR=$ISO" >> $CHROOT_VARIABLES + [ -n "$ISO" ] && echo "ISO=$ISO" >> $CHROOT_VARIABLES + [ -n "$MIRROR" ] && echo "MIRROR=$MIRROR" >> $CHROOT_VARIABLES [ -n "$KEEP_SRC_LIST" ] && echo "KEEP_SRC_LIST=$KEEP_SRC_LIST" >> $CHROOT_VARIABLES - [ -n "$PACKAGES" ] && echo "PACKAGES=$PACKAGES" >> $CHROOT_VARIABLES - [ -n "$ROOTPASSWORD" ] && echo "ROOTPASSWORD=$ROOTPASSWORD" >> $CHROOT_VARIABLES - [ -n "$TARGET" ] && echo "TARGET=$TARGET" >> $CHROOT_VARIABLES - [ -n "$TARGET_UUID" ] && echo "TARGET_UUID=$TARGET_UUID" >> $CHROOT_VARIABLES + [ -n "$PACKAGES" ] && echo "PACKAGES=$PACKAGES" >> $CHROOT_VARIABLES + [ -n "$ROOTPASSWORD" ] && echo "ROOTPASSWORD=$ROOTPASSWORD" >> $CHROOT_VARIABLES + [ -n "$TARGET" ] && echo "TARGET=$TARGET" >> $CHROOT_VARIABLES + [ -n "$TARGET_UUID" ] && echo "TARGET_UUID=$TARGET_UUID" >> $CHROOT_VARIABLES cp $VERBOSE $CONFFILES/chroot-script $MNTPOINT/bin/chroot-script chmod 755 $MNTPOINT/bin/chroot-script @@ -815,6 +830,11 @@ preparechroot() { sed -i "s#GRUB=.*#GRUB=\"$GRUB\"#" $MNTPOINT/etc/debootstrap/config sed -i "s#GROOT=.*#GROOT=\"$GROOT\"#" $MNTPOINT/etc/debootstrap/config + # install notes: + if [ -n "$INSTALL_NOTES" ] ; then + [ -r "$INSTALL_NOTES" ] && cp "$INSTALL_NOTES" $MNTPOINT/etc/debootstrap/ + fi + # package selection: cp $VERBOSE ${_opt_packages:-$CONFFILES/packages} \ $MNTPOINT/etc/debootstrap/packages @@ -926,8 +946,14 @@ grub_install() { } # }}} -# unmount $MNTPOINRT {{{ +# unmount $MNTPOINT {{{ umount_chroot() { + + # display installation notes: + if [ -n "$INSTALL_NOTES" ] ; then + [ -r "${MNTPOINT}/${INSTALL_NOTES}" ] && cat "${MNTPOINT}/${INSTALL_NOTES}" + fi + if [ -n "$ISODIR" ] ; then if grep -q "$ISODIR" /proc/mounts ; then einfo "Unmount $MNTPOINT/$ISODIR"