# Bug-Reports: see https://grml.org/bugs/
# License: This file is licensed under the GPL v2+
################################################################################
+# shellcheck disable=SC2001,SC2181
# 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!
+ 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 -E
- set -o pipefail
- trap "error_handler" ERR
- export -f "error_handler"
-fi
+set -e
+set -E
+set -o pipefail
+trap "error_handler" ERR
+export -f "error_handler"
# }}}
# variables {{{
PN="$(basename "$0")"
if [[ -d "$(dirname "$(command -v "$0")")"/.git ]]; then
- VERSION="$(git --git-dir $(dirname "$(command -v "$0")")/.git describe | sed 's|^v||')"
+ VERSION="$(git --git-dir "$(dirname "$(command -v "$0")")"/.git describe | sed 's|^v||')"
else
VERSION="$(dpkg-query --show --showformat='${Version}' "$PN")"
fi
einfo "Not unmounting $MNTPOINT as you requested me to install into a directory of your own choice."
else
einfo "Unmounting $MNTPOINT"
- umount "$MNTPOINT"
- eend $?
+ umount "$MNTPOINT" || eend $?
fi
if [ -n "$STAGES" ] ; then
# remove directory only if we used the default with process id inside the name
if echo "$MNTPOINT" | grep -q '/mnt/debootstrap\.' ; then
einfo "Removing directory ${MNTPOINT}"
- rmdir "$MNTPOINT"
- eend $?
+ rmdir "$MNTPOINT" || eend $?
fi
fi
fi
if [ -n "${ORIG_TARGET}" ] ; then
einfo "Removing loopback mount of file ${ORIG_TARGET}."
- kpartx -d "${ORIG_TARGET}"
+ kpartx -d "${ORIG_TARGET}" || eend $?
# Workaround for a bug in kpartx which doesn't clean up properly,
# see Debian Bug #891077 and Github-PR grml/grml-debootstrap#112
if dmsetup ls | grep -q "^${LOOP_PART} "; then
- kpartx -d "/dev/${LOOP_DISK}" >/dev/null
+ kpartx -d "/dev/${LOOP_DISK}" >/dev/null || eend $?
fi
- eend $?
fi
}
[ "$_opt_contrib" ] && COMPONENTS="$COMPONENTS contrib"
case "${RELEASE}" in
- lenny|squeeze|wheezy|jessie|stretch|buster|bullseye)
+ jessie|stretch|buster|bullseye)
[ "$_opt_non_free" ] && COMPONENTS="$COMPONENTS non-free"
;;
*)
NUM_PARTITIONS=$(( NUM_PARTITIONS + 1 ))
done < "$TMPFILE"
-# force metadata version 0.90 for lenny so old grub can boot from this array.
-METADATA_VERSION=""
-if [ "$RELEASE" = "lenny" ]; then
- METADATA_VERSION="-e0"
-fi
-
ERRORFILE=$(mktemp)
# shellcheck disable=SC2086
yes | mdadm --create "${TARGET}" --level="${RAIDLEVEL}" \
- --raid-devices="${NUM_PARTITIONS}" ${METADATA_VERSION} ${SELECTED_PARTITIONS} >/dev/null 2>$ERRORFILE
+ --raid-devices="${NUM_PARTITIONS}" ${SELECTED_PARTITIONS} >/dev/null 2>$ERRORFILE
RC=$?
if [ "$RC" = 0 ] ; then
dialog --title "$PN" --msgbox \
checkconfiguration()
{
-if efi_support ; then
- if [ -z "$_opt_efi" ] ; then
- 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."
- bailout 1
+if [ -z "$VIRTUAL" ] ; then
+ if efi_support ; then
+ if [ -z "$_opt_efi" ] ; then
+ 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."
+ bailout 1
+ fi
fi
fi
# so disable this feature for older Debian releases where it's known to be unsupported
if [ -n "$MKFS" ] && [ "$MKFS" = "mkfs.ext4" ] ; then
case "$RELEASE" in
- lenny|squeeze|wheezy|jessie)
+ jessie)
# assume a more recent version if we can't identify the version via dpkg-query
local e2fsprogs_version
e2fsprogs_version="$(dpkg-query --show --showformat='${Version}' e2fsprogs 2>/dev/null || echo 1.44)"
# Disable this feature for Debian releases older than bookworm
if [ -n "$MKFS" ] && [ "$MKFS" = "mkfs.ext4" ] ; then
case "$RELEASE" in
- lenny|squeeze|wheezy|jessie|stretch|buster|bullseye)
+ jessie|stretch|buster|bullseye)
local e2fsprogs_version
# assume a more recent version if we can't identify the version via dpkg-query
e2fsprogs_version="$(dpkg-query --show --showformat='${Version}' e2fsprogs 2>/dev/null || echo 1.47)"
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
else
einfo "Changing disk uuid for $TARGET to fixed (non-random) value $DISK_IDENTIFIER using tune2fs"
tune2fs "$TARGET" -U "$DISK_IDENTIFIER" </dev/null
- eend $?
fi
fi
if [ -n "$VIRTUAL" ] && [ -n "$EFI_TARGET" ]; then
einfo "Creating FAT filesystem on $EFI_TARGET"
mkfs.fat -F32 -n "EFI" "$EFI_TARGET"
- eend $?
fi
# make sure /dev/disk/by-uuid/... is up2date, otherwise grub
if [ -n "$TUNE2FS" ] && echo "$MKFS" | grep -q "mkfs.ext" ; then
einfo "Disabling automatic filesystem check on $TARGET via tune2fs"
$TUNE2FS "$TARGET" </dev/null
- eend $?
fi
}
# }}}
einfo "Mounting $TARGET to $MNTPOINT"
mkdir -p "$MNTPOINT"
mount -o rw,suid,dev "$TARGET" "$MNTPOINT"
- eend $?
fi
fi
if [ -n "$ISODIR" ] ; then
einfo "Mounting Debian image loopback to $MNTPOINT/$ISODIR."
mkdir -p "$MNTPOINT/$ISODIR"
mount --bind "$ISODIR" "$MNTPOINT/$ISODIR"
- eend $?
fi
}
# }}}
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'
eerror "Error: grub not installed inside Virtual Machine. Can not install bootloader." ; eend 1
bailout 1
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
+ cp -a "${MNTPOINT}"/usr/lib/grub/i386-pc "${MNTPOINT}/boot/grub/"
if [ -n "$VMEFI" ]; then
einfo "Setting up bind-mount /run/udev"
mkdir -p "${MNTPOINT}"/run/udev
mount --bind /run/udev "${MNTPOINT}"/run/udev
- eend $?
fi
if [ -n "${BOOT_APPEND}" ] ; then
if mountpoint "${MNTPOINT}"/run/udev &>/dev/null ; then
einfo "Unmounting bind-mount /run/udev"
umount "${MNTPOINT}"/run/udev
- eend $?
fi
umount "${MNTPOINT}"/proc
# setup default locales
[ -n "$LOCALES" ] && cp $VERBOSE "${CONFFILES}"/locale.gen "${MNTPOINT}"/etc/locale.gen
- # MAKEDEV is just a forking bomb crap, let's do it on our own instead :)
- ( cd "${MNTPOINT}"/dev && tar zxf /etc/debootstrap/devices.tar.gz )
-
# copy any existing files to chroot
[ -d "${CONFFILES}"/bin ] && cp $VERBOSE -a -L "${CONFFILES}"/bin/* "${MNTPOINT}"/bin/
[ -d "${CONFFILES}"/boot ] && cp $VERBOSE -a -L "${CONFFILES}"/boot/* "${MNTPOINT}"/boot/
einfo "Installing default /etc/network/interfaces as requested via --defaultinterfaces options."
mkdir -p "${MNTPOINT}/etc/network"
echo "$DEFAULT_INTERFACES" > "${MNTPOINT}/etc/network/interfaces"
- eend $?
elif [ -n "$VIRTUAL" ] ; then
einfo "Setting up Virtual Machine, installing default /etc/network/interfaces"
mkdir -p "${MNTPOINT}/etc/network"
echo "$DEFAULT_INTERFACES" > "${MNTPOINT}/etc/network/interfaces"
- eend $?
elif [ -r /etc/network/interfaces ] ; then
einfo "Copying /etc/network/interfaces from host to target system"
mkdir -p "${MNTPOINT}/etc/network"
cp $VERBOSE /etc/network/interfaces "${MNTPOINT}/etc/network/interfaces"
- eend $?
else
ewarn "Couldn't read /etc/network/interfaces, installing default /etc/network/interfaces"
mkdir -p "${MNTPOINT}/etc/network"
echo "$DEFAULT_INTERFACES" > "${MNTPOINT}/etc/network/interfaces"
- eend $?
fi
# install config file providing some example entries
einfo "Setting up bind-mount /run/udev"
mkdir -p "${MNTPOINT}"/run/udev
mount --bind /run/udev "${MNTPOINT}"/run/udev
- eend $?
fi
}
# }}}
for script in "${pre_scripts}"/* ; do
if [ -x "$script" ] ; then
einfo "Executing pre-script $script"
- "$script" ; eend $?
+ "$script"
fi
done
fi
for script in "${post_scripts}"/* ; do
if [ -x "$script" ] ; then
einfo "Executing post-script $script"
- "$script" ; eend $?
+ "$script"
fi
done
fi
if grep -q GRML_CHROOT_SCRIPT_MARKER "${MNTPOINT}/bin/chroot-script" ; then
einfo "Removing chroot-script again"
rm -f "${MNTPOINT}/bin/chroot-script"
- eend $?
else
einfo "Keeping chroot-script as string GRML_CHROOT_SCRIPT_MARKER could not be found"
fi
if grep -q "$ISODIR" /proc/mounts ; then
einfo "Unmount $MNTPOINT/$ISODIR"
umount "$MNTPOINT/$ISODIR"
- eend $?
fi
fi
if mountpoint "${MNTPOINT}"/run/udev &>/dev/null ; then
einfo "Unmounting bind-mount /run/udev"
umount "${MNTPOINT}"/run/udev
- eend $?
fi
if [ -n "$PARTITION" ] ; then
einfo "Unmount $MNTPOINT"
umount "$MNTPOINT"
- eend $?
fi
fi
}
[ -n "$FSCKTOOL" ] || FSCKTOOL="fsck.${MKFS#mkfs.}"
einfo "Checking filesystem on $TARGET using $FSCKTOOL"
"$FSCKTOOL" "$TARGET"
- eend $?
fi
}
# }}}
einfo "Removing configuration files from installed system as requested via --remove-configs / REMOVE_CONFIGS."
rm -rf "${MNTPOINT}"/etc/debootstrap/
- eend $?
}
# }}}