From patchwork Fri Oct 2 11:48:47 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrej Kozemcak X-Patchwork-Id: 99884 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 193C2CA5FD6 for ; Fri, 2 Oct 2026 11:48:57 +0000 (UTC) Received: from mta-65-227.siemens.flowmailer.net (mta-65-227.siemens.flowmailer.net [185.136.65.227]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.9898.1790941734987271990 for ; Fri, 02 Oct 2026 04:48:56 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=andrej.kozemcak@siemens.com header.s=fm1 header.b=SH7UcsLB; spf=pass (domain: rts-flowmailer.siemens.com, ip: 185.136.65.227, mailfrom: fm-1334352-202610021148524e6f1fd0bd0002074e-gm15yd@rts-flowmailer.siemens.com) Received: by mta-65-227.siemens.flowmailer.net with ESMTPSA id 202610021148524e6f1fd0bd0002074e for ; Fri, 02 Oct 2026 13:48:52 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=andrej.kozemcak@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc; bh=8QEALJwFa30/T52orj2IiJk7QTAXA6jLEwf33krfhoQ=; b=SH7UcsLBAg0CsXcJy6gW0/NsDMOws42RkfAVxYmdzbROaRQwr9bCvAPQQSt5Uv3GYRzNoD XAMo9Gna6jWwOMs8bxPF1j3d2EuhgmM/i1W4b1onu5/FY3ixargn1XLClWElWmmMSaOXf5ff mITO3/U4i/OEm07LgJ8hPrIClMXasl153rTuwwhQPgKEi5djAdGaWks+YqKLxL3QcHKtaR2n 9NatoJZahrzq2d1fdmYEEo5h+ZZfeQl6hulFNYCYIdmWxClR3CoSQrxsW8mAV19J4MxIqJHd ibCRWY0juuAVxtpiOTXqSQlU44rj0mmjd9Sm3HeFjKp9WlmcoOiHLd1Q==; From: Andrej Kozemcak To: openembedded-core@lists.openembedded.org Cc: Andrej Kozemcak Subject: [PATCH 1/3] qemu: enable pseudo for nfs rootfs export Date: Fri, 2 Oct 2026 13:48:47 +0200 Message-ID: <20261002114848.1126256-1-andrej.kozemcak@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1334352:519-21489:flowmailer List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Fri, 02 Oct 2026 11:48:57 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/247113 Testimage.bbclass can now boot from nfs, but pseudo is globally disabled by default in the environment. This corrupts file access rights when qemu boots from nfs, causing failures. Explicitly enable pseudo in runqemu-export-rootfs since it is required here. Also export OECORE_NATIVE_SYSROOT from qemurunner so runqemu-export-rootfs can locate pseudo without needing a second tinfoil connection. Signed-off-by: Andrej Kozemcak --- meta/lib/oeqa/utils/qemurunner.py | 4 ++++ scripts/runqemu-export-rootfs | 2 ++ 2 files changed, 6 insertions(+) diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py index 5979b52650..1a83c01ea8 100644 --- a/meta/lib/oeqa/utils/qemurunner.py +++ b/meta/lib/oeqa/utils/qemurunner.py @@ -166,6 +166,10 @@ class QemuRunner: if self.tmpfsdir: env["RUNQEMU_TMPFS_DIR"] = self.tmpfsdir + if self.native_sysroot: + # Needed by runqemu-export-rootfs (avoid a second tinfoil connection) + env["OECORE_NATIVE_SYSROOT"] = self.native_sysroot + if not launch_cmd: launch_cmd = 'runqemu %s' % ('snapshot' if discard_writes else '') if self.use_kvm: diff --git a/scripts/runqemu-export-rootfs b/scripts/runqemu-export-rootfs index 150513bc50..ff19a0ccc9 100755 --- a/scripts/runqemu-export-rootfs +++ b/scripts/runqemu-export-rootfs @@ -58,6 +58,8 @@ PSEUDO_LOCALSTATEDIR="$NFS_EXPORT_DIR/../$(basename $NFS_EXPORT_DIR).pseudo_stat export PSEUDO_LOCALSTATEDIR PSEUDO_INCLUDE_PATHS="$NFS_EXPORT_DIR" export PSEUDO_INCLUDE_PATHS +# Enable pseudo +export PSEUDO_DISABLED=0 if [ ! -d "$PSEUDO_LOCALSTATEDIR" ]; then echo "Error: $PSEUDO_LOCALSTATEDIR does not exist." From patchwork Fri Oct 2 11:48:48 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrej Kozemcak X-Patchwork-Id: 99885 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 002D9CA5FC4 for ; Fri, 2 Oct 2026 11:48:56 +0000 (UTC) Received: from mta-64-227.siemens.flowmailer.net (mta-64-227.siemens.flowmailer.net [185.136.64.227]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.9891.1790941734544374309 for ; Fri, 02 Oct 2026 04:48:55 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=andrej.kozemcak@siemens.com header.s=fm1 header.b=hmN9Qxpe; spf=pass (domain: rts-flowmailer.siemens.com, ip: 185.136.64.227, mailfrom: fm-1334352-202610021148524e29e59f6d000207fe-8n8b6v@rts-flowmailer.siemens.com) Received: by mta-64-227.siemens.flowmailer.net with ESMTPSA id 202610021148524e29e59f6d000207fe for ; Fri, 02 Oct 2026 13:48:52 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=andrej.kozemcak@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=BtN12cn9ulIbSPaUxuPfM4ImwUA9v3YraOT2W7CY0yA=; b=hmN9Qxpe7354SN+A++GVH1Micsf+sGw2ZlQTUiV6iRGVPuWmSyDsAK1Bs+EsVQd/zTr9VK Uq+pvey/NlT7BfMPQ4AlflVld9zVNANGR9MrZ3uZTanFt5D1XRlt7H7uPvQtLyYzy1h6gLKD Et7nMzzcknmNhXNWiKTh1++q3Ko7eWAJN8aNzZy0DsQbR5D2QsIiwaSEbo7zhATnaS0QUSRZ Bzk7yiYhKzFUuwzdQ89vAV+nf9m98ffU7E+CNmX3vF4H3g+6mZtAueIjFgfdbR1gd2Q6kADs MX+r9y4BXiFJxMBZsp0fa6zAcnk8gdqSHheUuQi5akFz/PosXtB0Ni0w==; From: Andrej Kozemcak To: openembedded-core@lists.openembedded.org Cc: Andrej Kozemcak Subject: [PATCH 2/3] runqemu: support rootfs-dbg flag in QB_FSINFO Date: Fri, 2 Oct 2026 13:48:48 +0200 Message-ID: <20261002114848.1126256-2-andrej.kozemcak@siemens.com> In-Reply-To: <20261002114848.1126256-1-andrej.kozemcak@siemens.com> References: <20261002114848.1126256-1-andrej.kozemcak@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1334352:519-21489:flowmailer List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Fri, 02 Oct 2026 11:48:56 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/247112 Add parsing for a new 'rootfs-dbg' flag on tar-based filesystem types in QB_FSINFO. When set, runqemu appends '-dbg' to the IMAGE_LINK_NAME used to locate the rootfs tarball for NFS extraction, allowing use of the debug rootfs variant. QB_FSINFO: additional filesystem metadata, as a space-separated list of "fstype:flag" entries, e.g., "wic:no-kernel-in-fs tar:rootfs-dbg" Supported flags include "wic:no-kernel-in-fs" or "wic:kernel-in-fs" to select whether a WIC image contains the kernel in the filesystem, and "tar:rootfs-dbg" to tell runqemu to use the debug rootfs image. Signed-off-by: Andrej Kozemcak --- scripts/runqemu | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/scripts/runqemu b/scripts/runqemu index 2c126e7f54..ad6e03feb6 100755 --- a/scripts/runqemu +++ b/scripts/runqemu @@ -197,6 +197,7 @@ class BaseConfig(object): self.portlocks = {} self.bitbake_e = '' self.snapshot = False + self.rootfs_dbg = False self.wictypes = ('wic.zst', 'wic', 'wic.vmdk', 'wic.qcow2', 'wic.vdi', "wic.vhd", "wic.vhdx") self.tartypes = ('tar.zst', 'tar.bz2', 'tar.gz', 'tar.xz', 'tar') self.fstypes = ('ext2', 'ext3', 'ext4', 'ext2.zst', 'ext3.zst', 'ext4.zst', @@ -686,7 +687,7 @@ to your build configuration. else: raise RunQemuError("FSTYPE is NULL!") - # parse QB_FSINFO into dict, e.g. { 'wic': ['no-kernel-in-fs', 'a-flag'], 'ext4': ['another-flag']} + # parse QB_FSINFO into dict, e.g. { 'wic': ['no-kernel-in-fs', 'a-flag'], 'tar': ['rootfs-dbg']} wic_fs = False qb_fsinfo = self.get('QB_FSINFO') if qb_fsinfo: @@ -703,6 +704,12 @@ to your build configuration. else: logger.warning('Unknown flag "%s:%s" in QB_FSINFO', fstype, fsflag) continue + elif fstype in ('tar',) + self.tartypes: + if fsflag == 'rootfs-dbg': + self.rootfs_dbg = True + else: + logger.warning('Unknown flag "%s:%s" in QB_FSINFO', fstype, fsflag) + continue else: logger.warning('QB_FSINFO is not supported for image type "%s"', fstype) continue @@ -1079,7 +1086,10 @@ to your build configuration. # Extract .tar* if no nfs dir if not (self.rootfs and os.path.isdir(self.rootfs)): - src_prefix = '%s/%s' % (self.get('DEPLOY_DIR_IMAGE'), self.get('IMAGE_LINK_NAME')) + image_link_name = self.get('IMAGE_LINK_NAME') + if self.rootfs_dbg: + image_link_name += '-dbg' + src_prefix = '%s/%s' % (self.get('DEPLOY_DIR_IMAGE'), image_link_name) dest = "%s-nfsroot" % src_prefix if os.path.exists('%s.pseudo_state' % dest): logger.info('Use %s as NFS_DIR' % dest) From patchwork Fri Oct 2 11:46:31 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrej Kozemcak X-Patchwork-Id: 99883 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id EE27ACA5FC4 for ; Fri, 2 Oct 2026 11:47:26 +0000 (UTC) Received: from mta-64-226.siemens.flowmailer.net (mta-64-226.siemens.flowmailer.net [185.136.64.226]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.9867.1790941643518307313 for ; Fri, 02 Oct 2026 04:47:25 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=andrej.kozemcak@siemens.com header.s=fm1 header.b=QsNJZlv/; spf=pass (domain: rts-flowmailer.siemens.com, ip: 185.136.64.226, mailfrom: fm-1334352-20261002114719d356b3537100020752-lduzas@rts-flowmailer.siemens.com) Received: by mta-64-226.siemens.flowmailer.net with ESMTPSA id 20261002114719d356b3537100020752 for ; Fri, 02 Oct 2026 13:47:20 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=andrej.kozemcak@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=Kcwe8sG8wN+OHLPcnCqYt8NCp9r2mull4SZEAf+GO7Y=; b=QsNJZlv/MhAVoUApw4U3QZFxN5Jx9D4Wu2drfsz8Psf55EVOk6AXaL8MKLTmQmCGnz6yLF HhHfjb4Ln+Zx4UgUEzCcs1/Q4FJ/8L3BewQ3iM5/f6Vd6x+R0OboPhoZVG59IvazH/E4h0Wd zYB1aitdwl4+swAiPBcPEIRvVjSQSB04AZo6zJHEQnx1pKhkCVWrj/6Z7ZaSmOA7WuOrPV0g 9qUWUhxWVohhwfdIZJF6AdF1FpRJCQAuEgIaYhC7NB9Vf+by/diCMYMVGjk/bfNyCRUFI0fV arMGv7eU7Z3h27zTWhpGvQhH3lHYdUdaNCHfUigkHOdmFvg7fjvDLoLQ==; From: Andrej Kozemcak To: openembedded-core@lists.openembedded.org Cc: Adrian Freihofer , Andrej Kozemcak Subject: [PATCH 3/3] selftest/runtime_test: add testimage.bbclass NFS rootfs-dbg test Date: Fri, 2 Oct 2026 13:46:31 +0200 Message-ID: <20261002114631.1125826-3-andrej.kozemcak@siemens.com> In-Reply-To: <20261002114631.1125826-1-andrej.kozemcak@siemens.com> References: <20261002114631.1125826-1-andrej.kozemcak@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1334352:519-21489:flowmailer List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Fri, 02 Oct 2026 11:47:26 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/247111 From: Adrian Freihofer Add a test case for testimage.bbclass with qemu booted from a full rootfs-dbg image mounted via NFS, plus a slirp variant, sharing a common _test_testimage_nfs(slirp) implementation. Both also install cmake-example-ptest and ptest-runner with the ptest DISTRO_FEATURE enabled, so the ptest suite runs over NFS too. test_testimage_slirp is switched to oe-selftest-image, which already provides an SSH server. Signed-off-by: Adrian Freihofer Signed-off-by: Andrej Kozemcak --- meta/lib/oeqa/selftest/cases/runtime_test.py | 51 ++++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/meta/lib/oeqa/selftest/cases/runtime_test.py b/meta/lib/oeqa/selftest/cases/runtime_test.py index a3c3126036..b82c7c7294 100644 --- a/meta/lib/oeqa/selftest/cases/runtime_test.py +++ b/meta/lib/oeqa/selftest/cases/runtime_test.py @@ -137,14 +137,59 @@ class TestImage(OESelftestTestCase): features = ''' IMAGE_CLASSES:append = " testimage" -IMAGE_FEATURES:append = " ssh-server-dropbear" IMAGE_ROOTFS_EXTRA_SPACE:append = "${@bb.utils.contains("IMAGE_CLASSES", "testimage", " + 5120", "", d)}" TEST_RUNQEMUPARAMS += " slirp" ''' self.write_config(features) - bitbake('core-image-minimal') - bitbake('-c testimage core-image-minimal') + bitbake('oe-selftest-image') + bitbake('-c testimage oe-selftest-image') + + def _test_testimage_nfs(self, slirp=False): + """ + Check testimage functionality with an NFS rootfs-dbg image + (image-combined-dbg), the same rootfs devtool ide-sdk --nfs=rootfs-dbg + boots. runqemu recognizes the rootfs tarball and extracts it itself + for NFS boot, the same way test_qemu_can_boot_nfs_and_shutdown + (runqemu.py) does. Also installs cmake-example-ptest and runs the + ptest suite on top of it. + """ + + # IMAGE_LINK_NAME/DEPLOY_DIR_IMAGE don't depend on the features below, + # so the rootfs-dbg tarball path can be derived before building it. + bb_vars = get_bb_vars(('DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME'), 'oe-selftest-image') + rootfs_tar = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], '%s-dbg.tar.zst' % bb_vars['IMAGE_LINK_NAME']) + + features = ''' +IMAGE_CLASSES:append = " testimage image-combined-dbg" +IMAGE_GEN_DEBUGFS = "1" +IMAGE_FSTYPES_DEBUGFS:append = " tar.zst" +DISTRO_FEATURES:append = " ptest" +IMAGE_INSTALL:append = " ptest-runner cmake-example-ptest" +QB_DEFAULT_FSTYPE = "tar.zst" +QB_FSINFO = "tar.zst:rootfs-dbg" +''' + if slirp: + features += 'TEST_RUNQEMUPARAMS += " slirp"\n' + self.write_config(features) + + bitbake('oe-selftest-image') + self.assertExists(rootfs_tar) + + bitbake('-c testimage oe-selftest-image') + + def test_testimage_nfs(self): + """ + Summary: Check testimage functionality with an NFS rootfs-dbg image. + """ + self._test_testimage_nfs(slirp=False) + + def test_testimage_slirp_nfs(self): + """ + Summary: Check testimage functionality with qemu slirp networking and + an NFS rootfs-dbg image. + """ + self._test_testimage_nfs(slirp=True) def test_testimage_dnf(self): """