X-Git-Url: https://git.grml.org/?a=blobdiff_plain;f=grml-debootstrap;h=879d105fb4284d2f3df7c09931285f5ade916ef4;hb=bfe0feda5534b6bbd7069dd2ae063e28b6af8871;hp=cff0116a0cdf4a9c6579f89cc32db9d6ef16563d;hpb=e0dc8d8a758b5a7ae2b3553391642c3dc603895f;p=grml-debootstrap.git diff --git a/grml-debootstrap b/grml-debootstrap index cff0116..879d105 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -244,20 +244,22 @@ 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 - umount "${MNTPOINT}/boot/efi" >/dev/null 2>&1 + if findmnt "${MNTPOINT}"/boot/efi &>/dev/null ; then + umount "${MNTPOINT}"/boot/efi fi # Remove temporary mountpoint again if echo "$MNTPOINT" | grep -q '/mnt/debootstrap\.' ; then - rmdir "$MNTPOINT" 2>/dev/null + if [ -d "$MNTPOINT" ] ; then + rmdir "$MNTPOINT" || true + fi fi # make sure $TARGET is not mounted when exiting grml-debootstrap @@ -270,17 +272,17 @@ cleanup() { fi done - [ -x "$MNTPOINT"/bin/umount ] && chroot "$MNTPOINT" umount -a >/dev/null 2>&1 + [ -x "$MNTPOINT"/bin/umount ] && chroot "$MNTPOINT" umount -a >/dev/null 2>&1 || true # ugly, but make sure we really don't leave anything (/proc /proc and # /dev /dev are intended, trying to work around timing issues, see #657023) for ARG in /run/udev /sys /proc /proc /dev/pts /dev/pts /dev /dev ; do - [ -x "$MNTPOINT"/bin/umount ] && chroot "$MNTPOINT" umount $ARG >/dev/null 2>&1 - umount "$MNTPOINT"/$ARG >/dev/null 2>&1 + [ -x "$MNTPOINT"/bin/umount ] && chroot "$MNTPOINT" umount $ARG >/dev/null 2>&1 || true + umount "$MNTPOINT"/$ARG >/dev/null 2>&1 || true done if [ -n "$ISODIR" ] ; then - [ -d "$MNTPOINT/$ISODIR" ] && umount "$MNTPOINT/$ISODIR" >/dev/null 2>&1 + [ -d "$MNTPOINT/$ISODIR" ] && umount "$MNTPOINT/$ISODIR" >/dev/null 2>&1 || true fi if [ -n "$DIRECTORY" ] ; then @@ -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 @@ -342,6 +346,7 @@ stage() { # source main configuration file {{{ if [ -r /etc/debootstrap/config ] ; then + bash -n /etc/debootstrap/config # shellcheck disable=SC1091 . /etc/debootstrap/config fi @@ -350,11 +355,10 @@ fi # cmdline handling {{{ CMDLINE_OPTS=mirror:,iso:,release:,target:,mntpoint:,debopt:,defaultinterfaces,interactive,nodebootstrap,nointerfaces,nokernel,nopackages,filesystem:,config:,confdir:,packages:,chroot-scripts:,scripts:,post-scripts:,pre-scripts:,debconf:,vm,vmfile,vmsize:,vmefi,keep_src_list,hostname:,password:,nopassword,grmlrepos,backportrepos,bootappend:,grub:,efi:,arch:,insecure,verbose,help,version,force,debug,contrib,non-free,remove-configs,sshcopyid,sshcopyauth -_opt_temp=$(getopt --name grml-debootstrap -o +m:i:r:t:p:c:d:vhV --long \ - $CMDLINE_OPTS -- "$@") - -if [ $? != 0 ]; then - eerror "Try 'grml-debootstrap --help' for more information."; eend 1; exit 1 +if ! _opt_temp=$(getopt --name grml-debootstrap -o +m:i:r:t:p:c:d:vhV --long \ + $CMDLINE_OPTS -- "$@"); then + eerror "Try 'grml-debootstrap --help' for more information." + bailout 1 fi eval set -- "$_opt_temp" @@ -654,6 +658,7 @@ fi # source specified configuration file {{{ if [ -n "$CONFIGFILE" ] ; then einfo "Reading specified config file $CONFIGFILE." + bash -n "$CONFIGFILE" # shellcheck disable=SC1091 source=config if ! . "$CONFIGFILE" ; then eerror "Error reading config file $CONFIGFILE" ; bailout 1 @@ -696,8 +701,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 @@ -710,8 +714,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 } # }}} @@ -759,8 +762,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 @@ -795,8 +797,8 @@ prompt_for_release() buster Debian/10 \ bullseye Debian/11 \ bookworm Debian/12 \ - sid Debian/unstable)" - [ $? -eq 0 ] || bailout + sid Debian/unstable)" \ + || bailout } # }}} @@ -805,8 +807,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 } # }}} @@ -822,13 +823,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 \ @@ -849,20 +848,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 } # }}} @@ -885,8 +882,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/*//' | \ @@ -900,8 +896,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 @@ -1056,8 +1052,7 @@ elif [ -n "$INTERACTIVE" ] ; then Is this ok for you? Notice: selecting 'No' will exit ${PN}." dialog --title "$PN" --no-collapse \ - --yesno "$INFOTEXT" 0 0 - [ $? -eq 0 ] || bailout 0 + --yesno "$INFOTEXT" 0 0 || bailout 0 else # if not running automatic installation display configuration and prompt for execution: einfo "$PN [${VERSION}] - Please recheck configuration before execution:" @@ -1456,7 +1451,7 @@ prepare_vm() { fi # make sure loop module is present and a usable loop device exists - modprobe -q loop + modprobe loop || true if ! losetup -f >/dev/null 2>&1; then eerror "Error finding usable loop device" bailout 1 @@ -1464,7 +1459,7 @@ prepare_vm() { # if dm-mod isn't available then kpartx will fail with # "Is device-mapper driver missing from kernel? [...]" - modprobe -q dm-mod + modprobe dm-mod || true if ! grep -q 'device-mapper' /proc/misc >/dev/null 2>&1 ; then eerror "Device-mapper support missing in kernel." bailout 1 @@ -1553,8 +1548,8 @@ grub_install() { fi if [ -n "${ARM_EFI_TARGET}" ]; then - mkdir -p "${MNTPOINT}/boot/efi" - if ! mount "${ARM_EFI_TARGET}" "${MNTPOINT}/boot/efi" ; 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." bailout 1 fi @@ -1687,7 +1682,7 @@ grub_install() { umount "${MNTPOINT}"/dev/pts try_umount 3 "${MNTPOINT}"/dev - if [ -n "$VMEFI" ]; then + if findmnt "${MNTPOINT}"/boot/efi &>/dev/null ; then umount "${MNTPOINT}"/boot/efi fi @@ -1700,8 +1695,8 @@ umount_target() { return 0 fi - if [ -n "${ARM_EFI_TARGET}" ]; then - umount "${MNTPOINT}/boot/efi" + if findmnt "${MNTPOINT}"/boot/efi &>/dev/null ; then + umount "${MNTPOINT}"/boot/efi fi umount "${MNTPOINT}" @@ -2157,11 +2152,8 @@ for i in format_efi_partition prepare_vm mkfs tunefs \ remove_configs umount_chroot grub_install umount_target fscktool ; do if stage "${i}" ; then "$i" - if [ $? -eq 0 ]; then - stage "${i}" 'done' && rm -f "${STAGES}/${i}" - else - bailout 2 "$i" - fi + stage "${i}" 'done' + rm -f "${STAGES}/${i}" fi done