X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=grml-debootstrap;h=17a8b1ceea8e44b046ab487c05895e6432c22c12;hb=53ed3b4e9a30baacaba084299f6dd5d05e1272d2;hp=3bcaae5ab8170a19d987a2160e357fdb08cfd927;hpb=2cf99e2cbb127a9f63ae1efd24c0ed52bf73ed41;p=grml-debootstrap.git diff --git a/grml-debootstrap b/grml-debootstrap index 3bcaae5..17a8b1c 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -244,11 +244,11 @@ check4progs(){ # helper functions {{{ cleanup() { if [ -n "$CHROOT_VARIABLES" ] ; then - einfo "Removing ${CHROOT_VARIABLES}" ; rm "$CHROOT_VARIABLES" ; eend $? + einfo "Removing ${CHROOT_VARIABLES}" ; rm "$CHROOT_VARIABLES" || eend $? fi if [ -n "$STAGES" ] ; then - einfo "Removing ${STAGES}" ; rmdir "$STAGES" ; eend $? + einfo "Removing ${STAGES}" ; rmdir "$STAGES" || eend $? fi if [ -n "$ARM_EFI_TARGET" ]; then @@ -257,7 +257,9 @@ cleanup() { # Remove temporary mountpoint again if echo "$MNTPOINT" | grep -q '/mnt/debootstrap\.' ; then - rmdir "$MNTPOINT" 2>/dev/null + if [ -d "$MNTPOINT" ] ; then + rmdir "$MNTPOINT" + fi fi # make sure $TARGET is not mounted when exiting grml-debootstrap @@ -297,8 +299,10 @@ cleanup() { # 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 $? + if test -d "$MNTPOINT" ; then + einfo "Removing directory ${MNTPOINT}" + rmdir "$MNTPOINT" || eend $? + fi fi fi fi @@ -316,6 +320,7 @@ cleanup() { # we want to exit smoothly and clean: bailout(){ + eend "$1" || true cleanup @@ -532,11 +537,11 @@ done CONFFILES=$_opt_confdir einfo "Using config files under $CONFFILES/." if ! [ -r "$CONFFILES/config" ] ; then - eerror "Error: config file $CONFFILES/config not found."; eend 1; bailout 1 + eerror "Error: config file $CONFFILES/config not found."; bailout 1 fi # shellcheck disable=SC1091 source=config if ! . "$CONFFILES/config" ; then - eerror "Error reading config file $CONFFILES/config" ; eend 1 ; bailout 1 + eerror "Error reading config file $CONFFILES/config" ; bailout 1 fi # restore the command line parameter value CONFFILES=$_opt_confdir @@ -605,20 +610,17 @@ fi 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 (unless GRUB_INSTALL='no')." - eend 1 bailout 1 fi if [ "${_opt_sshcopyid}" ] && [ "${_opt_sshcopyauth}" ] ; then eerror "The --sshcopyid option is incompatible with --sshcopyauth, please drop either of them from your command line." - eend 1 bailout 1 fi if [ -n "$ISO" ] && [[ "$DEBOOTSTRAP" =~ mmdebstrap$ ]] ; then eerror "The ISO option is incompatible with usage of mmdebstrap for bootstrapping." eerror "Either drop the --iso ... option or use plain debootstrap instead." - eend 1 bailout 1 fi @@ -658,7 +660,7 @@ if [ -n "$CONFIGFILE" ] ; then einfo "Reading specified config file $CONFIGFILE." # shellcheck disable=SC1091 source=config if ! . "$CONFIGFILE" ; then - eerror "Error reading config file $CONFIGFILE" ; eend 1 ; bailout 1 + eerror "Error reading config file $CONFIGFILE" ; bailout 1 fi fi # }}} @@ -668,14 +670,12 @@ if [ -n "$GROOT" ] ; then eerror "Error: you seem to have \$GROOT configured." eerror "This variable is no longer supported, please visit the" eerror "grml-debootstrap documentation for details." - eend 1 bailout 1 fi if echo "$GRUB" | grep -q '^hd' ; then eerror "Error: this syntax for the grub configuration variable is no longer supported." eerror "Please do not use hd... any longer but /dev/sdX instead." - eend 1 bailout 1 fi # }}} @@ -700,8 +700,7 @@ prompt_for_target() dialog --title "$PN" --trim \ --msgbox "Sorry, no partitions found. Please configure your harddisks (see /proc/partitions) using a tool like fdisk, - cfdisk, gpart, gparted,..." 0 0 - bailout 1 + cfdisk, gpart, gparted,..." 0 0 || bailout 1 fi PARTITION_LIST=$(for i in $AVAILABLE_PARTITIONS ; do @@ -714,8 +713,7 @@ prompt_for_target() # shellcheck disable=SC2086 TARGET=$(dialog --title "$PN" --single-quoted --stdout \ --menu "Please select the target partition:" 0 0 0 \ - $PARTITION_LIST) - [ $? -eq 0 ] || bailout 1 + $PARTITION_LIST) || bailout 1 } # }}} @@ -763,8 +761,7 @@ prompt_for_bootmanager() --menu "Where do you want to install the bootmanager grub?" 0 0 0 \ mbr "install bootmanager into $MBRPART" \ nowhere "do not install bootmanager at all" \ - ${ADDITIONAL_PARAMS}) - [ $? -eq 0 ] || bailout 3 + ${ADDITIONAL_PARAMS}) || bailout 3 IFS="$OIFS" case "$GETMBR" in @@ -799,8 +796,8 @@ prompt_for_release() buster Debian/10 \ bullseye Debian/11 \ bookworm Debian/12 \ - sid Debian/unstable)" - [ $? -eq 0 ] || bailout + sid Debian/unstable)" \ + || bailout } # }}} @@ -809,8 +806,7 @@ prompt_for_hostname() { HOSTNAME="$(dialog --stdout --title "${PN}" --inputbox \ "Please enter the hostname you would like to use for installation:" \ - 0 0 "$HOSTNAME")" - [ $? -eq 0 ] || bailout + 0 0 "$HOSTNAME")" || bailout } # }}} @@ -826,13 +822,11 @@ prompt_for_password() ROOTPW2='PW2' while [ "$ROOTPW1" != "$ROOTPW2" ]; do ROOTPW1=$(dialog --insecure --stdout --title "${PN}" --passwordbox \ - "Please enter the password for the root account:" 10 60) - [ $? -eq 0 ] || bailout + "Please enter the password for the root account:" 10 60) || bailout ROOTPW2=$(dialog --insecure --stdout --title "${PN}" --passwordbox \ "Please enter the password for the root account again for \ - confirmation:" 10 60) - [ $? -eq 0 ] || bailout + confirmation:" 10 60) || bailout if [ "$ROOTPW1" != "$ROOTPW2" ]; then dialog --stdout --title "${PN}" --ok-label \ @@ -853,20 +847,18 @@ prompt_for_mirror() net "install via network (downloading from mirror)" \ local "install from local directory/mirror" ) - [ $? -eq 0 ] || bailout if [ "$CHOOSE_MIRROR" = 'net' ] ; then [ -n "$MIRROR" ] || MIRROR='http://deb.debian.org/debian' MIRROR="$(dialog --stdout --title "${PN}" --inputbox \ "Please enter Debian mirror you would like to use for installing packages." \ - 0 0 $MIRROR)" - [ $? -eq 0 ] || bailout + 0 0 $MIRROR)" || bailout + else # CHOOSE_MIRROR == local [ -n "$ISO" ] || ISO='/mnt/mirror' ISO="$(dialog --stdout --title "${PN}" --inputbox \ "Please enter directory name you would like to use for installing packages." \ - 0 0 $ISO)" - [ $? -eq 0 ] || bailout + 0 0 $ISO)" || bailout fi } # }}} @@ -889,8 +881,7 @@ TARGET=$(dialog --stdout --title "$PN" --default-item /dev/md0 \ --menu "Which device do you want to use for ${RAIDLEVEL}? Notice: activated devices will not be listed for security reasons. Anyway, please make sure the selected device is not in use already!" 0 0 0 \ -$MD_LIST) -[ $? -eq 0 ] || bailout 20 +$MD_LIST) || bailout 20 AVAILABLE_PARTITIONS=$(LANG=C fdisk -l 2>/dev/null | \ sed 's/*//' | \ @@ -904,8 +895,8 @@ PARTITION_LIST=$(for i in $AVAILABLE_PARTITIONS ; do # shellcheck disable=SC2086 dialog --title "$PN" --separate-output \ --checklist "Please select the partitions you would like to use for your $RAIDLEVEL on ${TARGET}:" 0 0 0 \ - $PARTITION_LIST 2>"$TMPFILE" -[ $? -eq 0 ] || bailout + $PARTITION_LIST 2>"$TMPFILE" || bailout + SELECTED_PARTITIONS="$(cat "$TMPFILE")" NUM_PARTITIONS=0 @@ -979,7 +970,6 @@ format_efi_partition() { RC=$? if [ ! $RC -eq 0 ] ; then eerror "Error while creating filesystem on ${EFI}." - eend 1 bailout 1 fi fi @@ -1109,7 +1099,7 @@ else # if not running automatic installation display configuration and prompt fo einfon "Is this ok for you? [y/N] " read -r a if ! [ "$a" = 'y' ] || [ "$a" = 'Y' ] ; then - eerror "Exiting as requested." ; eend 1 + eerror "Exiting as requested." bailout 1 fi fi @@ -1159,7 +1149,7 @@ fi if [ -z "${ARCH:-}" ] ; then eerror 'Architecture neither set (environment variable ARCH), nor could be automatically identified (using dpkg).' - eerror 'Consider setting the --arch ... option.' ; eend 1 + eerror 'Consider setting the --arch ... option.' bailout 1 fi # }}} @@ -1168,7 +1158,7 @@ fi CURRENT_ARCH="$(uname -m)" if [ "$CURRENT_ARCH" != "x86_64" ] ; then if [ "$ARCH" = "amd64" ] ; then - eerror "It is not possible to build amd64 on $CURRENT_ARCH. Consider installing and booting the 'linux-image-amd64' kernel or using '--arch i386' instead." ; eend 1 + eerror "It is not possible to build amd64 on $CURRENT_ARCH. Consider installing and booting the 'linux-image-amd64' kernel or using '--arch i386' instead." bailout 1 fi fi @@ -1177,7 +1167,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 bullseye or bookworm." ; eend 1 +Please use specific codenames such as bullseye or bookworm." bailout 1 fi # }}} @@ -1189,7 +1179,7 @@ if [ -n "$TARGET" ] ; then SHORT_TARGET="${TARGET##*/}" else eerror "Please adjust $CONFFILES/config or..." - eerror "... use the interactive version for configuration before running ${0}" ; eend 1 + eerror "... use the interactive version for configuration before running ${0}" bailout 1 fi # }}} @@ -1203,7 +1193,7 @@ fi if [ -r "$STAGES"/grml-debootstrap ] ; then if grep -q 'done' "${STAGES}/grml-debootstrap" ; then eerror "Error: grml-debootstrap has been executed already, won't continue therefore." - eerror "If you want to re-execute grml-debootstrap just manually remove ${STAGES}" ; eend 1 + eerror "If you want to re-execute grml-debootstrap just manually remove ${STAGES}" fi fi # }}} @@ -1231,7 +1221,7 @@ else # $TARGET was not detected as block device, but we do not want to create target directory in /dev/ if [[ $TARGET == "/dev/"* ]]; then eerror "Error: Will not create target directory $TARGET in /dev." - eerror " Please check the partition(s) of the blockdevice."; eend 1 + eerror " Please check the partition(s) of the blockdevice." bailout 1 fi set_target_directory @@ -1266,7 +1256,7 @@ mkfs() { fi if grep -q "$TARGET" /proc/mounts ; then - eerror "$TARGET already mounted, exiting to avoid possible damage. (Manually unmount $TARGET)" ; eend 1 + eerror "$TARGET already mounted, exiting to avoid possible damage. (Manually unmount $TARGET)" bailout 1 fi @@ -1330,7 +1320,6 @@ mkfs() { if [ "$FIXED_DISK_IDENTIFIERS" = "yes" ] ; then if ! echo "$MKFS" | grep -q "mkfs.ext" ; then eerror "Not changing disk uuid for $TARGET because $MKFS doesn't seem to match for ext{2,3,4} file system" - eend 1 bailout 1 else einfo "Changing disk uuid for $TARGET to fixed (non-random) value $DISK_IDENTIFIER using tune2fs" @@ -1454,19 +1443,17 @@ prepare_vm() { if [ -b "$TARGET" ] && [ -n "$VMFILE" ] ; then eerror "Error: specified virtual disk target ($TARGET) is an existing block device." - eend 1 bailout 1 fi if [ ! -b "$TARGET" ] && [ -z "$VMFILE" ] ; then eerror "Error: specified virtual disk target ($TARGET) does not exist yet." - eend 1 bailout 1 fi # make sure loop module is present and a usable loop device exists modprobe -q loop if ! losetup -f >/dev/null 2>&1; then - eerror "Error finding usable loop device" ; eend 1 + eerror "Error finding usable loop device" bailout 1 fi @@ -1474,7 +1461,7 @@ prepare_vm() { # "Is device-mapper driver missing from kernel? [...]" modprobe -q dm-mod if ! grep -q 'device-mapper' /proc/misc >/dev/null 2>&1 ; then - eerror "Device-mapper support missing in kernel." ; eend 1 + eerror "Device-mapper support missing in kernel." bailout 1 fi @@ -1515,7 +1502,7 @@ prepare_vm() { 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 + eerror "Error setting up loopback device." bailout 1 fi @@ -1539,7 +1526,7 @@ prepare_vm() { 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 + eerror "Error: target could not be set to according /dev/mapper/* device." bailout 1 fi } @@ -1556,14 +1543,14 @@ grub_install() { fi if ! mount "${TARGET}" "${MNTPOINT}" ; then - eerror "Error: Mounting ${TARGET} failed, can not continue." ; eend 1 + eerror "Error: Mounting ${TARGET} failed, can not continue." 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 + eerror "Error: Mounting ${ARM_EFI_TARGET} failed, can not continue." bailout 1 fi fi @@ -1590,7 +1577,7 @@ grub_install() { 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 + eerror "Error: grub not installed inside Virtual Machine. Can not install bootloader." bailout 1 fi cp -a "${MNTPOINT}"/usr/lib/grub/i386-pc "${MNTPOINT}/boot/grub/" @@ -1955,7 +1942,6 @@ iface ${interface} inet dhcp chmod 0700 "${MNTPOINT}"/root/.ssh if ! ssh-add -L >> "${MNTPOINT}"/root/.ssh/authorized_keys ; then eerror "Error: executing 'ssh-add -L' failed." - eend 1 bailout 1 fi elif [ -f "$AUTHORIZED_KEYS_SOURCE" ]; then @@ -1964,12 +1950,10 @@ iface ${interface} inet dhcp chmod 0700 "$AUTHORIZED_KEYS_TARGET" if ! cp "$AUTHORIZED_KEYS_SOURCE" "$AUTHORIZED_KEYS_TARGET" ; then eerror "Error: copying '$AUTHORIZED_KEYS_SOURCE' to '$AUTHORIZED_KEYS_TARGET' failed" - eend 1 bailout 1 fi else eerror "Error: Could not open a connection to your authentication agent or the agent has no identities." - eend 1 bailout 1 fi fi @@ -1979,7 +1963,6 @@ iface ${interface} inet dhcp if ! [ -f "${AUTHORIZED_KEYS_SOURCE}" ]; then eerror "Error: could not read '${AUTHORIZED_KEYS_SOURCE}' for setting up SSH key login." - eend 1 bailout 1 fi @@ -1989,7 +1972,6 @@ iface ${interface} inet dhcp chmod 0700 "${AUTHORIZED_KEYS_TARGET}" if ! cp "${AUTHORIZED_KEYS_SOURCE}" "${AUTHORIZED_KEYS_TARGET}" ; then eerror "Error: copying '${AUTHORIZED_KEYS_SOURCE}' to '${AUTHORIZED_KEYS_TARGET}' failed." - eend 1 bailout 1 fi fi