X-Git-Url: https://git.grml.org/?p=grml-debootstrap.git;a=blobdiff_plain;f=grml-debootstrap;h=9b8c47d62f7a2544f2530644149614433422f25f;hp=93bcbbf586baa9cb1e2620df0aaaa894d23ffd63;hb=cb7144264f65932963e9d2968e91b466eab62be2;hpb=e781fc540f6654d5249813f85ff7fb49de73396f diff --git a/grml-debootstrap b/grml-debootstrap index 93bcbbf..9b8c47d 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -6,6 +6,38 @@ # License: This file is licensed under the GPL v2+ ################################################################################ +# error_handler {{{ +[ -n "$REPORT_TRAP_ERR" ] || REPORT_TRAP_ERR='no' +[ -n "$FAIL_TRAP_ERR" ] || FAIL_TRAP_ERR='no' + +error_handler() { + last_exit_code="$?" + last_bash_command="$BASH_COMMAND" + if [ "$REPORT_TRAP_ERR" = "yes" ]; then + echo "Unexpected non-zero exit code $last_exit_code in $BASH_SOURCE at line $BASH_LINENO detected! +last bash command: $last_bash_command" + fi + if [ ! "$FAIL_TRAP_ERR" = "yes" ]; then + return + fi + ## Check if "bailout" function is available. + ## This is not the case in chroot-script. + if command -v bailout >/dev/null 2>&1; then + bailout 1 + else + echo 'FAIL_TRAP_ERR is set to "yes", exit 1.' + exit 1 + fi +} + +if [ "$REPORT_TRAP_ERR" = "yes" ] || [ "$FAIL_TRAP_ERR" = "yes" ]; then + set -E + set -o pipefail + trap "error_handler" ERR + export -f "error_handler" +fi +# }}} + # variables {{{ PN="$(basename "$0")" if [[ -d "$(dirname "$(which "$0")")"/.git ]]; then @@ -389,7 +421,7 @@ fi # make sure we have what we need {{{ if [ -n "$VIRTUAL" ] ; then - check4progs grub-mkimage kpartx mksh parted qemu-img || bailout 1 + check4progs kpartx mksh parted qemu-img || bailout 1 fi # }}} @@ -535,6 +567,7 @@ prompt_for_release() squeeze Debian/6.0 \ wheezy Debian/7.0 \ jessie Debian/8.0 \ + stretch Debian/9.0 \ sid Debian/unstable)" [ $? -eq 0 ] || bailout } @@ -838,7 +871,7 @@ fi # Support for generic release codenames is unavailable. {{{ if [ "$RELEASE" = "stable" ] || [ "$RELEASE" = "testing" ] ; then eerror "Generic release codenames (stable, testing) are unsupported. \ -Please use specific codenames such as lenny, squeeze, wheezy or jessie." ; eend 1 +Please use specific codenames such as lenny, squeeze, wheezy, jessie or stretch." ; eend 1 bailout 1 fi # }}} @@ -1092,12 +1125,15 @@ finalize_vm() { bailout 1 fi - einfo "Installing Grub as bootloader." mount -t proc none "${MNTPOINT}"/proc mount -t sysfs none "${MNTPOINT}"/sys mount --bind /dev "${MNTPOINT}"/dev mount --bind /dev/pts "${MNTPOINT}"/dev/pts +# Has chroot-script installed GRUB to MBR using grub-install (successfully), already? +# chroot-script skips installation for unset ${GRUB} +if [[ -z "${GRUB}" ]] || ! dd if="${GRUB}" bs=512 count=1 2>/dev/null | cat -v | fgrep -q GRUB; then + einfo "Installing Grub as bootloader." mkdir -p "${MNTPOINT}/boot/grub" if ! [ -d "${MNTPOINT}"/usr/lib/grub/i386-pc/ ] ; then eerror "Error: grub not installed inside Virtual Machine. Can not install bootloader." ; eend 1 @@ -1115,6 +1151,7 @@ finalize_vm() { chroot "${MNTPOINT}" grub-mkimage -O i386-pc -p "(hd0,msdos1)/boot/grub" -o /tmp/core.img biosdisk part_msdos ext2 dd if="${MNTPOINT}/tmp/core.img" of="${ORIG_TARGET}" conv=notrunc seek=4 rm -f "${MNTPOINT}/tmp/core.img" +fi einfo "Updating grub configuration file." if [ -n "$BOOT_APPEND" ] ; then @@ -1132,7 +1169,7 @@ finalize_vm() { umount "${MNTPOINT}"/proc umount "${MNTPOINT}"/sys umount "${MNTPOINT}"/dev/pts - umount "${MNTPOINT}"/dev + try_umount 3 "${MNTPOINT}"/dev umount "${MNTPOINT}" kpartx -d "${ORIG_TARGET}" >/dev/null } @@ -1398,7 +1435,7 @@ chrootscript() { mount --bind /dev "$MNTPOINT"/dev mount --bind /dev/pts "$MNTPOINT"/dev/pts if [ "$DEBUG" = "true" ] ; then - chroot "$MNTPOINT" /bin/sh -x /bin/chroot-script ; RC=$? + chroot "$MNTPOINT" /bin/bash -x /bin/chroot-script ; RC=$? else chroot "$MNTPOINT" /bin/chroot-script ; RC=$? fi