97 lines
3.6 KiB
Bash
Executable File
97 lines
3.6 KiB
Bash
Executable File
#!/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
|