Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-kiwi for openSUSE:Factory checked in at 2025-07-20 15:28:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-kiwi (Old) and /work/SRC/openSUSE:Factory/.python-kiwi.new.8875 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-kiwi" Sun Jul 20 15:28:14 2025 rev:137 rq:1294365 version:10.2.28 Changes: -------- --- /work/SRC/openSUSE:Factory/python-kiwi/python-kiwi.changes 2025-07-10 23:14:52.376100612 +0200 +++ /work/SRC/openSUSE:Factory/.python-kiwi.new.8875/python-kiwi.changes 2025-07-20 15:28:33.498793962 +0200 @@ -1,0 +2,239 @@ +Fri Jul 18 13:59:31 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Bump version: 10.2.27 → 10.2.28 + +------------------------------------------------------------------- +Fri Jul 18 10:35:32 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Fix dracut code to be POSIX compliant + + The redirect type "< <(...)" is not POSIX complians and leads + to a syntax error in dracut which calls bash as "sh" leading + it to be restricted to POSIX only + +------------------------------------------------------------------- +Thu Jul 17 15:24:09 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Extend test-image-lvm integration test + + For testing a bit more complex resize procedure, update + the lvm integration test to run more resize actions + with required device locking + +------------------------------------------------------------------- +Thu Jul 17 12:33:17 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Apply proper udev locking + + Several commands during repart, resize and other actions + require a proper lock to be set for udev such that other + events knows about the locked state of a device and do + not mess with it until the command for which the lock + persists has completed. This commit applies proper udev + locks to all commands that requires it. In addition + incorrect code that was expected to prevent such race + conditions got dropped from the implementation. + This is related to bsc#1242987 + +------------------------------------------------------------------- +Thu Jul 17 11:28:59 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- relocate GPT at the end of disk using sfdisk + + Using sfdisk for relocation and verification makes this + part more consistent. We also want to move away from gdisk. + This is related to #2851 + +------------------------------------------------------------------- +Thu Jul 17 10:42:34 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Do not strictly require config.partids in repart + + The kiwi-repart implementation requires a metadata file + named config.partids which holds information about + partition ids and more stored at the time the image was + built. Depending on the complexity of the image and the + resize request some of the information can be rebuilt + in case the metadata file is missing. This commit adds + the rebuild of the minimum required information to run + a standard resize and therefore allows the kiwi-repart + dracut module to work also without config.partids to be + present in the system + +------------------------------------------------------------------- +Thu Jul 17 10:37:34 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Do not drop /config.partids + + The partition id metadata file is used in the kiwi-repart + module. If a user wants to use the kiwi repart module + permanently, this metadata file needs to stay in the system. + Therefore it should not be automatically deleted by the + cleanup. A disk.sh hook script can be used to force the + deletion of the file though. This is related #2851 + +------------------------------------------------------------------- +Wed Jul 16 16:10:07 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Fix centos/test-image-live-disk-v10 + + There is no package named iprutils + +------------------------------------------------------------------- +Wed Jul 16 16:04:15 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Fix centos/test-image-live-disk-v10 + + Update package names + +------------------------------------------------------------------- +Wed Jul 16 15:59:23 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Added centos/test-image-live-disk-v10 build test + +------------------------------------------------------------------- +Wed Jul 16 11:07:05 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Fix tumbleweed/test-image-gce integration test + + Drop obsolete growpart + +------------------------------------------------------------------- +Wed Jul 16 10:54:54 CEST 2025 - Robert Schneider <48757730+work-ro...@users.noreply.github.com> + +- Followup fix to support older apt versions for bootstrap + + There are apt versions that do not create missing state files. + Make sure the intermediate bootstrap state file is created in + any case. This Fixes #2857 + +------------------------------------------------------------------- +Wed Jul 16 10:36:41 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Fixed integration test builds + + Next round of fixes for integration tests. Missing + or wrong service activations + +------------------------------------------------------------------- +Wed Jul 16 10:22:11 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Fix arm/tumbleweed/test-image-rpi + + Fix snapper setup for this integration test + +------------------------------------------------------------------- +Tue Jul 15 16:28:45 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Fixed test-image-live-disk + + Added missing openssh-server package + +------------------------------------------------------------------- +Tue Jul 15 15:54:51 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Fixed test-image-azure + + Add missing python-azure-agent-config-default package + +------------------------------------------------------------------- +Tue Jul 15 15:50:10 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Fixed debian integration test builds + + secure shell service is named ssh and not sshd there + +------------------------------------------------------------------- +Tue Jul 15 15:37:10 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Fixed integration test builds + + Second round of fixes for integration tests. Again errors + now became visible due to the refactoring of the script code + +------------------------------------------------------------------- +Tue Jul 15 15:03:59 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Fixed integration test builds + + Errors from scripts were no longer ignored due to the last + cleanup of the integration test script code. This commit + fixes the now exposed build errors + +------------------------------------------------------------------- +Tue Jul 15 11:15:25 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Fix check_target_dir_on_unsupported_filesystem + + Find the first existing path in the target path and + check the filesystem capabilities for this path. + This Fixes #2858 + +------------------------------------------------------------------- +Mon Jul 14 18:24:23 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Cleanup integration tests config.sh script code + + Add script code to shellcheck and fix all reported issues. + Get rid of suseXX and baseXX methods as much as possible. + Add set -ex for all script code. Do not allow any script + code to fail. + +------------------------------------------------------------------- +Mon Jul 14 16:34:38 CEST 2025 - Andrea Bolognani <abolo...@redhat.com> + +- defaults: Add patterns for shim/grub2 on riscv64 + + A recent commit changed the way these are looked up and + accidentally broke image building on riscv64, with + + KiwiBootLoaderGrubSecureBootError: Signed grub2 efi loader not found + + now being raised for kiwi recipes that worked just fine + before that moment. + + Fixes: 197572378cf4f25103934beac2ceca4fbbcfcbc0 + Thanks: David Abdurachmanov <davi...@rivosinc.com> + Thanks: Marcus Schäfer <marcus.schae...@gmail.com> + Signed-off-by: Andrea Bolognani <abolo...@redhat.com> + +------------------------------------------------------------------- +Sat Jul 12 23:50:39 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Add SLFO test-image-disk-simple integration test + + Add simple disk test and allow for testing the new + transparent container idea for the aws toolchain. also + add SLFO builds to the helper script + +------------------------------------------------------------------- +Wed Jul 09 15:23:41 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Fixed check for unallocated space on disk + + So far the check for unallocated space was only working for GPT + and there it was also not really stable. The check was based on + verifying if the backup GPT table is really at the end of the + disk. Depending on which tool was used to dump the image on the + target this "mistake" often got corrected by the tools that + dumped the image. In this case the check no longer worked. + This commit improves the check by another test which looks + for the real free bytes on disk compared to the current + partition geometry. + +------------------------------------------------------------------- +Wed Jul 09 12:50:06 CEST 2025 - Marcus Schäfer <marcus.schae...@gmail.com> + +- Move to neutral directory for calling osc + + When calling the helper/build_status.sh script to get an + overview about the results of the integration tests, there + is a stupid new behavior from the osc tool that it assumes + a package name according to the name of the directory you + are in probably connected to the fact that the data in this + directory is a git checkout or some other strange assumption. + This commit moves to a neutral directory where none of the + osc internal assumptions applies and it just does what it + should do... showing results of the given project. + +------------------------------------------------------------------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-kiwi.spec ++++++ --- /var/tmp/diff_new_pack.MkBAlf/_old 2025-07-20 15:28:35.446874576 +0200 +++ /var/tmp/diff_new_pack.MkBAlf/_new 2025-07-20 15:28:35.458875072 +0200 @@ -56,7 +56,7 @@ %endif Name: python-kiwi -Version: 10.2.27 +Version: 10.2.28 Provides: kiwi-schema = 8.1 Release: 0 Url: https://github.com/OSInside/kiwi ++++++ PKGBUILD ++++++ --- /var/tmp/diff_new_pack.MkBAlf/_old 2025-07-20 15:28:35.670883846 +0200 +++ /var/tmp/diff_new_pack.MkBAlf/_new 2025-07-20 15:28:35.706885335 +0200 @@ -3,7 +3,7 @@ pkgname=('python-kiwi' 'kiwi-man-pages' 'dracut-kiwi-lib' 'dracut-kiwi-oem-repart' 'dracut-kiwi-oem-dump' 'dracut-kiwi-live' 'dracut-kiwi-overlay') arch=(x86_64) -pkgver=10.2.27 +pkgver=10.2.28 pkgrel=0 pkgdesc="KIWI - Appliance Builder Next Generation" url="https://github.com/SUSE/kiwi/tarball/master" @@ -12,7 +12,7 @@ provides=(kiwi-ng kiwi) source=("${pkgname}.tar.gz") changelog="${pkgname}.changes" -md5sums=('8aa4529829fb90fd71712e4009616af7') +md5sums=('075592cbe9a1827895829de75595ad4d') build() { ++++++ python-kiwi.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/.bumpversion.cfg new/kiwi-10.2.28/.bumpversion.cfg --- old/kiwi-10.2.27/.bumpversion.cfg 2025-07-09 11:26:31.804736400 +0200 +++ new/kiwi-10.2.28/.bumpversion.cfg 2025-07-18 13:59:31.103774300 +0200 @@ -1,5 +1,5 @@ [bumpversion] -current_version = 10.2.27 +current_version = 10.2.28 commit = True tag = True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/Makefile new/kiwi-10.2.28/Makefile --- old/kiwi-10.2.27/Makefile 2025-07-08 17:01:34.169251000 +0200 +++ new/kiwi-10.2.28/Makefile 2025-07-16 17:51:40.661177400 +0200 @@ -115,6 +115,7 @@ check: setup # shell code checks + find build-tests -name config.sh | xargs shellcheck bash -c 'shellcheck -e ${sc_disable} dracut/modules.d/*/*.sh -s bash' bash -c 'shellcheck -e ${sc_disable} kiwi/config/functions.sh -s bash' bash -c 'shellcheck build-tests.sh' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/PKG-INFO new/kiwi-10.2.28/PKG-INFO --- old/kiwi-10.2.27/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 +++ new/kiwi-10.2.28/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: kiwi -Version: 10.2.27 +Version: 10.2.28 Summary: KIWI - Appliance Builder Home-page: https://osinside.github.io/kiwi/ License: GPL-3.0-or-later diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/doc/source/conf.py new/kiwi-10.2.28/doc/source/conf.py --- old/kiwi-10.2.27/doc/source/conf.py 2025-07-09 11:26:31.804736400 +0200 +++ new/kiwi-10.2.28/doc/source/conf.py 2025-07-18 13:59:31.103774300 +0200 @@ -142,7 +142,7 @@ # built documents. # # The short X.Y version. -version = '10.2.27' +version = '10.2.28' # The full version, including alpha/beta/rc tags. release = version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/dracut/modules.d/90kiwi-dump/kiwi-dump-image.sh new/kiwi-10.2.28/dracut/modules.d/90kiwi-dump/kiwi-dump-image.sh --- old/kiwi-10.2.27/dracut/modules.d/90kiwi-dump/kiwi-dump-image.sh 2025-07-09 11:26:16.696734400 +0200 +++ new/kiwi-10.2.28/dracut/modules.d/90kiwi-dump/kiwi-dump-image.sh 2025-07-18 13:59:19.763772000 +0200 @@ -54,8 +54,8 @@ fi count=$((count + 1)) done - readarray -td '' list_items_sorted \ - < <(printf '%s\0' "${device_array[@]}" | sort -z) + printf '%s\0' "${device_array[@]}" | sort -z > list_items_sorted.txt + readarray -td '' list_items_sorted < list_items_sorted.txt echo "${list_items_sorted[*]}" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/dracut/modules.d/90kiwi-repart/kiwi-repart-disk.sh new/kiwi-10.2.28/dracut/modules.d/90kiwi-repart/kiwi-repart-disk.sh --- old/kiwi-10.2.27/dracut/modules.d/90kiwi-repart/kiwi-repart-disk.sh 2025-05-13 10:29:13.201375000 +0200 +++ new/kiwi-10.2.28/dracut/modules.d/90kiwi-repart/kiwi-repart-disk.sh 2025-07-18 13:59:19.763772000 +0200 @@ -18,11 +18,8 @@ test -f ${profile} || \ warn "No profile setup found" warn "Settings from the kiwi description will be ignored" - test -f ${partition_ids} || \ - die "No partition id setup found" test -f ${profile} && import_file ${profile} - import_file ${partition_ids} # Optional env TERM setup term=$(getarg "rd.kiwi.term=") @@ -35,6 +32,15 @@ disk=$(lookup_disk_device_from_root) export disk + if ! test -f ${partition_ids}; then + warn "No partition id setup found, rebuilding..." + { + echo "kiwi_RootPart=\"$(get_last_partition_id "${disk}")\"" + } > ${partition_ids} + fi + + import_file ${partition_ids} + root_device=${root#block:} export root_device @@ -220,16 +226,6 @@ return 0 } -function mask_fsck_root_service { - info "disable systemd-fsck-root.service" - systemctl mask systemd-fsck-root.service -} - -function unmask_fsck_root_service { - info "enabling systemd-fsck-root.service" - systemctl unmask systemd-fsck-root.service -} - #====================================== # Perform repart/resize operations #-------------------------------------- @@ -237,22 +233,6 @@ setup_debug -# when repartitioning disks, the used tools can trigger re-reads of -# the partition table, in turn triggering systemd-fsck-root.service -# repeatedly via udev events, which finally can cause booting to fail with -# * start request repeated too quickly for systemd-fsck-root.service -# * Failed to start File System Check on /dev/disk/by-uuid... -# * Dependency failed for /sysroot. -# To avoid this, disable the root fsck (is finished at this point anyway -# *and* the filesystem is brand new ;) by masking it. -# "systemctl disable" does not work here, because it is event driven -# More details: https://github.com/SUSE/kiwi/issues/1034 - -# make sure we unmask the fsck service -trap unmask_fsck_root_service EXIT - -mask_fsck_root_service - # initialize for disk repartition initialize diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/dracut/modules.d/90kiwi-repart/module-setup.sh new/kiwi-10.2.28/dracut/modules.d/90kiwi-repart/module-setup.sh --- old/kiwi-10.2.27/dracut/modules.d/90kiwi-repart/module-setup.sh 2025-01-10 15:12:24.082463500 +0100 +++ new/kiwi-10.2.28/dracut/modules.d/90kiwi-repart/module-setup.sh 2025-07-18 13:59:19.763772000 +0200 @@ -19,11 +19,8 @@ # called by dracut install() { declare moddir=${moddir} - if inst_simple /config.partids; then - test -f /.profile && inst_simple /.profile - inst_hook pre-mount 20 "${moddir}/kiwi-repart-disk.sh" - dracut_need_initqueue - else - echo "ERROR: kiwi-repart needs /config.partids; not installing module" - fi + test -f /config.partids && inst_simple /config.partids + test -f /.profile && inst_simple /.profile + inst_hook pre-mount 20 "${moddir}/kiwi-repart-disk.sh" + dracut_need_initqueue } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/dracut/modules.d/99kiwi-lib/kiwi-filesystem-lib.sh new/kiwi-10.2.28/dracut/modules.d/99kiwi-lib/kiwi-filesystem-lib.sh --- old/kiwi-10.2.27/dracut/modules.d/99kiwi-lib/kiwi-filesystem-lib.sh 2025-06-03 11:22:07.123029000 +0200 +++ new/kiwi-10.2.28/dracut/modules.d/99kiwi-lib/kiwi-filesystem-lib.sh 2025-07-18 13:59:19.763772000 +0200 @@ -37,22 +37,23 @@ local mpoint=/fs-resize local fstype fstype=$(probe_filesystem "${device}") + lock="udevadm lock --device ${device}" case ${fstype} in ext2|ext3|ext4) - resize_fs="resize2fs -f -p ${device}" + resize_fs="${lock} resize2fs -f -p ${device}" ;; btrfs) resize_fs="mkdir -p ${mpoint} && mount ${device} ${mpoint} &&" - resize_fs="${resize_fs} btrfs filesystem resize max ${mpoint}" + resize_fs="${resize_fs} ${lock} btrfs filesystem resize max ${mpoint}" resize_fs="${resize_fs};umount ${mpoint} && rmdir ${mpoint}" ;; xfs) resize_fs="mkdir -p ${mpoint} && mount ${device} ${mpoint} &&" - resize_fs="${resize_fs} xfs_growfs ${mpoint}" + resize_fs="${resize_fs} ${lock} xfs_growfs ${mpoint}" resize_fs="${resize_fs};umount ${mpoint} && rmdir ${mpoint}" ;; swap) - resize_fs="mkswap ${device} --label SWAP" + resize_fs="${lock} mkswap ${device} --label SWAP" ;; *) # don't know how to resize this filesystem @@ -76,6 +77,7 @@ local check_fs_return_ok local fstype fstype=$(probe_filesystem "${device}") + lock="udevadm lock --device ${device}" case ${fstype} in ext2|ext3|ext4) # The exit code by e2fsck is the sum of the following conditions: @@ -87,13 +89,13 @@ # 16 - Usage or syntax error # 32 - E2fsck canceled by user request # 128 - Shared library error - check_fs="e2fsck -p -f ${device}" + check_fs="${lock} e2fsck -p -f ${device}" check_fs_return_ok="test \$? -le 2" ;; btrfs) # btrfs check returns a zero exit status if it succeeds. # Non zero is returned in case of failure. - check_fs="btrfsck ${device}" + check_fs="${lock} btrfsck ${device}" check_fs_return_ok="test \$? -eq 0" ;; xfs) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/dracut/modules.d/99kiwi-lib/kiwi-luks-lib.sh new/kiwi-10.2.28/dracut/modules.d/99kiwi-lib/kiwi-luks-lib.sh --- old/kiwi-10.2.27/dracut/modules.d/99kiwi-lib/kiwi-luks-lib.sh 2025-05-23 09:34:42.631050800 +0200 +++ new/kiwi-10.2.28/dracut/modules.d/99kiwi-lib/kiwi-luks-lib.sh 2025-07-18 13:59:19.763772000 +0200 @@ -74,7 +74,7 @@ setup_progress_fifo ${progress} ( # reencrypt, this will overwrite all key slots - cryptsetup reencrypt \ + udevadm lock --device "${device}" cryptsetup reencrypt \ --progress-frequency 1 \ --key-file "${passphrase_file}" \ --key-slot "${keyslot}" \ @@ -102,7 +102,7 @@ # but this requires to manually call luksOpen since # with systemd-cryptsetup we saw it still asking for # a passphrase - cryptsetup \ + udevadm lock --device "${device}" cryptsetup \ --key-file /dev/zero \ --keyfile-size 32 \ luksOpen "${device}" luks diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/dracut/modules.d/99kiwi-lib/kiwi-lvm-lib.sh new/kiwi-10.2.28/dracut/modules.d/99kiwi-lib/kiwi-lvm-lib.sh --- old/kiwi-10.2.27/dracut/modules.d/99kiwi-lib/kiwi-lvm-lib.sh 2024-04-18 14:53:58.586938600 +0200 +++ new/kiwi-10.2.28/dracut/modules.d/99kiwi-lib/kiwi-lvm-lib.sh 2025-07-18 13:59:19.763772000 +0200 @@ -61,7 +61,9 @@ } function resize_pyhiscal_volumes { - pvresize "$(get_root_map)" + local device + device=$(get_root_map) + udevadm lock --device "${device}" pvresize "${device}" } function resize_lvm_volumes_and_filesystems { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/dracut/modules.d/99kiwi-lib/kiwi-mdraid-lib.sh new/kiwi-10.2.28/dracut/modules.d/99kiwi-lib/kiwi-mdraid-lib.sh --- old/kiwi-10.2.27/dracut/modules.d/99kiwi-lib/kiwi-mdraid-lib.sh 2024-04-18 14:53:58.586938600 +0200 +++ new/kiwi-10.2.28/dracut/modules.d/99kiwi-lib/kiwi-mdraid-lib.sh 2025-07-18 13:59:19.763772000 +0200 @@ -19,12 +19,14 @@ function activate_mdraid { declare kiwi_RaidDev=${kiwi_RaidDev} - mdadm --assemble --scan "${kiwi_RaidDev}" + udevadm lock --device "${kiwi_RaidDev}" \ + mdadm --assemble --scan "${kiwi_RaidDev}" wait_for_storage_device "${kiwi_RaidDev}" set_root_map "${kiwi_RaidDev}" } function resize_mdraid { declare kiwi_RaidDev=${kiwi_RaidDev} - mdadm --grow --size=max "${kiwi_RaidDev}" + udevadm lock --device "${kiwi_RaidDev}" \ + mdadm --grow --size=max "${kiwi_RaidDev}" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/dracut/modules.d/99kiwi-lib/kiwi-partitions-lib.sh new/kiwi-10.2.28/dracut/modules.d/99kiwi-lib/kiwi-partitions-lib.sh --- old/kiwi-10.2.27/dracut/modules.d/99kiwi-lib/kiwi-partitions-lib.sh 2025-07-09 11:26:13.980734000 +0200 +++ new/kiwi-10.2.28/dracut/modules.d/99kiwi-lib/kiwi-partitions-lib.sh 2025-07-18 13:59:19.763772000 +0200 @@ -23,9 +23,11 @@ ;; esac if type partprobe &> /dev/null;then - partprobe "${disk_device}" + udevadm lock --device "${disk_device}" \ + partprobe "${disk_device}" else - partx -u "${disk_device}" + udevadm lock --device "${disk_device}" \ + partx -u "${disk_device}" fi } @@ -59,21 +61,23 @@ start_sector_from[$partid]=$( _get_msdos_partition_start_sector "${disk_device}" "${partid}" ) - sfdisk --force --delete "${disk_device}" "${partid}" + udevadm lock --device "${disk_device}" \ + sfdisk --force --delete "${disk_device}" "${partid}" ;; "n") # create a partition... partid=${cmd_list[$index + 2]} part_size_end=${cmd_list[$index + 4]} echo "${start_sector_from[$partid]},${part_size_end}" > /tmp/sfdisk.in - sfdisk --force -N "${partid}" "${disk_device}" < /tmp/sfdisk.in + udevadm lock --device "${disk_device}" \ + sfdisk --force -N "${partid}" "${disk_device}" < /tmp/sfdisk.in ;; "t") # change a partition type... part_type=${cmd_list[$index + 2]} partid=${cmd_list[$index + 1]} - sfdisk --force --change-id "${disk_device}" "${partid}" \ - "${part_type}" + udevadm lock --device "${disk_device}" \ + sfdisk --force --change-id "${disk_device}" "${partid}" "${part_type}" ;; esac index=$((index + 1)) @@ -108,7 +112,8 @@ "d") # delete a partition... partid=${cmd_list[$index + 1]} - sgdisk --delete "${partid}" "${disk_device}" + udevadm lock --device "${disk_device}" \ + sgdisk --delete "${partid}" "${disk_device}" ;; "n") # create a partition... @@ -116,17 +121,17 @@ partid=${cmd_list[$index + 2]} part_size_start=${cmd_list[$index + 3]} part_size_end=${cmd_list[$index + 4]} - sgdisk --new "${partid}:${part_size_start}:${part_size_end}" \ - "${disk_device}" - sgdisk --change-name "${partid}:${part_name}" \ - "${disk_device}" + udevadm lock --device "${disk_device}" \ + sgdisk --new "${partid}:${part_size_start}:${part_size_end}" "${disk_device}" + udevadm lock --device "${disk_device}" \ + sgdisk --change-name "${partid}:${part_name}" "${disk_device}" ;; "t") # change a partition type... part_type=${cmd_list[$index + 2]} partid=${cmd_list[$index + 1]} - sgdisk --typecode "${partid}:$(_to_guid "${part_type}")" \ - "${disk_device}" + udevadm lock --device "${disk_device}" \ + sgdisk --typecode "${partid}:$(_to_guid "${part_type}")" "${disk_device}" ;; esac index=$((index + 1)) @@ -148,7 +153,8 @@ # partition table updated to the actual disk geometry. This is # to circumvent the fdasd limitation of not being capable to # expand the partition table up to the disk size bsc#1209247 - parted --script --machine "${disk_device}" resizepart 1 + udevadm lock --device "${disk_device}" \ + parted --script --machine "${disk_device}" resizepart 1 for cmd in ${partition_setup};do if [ "${ignore_cmd}" = 1 ] && echo "${cmd}" | grep -qE '[dntwq]';then @@ -182,7 +188,8 @@ done echo "w" >> ${partition_setup_file} echo "q" >> ${partition_setup_file} - fdasd "${disk_device}" < ${partition_setup_file} 1>&2 + udevadm lock --device "${disk_device}" \ + fdasd "${disk_device}" < ${partition_setup_file} 1>&2 } function get_partition_node_name { @@ -191,7 +198,8 @@ local index=1 local part udev_pending - # backwards compat for lsblk before 2.38: if START column not supported, fall back to default sort + # backwards compat for lsblk before 2.38: + # if START column not supported, fall back to default sort for partnode in $( { lsblk -p -l -o NAME,TYPE,START -x START "${disk}" 2>/dev/null ||\ lsblk -p -l -o NAME,TYPE "${disk}"; } |\ @@ -206,6 +214,20 @@ return 1 } +function get_last_partition_id { + # """ + # Get index of last partition from the current table + # """ + local disk=$1 + local index=0 + for partnode in $(lsblk -p -l -o NAME,TYPE "${disk}" |\ + grep -E "part|md$" | cut -f1 -d ' ' + );do + index=$((index + 1)) + done + echo "${index}" +} + function wait_for_storage_device { # """ # function to check access on a storage device which could be @@ -321,14 +343,16 @@ } function relocate_gpt_at_end_of_disk { - if ! sgdisk -e "$1";then + if ! udevadm lock --device "$1" sfdisk --relocate gpt-bak-std "$1";then die "Failed to write backup GPT at end of disk" fi } function disk_has_unallocated_space { local disk_device=$1 + local free_mbytes local pt_table_type + local flag="GPT PMBR size mismatch" pt_table_type=$(get_partition_table_type "${disk_device}") if [ "${pt_table_type}" = "gpt" ];then # GPT disks store a backup table at the end of the disk @@ -337,13 +361,20 @@ # checked and used to detect that there is space # unallocated due to a geometry change of the underlying # block device layer - sgdisk --verify "${disk_device}" 2>&1 | grep -q "end of the disk" - else - # There is currently no method we could come up with - # to detect a geometry change for non GPT based disks. - # Thus we assume it's not fully allocated and allow - # for resize + if sfdisk --list-free "${disk_device}" 2>&1 | grep -q "${flag}"; then + return + fi + fi + # lookup if there is free space on disk compared to + # the current geometry values in the partition table + free_mbytes=$( + sfdisk --list-free "${disk_device}" |\ + grep -i Unpartitioned | cut -f2 -d, | grep -o -E '[0-9]+' + ) + if [ "${free_mbytes}" != "0" ];then true + else + false fi } @@ -354,7 +385,8 @@ pt_table_type=$(get_partition_table_type "${disk_device}") if [[ "$(uname -m)" =~ i.86|x86_64 ]];then if [ "${pt_table_type}" = "dos" ];then - sfdisk --activate "${disk_device}" "${boot_partition_id}" + udevadm lock --device "${disk_device}" \ + sfdisk --activate "${disk_device}" "${boot_partition_id}" fi fi } @@ -369,7 +401,9 @@ # see man sgdisk for details partition_count=3 fi - if ! sgdisk -h "$(seq -s : 1 "${partition_count}")" "${disk_device}";then + if ! udevadm lock --device "${disk_device}" \ + sgdisk -h "$(seq -s : 1 "${partition_count}")" "${disk_device}" + then die "Failed to create hybrid GPT/MBR !" fi } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/helper/build_status.sh new/kiwi-10.2.28/helper/build_status.sh --- old/kiwi-10.2.27/helper/build_status.sh 2025-05-13 10:29:13.201375000 +0200 +++ new/kiwi-10.2.28/helper/build_status.sh 2025-07-15 17:07:37.085845500 +0200 @@ -1,5 +1,7 @@ #!/bin/bash +pushd /run + for project in \ Virtualization:Appliances:SelfContained:fedora \ Virtualization:Appliances:SelfContained:tumbleweed \ @@ -10,6 +12,7 @@ Virtualization:Appliances:Images:Testing_x86:rawhide \ Virtualization:Appliances:Images:Testing_ppc:rawhide \ Virtualization:Appliances:Images:Testing_x86:leap \ + Virtualization:Appliances:Images:Testing_x86:slfo \ Virtualization:Appliances:Images:Testing_x86:centos \ Virtualization:Appliances:Images:Testing_x86:fedora \ Virtualization:Appliances:Images:Testing_x86:ubuntu \ @@ -69,3 +72,5 @@ ? buildstatus not available EOF fi + +popd diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/kiwi/defaults.py new/kiwi-10.2.28/kiwi/defaults.py --- old/kiwi-10.2.27/kiwi/defaults.py 2025-07-08 16:51:34.248589800 +0200 +++ new/kiwi-10.2.28/kiwi/defaults.py 2025-07-15 17:07:37.085845500 +0200 @@ -953,6 +953,10 @@ 'bootaa64.efi' ), shim_pattern_type( + '/boot/efi/EFI/*/shimriscv64.efi', + 'bootriscv64.efi' + ), + shim_pattern_type( '/boot/efi/EFI/*/shim.efi', 'bootx64.efi' ), @@ -1062,6 +1066,11 @@ '/boot/efi/EFI/*/grubaa64.efi', 'grubaa64.efi', 'bootaa64.efi' + ), + grub_pattern_type( + '/boot/efi/EFI/*/grubriscv64.efi', + 'grubriscv64.efi', + 'bootriscv64.efi' ) ], 'iso': [ @@ -1094,6 +1103,11 @@ '/boot/efi/EFI/*/grubaa64.efi', 'grubaa64.efi', 'bootaa64.efi' + ), + grub_pattern_type( + '/boot/efi/EFI/*/grubriscv64.efi', + 'grubriscv64.efi', + 'bootriscv64.efi' ) ] } @@ -1235,6 +1249,11 @@ 'bootaa64.efi' ), grub_pattern_type( + '/boot/efi/EFI/*/grubriscv64.efi', + 'grubriscv64.efi', + 'bootriscv64.efi' + ), + grub_pattern_type( '/usr/share/grub*/*-efi/grub.efi', 'grub.efi', 'bootx64.efi' @@ -1287,6 +1306,11 @@ 'bootaa64.efi' ), grub_pattern_type( + '/boot/efi/EFI/*/grubriscv64.efi', + 'grubriscv64.efi', + 'bootriscv64.efi' + ), + grub_pattern_type( '/usr/share/grub*/x86_64-efi/grub.efi', 'grub.efi', 'bootx64.efi' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/kiwi/package_manager/apt.py new/kiwi-10.2.28/kiwi/package_manager/apt.py --- old/kiwi-10.2.27/kiwi/package_manager/apt.py 2025-06-03 11:22:07.127029000 +0200 +++ new/kiwi-10.2.28/kiwi/package_manager/apt.py 2025-07-16 17:51:40.669177300 +0200 @@ -227,7 +227,13 @@ pathlib.Path(f'{self.root_dir}/var/lib/dpkg').mkdir( parents=True, exist_ok=True ) + # Older versions of apt look for the status file both within and + # without the tree, but do not create the status file within the + # tree. pathlib.Path(f'{self.root_dir}/var/lib/dpkg/status.kiwi').touch() + # Some versions of apt don't create the status file outside the + # tree, e.g. 2.4.14. + pathlib.Path('/var/lib/dpkg/status.kiwi').touch() pathlib.Path(f'{self.root_dir}/var/lib/dpkg/available').touch() if 'apt' not in self.package_requests: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/kiwi/path.py new/kiwi-10.2.28/kiwi/path.py --- old/kiwi-10.2.27/kiwi/path.py 2024-11-06 16:22:38.068032000 +0100 +++ new/kiwi-10.2.28/kiwi/path.py 2025-07-15 17:07:37.089845400 +0200 @@ -227,3 +227,14 @@ lookup_paths = Path.rebase_to_root(root_dir, lookup_paths) log.debug(f"Looking for {filename} in {os.pathsep.join(lookup_paths)}") return shutil.which(filename, access_mode, path=os.pathsep.join(lookup_paths)) + + @staticmethod + def first_exists(path: str) -> str: + """ + Lookup first path that exists in the given path hierarchy + """ + p = pathlib.Path(path) + if p.exists(): + return path + else: + return Path.first_exists(format(p.parent)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/kiwi/runtime_checker.py new/kiwi-10.2.28/kiwi/runtime_checker.py --- old/kiwi-10.2.27/kiwi/runtime_checker.py 2025-06-03 11:22:07.131029000 +0200 +++ new/kiwi-10.2.28/kiwi/runtime_checker.py 2025-07-15 17:07:37.089845400 +0200 @@ -86,11 +86,12 @@ message = dedent('''\n Target root/image directory is lacking filesystem features - The filesystem {0} for the given image target directory {1} + The filesystem {0} in the target path {1} does not support important features like extended permissions, ACLs or xattrs. The image build may fail or the resulting image misbehave. ''') + target_dir = Path.first_exists(target_dir) stat = Command.run(['stat', '-f', '-c', '%T', target_dir]) if stat: target_fs = stat.output.strip() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/kiwi/system/setup.py new/kiwi-10.2.28/kiwi/system/setup.py --- old/kiwi-10.2.27/kiwi/system/setup.py 2025-07-08 16:51:34.252589700 +0200 +++ new/kiwi-10.2.28/kiwi/system/setup.py 2025-07-18 13:59:19.763772000 +0200 @@ -173,8 +173,7 @@ 'rm', '-f', '.kconfig', '.profile', - 'config.bootoptions', - 'config.partids' + 'config.bootoptions' ] ) meta_dir = f'{self.root_dir}/{defaults.IMAGE_METADATA_DIR}' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/kiwi/version.py new/kiwi-10.2.28/kiwi/version.py --- old/kiwi-10.2.27/kiwi/version.py 2025-07-09 11:26:31.804736400 +0200 +++ new/kiwi-10.2.28/kiwi/version.py 2025-07-18 13:59:31.103774300 +0200 @@ -18,5 +18,5 @@ """ Global version information used in kiwi and the package """ -__version__ = '10.2.27' +__version__ = '10.2.28' __githash__ = '$Format:%H$' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/pyproject.toml new/kiwi-10.2.28/pyproject.toml --- old/kiwi-10.2.27/pyproject.toml 2025-07-09 11:26:31.800736200 +0200 +++ new/kiwi-10.2.28/pyproject.toml 2025-07-18 13:59:31.103774300 +0200 @@ -1,6 +1,6 @@ [tool.poetry] name = "kiwi" -version = "10.2.27" +version = "10.2.28" description = "KIWI - Appliance Builder" license = "GPL-3.0-or-later" readme = "README.rst" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/test/unit/bootloader/config/grub2_test.py new/kiwi-10.2.28/test/unit/bootloader/config/grub2_test.py --- old/kiwi-10.2.27/test/unit/bootloader/config/grub2_test.py 2025-07-08 16:51:34.260589600 +0200 +++ new/kiwi-10.2.28/test/unit/bootloader/config/grub2_test.py 2025-07-15 17:07:37.089845400 +0200 @@ -83,6 +83,7 @@ [], [], [], + [], ['root_dir/usr/lib64/efi/shim.efi'], # get_signed_grub_loader(disk) [], @@ -91,6 +92,7 @@ [], [], [], + [], ['root_dir/usr/lib64/efi/grub.efi'], # get_grub_efi_font_directory ['root_dir/boot/efi/EFI/DIST/fonts'] @@ -108,6 +110,7 @@ [], [], [], + [], ['root_dir/usr/lib64/efi/grub.efi'], # get_grub_efi_font_directory ['root_dir/boot/efi/EFI/DIST/fonts'] @@ -129,11 +132,13 @@ [], [], [], + [], ['root_dir/usr/lib64/efi/shim.efi'], # get_signed_grub_loader(iso) [], [], [], + [], [], [], [], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/test/unit/defaults_test.py new/kiwi-10.2.28/test/unit/defaults_test.py --- old/kiwi-10.2.27/test/unit/defaults_test.py 2025-06-25 10:38:02.239795400 +0200 +++ new/kiwi-10.2.28/test/unit/defaults_test.py 2025-07-15 17:07:37.093845400 +0200 @@ -98,7 +98,8 @@ call('root/usr/lib/grub*/x86_64-efi/grub.efi'), call('root/boot/efi/EFI/*/grubx64.efi'), call('root/boot/efi/EFI/*/grubia32.efi'), - call('root/boot/efi/EFI/*/grubaa64.efi') + call('root/boot/efi/EFI/*/grubaa64.efi'), + call('root/boot/efi/EFI/*/grubriscv64.efi') ] mock_glob.reset_mock() mock_glob.return_value = [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/test/unit/path_test.py new/kiwi-10.2.28/test/unit/path_test.py --- old/kiwi-10.2.27/test/unit/path_test.py 2024-11-06 16:22:38.088032000 +0100 +++ new/kiwi-10.2.28/test/unit/path_test.py 2025-07-15 17:07:37.093845400 +0200 @@ -140,3 +140,10 @@ mock_stat.assert_called_once_with(fname) mock_access.assert_called_once_with(fname, mode, effective_ids=True) + + def test_first_exists(self): + assert Path.first_exists('/') == '/' + assert Path.first_exists('/etc/foo/bar') == '/etc' + assert Path.first_exists('artificial') == '.' + assert Path.first_exists('foo/bar') == '.' + assert Path.first_exists('/x/y/z') == '/' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-10.2.27/test/unit/system/setup_test.py new/kiwi-10.2.28/test/unit/system/setup_test.py --- old/kiwi-10.2.27/test/unit/system/setup_test.py 2025-07-08 16:51:34.264589800 +0200 +++ new/kiwi-10.2.28/test/unit/system/setup_test.py 2025-07-18 13:59:19.763772000 +0200 @@ -379,8 +379,7 @@ 'chroot', 'root_dir', 'rm', '-f', '.kconfig', '.profile', - 'config.bootoptions', - 'config.partids' + 'config.bootoptions' ] ), call(