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(

Reply via email to