Merge pull request #2155 from jlebon/pr/add-initrds
lib/deploy: Add support for overlay initrds
This commit is contained in:
13 files changed
+599
-35
No files matched your search
+96
@@ -0,0 +1,96 @@
|
||||
#!/bin/bash
|
||||
# https://github.com/ostreedev/ostree/issues/1667
|
||||
set -xeuo pipefail
|
||||
|
||||
. ${KOLA_EXT_DATA}/libinsttest.sh
|
||||
|
||||
# we don't just use `rpm-ostree initramfs-etc` here because we want to be able
|
||||
# to test more things
|
||||
|
||||
# dracut prints all the cmdline args, including those from /etc/cmdline.d, so
|
||||
# the way we test that an initrd was included is to just add kargs there and
|
||||
# grep for it
|
||||
create_initrd_with_dracut_karg() {
|
||||
local karg=$1; shift
|
||||
local d
|
||||
d=$(mktemp -dp /var/tmp)
|
||||
mkdir -p "${d}/etc/cmdline.d"
|
||||
echo "${karg}" > "${d}/etc/cmdline.d/${karg}.conf"
|
||||
echo "etc/cmdline.d/${karg}.conf" | \
|
||||
cpio -D "${d}" -o -H newc --reproducible > "/var/tmp/${karg}.img"
|
||||
}
|
||||
|
||||
check_for_dracut_karg() {
|
||||
local karg=$1; shift
|
||||
# https://github.com/dracutdevs/dracut/blob/38ea7e821b/modules.d/98dracut-systemd/dracut-cmdline.sh#L17
|
||||
journalctl -b 0 -t dracut-cmdline \
|
||||
--grep "Using kernel command line parameters:.* ${karg} "
|
||||
}
|
||||
|
||||
case "${AUTOPKGTEST_REBOOT_MARK:-}" in
|
||||
"")
|
||||
create_initrd_with_dracut_karg ostree.test1
|
||||
# let's use the deploy API first
|
||||
ostree admin deploy "${host_refspec}" \
|
||||
--overlay-initrd /var/tmp/ostree.test1.img
|
||||
/tmp/autopkgtest-reboot "2"
|
||||
;;
|
||||
2)
|
||||
# verify that ostree.test1 is here
|
||||
check_for_dracut_karg ostree.test1
|
||||
img_sha=$(sha256sum < /var/tmp/ostree.test1.img | cut -f 1 -d ' ')
|
||||
test -f "/boot/ostree/initramfs-overlays/${img_sha}.img"
|
||||
|
||||
# now let's change to ostree.test2
|
||||
create_initrd_with_dracut_karg ostree.test2
|
||||
|
||||
# let's use the staging API this time
|
||||
ostree admin deploy "${host_refspec}" --stage \
|
||||
--overlay-initrd /var/tmp/ostree.test2.img
|
||||
/tmp/autopkgtest-reboot "3"
|
||||
;;
|
||||
3)
|
||||
# verify that ostree.test1 is gone, but ostree.test2 is here
|
||||
if check_for_dracut_karg ostree.test1; then
|
||||
assert_not_reached "Unexpected ostree.test1 karg found"
|
||||
fi
|
||||
check_for_dracut_karg ostree.test2
|
||||
|
||||
# both the new and old initrds should still be there since they're
|
||||
# referenced in the BLS
|
||||
test1_sha=$(sha256sum < /var/tmp/ostree.test1.img | cut -f 1 -d ' ')
|
||||
test2_sha=$(sha256sum < /var/tmp/ostree.test2.img | cut -f 1 -d ' ')
|
||||
test -f "/boot/ostree/initramfs-overlays/${test1_sha}.img"
|
||||
test -f "/boot/ostree/initramfs-overlays/${test2_sha}.img"
|
||||
|
||||
# OK, now let's deploy an identical copy of this test
|
||||
ostree admin deploy "${host_refspec}" \
|
||||
--overlay-initrd /var/tmp/ostree.test2.img
|
||||
|
||||
# Now the deployment with ostree.test1 should've been GC'ed; check that its
|
||||
# initrd was cleaned up
|
||||
test ! -f "/boot/ostree/initramfs-overlays/${test1_sha}.img"
|
||||
test -f "/boot/ostree/initramfs-overlays/${test2_sha}.img"
|
||||
|
||||
# deploy again to check that no bootconfig swap was needed; this verifies
|
||||
# that deployment overlay initrds can be successfully compared
|
||||
ostree admin deploy "${host_refspec}" \
|
||||
--overlay-initrd /var/tmp/ostree.test2.img |& tee /tmp/out.txt
|
||||
assert_file_has_content /tmp/out.txt 'bootconfig swap: no'
|
||||
|
||||
# finally, let's check that we can overlay multiple initrds
|
||||
ostree admin deploy "${host_refspec}" --stage \
|
||||
--overlay-initrd /var/tmp/ostree.test1.img \
|
||||
--overlay-initrd /var/tmp/ostree.test2.img
|
||||
/tmp/autopkgtest-reboot "4"
|
||||
;;
|
||||
4)
|
||||
check_for_dracut_karg ostree.test1
|
||||
check_for_dracut_karg ostree.test2
|
||||
test1_sha=$(sha256sum < /var/tmp/ostree.test1.img | cut -f 1 -d ' ')
|
||||
test2_sha=$(sha256sum < /var/tmp/ostree.test2.img | cut -f 1 -d ' ')
|
||||
test -f "/boot/ostree/initramfs-overlays/${test1_sha}.img"
|
||||
test -f "/boot/ostree/initramfs-overlays/${test2_sha}.img"
|
||||
;;
|
||||
*) fatal "Unexpected AUTOPKGTEST_REBOOT_MARK=${AUTOPKGTEST_REBOOT_MARK}" ;;
|
||||
esac
|
||||
Reference in new issue
Block a user