Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package combustion for openSUSE:Factory checked in at 2025-03-24 13:25:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/combustion (Old) and /work/SRC/openSUSE:Factory/.combustion.new.2696 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "combustion" Mon Mar 24 13:25:14 2025 rev:35 rq:1255005 version:1.5 Changes: -------- --- /work/SRC/openSUSE:Factory/combustion/combustion.changes 2024-08-22 18:10:33.934912494 +0200 +++ /work/SRC/openSUSE:Factory/.combustion.new.2696/combustion.changes 2025-03-24 13:25:16.942374344 +0100 @@ -1,0 +2,11 @@ +Fri Mar 21 12:52:43 UTC 2025 - Fabian Vogt <fv...@suse.com> + +- Update to version 1.5: + * Add support for nested /etc subvolumes + * Log combustion-prepare.service to journal+console + * CI: Verify combustion runs only on the first boot + * CI: Add some missing SYSTEMD_IGNORE_CHROOT=1 to poweroff calls + * CI: Add a test with Minimal-VM + * Silence stderr of grep in /proc/*/mountinfo + +------------------------------------------------------------------- Old: ---- combustion-1.4+git8.obscpio New: ---- combustion-1.5.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ combustion.spec ++++++ --- /var/tmp/diff_new_pack.JS9Q87/_old 2025-03-24 13:25:17.626402844 +0100 +++ /var/tmp/diff_new_pack.JS9Q87/_new 2025-03-24 13:25:17.626402844 +0100 @@ -1,7 +1,7 @@ # # spec file for package combustion # -# Copyright (c) 2024 SUSE LLC +# Copyright (c) 2025 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: combustion -Version: 1.4+git8 +Version: 1.5 Release: 0 Summary: System for initial configuration of appliances License: GPL-2.0-or-later ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.JS9Q87/_old 2025-03-24 13:25:17.674404845 +0100 +++ /var/tmp/diff_new_pack.JS9Q87/_new 2025-03-24 13:25:17.682405178 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/openSUSE/combustion.git</param> - <param name="changesrevision">4ad9eeaf43bf6eaf8268176e92ad3e4e1cc9fd91</param></service></servicedata> + <param name="changesrevision">ef1f0a48d97d7f2eacf8333288cd7adb5b83d92e</param></service></servicedata> (No newline at EOF) ++++++ combustion-1.4+git8.obscpio -> combustion-1.5.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/combustion-1.4+git8/30firstboot/firstboot-detect new/combustion-1.5/30firstboot/firstboot-detect --- old/combustion-1.4+git8/30firstboot/firstboot-detect 2024-08-21 14:08:27.000000000 +0200 +++ new/combustion-1.5/30firstboot/firstboot-detect 2025-03-21 13:51:02.000000000 +0100 @@ -13,7 +13,7 @@ mount -o "$opts" "$what" /sysroot # Handle x-initrd.mount without initrd-parse-etc.service -awk '$1 !~ /^#/ && $4 ~ /(\<|,)x-initrd\.mount(\>|,)/ { if(system("mount --target-prefix /sysroot --fstab /sysroot/etc/fstab " $2) != 0) exit 1; }' /sysroot/etc/fstab +awk '$1 !~ /^#/ && $4 ~ /(\<|,)x-initrd\.mount(\>|,)/ && ! ( $2 == "/etc" && $3 == "none" ) { if(system("mount --target-prefix /sysroot --fstab /sysroot/etc/fstab " $2) != 0) exit 1; }' /sysroot/etc/fstab if ! [ -e /sysroot/etc/machine-id ] \ || grep -qw 'ignition\.firstboot' /proc/cmdline || grep -qw 'combustion\.firstboot' /proc/cmdline; then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/combustion-1.4+git8/combustion new/combustion-1.5/combustion --- old/combustion-1.4+git8/combustion 2024-08-21 14:08:27.000000000 +0200 +++ new/combustion-1.5/combustion 2025-03-21 13:51:02.000000000 +0100 @@ -171,7 +171,7 @@ fi fi - if grep -w /sysroot /proc/*/mountinfo; then + if grep -w /sysroot /proc/*/mountinfo 2>/dev/null; then echo "Warning: /sysroot still mounted somewhere" fi @@ -219,9 +219,10 @@ systemctl start sysroot-usr.mount fi -# Have to take care of x-initrd.mount first and from the outside. +# Have to take care of x-initrd.mount first and from the outside, but skip /etc +# if it's the new nested subvolume mechanism # Note: ignition-kargs-helper calls combustion but already mounted those itself. -awk '$1 !~ /^#/ && $4 ~ /(\<|,)x-initrd\.mount(\>|,)/ { if(system("findmnt /sysroot/" $2 " >/dev/null || mount --target-prefix /sysroot --fstab /sysroot/etc/fstab " $2) != 0) exit 1; }' /sysroot/etc/fstab +awk '$1 !~ /^#/ && $4 ~ /(\<|,)x-initrd\.mount(\>|,)/ && ! ( $2 == "/etc" && $3 == "none" ) { if(system("findmnt /sysroot/" $2 " >/dev/null || mount --target-prefix /sysroot --fstab /sysroot/etc/fstab " $2) != 0) exit 1; }' /sysroot/etc/fstab # Make sure the old snapshot is relabeled too, otherwise syncing its /etc fails. ( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/combustion-1.4+git8/combustion-prepare.service new/combustion-1.5/combustion-prepare.service --- old/combustion-1.4+git8/combustion-prepare.service 2024-08-21 14:08:27.000000000 +0200 +++ new/combustion-1.5/combustion-prepare.service 2025-03-21 13:51:02.000000000 +0100 @@ -24,4 +24,5 @@ [Service] Type=oneshot +StandardOutput=journal+console ExecStart=/usr/bin/combustion --prepare diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/combustion-1.4+git8/test/test.sh new/combustion-1.5/test/test.sh --- old/combustion-1.4+git8/test/test.sh 2024-08-21 14:08:27.000000000 +0200 +++ new/combustion-1.5/test/test.sh 2025-03-21 13:51:02.000000000 +0100 @@ -40,6 +40,14 @@ cp "${testdir}/"{testscript,config.ign} "${tmpdir}" cd "$tmpdir" +cat >combustion-secondboot <<'EOF' +#!/bin/bash +set -euxo pipefail +exec &>/dev/ttyS0 +echo "Combustion must not run on second boot" +SYSTEMD_IGNORE_CHROOT=1 poweroff -f +EOF + # Download latest MicroOS image if ! [ -f openSUSE-MicroOS.x86_64-kvm-and-xen.qcow2 ]; then wget --progress=bar:force:noscroll https://download.opensuse.org/tumbleweed/appliances/openSUSE-MicroOS.x86_64-kvm-and-xen.qcow2 @@ -55,7 +63,7 @@ #!/bin/bash set -euxo pipefail exec &>/dev/ttyS0 -trap '[ $? -eq 0 ] || poweroff -f' EXIT +trap '[ $? -eq 0 ] || SYSTEMD_IGNORE_CHROOT=1 poweroff -f' EXIT mount -t 9p -o trans=virtio tmpdir /mnt # Install new combustion, make sure the old remnants are gone rpm -e --nodeps --noscripts combustion @@ -108,6 +116,18 @@ exit 1 fi +# Make sure it does not run on the second boot +rm -f "${tmpdir}/done" + +timeout 300 qemu-system-x86_64 "${QEMU_BASEARGS[@]}" -drive if=virtio,file=openSUSE-MicroOS.x86_64-kvm-and-xen.qcow2 \ + -kernel vmlinuz -initrd initrd -append "root=LABEL=ROOT console=ttyS0 quiet systemd.show_status=1 systemd.log_target=console systemd.journald.forward_to_console=1 rd.emergency=poweroff rd.shell=0" \ + -fw_cfg name=opt/org.opensuse.combustion/script,file=combustion-secondboot + +if ! [ -e "${tmpdir}/done" ]; then + echo "Test failed" + exit 1 +fi + # Test combustion.url using QEMU's builtin tftp server rm -f "${tmpdir}/done" qemu-img snapshot -a initial openSUSE-MicroOS.x86_64-kvm-and-xen.qcow2 @@ -120,3 +140,68 @@ echo "Test failed" exit 1 fi + +# Now do some testing with Minimal-VM instead of MicroOS + +# Download latest Minimal-VM image +if ! [ -f openSUSE-Tumbleweed-Minimal-VM.x86_64-kvm-and-xen.qcow2 ]; then + wget --progress=bar:force:noscroll https://download.opensuse.org/tumbleweed/appliances/openSUSE-Tumbleweed-Minimal-VM.x86_64-kvm-and-xen.qcow2 + qemu-img snapshot -c initial openSUSE-Tumbleweed-Minimal-VM.x86_64-kvm-and-xen.qcow2 +else + qemu-img snapshot -a initial openSUSE-Tumbleweed-Minimal-VM.x86_64-kvm-and-xen.qcow2 +fi + +# Use combustion in the downloaded image to generate an initrd with the new combustion. +if ! [ -n "${reuseinitrd}" ] || ! [ -e "${tmpdir}/vmlinuz-minimal" ] || ! [ -e "${tmpdir}/initrd-minimal" ]; then + rm -f "${tmpdir}/done" + + cat >create-initrd-minimal <<'EOF' +#!/bin/bash +set -euxo pipefail +exec &>/dev/ttyS0 +trap '[ $? -eq 0 ] || SYSTEMD_IGNORE_CHROOT=1 poweroff -f' EXIT +mount -t 9p -o trans=virtio tmpdir /mnt +# Install new combustion, make sure the old remnants are gone +rpm -e --nodeps --noscripts combustion +cp -av /mnt/install/usr / +cp /usr/lib/modules/$(uname -r)/vmlinuz /mnt/vmlinuz-minimal +dracut -f --no-hostonly /mnt/initrd-minimal +touch /mnt/done +umount /mnt +SYSTEMD_IGNORE_CHROOT=1 poweroff -f +EOF + + timeout 300 qemu-system-x86_64 "${QEMU_BASEARGS[@]}" -drive if=virtio,file=openSUSE-Tumbleweed-Minimal-VM.x86_64-kvm-and-xen.qcow2 \ + -fw_cfg name=opt/org.opensuse.combustion/script,file=create-initrd-minimal + + if ! [ -e "${tmpdir}/done" ]; then + echo "Initrd generation failed" + exit 1 + fi +fi + +# Test combustion.url using QEMU's builtin tftp server +rm -f "${tmpdir}/done" +qemu-img snapshot -a initial openSUSE-Tumbleweed-Minimal-VM.x86_64-kvm-and-xen.qcow2 + +timeout 300 qemu-system-x86_64 "${QEMU_BASEARGS[@]}" -drive if=virtio,file=openSUSE-Tumbleweed-Minimal-VM.x86_64-kvm-and-xen.qcow2 \ + -kernel vmlinuz-minimal -initrd initrd-minimal -append "root=LABEL=ROOT rw console=ttyS0 quiet systemd.show_status=1 systemd.log_target=console systemd.journald.forward_to_console=1 rd.emergency=poweroff rd.shell=0 combustion.url=tftp://10.0.2.2/testscript" \ + -nic "user,tftp=$tmpdir" + +if ! [ -e "${tmpdir}/done" ]; then + echo "Test failed" + exit 1 +fi + +# Make sure it does not run on the second boot +rm -f "${tmpdir}/done" + +timeout 300 qemu-system-x86_64 "${QEMU_BASEARGS[@]}" -drive if=virtio,file=openSUSE-Tumbleweed-Minimal-VM.x86_64-kvm-and-xen.qcow2 \ + -kernel vmlinuz-minimal -initrd initrd-minimal -append "root=LABEL=ROOT rw console=ttyS0 quiet systemd.show_status=1 systemd.log_target=console systemd.journald.forward_to_console=1 rd.emergency=poweroff rd.shell=0 combustion.url=tftp://10.0.2.2/combustion-secondboot" \ + -nic "user,tftp=$tmpdir" + +if ! [ -e "${tmpdir}/done" ]; then + echo "Test failed" + exit 1 +fi + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/combustion-1.4+git8/test/testscript new/combustion-1.5/test/testscript --- old/combustion-1.4+git8/test/testscript 2024-08-21 14:08:27.000000000 +0200 +++ new/combustion-1.5/test/testscript 2025-03-21 13:51:02.000000000 +0100 @@ -3,7 +3,7 @@ set -euxo pipefail exec &>/dev/ttyS0 # Poweroff immediately on any failure to avoid unnecessary waiting. -trap '[ $? -eq 0 ] || poweroff -f' EXIT +trap '[ $? -eq 0 ] || SYSTEMD_IGNORE_CHROOT=1 poweroff -f' EXIT if [ "${1-}" = "--prepare" ]; then # Verify that the udev rules work for all config sources and avoid ++++++ combustion.obsinfo ++++++ --- /var/tmp/diff_new_pack.JS9Q87/_old 2025-03-24 13:25:17.826411178 +0100 +++ /var/tmp/diff_new_pack.JS9Q87/_new 2025-03-24 13:25:17.830411345 +0100 @@ -1,5 +1,5 @@ name: combustion -version: 1.4+git8 -mtime: 1724242107 -commit: 4ad9eeaf43bf6eaf8268176e92ad3e4e1cc9fd91 +version: 1.5 +mtime: 1742561462 +commit: ef1f0a48d97d7f2eacf8333288cd7adb5b83d92e