*
* An alternative is working with the block size instead, which would
* be easier to handle. */
- g_printerr ("bootcsum %s size exceeds %u; disabling auto-prune optimization\n", bootdir,
- G_MAXUINT);
+ ot_journal_print (LOG_WARNING,
+ "bootcsum %s size exceeds %u; disabling auto-prune optimization",
+ bootdir, G_MAXUINT);
return TRUE;
}
/* see similar logic in previous loop */
if (bootdir_size > G_MAXUINT)
{
- g_printerr (
- "deployment %s kernel layout size exceeds %u; disabling auto-prune optimization\n",
+ ot_journal_print (
+ LOG_WARNING,
+ "deployment %s kernel layout size exceeds %u; disabling auto-prune optimization",
ostree_deployment_get_csum (deployment), G_MAXUINT);
return TRUE;
}
* and old bootdirs? */
if (bootfs_has_space)
{
- g_printerr ("bootfs is sufficient for calculated new size: %s\n", net_new_formatted);
+ ot_journal_print (LOG_INFO, "bootfs is sufficient for calculated new size: %s",
+ net_new_formatted);
return TRUE; /* nothing to do! */
}
}
- g_printerr ("bootfs requires additional space: %s\n", net_new_formatted);
+ ot_journal_print (LOG_INFO, "bootfs requires additional space: %s", net_new_formatted);
/* OK, we would fail if we tried to write the new bootdirs. Is it salvageable?
* First, calculate how much space we could save with the bootcsums scheduled
* for removal. */
{
g_autofree char *to_remove_formated = g_format_size (bootcsum_dirs_to_remove_total_size);
- g_printerr ("Size to prune from bootfs: %s\n", to_remove_formated);
+ ot_journal_print (LOG_INFO, "Size to prune from bootfs: %s", to_remove_formated);
}
if (net_new_bootcsum_dirs_total_size > bootcsum_dirs_to_remove_total_size)
{
/* Even if we auto-pruned, the new bootdirs wouldn't fit. Just let the
* code continue and let it hit ENOSPC. */
- g_printerr ("Disabling auto-prune optimization; insufficient space left in bootfs\n");
+ ot_journal_print (LOG_WARNING,
+ "Disabling auto-prune optimization; insufficient space left in bootfs");
return TRUE;
}
}
- g_printerr ("Insufficient space left in bootfs; updating bootloader in two steps\n");
+ ot_journal_print (LOG_INFO,
+ "Insufficient space left in bootfs; updating bootloader in two steps");
/* Auto-pruning can salvage the situation. Calculate the set of deployments in common. */
g_autoptr (GPtrArray) common_deployments = g_ptr_array_new ();
. ${KOLA_EXT_DATA}/libinsttest.sh
+journal_cursor() {
+ journalctl -o json -n 1 | jq -r '.["__CURSOR"]'
+}
+
+assert_journal_grep() {
+ local cursor re
+ cursor=$1
+ shift
+ re=$1
+ shift
+
+ if ! journalctl -t ostree --after-cursor "${cursor}" --grep="$re" "$@" >/dev/null; then
+ fatal "failed to find in journal: $re"; exit 1
+ fi
+}
+
+assert_not_journal_grep() {
+ local cursor re
+ cursor=$1
+ shift
+ re=$1
+ shift
+
+ if journalctl -t ostree --after-cursor "${cursor}" --grep="$re" "$@"; then
+ fatal "found in journal: $re"; exit 1
+ fi
+}
+
# make two fake ostree commits with modified kernels of about the same size
cd /root
mkdir -p rootfs/usr/lib/modules/`uname -r`
# the booted deployment is never pruned, so this is a hopeless case and auto-pruning can't save us
consume_bootfs_space
rpm-ostree rebase :modkernel1
-if ostree admin finalize-staged |& tee out.txt; then
+cursor=$(journal_cursor)
+rm -vf err.txt
+if ostree admin finalize-staged 2>err.txt; then
assert_not_reached "successfully wrote to filled up bootfs"
fi
-assert_file_has_content out.txt "Disabling auto-prune optimization; insufficient space left in bootfs"
-assert_file_has_content out.txt "No space left on device"
-rm out.txt
+assert_journal_grep "$cursor" "Disabling auto-prune optimization; insufficient space left in bootfs"
+assert_file_has_content err.txt "No space left on device"
unconsume_bootfs_space
rpm-ostree cleanup -bpr
assert_bootfs_has_n_bootcsum_dirs 1
rpm-ostree rebase :modkernel1
-ostree admin finalize-staged |& tee out.txt
-assert_not_file_has_content out.txt "updating bootloader in two steps"
-rm out.txt
+cursor=$(journal_cursor)
+ostree admin finalize-staged
+assert_not_journal_grep "$cursor" "updating bootloader in two steps"
# and put it in rollback position; this is the deployment that'll get auto-pruned
rpm-ostree rollback
# now try to deploy a third deployment without early pruning; we should hit ENOSPC
consume_bootfs_space
rpm-ostree rebase :modkernel2
-if OSTREE_SYSROOT_OPTS=no-early-prune ostree admin finalize-staged |& tee out.txt; then
+cursor=$(journal_cursor)
+rm -vf err.txt
+if OSTREE_SYSROOT_OPTS=no-early-prune ostree admin finalize-staged 2>err.txt; then
assert_not_reached "successfully wrote kernel without auto-pruning"
fi
-assert_file_has_content out.txt "No space left on device"
-rm out.txt
+assert_file_has_content err.txt "No space left on device"
# there's 3 bootcsums now because it'll also have the partially written
# bootcsum dir we were creating when we hit ENOSPC; this verifies that all the
# now, try again but with auto-pruning enabled
rpm-ostree rebase :modkernel2
-ostree admin finalize-staged |& tee out.txt
-assert_file_has_content out.txt "updating bootloader in two steps"
-rm out.txt
+cursor=$(journal_cursor)
+ostree admin finalize-staged
+assert_journal_grep "$cursor" "updating bootloader in two steps"
assert_bootfs_has_n_bootcsum_dirs 2
assert_not_streq "$bootloader_orig" "$(sha256sum /boot/loader/entries/*)"
consume_bootfs_space "$((free_blocks_kernel_and_initrd))"
rpm-ostree rebase :modkernel1
+cursor=$(journal_cursor)
# Disable auto-pruning to verify we reproduce the bug
-if OSTREE_SYSROOT_OPTS=no-early-prune ostree admin finalize-staged |& tee out.txt; then
+rm -vf err.txt
+if OSTREE_SYSROOT_OPTS=no-early-prune ostree admin finalize-staged 2>err.txt; then
assert_not_reached "successfully wrote kernel without auto-pruning"
fi
-assert_file_has_content out.txt "No space left on device"
-rm out.txt
+assert_file_has_content err.txt "No space left on device"
# now, try again but with (now default) auto-pruning enabled
rpm-ostree rebase :modkernel1
-ostree admin finalize-staged |& tee out.txt
-assert_file_has_content out.txt "updating bootloader in two steps"
-rm out.txt
+cursor=$(journal_cursor)
+ostree admin finalize-staged
+assert_journal_grep "$cursor" "updating bootloader in two steps"
# Below, we test that the size estimator is blocksize aware. This catches the
# case where the dtb contains many small files such that there's a lot of wasted
consume_bootfs_space "$((free_blocks_kernel_and_initrd - 10000))"
rpm-ostree rebase :modkernel3
+cursor=$(journal_cursor)
# Disable auto-pruning to verify we reproduce the bug
-if OSTREE_SYSROOT_OPTS=no-early-prune ostree admin finalize-staged |& tee out.txt; then
+rm -vf err.txt
+if OSTREE_SYSROOT_OPTS=no-early-prune ostree admin finalize-staged 2>err.txt; then
assert_not_reached "successfully wrote kernel without auto-pruning"
fi
-assert_file_has_content out.txt "No space left on device"
-rm out.txt
+assert_file_has_content err.txt "No space left on device"
# now, try again but with (now default) auto-pruning enabled
rpm-ostree rebase :modkernel3
-ostree admin finalize-staged |& tee out.txt
-assert_file_has_content out.txt "updating bootloader in two steps"
-rm out.txt
+cursor=$(journal_cursor)
+ostree admin finalize-staged
+assert_journal_grep "$cursor" "updating bootloader in two steps"
echo "ok bootfs auto-prune"