-
Notifications
You must be signed in to change notification settings - Fork 115
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #410 from sallyom/growfs
Add growfs service to chatbot/bootc Containerfiles
- Loading branch information
Showing
6 changed files
with
76 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
20 changes: 20 additions & 0 deletions
20
recipes/common/usr/lib/systemd/system/bootc-generic-growpart.service
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
1 change: 1 addition & 0 deletions
1
recipes/common/usr/lib/systemd/system/local-fs.target.wants/bootc-generic-growpart.service
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../bootc-generic-growpart.service |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters