
The 'ROOTFLAGS' parameter should NOT be quoted as it then introduces an (empty) extra argument to 'mount', causing a boot failure. Thanks to 'mjt' for the help and identifying the issue. Lessons learned: 1) Don't blindly follow the *suggestions* that shellcheck makes 2) Test your changes (properly) before submitting/merging them ad 1) I find shellcheck a very useful tool, but it doesn't (and likely can't) understand the full context. The developer does (or should) and should evaluate each suggestion whether it's applicable in this case. ad 2) This should've been obvious and certainly for me. I'm normally very dilligent and test all my changes, but I got sloppy this time and did not. With logical consequences.
57 lines
1.6 KiB
Bash
Executable file
57 lines
1.6 KiB
Bash
Executable file
#!/bin/sh
|
|
set -e
|
|
|
|
#
|
|
# List the soft prerequisites here. This is a space separated list of
|
|
# names, of scripts that are in the same directory as this one, that
|
|
# must be run before this one can be.
|
|
#
|
|
PREREQS=""
|
|
case $1 in
|
|
prereqs) echo "$PREREQS"; exit 0;;
|
|
esac
|
|
|
|
. /scripts/functions
|
|
|
|
# Given the root partition, get the underlying device and partition number
|
|
rootpart=$(realpath "$ROOT")
|
|
rootpart_nr=$(blkid -sPART_ENTRY_NUMBER -o value -p "$rootpart")
|
|
rootdev="/dev/$(lsblk -no pkname "$rootpart")"
|
|
|
|
# Parted will detect if the GPT label is messed up and fix it
|
|
# automatically, we just need to tell it to do so.
|
|
parted -s "$rootdev" print 2>&1 | grep -z "fix the GPT" && {
|
|
echo "Fix" | parted ---pretend-input-tty "$rootdev" print
|
|
}
|
|
|
|
# Check if there's free space at the end of the device
|
|
free_space="$(parted -m -s "$rootdev" print free | tail -n1 | grep free)"
|
|
if test -z "$free_space"; then
|
|
# Great, we already resized; nothing left to do!
|
|
exit 0
|
|
fi
|
|
|
|
log_begin_msg "$0 resizing $ROOT"
|
|
|
|
# Unmount for safety; fail if unset or empty (shellcheck SC2154)
|
|
umount "${rootmnt:?}"
|
|
|
|
# Expand the partition size to fill the entire device
|
|
parted -s "$rootdev" resizepart "$rootpart_nr" 100%
|
|
|
|
wait_for_udev 5
|
|
|
|
# Now resize the filesystem
|
|
partprobe "$rootdev"
|
|
resize2fs "$rootpart"
|
|
|
|
# Remount root
|
|
# Don't quote ${ROOTFLAGS} as that results in an extra (empty) argument
|
|
# to 'mount', which in turn causes a boot failure
|
|
# shellcheck disable=SC2086
|
|
if ! mount -r ${FSTYPE:+-t "${FSTYPE}"} ${ROOTFLAGS} "${ROOT}" "${rootmnt?}"; then
|
|
panic "Failed to mount ${ROOT} as root file system."
|
|
fi
|
|
|
|
log_end_msg
|