X-Git-Url: https://git.grml.org/?a=blobdiff_plain;f=grml-debootstrap;h=dfef90bd0b5158feaa20dfea2712b9e975629184;hb=df9c1ae2086610336fe7334a107dfe806765935a;hp=d671de87aa4799f6fd61aefae508de0f5c6d56ef;hpb=19dc059a0f67699116d83305ce8f0320ef0fe613;p=grml-debootstrap.git diff --git a/grml-debootstrap b/grml-debootstrap index d671de8..dfef90b 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -13,6 +13,12 @@ error_handler() { last_bash_command="$BASH_COMMAND" echo "Unexpected non-zero exit code $last_exit_code in ${BASH_SOURCE[*]} at line ${BASH_LINENO[*]} detected! last bash command: $last_bash_command" + if [ -r "$MNTPOINT/debootstrap/debootstrap.log" ] && \ + [ -s "$MNTPOINT/debootstrap/debootstrap.log" ] ; then + einfo "Presenting last ten lines of debootstrap.log:" + tail -10 "${MNTPOINT}"/debootstrap/debootstrap.log + einfo "End of debootstrap.log" + fi ## Check if "bailout" function is available. ## This is not the case in chroot-script. if command -v bailout >/dev/null 2>&1; then @@ -251,9 +257,7 @@ cleanup() { einfo "Removing ${STAGES}" ; rmdir "$STAGES" || eend $? fi - if findmnt "${MNTPOINT}"/boot/efi &>/dev/null ; then - umount "${MNTPOINT}"/boot/efi - fi + try_umount 3 "${MNTPOINT}"/boot/efi # Remove temporary mountpoint again if echo "$MNTPOINT" | grep -q '/mnt/debootstrap\.' ; then @@ -282,14 +286,14 @@ cleanup() { done if [ -n "$ISODIR" ] ; then - [ -d "$MNTPOINT/$ISODIR" ] && umount "$MNTPOINT/$ISODIR" >/dev/null 2>&1 || true + try_umount 3 "$MNTPOINT/$ISODIR" >/dev/null 2>&1 || true fi if [ -n "$DIRECTORY" ] ; then einfo "Not unmounting $MNTPOINT as you requested me to install into a directory of your own choice." else einfo "Unmounting $MNTPOINT" - umount "$MNTPOINT" || eend $? + try_umount 3 "$MNTPOINT" fi if [ -n "$STAGES" ] ; then @@ -906,10 +910,12 @@ while IFS= read -r i; do done < "$TMPFILE" ERRORFILE=$(mktemp) + +local RC=0 # shellcheck disable=SC2086 yes | mdadm --create "${TARGET}" --level="${RAIDLEVEL}" \ - --raid-devices="${NUM_PARTITIONS}" ${SELECTED_PARTITIONS} >/dev/null 2>$ERRORFILE -RC=$? + --raid-devices="${NUM_PARTITIONS}" ${SELECTED_PARTITIONS} >/dev/null 2>$ERRORFILE || RC=$? + if [ "$RC" = 0 ] ; then dialog --title "$PN" --msgbox \ "Creating $TARGET was successful." 0 0 @@ -967,9 +973,7 @@ format_efi_partition() { einfo "EFI partition $EFI seems to have a FAT filesystem, not modifying." else einfo "EFI partition $EFI doesn't seem to be formatted, creating filesystem." - mkfs.fat -F32 -n "EFI" "$EFI" - RC=$? - if [ ! $RC -eq 0 ] ; then + if ! mkfs.fat -F32 -n "EFI" "$EFI" ; then eerror "Error while creating filesystem on ${EFI}." bailout 1 fi @@ -1315,7 +1319,7 @@ mkfs() { einfo "Running $MKFS $MKFS_OPTS on $TARGET" # shellcheck disable=SC2086 - "$MKFS" $MKFS_OPTS "$TARGET" ; RC=$? + "$MKFS" $MKFS_OPTS "$TARGET" if [ "$FIXED_DISK_IDENTIFIERS" = "yes" ] ; then if ! echo "$MKFS" | grep -q "mkfs.ext" ; then @@ -1352,7 +1356,6 @@ mkfs() { # race conditions :-/ sleep 2 - eend $RC fi } # }}} @@ -1483,7 +1486,7 @@ prepare_vm() { if [ "$ARCH" = 'arm64' ]; then einfo "Setting up GPT partitions for arm64" parted -s "${TARGET}" 'mklabel gpt' - parted -s "${TARGET}" 'mkpart EFI fat32 1MiB 10MiB' + parted -s "${TARGET}" 'mkpart ESP fat32 1MiB 10MiB' parted -s "${TARGET}" 'set 1 boot on' parted -s "${TARGET}" 'mkpart LINUX ext4 10MiB 100%' else @@ -1672,19 +1675,14 @@ grub_install() { # workaround for Debian bug #918590 with lvm + udev: # WARNING: Device /dev/... not initialized in udev database even after waiting 10000000 microseconds - if mountpoint "${MNTPOINT}"/run/udev &>/dev/null ; then - einfo "Unmounting bind-mount /run/udev" - umount "${MNTPOINT}"/run/udev - fi + try_umount 3 "${MNTPOINT}"/run/udev - umount "${MNTPOINT}"/proc - umount "${MNTPOINT}"/sys - umount "${MNTPOINT}"/dev/pts + try_umount 3 "${MNTPOINT}"/proc + try_umount 3 "${MNTPOINT}"/sys + try_umount 3 "${MNTPOINT}"/dev/pts try_umount 3 "${MNTPOINT}"/dev - if findmnt "${MNTPOINT}"/boot/efi &>/dev/null ; then - umount "${MNTPOINT}"/boot/efi - fi + try_umount 3 "${MNTPOINT}"/boot/efi } # }}} @@ -1695,11 +1693,9 @@ umount_target() { return 0 fi - if findmnt "${MNTPOINT}"/boot/efi &>/dev/null ; then - umount "${MNTPOINT}"/boot/efi - fi + try_umount 3 "${MNTPOINT}"/boot/efi - umount "${MNTPOINT}" + try_umount 3 "${MNTPOINT}" kpartx -d "${ORIG_TARGET}" >/dev/null # Workaround for a bug in kpartx which doesn't clean up properly, # see Debian Bug #891077 and Github-PR grml/grml-debootstrap#112 @@ -1728,25 +1724,12 @@ debootstrap_system() { einfo "Executing: $DEBOOTSTRAP $ARCHCMD $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $ISO" # shellcheck disable=SC2086 "$DEBOOTSTRAP" $ARCHCMD $DEBOOTSTRAP_OPT "$RELEASE" "$MNTPOINT" "$ISO" - RC=$? else einfo "Running $DEBOOTSTRAP $DEBOOTSTRAP_OPT for release ${RELEASE}${ARCHINFO} using ${MIRROR}" einfo "Executing: $DEBOOTSTRAP $ARCHCMD $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $MIRROR" # shellcheck disable=SC2086 "$DEBOOTSTRAP" $ARCHCMD $DEBOOTSTRAP_OPT "$RELEASE" "$MNTPOINT" "$MIRROR" - RC=$? fi - - if [ $RC -ne 0 ] ; then - if [ -r "$MNTPOINT/debootstrap/debootstrap.log" ] && \ - [ -s "$MNTPOINT/debootstrap/debootstrap.log" ] ; then - einfo "Presenting last ten lines of debootstrap.log:" - tail -10 "${MNTPOINT}"/debootstrap/debootstrap.log - einfo "End of debootstrap.log" - fi - fi - - eend $RC } # }}} @@ -2034,6 +2017,10 @@ try_umount() { local tries=$1 local mountpoint="$2" + if ! mountpoint "$mountpoint" &>/dev/null ; then + return 0 + fi + for (( try=1; try<=tries; try++ )); do if [[ ${try} -eq ${tries} ]]; then # Last time, show errors this time @@ -2065,13 +2052,12 @@ chrootscript() { mount -t devtmpfs udev "${MNTPOINT}"/dev mount -t devpts devpts "${MNTPOINT}"/dev/pts if [ "$DEBUG" = "true" ] ; then - chroot "$MNTPOINT" /bin/bash -x /bin/chroot-script ; RC=$? + chroot "$MNTPOINT" /bin/bash -x /bin/chroot-script else - chroot "$MNTPOINT" /bin/chroot-script ; RC=$? + chroot "$MNTPOINT" /bin/chroot-script fi try_umount 3 "$MNTPOINT"/dev/pts try_umount 3 "$MNTPOINT"/dev - eend $RC fi # finally get rid of chroot-script again, there's no good reason to @@ -2094,22 +2080,14 @@ umount_chroot() { fi if [ -n "$ISODIR" ] ; then - if grep -q "$ISODIR" /proc/mounts ; then - einfo "Unmount $MNTPOINT/$ISODIR" - umount "$MNTPOINT/$ISODIR" - fi + einfo "Unmount $MNTPOINT/$ISODIR" + try_umount 3 "$MNTPOINT/$ISODIR" fi - if grep -q "$MNTPOINT" /proc/mounts ; then - if mountpoint "${MNTPOINT}"/run/udev &>/dev/null ; then - einfo "Unmounting bind-mount /run/udev" - umount "${MNTPOINT}"/run/udev - fi + try_umount 3 "${MNTPOINT}"/run/udev - if [ -n "$PARTITION" ] ; then - einfo "Unmount $MNTPOINT" - umount "$MNTPOINT" - fi + if [ -n "$PARTITION" ] ; then + try_umount 3 "$MNTPOINT" fi } # }}}