Add bootc-generic-growpart
This service is a backfill for lack of a better option as a baseline to run in cloud/virt environments: - Without cloud-init - Even with cloud-init, as it doesn't yet support growing on ostree/composefs Signed-off-by: Colin Walters <walters@verbum.org>
This commit is contained in:
parent
582297efcc
commit
ae9118576b
|
|
@ -0,0 +1,41 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
backing_device=$(findmnt -vno SOURCE /sysroot)
|
||||||
|
echo "Backing device: ${backing_device}"
|
||||||
|
syspath=/sys/class/block/$(basename "${backing_device}")
|
||||||
|
if ! test -d "${syspath}"; then
|
||||||
|
echo "failed to find backing device ${syspath}"; exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Handling devicemapper targets is a whole other thing
|
||||||
|
case $backing_device in
|
||||||
|
/dev/mapper/*) "Not growing $backing_device"; exit 0 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Note that we expect that the rootfs is on a partition
|
||||||
|
partition=$(cat "${syspath}"/partition)
|
||||||
|
|
||||||
|
# Walk up to find the parent blockdev
|
||||||
|
parentpath=$(dirname "$(realpath "${syspath}")")
|
||||||
|
devmajmin=$(cat "${parentpath}"/dev)
|
||||||
|
parent="/dev/block/${devmajmin}"
|
||||||
|
|
||||||
|
# Grow the partition
|
||||||
|
tmpf=$(mktemp)
|
||||||
|
# Ignore errors because growpart exits 1 if nothing changed;
|
||||||
|
# we need to check the output for NOCHANGE:
|
||||||
|
if ! /usr/bin/growpart "${parent}" "${partition}" > "${tmpf}"; then
|
||||||
|
cat "${tmpf}"
|
||||||
|
if grep -qEe '^NOCHANGE: ' "${tmpf}"; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo "growpart failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
cat "${tmpf}"
|
||||||
|
# Now, temporarily remount the sysroot writable in our mount namespace
|
||||||
|
mount -o remount,rw /sysroot
|
||||||
|
# And defer to systemd's growfs wrapper which handles dispatching on
|
||||||
|
# the target filesystem type.
|
||||||
|
/usr/lib/systemd/systemd-growfs /sysroot
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Bootc Fallback Root Filesystem Grow
|
||||||
|
Documentation=https://gitlab.com/fedora/bootc/docs
|
||||||
|
# For now we skip bare metal cases, and we also have nothing to do
|
||||||
|
# for containers.
|
||||||
|
ConditionVirtualization=vm
|
||||||
|
# This helps verify that we're running in a bootc/ostree based target.
|
||||||
|
ConditionPathIsMountPoint=/sysroot
|
||||||
|
# We want to run before any e.g. large container images might be pulled.
|
||||||
|
DefaultDependencies=no
|
||||||
|
Requires=sysinit.target
|
||||||
|
After=sysinit.target
|
||||||
|
Before=basic.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/libexec/bootc-generic-growpart
|
||||||
|
# So we can temporarily remount the sysroot writable
|
||||||
|
MountFlags=slave
|
||||||
|
# Just to auto-cleanup our temporary files
|
||||||
|
PrivateTmp=yes
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
add-files:
|
||||||
|
- - bootc-generic-growpart
|
||||||
|
- /usr/libexec/bootc-generic-growpart
|
||||||
|
- - bootc-generic-growpart.service
|
||||||
|
- /usr/lib/systemd/system/bootc-generic-growpart.service
|
||||||
|
|
||||||
|
postprocess:
|
||||||
|
- |
|
||||||
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
mkdir -p /usr/lib/systemd/system/local-fs.target.wants
|
||||||
|
ln -s ../bootc-generic-growpart.service /usr/lib/systemd/system/local-fs.target.wants/bootc-generic-growpart.service
|
||||||
|
|
@ -13,6 +13,7 @@ include:
|
||||||
- fwupd.yaml
|
- fwupd.yaml
|
||||||
- persistent-journal.yaml
|
- persistent-journal.yaml
|
||||||
- initramfs-full.yaml
|
- initramfs-full.yaml
|
||||||
|
- generic-growfs.yaml
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
# Include and set the default editor
|
# Include and set the default editor
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue