Merge remote-tracking branch 'origin/pr/230'
authorMichael Prokop <mika@grml.org>
Wed, 25 Oct 2023 16:08:42 +0000 (18:08 +0200)
committerMichael Prokop <mika@grml.org>
Wed, 25 Oct 2023 16:08:42 +0000 (18:08 +0200)
1  2 
grml-debootstrap

diff --combined grml-debootstrap
@@@ -31,7 -31,6 +31,7 @@@ last bash command: $last_bash_command
  }
  
  if [ "$REPORT_TRAP_ERR" = "yes" ] || [ "$FAIL_TRAP_ERR" = "yes" ]; then
 +   set -e
     set -E
     set -o pipefail
     trap "error_handler" ERR
@@@ -261,10 -260,6 +261,10 @@@ cleanup() 
      einfo "Removing ${STAGES}" ; rmdir "$STAGES" ; eend $?
    fi
  
 +  if [ -n "$ARM_EFI_TARGET" ]; then
 +    umount "${MNTPOINT}/boot/efi" >/dev/null 2>&1
 +  fi
 +
    # Remove temporary mountpoint again
    if echo "$MNTPOINT" | grep -q '/mnt/debootstrap\.' ; then
      rmdir "$MNTPOINT" 2>/dev/null
        fi
  
        if [ -n "$DIRECTORY" ] ; then
-         einfo "Not unmounting $MNTPOINT as you requested me to install into a directory of your own choice." ; eend 0
+         einfo "Not unmounting $MNTPOINT as you requested me to install into a directory of your own choice."
        else
          einfo "Unmounting $MNTPOINT"
          umount "$MNTPOINT"
@@@ -345,8 -340,8 +345,8 @@@ stage() 
       echo "$2" > "${STAGES}/${1}"
       return 0
    elif grep -q 'done' "${STAGES}/${1}" 2>/dev/null ; then
-      ewarn "Notice: stage $1 has been executed already, skipping execution therefore." ; eend 0
-      ewarn "  To reexecute it clean up the according directory inside $STAGES" ; eend 0
+      ewarn "Notice: stage $1 has been executed already, skipping execution therefore."
+      ewarn "  To reexecute it clean up the according directory inside $STAGES"
       return 1
    fi
  }
@@@ -617,7 -612,7 +617,7 @@@ f
  
  if [ "$_opt_grub" ] && [ "$_opt_vmfile" ] ; then
    eerror "The --grub option is incompatible with --vmfile, please drop it from your command line."
 -  eerror "The --grub option is unneeded as GRUB will be installed automatically."
 +  eerror "The --grub option is unneeded as GRUB will be installed automatically (unless GRUB_INSTALL='no')."
    eend 1
    bailout 1
  fi
@@@ -640,15 -635,13 +640,13 @@@ if [ "$DEBUG" = "true" ] ; the
  fi
  
  [ "$_opt_help" ] && {
-   usage ; eend 0
-   eend 0
+   usage
    exit 0
  }
  
  [ "$_opt_version" ] && {
    einfo "$PN - version $VERSION"
    einfo "Report bugs via https://github.com/grml/grml-debootstrap/ or https://grml.org/bugs/"
-   eend 0
    exit 0
  }
  # }}}
@@@ -993,14 -986,12 +991,12 @@@ format_efi_partition() 
    fi
  
    if fsck.vfat -bn "$EFI" >/dev/null; then
-     einfo "EFI partition $EFI seems to have a FAT filesystem, not modifying." ; eend 0
+     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
-       eend 0
-     else
+     if [ ! $RC -eq 0 ] ; then
        eerror "Error while creating filesystem on ${EFI}."
        eend 1
        bailout 1
@@@ -1022,7 -1013,7 +1018,7 @@@ efi_support() 
    fi
  
    if [ -d /sys/firmware/efi ] ; then
-     einfo "EFI support detected." ; eend 0
+     einfo "EFI support detected."
      return 0
    fi
  
