X-Git-Url: https://git.grml.org/?p=grml-debootstrap.git;a=blobdiff_plain;f=grml-debootstrap;h=007d0bed3ab701dfc0ea73f53f5b8966680b8755;hp=efb8501bdb2db0e5a9f61c20a36157456b56cd63;hb=86c53253ecc5dd7971ab6e8d04b285c08265906a;hpb=0f66ed4e7d529e6be421019d11bc6b7d9d38c50f diff --git a/grml-debootstrap b/grml-debootstrap index efb8501..007d0be 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -18,10 +18,12 @@ MNTPOINT="/mnt/debootstrap.$$" [ -n "$DEBCONF" ] || DEBCONF='yes' [ -n "$DEBIAN_FRONTEND" ] || DEBIAN_FRONTEND='noninteractive' [ -n "$DEBOOTSTRAP" ] || DEBOOTSTRAP='debootstrap' -[ -n "$DEFAULT_LOCALES" ] || DEFAULT_LOCALES='en_US.UTF-8' [ -n "$DEFAULT_LANGUAGE" ] || DEFAULT_LANGUAGE='en_US:en' +[ -n "$DEFAULT_LOCALES" ] || DEFAULT_LOCALES='en_US.UTF-8' +[ -n "$DISK_IDENTIFIER" ] || DISK_IDENTIFIER='26ada0c0-1165-4098-884d-aafd2220c2c6' [ -n "$EXTRAPACKAGES" ] || EXTRAPACKAGES='yes' [ -n "$FALLBACK_MIRROR" ] || FALLBACK_MIRROR='http://http.debian.net/debian' +[ -n "$FIXED_DISK_IDENTIFIERS" ] || FIXED_DISK_IDENTIFIERS="no" [ -n "$FORCE" ] || FORCE='' [ -n "$HOSTNAME" ] || HOSTNAME='grml' [ -n "$INITRD" ] || INITRD='yes' @@ -29,6 +31,7 @@ MNTPOINT="/mnt/debootstrap.$$" [ -n "$LOCALES" ] || LOCALES='yes' [ -n "$MIRROR" ] || MIRROR="$FALLBACK_MIRROR" [ -n "$MKFS" ] || MKFS='mkfs.ext4' +[ -n "$MKFS_OPTS" ] || MKFS_OPTS='' [ -n "$PACKAGES" ] || PACKAGES='yes' [ -n "$PRE_SCRIPTS" ] || PRE_SCRIPTS='yes' [ -n "$RECONFIGURE" ] || RECONFIGURE='console-data' @@ -40,7 +43,6 @@ MNTPOINT="/mnt/debootstrap.$$" [ -n "$TUNE2FS" ] || TUNE2FS='tune2fs -c0 -i0' [ -n "$UPGRADE_SYSTEM" ] || UPGRADE_SYSTEM='yes' [ -n "$VMSIZE" ] || VMSIZE="2G" -[ -n "$FIXED_DISK_IDENTIFIERS" ] || FIXED_DISK_IDENTIFIERS="no" # inside the chroot system locales might not be available, so use minimum: export LANG=C @@ -899,45 +901,57 @@ fi mkfs() { if [ -n "$DIRECTORY" ] ; then einfo "Running grml-debootstrap on a directory, skipping mkfs stage." - else - if grep -q "$TARGET" /proc/mounts ; then - eerror "$TARGET already mounted, exiting to avoid possible damage. (Manually unmount $TARGET)" ; eend 1 - bailout 1 - fi + return 0 + fi - if [ -n "$MKFS" ] ; then - einfo "Running $MKFS on $TARGET" - $MKFS $TARGET ; RC=$? - - 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 using tune2fs" - tune2fs "$TARGET" -U 26ada0c0-1165-4098-884d-aafd2220c2c6 - eend $? - fi - fi + if grep -q "$TARGET" /proc/mounts ; then + eerror "$TARGET already mounted, exiting to avoid possible damage. (Manually unmount $TARGET)" ; eend 1 + bailout 1 + fi - # make sure /dev/disk/by-uuid/... is up2date, otherwise grub - # will fail to detect the uuid in the chroot - if echo "$TARGET" | grep -q "/dev/md" ; then - blockdev --rereadpt "${TARGET}" - elif ! [ -n "$VIRTUAL" ] ; then - blockdev --rereadpt "${TARGET%%[0-9]*}" - fi - # give the system 2 seconds, otherwise we might run into - # race conditions :-/ - sleep 2 + # mkfs.ext* might prompt with "/dev/sdX# contains a ext* file system + # created on ... Proceed anyway? (y,n)" which we want to skip in force mode + if [ -n "$MKFS" ] && [ -n "$FORCE" ] ; then + case "$MKFS" in + mkfs.ext*) + einfo "Enabling force option (-F) for mkfs.ext* tool as requested via --force switch." + MKFS_OPTS="$MKFS_OPTS -F" + eend 0 + ;; + esac + fi - eval $(blkid -o udev $TARGET 2>/dev/null) - [ -n "$ID_FS_UUID" ] && TARGET_UUID="$ID_FS_UUID" || TARGET_UUID="" + if [ -n "$MKFS" ] ; then + einfo "Running $MKFS $MKFS_OPTS on $TARGET" + $MKFS $MKFS_OPTS $TARGET ; RC=$? - eend $RC + 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" + tune2fs "$TARGET" -U "$DISK_IDENTIFIER" + eend $? + fi + fi + + # make sure /dev/disk/by-uuid/... is up2date, otherwise grub + # will fail to detect the uuid in the chroot + if echo "$TARGET" | grep -q "/dev/md" ; then + blockdev --rereadpt "${TARGET}" + elif ! [ -n "$VIRTUAL" ] ; then + blockdev --rereadpt "${TARGET%%[0-9]*}" fi + # give the system 2 seconds, otherwise we might run into + # 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 } # }}}