Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package sdbootutil for openSUSE:Factory checked in at 2026-04-07 16:32:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/sdbootutil (Old) and /work/SRC/openSUSE:Factory/.sdbootutil.new.21863 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "sdbootutil" Tue Apr 7 16:32:30 2026 rev:98 rq:1344985 version:1+git20260407.f1134c1 Changes: -------- --- /work/SRC/openSUSE:Factory/sdbootutil/sdbootutil.changes 2026-03-27 06:50:03.799345326 +0100 +++ /work/SRC/openSUSE:Factory/.sdbootutil.new.21863/sdbootutil.changes 2026-04-07 16:47:26.304903032 +0200 @@ -1,0 +2,22 @@ +Tue Apr 07 11:32:59 UTC 2026 - Alberto Planas Dominguez <[email protected]> + +- Update to version 1+git20260407.f1134c1: + * Add missing e2fsprogs dependency + * Check that the efivars filesystem is writable + +------------------------------------------------------------------- +Mon Apr 06 09:45:27 UTC 2026 - Alberto Planas Dominguez <[email protected]> + +- Update to version 1+git20260406.42f6bd8: + * Detect if shim is installed in the ESP + * Update entries for the system if no snapshot is provided + * Allow version values without snapshot number + * Detect in buildroot invocations (mkosi) + * Avoid cleaning entries without subvol + * Use more idiomatic way to refer the snapshot + * Drop mkmoduleinitrd + * Find cmdline when there is no subvolumes + * Change rootflags based on local information + * Ignore lsblk sdterr output + +------------------------------------------------------------------- Old: ---- sdbootutil-1+git20260324.bd0fc60.obscpio New: ---- sdbootutil-1+git20260407.f1134c1.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ sdbootutil.spec ++++++ --- /var/tmp/diff_new_pack.uciOxs/_old 2026-04-07 16:47:28.344987337 +0200 +++ /var/tmp/diff_new_pack.uciOxs/_new 2026-04-07 16:47:28.356987833 +0200 @@ -18,7 +18,7 @@ %global rustflags '-Clink-arg=-Wl,-z,relro,-z,now' Name: sdbootutil -Version: 1+git20260324.bd0fc60 +Version: 1+git20260407.f1134c1 Release: 0 Summary: Bootctl wrapper for BLS boot loaders License: MIT @@ -32,6 +32,7 @@ BuildRequires: systemd-rpm-macros Requires: %{name}-dracut-measure-pcr Requires: dracut-pcr-signature +Requires: e2fsprogs Requires: efibootmgr Requires: jq Requires: keyutils ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.uciOxs/_old 2026-04-07 16:47:28.640999570 +0200 +++ /var/tmp/diff_new_pack.uciOxs/_new 2026-04-07 16:47:28.685001388 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/openSUSE/sdbootutil.git</param> - <param name="changesrevision">bd0fc603733b1f27ac315d61be0169bd4eae186b</param></service></servicedata> + <param name="changesrevision">f1134c1f6d97ee2e6005fee8d66ca7d50b2391b8</param></service></servicedata> (No newline at EOF) ++++++ sdbootutil-1+git20260324.bd0fc60.obscpio -> sdbootutil-1+git20260407.f1134c1.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sdbootutil-1+git20260324.bd0fc60/sdbootutil new/sdbootutil-1+git20260407.f1134c1/sdbootutil --- old/sdbootutil-1+git20260324.bd0fc60/sdbootutil 2026-03-24 13:34:05.000000000 +0100 +++ new/sdbootutil-1+git20260407.f1134c1/sdbootutil 2026-04-07 13:24:44.000000000 +0200 @@ -47,6 +47,7 @@ arg_esp_free_space= arg_force= have_snapshots= +in_buildroot= # for x in vmlinuz image vmlinux linux bzImage uImage Image zImage; do image= unlock_method= @@ -549,7 +550,7 @@ { local device read -r device < <(findmnt / -v -n -o SOURCE 2> /dev/null) - [ -n "$device" ] && [ "$(lsblk --noheadings -o TYPE "$device")" = "crypt" ] + [ -n "$device" ] && [ "$(lsblk --noheadings -o TYPE "$device" 2> /dev/null)" = "crypt" ] } get_rootfs() @@ -630,7 +631,7 @@ "-e s/\<\(BOOT_IMAGE\|initrd\)=[^ ]* \?//" "-e s/\$//;ta;:a" "-e s,\<root=[^ ]*,root=$root_param,;tb;s,\$, root=$root_param,;tc;:c;:b") - [ -z "$have_snapshots" ] || sed_arguments+=("-e s,\<rootflags=subvol=[^ ]*,rootflags=subvol=$subvol,;td;s,\$, rootflags=subvol=$subvol,;te;:e;:d") + [ -z "$subvol" ] || sed_arguments+=("-e s,\<rootflags=subvol=[^ ]*,rootflags=subvol=$subvol,;td;s,\$, rootflags=subvol=$subvol,;te;:e;:d") [ -z "$machine_id" ] || sed_arguments+=("-e s,\<systemd.machine_id=[^ ]*,systemd.machine_id=$machine_id,;tf;s,\$, systemd.machine_id=$machine_id,;tg;:g;:f") sed "${sed_arguments[@]}" } @@ -710,7 +711,11 @@ local id id="$(entry_conf_file "$kernel_version" "$snapshot")" - update_entries_for_snapshot "$snapshot" + if [ -n "$snapshot" ]; then + update_entries_for_snapshot "$snapshot" + else + update_entries_for_this_system + fi while IFS= read -r path; do if [ -f "$path" ]; then @@ -1178,21 +1183,21 @@ local subvol="$1" local cmdline local boot_options - for i in "${subvol:1}/etc/kernel/cmdline" "${subvol:1}/usr/lib/kernel/cmdline" /proc/cmdline; do + for i in "${subvol:1}/etc/kernel/cmdline" "${subvol:1}/usr/lib/kernel/cmdline" /etc/kernel/cmdline /usr/lib/kernel/cmdline /proc/cmdline; do [ -f "$i" ] || continue dbg_cat "$i" cmdline="$(<"$i")" break done - for i in "${subvol:1}"/usr/kernel/cmdline.d/*; do + for i in "${subvol:1}"/usr/kernel/cmdline.d/* /usr/kernel/cmdline.d/*; do [ -e "${subvol:1}/etc/kernel/cmdline.d/$(basename "$i")" ] && continue dbg_cat "$i" [ -s "$i" ] || continue cmdline="${cmdline:+$cmdline }$(<"$i")" done - for i in "${subvol:1}"/etc/kernel/cmdline.d/*; do + for i in "${subvol:1}"/etc/kernel/cmdline.d/* /etc/kernel/cmdline.d/*; do dbg_cat "$i" [ -s "$i" ] || continue cmdline="${cmdline:+$cmdline }$(<"$i")" @@ -1210,7 +1215,6 @@ local kernel_version="$2" local dstinitrd=() local src="${subvol#"${subvol_prefix}"}/lib/modules/$kernel_version/$image" - local initrddir="${subvol#"${subvol_prefix}"}/usr/lib/initrd" [ -n "$kernel_version" ] || err "Missing kernel version" [ -e "$src" ] || err "Can't find $src" @@ -1232,16 +1236,7 @@ if [ -e "$initrd" ]; then ln -s "$initrd" "$tmpdir/initrd-0" - elif [ -d "$initrddir" ] && [ -x "/usr/bin/mkmoduleinitrd" ]; then - local f i - i=0 - for f in "$initrddir"/*; do - ln -s "$f" "$tmpdir/initrd-$i" - ((++i)) - done - /usr/bin/mkmoduleinitrd "${subvol#"${subvol_prefix}"}" "$kernel_version" "$tmpdir/initrd-$i" elif ! reuse_initrd "$snapshot" "$subvol" "$kernel_version"; then - local snapshot_dir="/.snapshots/$snapshot/snapshot" local dracut_args=( '--reproducible' '--force' @@ -1253,16 +1248,16 @@ info "Generating new initrd" - if [ "$subvol" != "$root_subvol" ] && [ -n "$have_snapshots" ]; then - mount_chroot "${snapshot_dir}" + if [ -n "$have_snapshots" ] && [ "$subvol" != "$root_subvol" ]; then + mount_chroot "${subvol#"${subvol_prefix}"}" # In MicroOS we need to be sure to have the same /etc # inside the snapshot. For example, /etc/crypttab can # have modifications in the overlay that will be # visible once the snapshot is active, but the version # in /.snapshots is still the unmodified base - is_transactional && mount_etc "${snapshot_dir}" - chroot "${snapshot_dir}" dracut "${dracut_args[@]}" "$tmpdir/initrd-0" "$kernel_version" - umount_chroot "${snapshot_dir}" + is_transactional && mount_etc "${subvol#"${subvol_prefix}"}" + chroot "${subvol#"${subvol_prefix}"}" dracut "${dracut_args[@]}" "$tmpdir/initrd-0" "$kernel_version" + umount_chroot "${subvol#"${subvol_prefix}"}" else dracut "${dracut_args[@]}" "$tmpdir/initrd-0" "$kernel_version" fi @@ -1271,6 +1266,7 @@ make_free_space_for_kernel "$snapshot" || err "No free space in $boot_root for new kernel" local boot_options + [ -z "$in_buildroot" ] || subvol="${subvol_prefix}/.snapshots/${snapshot}/snapshot" boot_options="$(create_boot_options "$subvol")" if [ "${#dstinitrd[@]}" -eq 0 ] && [ -e "$tmpdir/initrd-0" ]; then @@ -1297,7 +1293,7 @@ cat > "$tmpdir/entry.conf" <<-EOF # Boot Loader Specification type#1 entry title $title - version $snapshot@$kernel_version${entry_machine_id:+${nl}machine-id $entry_machine_id}${sort_key:+${nl}sort-key $sort_key} + version ${snapshot:+$snapshot@}$kernel_version${entry_machine_id:+${nl}machine-id $entry_machine_id}${sort_key:+${nl}sort-key $sort_key} options $boot_options linux $dst EOF @@ -1401,6 +1397,8 @@ cleanup_entries() { + local snapshot="$1" + info "Cleaning up boot entries" [ -z "$TRANSACTIONAL_UPDATE" ] || [ -n "$arg_force" ] || { @@ -1409,8 +1407,8 @@ } if [ ! -s "$entryfile" ]; then - if [ -n "$1" ]; then - update_entries_for_snapshot "$1" + if [ -n "$snapshot" ]; then + update_entries_for_snapshot "$snapshot" else update_entries_for_this_system fi @@ -1421,13 +1419,16 @@ read -r path read -r snapshot read -r kernel_version - subvol="${subvol_prefix}/.snapshots/${snapshot}/snapshot" + subvol= + if [ -n "$snapshot" ] && [ "$snapshot" != "null" ]; then + subvol="${subvol_prefix}/.snapshots/${snapshot}/snapshot" + fi src="${subvol#"${subvol_prefix}"}/lib/modules/$kernel_version/$image" [ -e "$src" ] || { info "Cleaning boot entry $id" rm "$path" } - done < <(jq -r '.[] | .id, .path, (.version | scan("(.*)@(.*)") | .[])' "$entryfile") + done < <(jq -r '.[] | .id, .path, (.version | capture("((?<snapshot>[0-9]*)@)?(?<kernel>.*)")) as $v | $v.snapshot, $v.kernel' "$entryfile") dbg "Calling bootctl cleanup" bootctl -q cleanup 2> /dev/null @@ -1438,11 +1439,13 @@ list_entries() { + local snapshot="$1" + info "Listing boot entries" if [ ! -s "$entryfile" ]; then - if [ -n "$1" ]; then - update_entries_for_snapshot "$1" + if [ -n "$snapshot" ]; then + update_entries_for_snapshot "$snapshot" elif [ -n "$arg_all_entries" ]; then update_entries else @@ -1526,7 +1529,9 @@ local snapshot="$2" local subvol="" - [ -z "$have_snapshots" ] || subvol="${subvol_prefix}/.snapshots/${snapshot}/snapshot" + if [ -n "$have_snapshots" ] || [ -z "$in_buildroot" ]; then + subvol="${subvol_prefix}/.snapshots/${snapshot}/snapshot" + fi local boot_options boot_options="$(create_boot_options "$subvol")" @@ -1576,7 +1581,12 @@ make_free_space "$snapshot" 1024 - update_entries_for_snapshot "$1" + if [ -n "$snapshot" ]; then + update_entries_for_snapshot "$snapshot" + else + update_entries_for_this_system + fi + while read -r conf; do update_entry_conf "$conf" "$snapshot" done < <(jq -r '.[]|.path' < "$entryfile") @@ -1722,7 +1732,7 @@ { local fn="$1" if [ -z "$1" ]; then - if [ -e "$shimdir/shim.efi" ]; then + if is_shim_installed; then fn="$boot_root$boot_dst/grub.efi" elif [ -n "$arg_portable" ]; then fn="$boot_root/EFI/BOOT/BOOT${firmware_arch^^}.EFI" @@ -2004,7 +2014,7 @@ has_efivars() { - [ -d /sys/firmware/efi/efivars ] + [ -w /sys/firmware/efi/efivars ] } bli_efi_var_get() @@ -2281,27 +2291,27 @@ set_default_snapshot() { [ -n "$have_snapshots" ] || { info "System does not support snapshots."; return 0; } - local num="${1:?}" + local snapshot="${1:?}" local configs - info "Setting default snapshot $num" + info "Setting default snapshot $snapshot" [ -z "$TRANSACTIONAL_UPDATE" ] || [ -n "$arg_force" ] || { warn "Inside transactional-update. Setting default snapshots must be done outside the transaction" return 0 } - update_entries_for_snapshot "$num" + update_entries_for_snapshot "$snapshot" mapfile configs < <(jq '.[]|[.id]|join(" ")' -r < "$entryfile") configs=("${configs[@]%$nl}") if [ -z "${configs[0]}" ]; then - info "Snapshot $num has no configs, trying to create them..." - install_all_kernels "$num" - update_entries_for_snapshot "$num" + info "Snapshot $snapshot has no configs, trying to create them..." + install_all_kernels "$snapshot" + update_entries_for_snapshot "$snapshot" mapfile configs < <(jq '.[]|[.id]|join(" ")' -r < "$entryfile") configs=("${configs[@]%$nl}") if [ -z "${configs[0]}" ]; then - err "snapshot $num has no kernels" + err "snapshot $snapshot has no kernels" fi fi @@ -2313,7 +2323,7 @@ # We do not use snapper, to avoid recursion and do not trigger # any plugin local subvolume_id - read -r _ subvolume_id _ < <(btrfs subvolume list -o /.snapshots | grep "${subvol_prefix}/.snapshots/$num/snapshot") + read -r _ subvolume_id _ < <(btrfs subvolume list -o /.snapshots | grep "${subvol_prefix}/.snapshots/$snapshot/snapshot") btrfs subvolume set-default "${subvolume_id}" /.snapshots rm -f "$snapperfile" @@ -4197,7 +4207,15 @@ have_snapshots=1 root_subvol=$(btrfs subvol show / 2> /dev/null | head -1) subvol_prefix="${root_subvol%/.snapshots/*}" +elif [ -e /.snapshots/1/info.xml ]; then + # We can detect when we are in a image building situation + # (mkosi) when we are not in btrfs, but there is a snapshots + # directory partially available. The `subvol_prefix` variable + # is assumed what is used in openSUSE + in_buildroot=1 + subvol_prefix="@" fi + root_snapshot="" if [ -n "$have_snapshots" ]; then if [ -n "$arg_default_snapshot" ]; then @@ -4207,6 +4225,8 @@ root_snapshot="${root_subvol#"${subvol_prefix}"/.snapshots/}" root_snapshot="${root_snapshot%/snapshot}" fi +elif [ -n "$in_buildroot" ]; then + root_snapshot="1" fi if [ -n "$arg_esp_path" ] && [ "$boot_root" != "$arg_esp_path" ]; then @@ -4266,7 +4286,7 @@ if [ "$UPDATE_NVRAM" = "no" ]; then if has_efivars; then - warn 'The system have EFI variables but UPDATE_NVRAM is set to "no"' + warn 'The system has EFI variables but UPDATE_NVRAM is set to "no"' fi arg_no_variables=1 fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sdbootutil-1+git20260324.bd0fc60/sdbootutil.spec new/sdbootutil-1+git20260407.f1134c1/sdbootutil.spec --- old/sdbootutil-1+git20260324.bd0fc60/sdbootutil.spec 2026-03-24 13:34:05.000000000 +0100 +++ new/sdbootutil-1+git20260407.f1134c1/sdbootutil.spec 2026-04-07 13:24:44.000000000 +0200 @@ -32,6 +32,7 @@ BuildRequires: systemd-rpm-macros Requires: %{name}-dracut-measure-pcr Requires: dracut-pcr-signature +Requires: e2fsprogs Requires: efibootmgr Requires: jq Requires: keyutils ++++++ sdbootutil.obsinfo ++++++ --- /var/tmp/diff_new_pack.uciOxs/_old 2026-04-07 16:47:29.517035772 +0200 +++ /var/tmp/diff_new_pack.uciOxs/_new 2026-04-07 16:47:29.553037260 +0200 @@ -1,5 +1,5 @@ name: sdbootutil -version: 1+git20260324.bd0fc60 -mtime: 1774355645 -commit: bd0fc603733b1f27ac315d61be0169bd4eae186b +version: 1+git20260407.f1134c1 +mtime: 1775561084 +commit: f1134c1f6d97ee2e6005fee8d66ca7d50b2391b8