@@@ -1040,18 -1031,18 +1036,18 @@@ checkconfiguration(
  
  if efi_support ; then
    if [ -z "$_opt_efi" ] ; then
-     ewarn "EFI support detected but no --efi option given, please consider enabling it." ; eend 0
+     ewarn "EFI support detected but no --efi option given, please consider enabling it."
    fi
  else
    if [ -n "$_opt_efi" ] ; then
-      eerror "EFI option used but no EFI support detected." ; eend 0
+      eerror "EFI option used but no EFI support detected."
       bailout 1
    fi
  fi
  
  if [ -n "$AUTOINSTALL" ] ; then
     if checkforrun ; then
-       eerror "Exiting as requested" ; eend 0
+       eerror "Exiting as requested"
        bailout 1
     fi
  elif [ -n "$INTERACTIVE" ] ; then
@@@ -1093,7 -1084,7 +1089,7 @@@ else # if not running automatic install
     # do not display if MNTPOINT is the default one
     case "$MNTPOINT" in /mnt/debootstrap*) ;; *) echo "   Mount point:     $MNTPOINT" ;; esac
  
 -   if [ -n "$VIRTUAL" ] ; then
 +   if [ -n "$VIRTUAL" ] && [ "$GRUB_INSTALL" = 'yes' ] ; then
        echo "   Install grub:    yes"
        [ -n "$VMEFI" ]   && echo "   Install efi:     yes"   || echo "   Install efi:     no"
     else
@@@ -1298,8 -1289,6 +1294,6 @@@ mkfs() 
        mkfs.ext*)
          einfo "Enabling force option (-F) for mkfs.ext* tool as requested via --force switch."
          MKFS_OPTS="$MKFS_OPTS -F"
-         eend 0
          ;;
      esac
    fi
          if [ -n "$e2fsprogs_version" ] && dpkg --compare-versions "$e2fsprogs_version" ge '1.43~WIP.2015.05.18-1' ; then
            einfo "Disabling metadata_csum feature for $MKFS as $RELEASE doesn't support it."
            MKFS_OPTS="$MKFS_OPTS -O ^metadata_csum"
-           eend 0
          fi
          ;;
      esac
          if [ -n "$e2fsprogs_version" ] && dpkg --compare-versions "$e2fsprogs_version" ge '1.43' ; then
            einfo "Disabling metadata_csum_seed feature for $MKFS as $RELEASE doesn't support it."
            MKFS_OPTS="$MKFS_OPTS -O ^metadata_csum_seed"
-           eend 0
          fi
          ;;
      esac
    fi
  
    if [ -n "$MKFS" ] ; then
 +
 +    if [ -n "${ARM_EFI_TARGET}" ] ; then
 +      einfo "Running mkfs.fat $MKFS_OPTS on $ARM_EFI_TARGET"
 +      mkfs.fat -n "EFI" "$ARM_EFI_TARGET"
 +      eend $?
 +
 +      MKFS_OPTS="$MKFS_OPTS -L LINUX"
 +    fi
 +
      einfo "Running $MKFS $MKFS_OPTS on $TARGET"
      # shellcheck disable=SC2086
      "$MKFS" $MKFS_OPTS "$TARGET" ; RC=$?
@@@ -1458,7 -1436,7 +1450,7 @@@ mount_target() 
       einfo "Running grml-debootstrap on a directory, nothing to mount."
    else
       if grep -q "$TARGET" /proc/mounts ; then
-         ewarn "$TARGET already mounted, continuing anyway." ; eend 0
+         ewarn "$TARGET already mounted, continuing anyway."
       else
         if ! [ -d "${MNTPOINT}" ] ; then
            [ -n "$VIRTUAL" ] || mkdir -p "${MNTPOINT}"
