X-Git-Url: https://git.grml.org/?p=grml-debootstrap.git;a=blobdiff_plain;f=grml-debootstrap;h=135b660ade04ac17f30bca7d315382dfaea6cecc;hp=5b5ad449315aed17dff8082107919276c6231bc8;hb=05ed1a4c5039c78a991d55fd93296e620c6bf900;hpb=ff11fa235c412826e9474946c7b74c5080a2ffaf diff --git a/grml-debootstrap b/grml-debootstrap index 5b5ad44..135b660 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -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='jessie' +[ -n "$RELEASE" ] || RELEASE='stretch' [ -n "$RM_APTCACHE" ] || RM_APTCACHE='yes' [ -n "$SCRIPTS" ] || SCRIPTS='no' # deprecated, replaced by POST_SCRIPTS [ -n "$SECURE" ] || SECURE='yes' @@ -102,7 +102,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: jessie). + -r, --release Release of new Debian system (default: stretch). -t, --target Target partition (/dev/...) or directory where the system should be installed to. -p, --mntpoint Mountpoint used for mounting the target system, @@ -463,7 +463,7 @@ if [ -n "$CONFIGFILE" ] ; then fi # }}} -# backwards compability checks {{{ +# backwards compatibility checks {{{ if [ -n "$GROOT" ] ; then eerror "Error: you seem to have \$GROOT configured." eerror "This variable is no longer supported, please visit the" @@ -588,7 +588,7 @@ prompt_for_bootmanager() # ask for Debian release {{{ prompt_for_release() { - [ -n "$RELEASE" ] && DEFAULT_RELEASE="$RELEASE" || DEFAULT_RELEASE='jessie' + [ -n "$RELEASE" ] && DEFAULT_RELEASE="$RELEASE" || DEFAULT_RELEASE='stretch' RELEASE="$(dialog --stdout --title "${PN}" --default-item $DEFAULT_RELEASE --menu \ "Please enter the Debian release you would like to use for installation:" \ 0 50 5 \ @@ -774,7 +774,7 @@ format_efi_partition() { if fsck.vfat -bn "$EFI" >/dev/null; then einfo "EFI partition $EFI seems to have a FAT filesystem, not modifying." ; eend 0 else - einfo "EFI partition $EFI doesn't seem to be formated, creating filesystem." + einfo "EFI partition $EFI doesn't seem to be formatted, creating filesystem." mkfs.fat -F32 -n "EFI System Partition" "$EFI" RC=$? if [ $RC -eq 0 ] ; then @@ -1113,14 +1113,52 @@ mkfs() { # race conditions :-/ sleep 2 - eval "$(blkid -o udev "$TARGET" 2>/dev/null)" - [ -n "$ID_FS_UUID" ] && TARGET_UUID="$ID_FS_UUID" || TARGET_UUID="" - eend $RC fi } # }}} +identify_target_uuid() { + local device="$1" + + if ! [ -b "$device" ] ; then + return 1 + fi + + eval "$(blkid -o udev "$1" 2>/dev/null)" + + if [ -n "$ID_FS_UUID" ] ; then + echo "$ID_FS_UUID" + else + return 1 + fi +} + +mountpoint_to_blockdevice() { + TARGET_UUID='' + + TARGET_UUID=$(identify_target_uuid "$TARGET" 2>/dev/null || true) + if [ -n "$TARGET_UUID" ] ; then + einfo "Identified UUID $TARGET_UUID for $TARGET" + return 0 + fi + + # $TARGET might be a mountpoint and not a blockdevice, search for according entry + for file in /sys/block/*/*/dev ; do + if grep -q "^$(mountpoint -d "${TARGET}")$" "$file" ; then + local dev + dev="${file%/dev}" + dev="/dev/${dev##*/}" + TARGET_UUID=$(identify_target_uuid "$dev" 2>/dev/null || true) + + if [ -n "$TARGET_UUID" ] ; then + einfo "Identified UUID $TARGET_UUID for $TARGET (via $file)" + return 0 + fi + fi + done +} + # modify filesystem settings {{{ tunefs() { if [ -n "$TUNE2FS" ] && echo "$MKFS" | grep -q "mkfs.ext" ; then @@ -1241,8 +1279,8 @@ finalize_vm() { mount -t proc none "${MNTPOINT}"/proc mount -t sysfs none "${MNTPOINT}"/sys - mount --bind /dev "${MNTPOINT}"/dev - mount --bind /dev/pts "${MNTPOINT}"/dev/pts + 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} @@ -1288,17 +1326,13 @@ fi ;; esac - case "$RELEASE" in - lenny|squeeze|wheezy) - 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 - einfo "Adjusting grub.cfg for successful boot sequence." - sed -i "s;root=[^ ]\+;root=UUID=$TARGET_UUID;" "${MNTPOINT}"/boot/grub/grub.cfg - fi - ;; - esac + 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 + einfo "Adjusting grub.cfg for successful boot sequence." + sed -i "s;root=[^ ]\+;root=UUID=$TARGET_UUID;" "${MNTPOINT}"/boot/grub/grub.cfg + fi umount "${MNTPOINT}"/proc umount "${MNTPOINT}"/sys @@ -1445,11 +1479,6 @@ preparechroot() { # make sure we can access network [relevant for cdebootstrap] [ -f "${MNTPOINT}"/etc/resolv.conf ] || cp $VERBOSE /etc/resolv.conf "${MNTPOINT}"/etc/resolv.conf - # provide system's /etc/hosts to the target: - if ! [ -f "$MNTPOINT/etc/hosts" ] ; then - cp $VERBOSE /etc/hosts "${MNTPOINT}"/etc/hosts - fi - # setup default locales [ -n "$LOCALES" ] && cp $VERBOSE "${CONFFILES}"/locale.gen "${MNTPOINT}"/etc/locale.gen @@ -1530,8 +1559,9 @@ execute_pre_scripts() { # execute all scripts in /etc/debootstrap/post-scripts/ {{{ execute_post_scripts() { - # make sure we have $MNTPOINT available for our scripts + # make sure we have $MNTPOINT and HOSTNAME available for our scripts export MNTPOINT + export TARGET_HOSTNAME=$HOSTNAME if [ -d "$_opt_scripts" ] || [ "$SCRIPTS" = 'yes' ] ; then # legacy support for /etc/debootstrap/scripts/ @@ -1583,8 +1613,8 @@ chrootscript() { eend 1 else einfo "Executing chroot-script now" - mount --bind /dev "$MNTPOINT"/dev - mount --bind /dev/pts "$MNTPOINT"/dev/pts + mount -t devtmpfs udev "${MNTPOINT}"/dev + mount -t devpts devpts "${MNTPOINT}"/dev/pts if [ "$DEBUG" = "true" ] ; then chroot "$MNTPOINT" /bin/bash -x /bin/chroot-script ; RC=$? else @@ -1668,7 +1698,8 @@ remove_configs() { # }}} # now execute all the functions {{{ -for i in format_efi_partition prepare_vm mkfs tunefs mount_target debootstrap_system \ +for i in format_efi_partition prepare_vm mkfs tunefs \ + mount_target mountpoint_to_blockdevice debootstrap_system \ preparechroot execute_pre_scripts chrootscript execute_post_scripts \ remove_configs umount_chroot finalize_vm fscktool ; do if stage "${i}" ; then