mirror of
https://github.com/ostreedev/ostree.git
synced 2025-03-08 08:58:46 +03:00
deploy: Correctly swap bootloader version with new boot checksums
If we had two deployments with different boot checksums, and were trying to remove the one that was the same and add a new one (the normal case), we'd end up assuming due to comparison with 0 that we only needed to do the fast subbootversion swap. Fix this by actually putting 1 where we really mean 1. And update the tests to verify the fix; I have double-verified by undoing the fix, and noting that the test fails. https://bugzilla.gnome.org/show_bug.cgi?id=708351
This commit is contained in:
parent
08b8734576
commit
298625d7f8
@ -980,18 +980,10 @@ bootcsum_counts_for_deployment_list (GPtrArray *deployments)
|
||||
{
|
||||
OstreeDeployment *deployment = deployments->pdata[i];
|
||||
const char *bootcsum = ostree_deployment_get_bootcsum (deployment);
|
||||
gpointer orig_key;
|
||||
gpointer countp;
|
||||
guint count;
|
||||
|
||||
if (!g_hash_table_lookup_extended (ret, bootcsum, &orig_key, &countp))
|
||||
{
|
||||
g_hash_table_insert (ret, (char*)bootcsum, GUINT_TO_POINTER (0));
|
||||
}
|
||||
else
|
||||
{
|
||||
guint count = GPOINTER_TO_UINT (countp);
|
||||
g_hash_table_replace (ret, (char*)bootcsum, GUINT_TO_POINTER (count + 1));
|
||||
}
|
||||
count = GPOINTER_TO_UINT (g_hash_table_lookup (ret, bootcsum));
|
||||
g_hash_table_replace (ret, (char*)bootcsum, GUINT_TO_POINTER (count + 1));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -239,10 +239,15 @@ EOF
|
||||
|
||||
os_repository_new_commit ()
|
||||
{
|
||||
boot_checksum_iteration=$1
|
||||
echo "BOOT ITERATION: $boot_checksum_iteration"
|
||||
if test -z "$boot_checksum_iteration"; then
|
||||
boot_checksum_iteration=0
|
||||
fi
|
||||
cd ${test_tmpdir}/osdata
|
||||
rm boot/*
|
||||
echo "new: a kernel" > boot/vmlinuz-3.6.0
|
||||
echo "new: an initramfs" > boot/initramfs-3.6.0
|
||||
echo "new: a kernel ${boot_checksum_iteration}" > boot/vmlinuz-3.6.0
|
||||
echo "new: an initramfs ${boot_checksum_iteration}" > boot/initramfs-3.6.0
|
||||
bootcsum=$(cat boot/vmlinuz-3.6.0 boot/initramfs-3.6.0 | sha256sum | cut -f 1 -d ' ')
|
||||
export bootcsum
|
||||
mv boot/vmlinuz-3.6.0 boot/vmlinuz-3.6.0-${bootcsum}
|
||||
|
@ -39,20 +39,24 @@ assert_has_dir sysroot/boot/ostree/testos-${bootcsum}
|
||||
echo "ok deploy command"
|
||||
|
||||
# Commit + upgrade twice, so that we'll rotate out the original deployment
|
||||
orig_bootcsum=${bootcsum}
|
||||
bootcsum1=${bootcsum}
|
||||
os_repository_new_commit
|
||||
ostree --repo=sysroot/ostree/repo remote add testos file://$(pwd)/testos-repo testos/buildmaster/x86_64-runtime
|
||||
ostree admin --sysroot=sysroot upgrade --os=testos
|
||||
os_repository_new_commit
|
||||
bootcsum2=${bootcsum}
|
||||
os_repository_new_commit "1"
|
||||
bootcsum3=${bootcsum}
|
||||
ostree --repo=sysroot/ostree/repo remote add testos file://$(pwd)/testos-repo testos/buildmaster/x86_64-runtime
|
||||
ostree admin --sysroot=sysroot upgrade --os=testos
|
||||
|
||||
rev=${newrev}
|
||||
newrev=$(ostree --repo=sysroot/ostree/repo rev-parse testos/buildmaster/x86_64-runtime)
|
||||
assert_not_streq ${rev} ${newrev}
|
||||
assert_not_streq ${orig_bootcsum} ${bootcsum}
|
||||
assert_not_has_dir sysroot/boot/ostree/testos-${orig_bootcsum}
|
||||
assert_not_streq ${bootcsum1} ${bootcsum2}
|
||||
assert_not_streq ${bootcsum2} ${bootcsum3}
|
||||
assert_not_has_dir sysroot/boot/ostree/testos-${bootcsum1}
|
||||
assert_has_dir sysroot/boot/ostree/testos-${bootcsum}
|
||||
assert_has_dir sysroot/boot/ostree/testos-${bootcsum2}
|
||||
assert_file_has_content sysroot/ostree/deploy/testos/deploy/${newrev}.0/etc/os-release 'NAME=TestOS'
|
||||
|
||||
echo "ok deploy and GC /boot"
|
||||
|
Loading…
x
Reference in New Issue
Block a user