@@@ -1524,43 -1502,25 +1516,43 @@@ prepare_vm() 
      parted -s "${TARGET}" 'mkpart primary ext4 102MiB 100%'
  
    else
 -    parted -s "${TARGET}" 'mklabel msdos'
 -    if [ "$FIXED_DISK_IDENTIFIERS" = "yes" ] ; then
 -      einfo "Adjusting disk signature to a fixed (non-random) value"
 -      MBRTMPFILE=$(mktemp)
 -      dd if="${TARGET}" of="${MBRTMPFILE}" bs=512 count=1
 -      echo -en "\\x41\\x41\\x41\\x41" | dd of="${MBRTMPFILE}" conv=notrunc seek=440 bs=1
 -      dd if="${MBRTMPFILE}" of="${TARGET}" conv=notrunc
 -      eend $?
 +    # arm64 support largely only exists for GPT
 +    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}" 'set 1 boot on'
 +      parted -s "${TARGET}" 'mkpart LINUX ext4 10MiB 100%'
 +    else
 +      parted -s "${TARGET}" 'mklabel msdos'
 +      if [ "$FIXED_DISK_IDENTIFIERS" = "yes" ] ; then
 +        einfo "Adjusting disk signature to a fixed (non-random) value"
 +        MBRTMPFILE=$(mktemp)
 +        dd if="${TARGET}" of="${MBRTMPFILE}" bs=512 count=1
 +        echo -en "\\x41\\x41\\x41\\x41" | dd of="${MBRTMPFILE}" conv=notrunc seek=440 bs=1
 +        dd if="${MBRTMPFILE}" of="${TARGET}" conv=notrunc
 +        eend $?
 +      fi
 +      parted -s "${TARGET}" 'mkpart primary ext4 4MiB 100%'
 +      parted -s "${TARGET}" 'set 1 boot on'
      fi
 -    parted -s "${TARGET}" 'mkpart primary ext4 4MiB 100%'
 -    parted -s "${TARGET}" 'set 1 boot on'
    fi
  
 -  DEVINFO=$(kpartx -asv "$TARGET") # e.g. 'add map loop0p1 (254:5): 0 20477 linear 7:0 3'
 +  DEVINFO=$(kpartx -asv "$TARGET") # e.g. 'add map loop0p1 (254:5): 0 20477 linear 7:0 3' - will be multi-line for arm64
    if [ -z "${DEVINFO}" ] ; then
      eerror "Error setting up loopback device." ; eend 1
      bailout 1
    fi
  
 +  # if we're building for arm64, we operate on the first line of $DEVINFO which is the EFI partition
 +  if [ "$ARCH" = 'arm64' ]; then
 +    LOOP_PART="${DEVINFO##add map }" # 'loop0p1 (254:5): 0 20477 linear 7:0 3'
 +    LOOP_PART="${LOOP_PART// */}"    # 'loop0p1'
 +    LOOP_DISK="${LOOP_PART%p*}"      # 'loop0'
 +    export ARM_EFI_TARGET="/dev/mapper/$LOOP_PART"
 +    DEVINFO=${DEVINFO##*$'\n'} # now set $DEVINFO to the last line which is the OS partition
 +  fi
 +
    # hopefully this always works as expected
    LOOP_PART="${DEVINFO##add map }" # 'loop0p1 (254:5): 0 20477 linear 7:0 3'
    LOOP_PART="${LOOP_PART// */}"    # 'loop0p1'
      LOOP_PART="${LOOP_PART%p1}p3"
    fi
    LOOP_DISK="${LOOP_PART%p*}"      # 'loop0'
 -  export TARGET="/dev/mapper/$LOOP_PART" # '/dev/mapper/loop1p1'
 +  export TARGET="/dev/mapper/$LOOP_PART" # '/dev/mapper/loop0p1'
  
    if [ -z "$TARGET" ] ; then
       eerror "Error: target could not be set to according /dev/mapper/* device." ; eend 1
@@@ -1593,103 -1553,91 +1585,103 @@@ grub_install() 
      bailout 1
    fi
  
 +  if [ -n "${ARM_EFI_TARGET}" ]; then
 +    mkdir -p "${MNTPOINT}/boot/efi"
 +    if ! mount "${ARM_EFI_TARGET}" "${MNTPOINT}/boot/efi" ; then
 +      eerror "Error: Mounting ${ARM_EFI_TARGET} failed, can not continue." ; eend 1
 +      bailout 1
 +    fi
 +  fi
 +
    mount -t proc none "${MNTPOINT}"/proc
    mount -t sysfs none "${MNTPOINT}"/sys
    mount -t devtmpfs udev "${MNTPOINT}"/dev
    mount -t devpts devpts "${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 | grep -Fq GRUB; then
 -  einfo "Installing Grub as bootloader."
 +  if [ -n "$ARM_EFI_TARGET" ]; then
 +    einfo "Installing Grub as bootloader into EFI."
  
 -  if ! chroot "${MNTPOINT}" dpkg --list grub-pc 2>/dev/null | grep -q '^ii' ; then
 -    echo "Notice: grub-pc package not present yet, installing it therefore."
 -    # shellcheck disable=SC2086
 -    DEBIAN_FRONTEND=$DEBIAN_FRONTEND chroot "$MNTPOINT" apt-get -y --no-install-recommends install $DPKG_OPTIONS grub-pc
 -  fi
 +    chroot "${MNTPOINT}" grub-install --target=arm64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck --no-nvram --removable
 +  # Has chroot-script installed GRUB to MBR using grub-install (successfully), already?
 +  # chroot-script skips installation for unset ${GRUB}
 +  elif [[ -z "${GRUB}" ]] || ! dd if="${GRUB}" bs=512 count=1 2>/dev/null | cat -v | grep -Fq 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
 -     bailout 1
 -  fi
 +    if ! chroot "${MNTPOINT}" dpkg --list grub-pc 2>/dev/null | grep -q '^ii' ; then
 +      echo "Notice: grub-pc package not present yet, installing it therefore."
 +      # shellcheck disable=SC2086
 +      DEBIAN_FRONTEND=$DEBIAN_FRONTEND chroot "$MNTPOINT" apt-get -y --no-install-recommends install $DPKG_OPTIONS grub-pc
 +    fi
  
 -  case "$RELEASE" in
 -    lenny|squeeze|wheezy)
 -      cp "${MNTPOINT}"/usr/lib/grub/i386-pc/* "${MNTPOINT}/boot/grub/"
 -      ;;
 -    *)
 -      cp -a "${MNTPOINT}"/usr/lib/grub/i386-pc "${MNTPOINT}/boot/grub/"
 -      ;;
 -  esac
 +    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
 +      bailout 1
 +    fi
  
 -  if [ -n "$VMEFI" ]; then
 +    case "$RELEASE" in
 +      lenny|squeeze|wheezy)
 +        cp "${MNTPOINT}"/usr/lib/grub/i386-pc/* "${MNTPOINT}/boot/grub/"
 +        ;;
 +      *)
 +        cp -a "${MNTPOINT}"/usr/lib/grub/i386-pc "${MNTPOINT}/boot/grub/"
 +        ;;
 +    esac
  
 -    mkdir -p "${MNTPOINT}"/boot/efi
 -    mount -t vfat "${EFI_TARGET}" "${MNTPOINT}"/boot/efi
 +    if [ -n "$VMEFI" ]; then
  
 -    if ! chroot "${MNTPOINT}" dpkg --list shim-signed 2>/dev/null | grep -q '^ii' ; then
 -      echo "Notice: shim-signed package not present yet, installing it therefore."
 -      # shellcheck disable=SC2086
 -      DEBIAN_FRONTEND=$DEBIAN_FRONTEND chroot "$MNTPOINT" apt-get -y --no-install-recommends install $DPKG_OPTIONS shim-signed
 -    fi
 +      mkdir -p "${MNTPOINT}"/boot/efi
 +      mount -t vfat "${EFI_TARGET}" "${MNTPOINT}"/boot/efi
  
 -    if [ "$(dpkg --print-architecture)" = "arm64" ]; then
 -      if ! chroot "${MNTPOINT}" dpkg --list grub-efi-arm64-signed 2>/dev/null | grep -q '^ii' ; then
 -        echo "Notice: grub-efi-arm64-signed package not present yet, installing it therefore."
 +      if ! chroot "${MNTPOINT}" dpkg --list shim-signed 2>/dev/null | grep -q '^ii' ; then
 +        echo "Notice: shim-signed package not present yet, installing it therefore."
          # shellcheck disable=SC2086
 -        DEBIAN_FRONTEND=$DEBIAN_FRONTEND chroot "$MNTPOINT" apt-get -y --no-install-recommends install $DPKG_OPTIONS grub-efi-arm64-bin grub-efi-arm64-signed
 +        DEBIAN_FRONTEND=$DEBIAN_FRONTEND chroot "$MNTPOINT" apt-get -y --no-install-recommends install $DPKG_OPTIONS shim-signed
        fi
 -      chroot "$MNTPOINT" grub-install --target=arm64-efi --efi-directory=/boot/efi --uefi-secure-boot --removable "/dev/$LOOP_DISK"
 -    elif [ "$(dpkg --print-architecture)" = "i386" ]; then
 -      if ! chroot "${MNTPOINT}" dpkg --list grub-efi-ia32-signed 2>/dev/null | grep -q '^ii' ; then
 -        echo "Notice: grub-efi-ia32-signed package not present yet, installing it therefore."
 -        # shellcheck disable=SC2086
 -        DEBIAN_FRONTEND=$DEBIAN_FRONTEND chroot "$MNTPOINT" apt-get -y --no-install-recommends install $DPKG_OPTIONS grub-efi-ia32-bin grub-efi-ia32-signed
 +
 +      if [ "$(dpkg --print-architecture)" = "arm64" ]; then
 +        if ! chroot "${MNTPOINT}" dpkg --list grub-efi-arm64-signed 2>/dev/null | grep -q '^ii' ; then
 +          echo "Notice: grub-efi-arm64-signed package not present yet, installing it therefore."
 +          # shellcheck disable=SC2086
 +          DEBIAN_FRONTEND=$DEBIAN_FRONTEND chroot "$MNTPOINT" apt-get -y --no-install-recommends install $DPKG_OPTIONS grub-efi-arm64-bin grub-efi-arm64-signed
 +        fi
 +        chroot "$MNTPOINT" grub-install --target=arm64-efi --efi-directory=/boot/efi --uefi-secure-boot --removable "/dev/$LOOP_DISK"
 +      elif [ "$(dpkg --print-architecture)" = "i386" ]; then
 +        if ! chroot "${MNTPOINT}" dpkg --list grub-efi-ia32-signed 2>/dev/null | grep -q '^ii' ; then
 +          echo "Notice: grub-efi-ia32-signed package not present yet, installing it therefore."
 +          # shellcheck disable=SC2086
 +          DEBIAN_FRONTEND=$DEBIAN_FRONTEND chroot "$MNTPOINT" apt-get -y --no-install-recommends install $DPKG_OPTIONS grub-efi-ia32-bin grub-efi-ia32-signed
 +        fi
 +        chroot "$MNTPOINT" grub-install --target=i386-efi --efi-directory=/boot/efi --uefi-secure-boot --removable "/dev/$LOOP_DISK"
 +        chroot "$MNTPOINT" grub-install --target=i386-pc "/dev/$LOOP_DISK"
 +      else
 +        if ! chroot "${MNTPOINT}" dpkg --list grub-efi-amd64-signed 2>/dev/null | grep -q '^ii' ; then
 +          echo "Notice: grub-efi-amd64-signed package not present yet, installing it therefore."
 +          # shellcheck disable=SC2086
 +          DEBIAN_FRONTEND=$DEBIAN_FRONTEND chroot "$MNTPOINT" apt-get -y --no-install-recommends install $DPKG_OPTIONS grub-efi-amd64-bin grub-efi-amd64-signed
 +        fi
 +        chroot "$MNTPOINT" grub-install --target=x86_64-efi --efi-directory=/boot/efi --uefi-secure-boot --removable "/dev/$LOOP_DISK"
 +        chroot "$MNTPOINT" grub-install --target=i386-pc "/dev/$LOOP_DISK"
        fi
 -      chroot "$MNTPOINT" grub-install --target=i386-efi --efi-directory=/boot/efi --uefi-secure-boot --removable "/dev/$LOOP_DISK"
 -      chroot "$MNTPOINT" grub-install --target=i386-pc "/dev/$LOOP_DISK"
      else
 -      if ! chroot "${MNTPOINT}" dpkg --list grub-efi-amd64-signed 2>/dev/null | grep -q '^ii' ; then
 -        echo "Notice: grub-efi-amd64-signed package not present yet, installing it therefore."
 -        # shellcheck disable=SC2086
 -        DEBIAN_FRONTEND=$DEBIAN_FRONTEND chroot "$MNTPOINT" apt-get -y --no-install-recommends install $DPKG_OPTIONS grub-efi-amd64-bin grub-efi-amd64-signed
 -      fi
 -      chroot "$MNTPOINT" grub-install --target=x86_64-efi --efi-directory=/boot/efi --uefi-secure-boot --removable "/dev/$LOOP_DISK"
 -      chroot "$MNTPOINT" grub-install --target=i386-pc "/dev/$LOOP_DISK"
 +      dd if="${MNTPOINT}/usr/lib/grub/i386-pc/boot.img" of="${ORIG_TARGET}" conv=notrunc bs=440 count=1
 +      case "${_opt_filesystem}" in
 +        f2fs)
 +          chroot "${MNTPOINT}" grub-mkimage -O i386-pc -p "(hd0,msdos1)/boot/grub" -o /tmp/core.img biosdisk part_msdos f2fs
 +          ;;
 +        xfs)
 +          chroot "${MNTPOINT}" grub-mkimage -O i386-pc -p "(hd0,msdos1)/boot/grub" -o /tmp/core.img biosdisk part_msdos xfs
 +          ;;
 +        # NOTE - we might need to distinguish between further filesystems
 +        *)
 +          chroot "${MNTPOINT}" grub-mkimage -O i386-pc -p "(hd0,msdos1)/boot/grub" -o /tmp/core.img biosdisk part_msdos ext2
 +          ;;
 +      esac
 +
 +      dd if="${MNTPOINT}/tmp/core.img" of="${ORIG_TARGET}" conv=notrunc seek=1
 +      rm -f "${MNTPOINT}/tmp/core.img"
      fi
 -  else
 -    dd if="${MNTPOINT}/usr/lib/grub/i386-pc/boot.img" of="${ORIG_TARGET}" conv=notrunc bs=440 count=1
 -    case "${_opt_filesystem}" in
 -      f2fs)
 -        chroot "${MNTPOINT}" grub-mkimage -O i386-pc -p "(hd0,msdos1)/boot/grub" -o /tmp/core.img biosdisk part_msdos f2fs
 -        ;;
 -      xfs)
 -        chroot "${MNTPOINT}" grub-mkimage -O i386-pc -p "(hd0,msdos1)/boot/grub" -o /tmp/core.img biosdisk part_msdos xfs
 -        ;;
 -      # NOTE - we might need to distinguish between further filesystems
 -      *)
 -        chroot "${MNTPOINT}" grub-mkimage -O i386-pc -p "(hd0,msdos1)/boot/grub" -o /tmp/core.img biosdisk part_msdos ext2
 -        ;;
 -    esac
 -
 -    dd if="${MNTPOINT}/tmp/core.img" of="${ORIG_TARGET}" conv=notrunc seek=1
 -    rm -f "${MNTPOINT}/tmp/core.img"
    fi
 -fi
  
    # workaround for Debian bug #918590 with lvm + udev:
    # WARNING: Device /dev/... not initialized in udev database even after waiting 10000000 microseconds
  
    einfo "Updating grub configuration file."
    chroot "${MNTPOINT}" update-grub
 +  chroot "${MNTPOINT}" sync
  
    case "$RELEASE" in
      jessie)
    if grep -q '^GRUB_DISABLE_LINUX_UUID=.*true' "${MNTPOINT}"/etc/default/grub 2>/dev/null ; then
      ewarn "GRUB_DISABLE_LINUX_UUID is set to true in /etc/default/grub, not adjusting root= in grub.cfg."
      ewarn "Please note that your system might NOT be able to properly boot."
 -  else
 +  elif [ -z "$ARM_EFI_TARGET" ]; then
      einfo "Adjusting grub.cfg for successful boot sequence."
      sed -i "s;root=[^ ]\\+;root=UUID=$TARGET_UUID;" "${MNTPOINT}"/boot/grub/grub.cfg
    fi
@@@ -1746,10 -1693,6 +1738,10 @@@ umount_target() 
       return 0
    fi
  
 +  if [ -n "${ARM_EFI_TARGET}" ]; then
 +    umount "${MNTPOINT}/boot/efi"
 +  fi
 +
    umount "${MNTPOINT}"
    kpartx -d "${ORIG_TARGET}" >/dev/null
    # Workaround for a bug in kpartx which doesn't clean up properly,
@@@ -1878,14 -1821,8 +1870,14 @@@ preparechroot() 
  
    # package selection:
    if [ "$PACKAGES" = 'yes' ] ; then
 -    cp $VERBOSE "${_opt_packages:-$CONFFILES/packages}" \
 -      "${MNTPOINT}"/etc/debootstrap/packages
 +    PACKAGES_FILE="packages"
 +
 +    if [ "$ARCH" = 'arm64' ]; then
 +      PACKAGES_FILE="packages-arm64"
 +    fi
 +
 +    cp $VERBOSE "${_opt_packages:-$CONFFILES/$PACKAGES_FILE}" \
 +      "${MNTPOINT}/etc/debootstrap/${PACKAGES_FILE}"
    fi
  
    # debconf preseeding:
@@@ -1964,7 -1901,7 +1956,7 @@@ iface ${interface} inet dhc
    fi
  
    if [ -n "$NOINTERFACES" ] ; then
-     einfo "Not installing /etc/network/interfaces as requested via --nointerfaces option" ; eend 0
+     einfo "Not installing /etc/network/interfaces as requested via --nointerfaces option"
    elif [ -n "$USE_DEFAULT_INTERFACES" ] ; then
      einfo "Installing default /etc/network/interfaces as requested via --defaultinterfaces options."
      mkdir -p "${MNTPOINT}/etc/network"
        einfo "Use locally available public keys to authorise root login on the target system as requested via --sshcopyid option."
        mkdir -p "${MNTPOINT}"/root/.ssh
        chmod 0700 "${MNTPOINT}"/root/.ssh
-       if ssh-add -L >> "${MNTPOINT}"/root/.ssh/authorized_keys ; then
-         eend 0
-       else
+       if ! ssh-add -L >> "${MNTPOINT}"/root/.ssh/authorized_keys ; then
          eerror "Error: executing 'ssh-add -L' failed."
          eend 1
          bailout 1
        einfo "copying '$AUTHORIZED_KEYS_SOURCE' to '$AUTHORIZED_KEYS_TARGET' as requested via --sshcopyid option."
        mkdir -p "$AUTHORIZED_KEYS_TARGET"
        chmod 0700 "$AUTHORIZED_KEYS_TARGET"
-       if cp "$AUTHORIZED_KEYS_SOURCE" "$AUTHORIZED_KEYS_TARGET" ; then
-         eend 0
-       else
+       if ! cp "$AUTHORIZED_KEYS_SOURCE" "$AUTHORIZED_KEYS_TARGET" ; then
          eerror "Error: copying '$AUTHORIZED_KEYS_SOURCE' to '$AUTHORIZED_KEYS_TARGET' failed"
          eend 1
          bailout 1
      einfo "Copying '${AUTHORIZED_KEYS_SOURCE}' to '${AUTHORIZED_KEYS_TARGET}' as requested via --sshcopyauth option."
      mkdir -p "${AUTHORIZED_KEYS_TARGET}"
      chmod 0700 "${AUTHORIZED_KEYS_TARGET}"
-     if cp "${AUTHORIZED_KEYS_SOURCE}" "${AUTHORIZED_KEYS_TARGET}" ; then
-       eend 0
-     else
+     if ! cp "${AUTHORIZED_KEYS_SOURCE}" "${AUTHORIZED_KEYS_TARGET}" ; then
        eerror "Error: copying '${AUTHORIZED_KEYS_SOURCE}' to '${AUTHORIZED_KEYS_TARGET}' failed."
        eend 1
        bailout 1
      mount --bind /run/udev "${MNTPOINT}"/run/udev
      eend $?
    fi
-   eend 0
  }
  # }}}
  
@@@ -2156,7 -2085,6 +2140,6 @@@ chrootscript() 
      eend $?
    else
      einfo "Keeping chroot-script as string GRML_CHROOT_SCRIPT_MARKER could not be found"
-     eend 0
    fi
  }
  # }}}
@@@ -2216,7 -2144,7 +2199,7 @@@ remove_configs() 
    fi
  
    if ! mountpoint "${MNTPOINT}" >/dev/null 2>&1 ; then
-     ewarn "Target ${MNTPOINT} doesn't seem to be mounted, can't remove configuration files." ; eend 0
+     ewarn "Target ${MNTPOINT} doesn't seem to be mounted, can't remove configuration files."
      return 0
    fi
  
@@@ -2232,8 -2160,7 +2215,8 @@@ for i in format_efi_partition prepare_v
           preparechroot execute_pre_scripts chrootscript execute_post_scripts \
           remove_configs umount_chroot grub_install umount_target fscktool ; do
      if stage "${i}" ; then
 -      if "$i" ; then
 +      "$i"
 +      if [ $? -eq 0 ]; then
          stage "${i}" 'done' && rm -f "${STAGES}/${i}"
        else
          bailout 2 "$i"
@@@ -2253,7 -2180,7 +2236,7 @@@ Choose Cancel to skip rebooting." 10 6
       noeject noprompt reboot
    fi
  else
-    einfo "Finished execution of ${PN}. Enjoy your Debian system." ; eend 0
+    einfo "Finished execution of ${PN}. Enjoy your Debian system."
  fi
  # }}}