X-Git-Url: https://git.grml.org/?p=grml-debootstrap.git;a=blobdiff_plain;f=grml-debootstrap;h=9e5cee3f96a9a9f6a19af1fbf9f6f3d62db56aae;hp=823d876768eadab34bb5ae766e38043ac909feae;hb=3da69b03791880fa5fa19c749e30c310cafa4f2e;hpb=31e65a1924740192b8ee249fd0f97b59a33c571b diff --git a/grml-debootstrap b/grml-debootstrap index 823d876..9e5cee3 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -41,7 +41,7 @@ fi # variables {{{ PN="$(basename "$0")" if [[ -d "$(dirname "$(command -v "$0")")"/.git ]]; then - VERSION="$(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 @@ -72,7 +72,7 @@ MNTPOINT="/mnt/debootstrap.$$" [ -n "$POST_SCRIPTS" ] || POST_SCRIPTS='yes' [ -n "$PRE_SCRIPTS" ] || PRE_SCRIPTS='yes' [ -n "$RECONFIGURE" ] || RECONFIGURE='console-data' -[ -n "$RELEASE" ] || RELEASE='buster' +[ -n "$RELEASE" ] || RELEASE='bullseye' [ -n "$RM_APTCACHE" ] || RM_APTCACHE='yes' [ -n "$SCRIPTS" ] || SCRIPTS='no' # deprecated, replaced by POST_SCRIPTS [ -n "$SECURE" ] || SECURE='yes' @@ -103,7 +103,7 @@ Bootstrap options: -m, --mirror Mirror which should be used for apt-get/aptitude. -i, --iso Mountpoint where a Debian ISO is mounted to, for use instead of fetching packages from a mirror. - -r, --release Release of new Debian system (default: buster). + -r, --release Release of new Debian system (default: bullseye). -t, --target Target partition (/dev/...) or directory where the system should be installed to. -p, --mntpoint Mountpoint used for mounting the target system, @@ -183,10 +183,18 @@ fi # }}} # early helper functions {{{ -GOOD='' -BAD='' -WARN='' -NORMAL='' +# skip colors when running within a dumb terminal +if [ "${TERM}" = "dumb" ] ; then + GOOD= + BAD= + WARN= + NORMAL= +else + GOOD='' + BAD='' + WARN='' + NORMAL='' +fi einfo() { einfon "$1\\n" @@ -386,7 +394,7 @@ while :; do shift; _opt_debopt="$1" ;; --filesystem) # Filesystem that should be used - shift; _opt_filesystem="$1" + shift; _opt_filesystem="$1" ; FILESYSTEM="${_opt_filesystem}" ;; --interactive) # Use interactive mode (frontend) _opt_interactive=T @@ -779,7 +787,7 @@ prompt_for_bootmanager() # ask for Debian release {{{ prompt_for_release() { - [ -n "$RELEASE" ] && DEFAULT_RELEASE="$RELEASE" || DEFAULT_RELEASE='buster' + [ -n "$RELEASE" ] && DEFAULT_RELEASE="$RELEASE" || DEFAULT_RELEASE='bullseye' RELEASE="$(dialog --stdout --title "${PN}" --default-item $DEFAULT_RELEASE --menu \ "Please enter the Debian release you would like to use for installation:" \ 0 50 8 \ @@ -972,7 +980,7 @@ format_efi_partition() { einfo "EFI partition $EFI seems to have a FAT filesystem, not modifying." ; eend 0 else einfo "EFI partition $EFI doesn't seem to be formatted, creating filesystem." - mkfs.fat -F32 -n "EFI System Partition" "$EFI" + mkfs.fat -F32 -n "EFI" "$EFI" RC=$? if [ $RC -eq 0 ] ; then eend 0 @@ -987,14 +995,23 @@ format_efi_partition() { # check for EFI support or try to enable it {{{ efi_support() { - if lsmod | grep -q efivars ; then + local efivars_loaded=false + # this is for kernels versions before v3.10, which didn't provide efivarfs yet + if modprobe efivars &>/dev/null ; then + efivars_loaded=true + fi + # kernel versions v3.10 and newer usually provide efivarfs + if modprobe efivarfs &>/dev/null ; then + efivars_loaded=true + fi + + if [ -d /sys/firmware/efi ] ; then einfo "EFI support detected." ; eend 0 return 0 fi - if modprobe efivars &>/dev/null ; then - einfo "EFI support enabled now." ; eend 0 - return 0 + if ! [ -d /sys/firmware/efi ] && [ "${efivars_loaded:-}" = "true" ] ; then + einfo "EFI support detected, but system seems to be running in BIOS mode." fi return 1 @@ -1143,6 +1160,12 @@ else ARCHCMD="--arch $ARCH" ARCHINFO=" (${ARCH})" 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 + bailout 1 +fi # }}} # It is not possible to build amd64 on i686. {{{ @@ -1158,7 +1181,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 stretch or buster." ; eend 1 +Please use specific codenames such as buster or bullseye." ; eend 1 bailout 1 fi # }}} @@ -1451,7 +1474,7 @@ prepare_vm() { dd if="${MBRTMPFILE}" of="${TARGET}" conv=notrunc eend $? fi - parted -s "${TARGET}" 'mkpart primary ext4 2M -1' + parted -s "${TARGET}" 'mkpart primary ext4 4MiB 100%' parted -s "${TARGET}" 'set 1 boot on' DEVINFO=$(kpartx -asv "$TARGET") # e.g. 'add map loop0p1 (254:5): 0 20477 linear 7:0 3' @@ -1501,7 +1524,7 @@ if [[ -z "${GRUB}" ]] || ! dd if="${GRUB}" bs=512 count=1 2>/dev/null | cat -v | 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 install $DPKG_OPTIONS grub-pc + DEBIAN_FRONTEND=$DEBIAN_FRONTEND chroot "$MNTPOINT" apt-get -y --no-install-recommends install $DPKG_OPTIONS grub-pc fi mkdir -p "${MNTPOINT}/boot/grub" @@ -1519,7 +1542,19 @@ if [[ -z "${GRUB}" ]] || ! dd if="${GRUB}" bs=512 count=1 2>/dev/null | cat -v | ;; esac dd if="${MNTPOINT}/usr/lib/grub/i386-pc/boot.img" of="${ORIG_TARGET}" conv=notrunc bs=440 count=1 - chroot "${MNTPOINT}" grub-mkimage -O i386-pc -p "(hd0,msdos1)/boot/grub" -o /tmp/core.img biosdisk part_msdos ext2 + 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 @@ -1600,15 +1635,15 @@ debootstrap_system() { if [ -n "$ISO" ] ; then einfo "Running $DEBOOTSTRAP $DEBOOTSTRAP_OPT for release ${RELEASE}${ARCHINFO} using ${ISO}" - einfo "Executing: $DEBOOTSTRAP $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $ISO" + einfo "Executing: $DEBOOTSTRAP $ARCHCMD $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $ISO" # shellcheck disable=SC2086 - "$DEBOOTSTRAP" $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT "$RELEASE" "$MNTPOINT" "$ISO" + "$DEBOOTSTRAP" $ARCHCMD $DEBOOTSTRAP_OPT "$RELEASE" "$MNTPOINT" "$ISO" RC=$? else einfo "Running $DEBOOTSTRAP $DEBOOTSTRAP_OPT for release ${RELEASE}${ARCHINFO} using ${MIRROR}" - einfo "Executing: $DEBOOTSTRAP $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $MIRROR" + einfo "Executing: $DEBOOTSTRAP $ARCHCMD $DEBOOTSTRAP_OPT $RELEASE $MNTPOINT $MIRROR" # shellcheck disable=SC2086 - "$DEBOOTSTRAP" $ARCHCMD $KEYRING $DEBOOTSTRAP_OPT "$RELEASE" "$MNTPOINT" "$MIRROR" + "$DEBOOTSTRAP" $ARCHCMD $DEBOOTSTRAP_OPT "$RELEASE" "$MNTPOINT" "$MIRROR" RC=$? fi @@ -1650,6 +1685,7 @@ preparechroot() { [ -n "$EXTRAPACKAGES" ] && echo "EXTRAPACKAGES='$(sed "s,','\\\\'',g" <<<"${EXTRAPACKAGES}")'" >> "$CHROOT_VARIABLES" [ -n "$EFI" ] && echo "EFI='$(sed "s,','\\\\'',g" <<<"${EFI}")'" >> "$CHROOT_VARIABLES" [ -n "$FALLBACK_MIRROR" ] && echo "FALLBACK_MIRROR='$(sed "s,','\\\\'',g" <<<"${FALLBACK_MIRROR}")'" >> "$CHROOT_VARIABLES" + [ -n "$FILESYSTEM" ] && echo "FILESYSTEM='$(sed "s,','\\\\'',g" <<<"${FILESYSTEM}")'" >> "$CHROOT_VARIABLES" [ -n "$FORCE" ] && echo "FORCE='$(sed "s,','\\\\'',g" <<<"${FORCE}")'" >> "$CHROOT_VARIABLES" [ -n "$GRMLREPOS" ] && echo "GRMLREPOS='$(sed "s,','\\\\'',g" <<<"${GRMLREPOS}")'" >> "$CHROOT_VARIABLES" [ -n "$GRUB" ] && echo "GRUB='$(sed "s,','\\\\'',g" <<<"${GRUB}")'" >> "$CHROOT_VARIABLES" @@ -1851,7 +1887,8 @@ iface ${interface} inet dhcp AUTHORIZED_KEYS_TARGET="${MNTPOINT}/root/.ssh/" einfo "Copying '${AUTHORIZED_KEYS_SOURCE}' to '${AUTHORIZED_KEYS_TARGET}' as requested via --sshcopyauth option." - mkdir -m 0700 -p "${AUTHORIZED_KEYS_TARGET}" + mkdir -p "${AUTHORIZED_KEYS_TARGET}" + chmod 0700 "${AUTHORIZED_KEYS_TARGET}" if cp "${AUTHORIZED_KEYS_SOURCE}" "${AUTHORIZED_KEYS_TARGET}" ; then eend 0 else