Import rpi-resizerootfs hook and script from image-specs.
As of commit ff7fdbf07c727ba1d2277dc7f274bd234f2e2bfa in the image-specs repository (https://salsa.debian.org/raspi-team/image-specs).
This commit is contained in:
parent
d586813d5f
commit
b9a2b88370
52
raspberrypi/files/rpi-resizerootfs.hook
Executable file
52
raspberrypi/files/rpi-resizerootfs.hook
Executable file
@ -0,0 +1,52 @@
|
||||
#!/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
|
||||
|
||||
. /usr/share/initramfs-tools/hook-functions
|
||||
|
||||
# List ALL the programs we need, because we explicitly call them
|
||||
# Don't *assume* it will be included!
|
||||
# The update-initramfs script will figure out any dependencies
|
||||
# that also need to be included, so lets not do that
|
||||
#
|
||||
# Find the path as used by the package itself; usrmerge may not be used
|
||||
|
||||
# from coreutils
|
||||
copy_exec /usr/bin/realpath
|
||||
copy_exec /usr/bin/tail
|
||||
copy_exec /usr/bin/test
|
||||
|
||||
# from dosfstools
|
||||
copy_exec /sbin/fsck.vfat
|
||||
|
||||
# from e2fsprogs
|
||||
copy_exec /sbin/resize2fs
|
||||
copy_exec /sbin/fsck.ext4
|
||||
|
||||
# from grep
|
||||
copy_exec /bin/grep
|
||||
|
||||
# from logsave
|
||||
copy_exec /sbin/logsave
|
||||
|
||||
# from mount
|
||||
copy_exec /bin/mount
|
||||
copy_exec /bin/umount
|
||||
|
||||
# from parted
|
||||
copy_exec /sbin/parted
|
||||
copy_exec /sbin/partprobe
|
||||
|
||||
# from util-linux
|
||||
copy_exec /bin/lsblk
|
||||
copy_exec /sbin/blkid
|
||||
copy_exec /sbin/fsck
|
59
raspberrypi/files/rpi-resizerootfs.script
Executable file
59
raspberrypi/files/rpi-resizerootfs.script
Executable file
@ -0,0 +1,59 @@
|
||||
#!/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"
|
||||
|
||||
# After resizing, (re)check the root partition's filesystem
|
||||
fsck "$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
|
Loading…
Reference in New Issue
Block a user