From patchwork Wed Sep 16 06:20:27 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Wagenknecht X-Patchwork-Id: 98395 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 04954C88E5C for ; Wed, 16 Sep 2026 06:20:39 +0000 (UTC) Received: from mx1.emlix.com (mx1.emlix.com [178.63.209.131]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.8767.1789539634143762957 for ; Tue, 15 Sep 2026 23:20:35 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@emlix.com header.s=20250930 header.b=MU5+daGS; dkim=fail reason="dkim: body hash did not verify" header.i=@emlix.com header.s=20250930 header.b=MU5+daGS; spf=pass (domain: emlix.com, ip: 178.63.209.131, mailfrom: dwagenknecht@emlix.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=emlix.com; s=20250930; t=1789539631; bh=SQPpMNrBB9VbSkvtvyYk98ezFUvhmUuWXfobG5BCkRo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MU5+daGSxx36b/seOkAZEqEQNlfWr7AheNEGa15JF9H8buibQu6S3rJl3iHUvMLE5 prYzpriRx4tWfL+NXWo8s961AAAOeZ/RWCZzapqdRKlIT4Ck4zgWwx/ClPtx2S6hB5 f9wGuhp83H9rfRifULxSCoIvZiHxrEB5ZK+ADkwPqY/x0BxSW0Eu9S+m5tcy7zaFRn XpGQ8pnsjfQrlwmA1j+aoqaViKFeN01WDALpuxZ8IEE40gCNa8t1Vu+zsLHChAdHwS iP4bw5vtCehlcnrF5o+s25Bi+BNXKUDrzmrP0odEMnVxeHn3EDvhg9NfUHRGrfeGea b6jAt+GZoDEgw== Received: from mx1.emlix.com (localhost [127.0.0.1]) by mx1.emlix.com (Postfix) with ESMTP id 97D895F8F9; Wed, 16 Sep 2026 08:20:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=emlix.com; s=20250930; t=1789539631; bh=SQPpMNrBB9VbSkvtvyYk98ezFUvhmUuWXfobG5BCkRo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MU5+daGSxx36b/seOkAZEqEQNlfWr7AheNEGa15JF9H8buibQu6S3rJl3iHUvMLE5 prYzpriRx4tWfL+NXWo8s961AAAOeZ/RWCZzapqdRKlIT4Ck4zgWwx/ClPtx2S6hB5 f9wGuhp83H9rfRifULxSCoIvZiHxrEB5ZK+ADkwPqY/x0BxSW0Eu9S+m5tcy7zaFRn XpGQ8pnsjfQrlwmA1j+aoqaViKFeN01WDALpuxZ8IEE40gCNa8t1Vu+zsLHChAdHwS iP4bw5vtCehlcnrF5o+s25Bi+BNXKUDrzmrP0odEMnVxeHn3EDvhg9NfUHRGrfeGea b6jAt+GZoDEgw== Received: from mailer.emlix.com (p5098be52.dip0.t-ipconnect.de [80.152.190.82]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.emlix.com (Postfix) with ESMTPS id 8316D5F784; Wed, 16 Sep 2026 08:20:31 +0200 (CEST) From: Daniel Wagenknecht To: openembedded-core@lists.openembedded.org, paul@pbarker.dev Cc: Daniel Wagenknecht Subject: [PATCH v2] classes: image-buildinfo: allow deploying the buildinfo file Date: Wed, 16 Sep 2026 08:20:27 +0200 Message-ID: <20260916062028.2282187-1-dwagenknecht@emlix.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <93102958cda7288847f11ee797480f16ba36962f.camel@pbarker.dev> References: <93102958cda7288847f11ee797480f16ba36962f.camel@pbarker.dev> MIME-Version: 1.0 X-Virus-Scanned: ClamAV using ClamSMTP 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 ; Wed, 16 Sep 2026 06:20:39 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/245925 The `buildinfo` file generated by the `image-buildinfo` class contains useful information to identify an image. Having it in the rootfs of the image as well as deployed alongside the image artifact can be useful. Allow to deploy it alongside the image by setting 'IMAGE_BUILDINFO_DEPLOY' to '1'. I use this in an automated testing workflow with unreliable deploy step to ensure the deployment succeeded. With IMAGE_BUILDINFO_VARS += "IMAGE_NAME" IMAGE_BUILDINFO_DEPLOY = "1" the generated buidinfo file is unique and the deploy step can be verified by comparing (the hash of) the file on the booted system and in `IMAGE_DEPLOY_DIR`. Signed-off-by: Daniel Wagenknecht --- @Paul Barker: I missed your reply, sorry! Adapted the patches according to your comments now. v2: * rebased * copy generated file instead of regenerating it * add varflags only if needed meta/classes/image-buildinfo.bbclass | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/meta/classes/image-buildinfo.bbclass b/meta/classes/image-buildinfo.bbclass index 01636dac65f..8fddcba3ee3 100644 --- a/meta/classes/image-buildinfo.bbclass +++ b/meta/classes/image-buildinfo.bbclass @@ -16,6 +16,9 @@ IMAGE_BUILDINFO_VARS ?= "DISTRO DISTRO_VERSION" IMAGE_BUILDINFO_FILE ??= "${sysconfdir}/buildinfo" SDK_BUILDINFO_FILE ??= "/buildinfo" +# Deploy the file alongside the images. +IMAGE_BUILDINFO_DEPLOY ??= "0" + # From buildhistory.bbclass def image_buildinfo_outputvars(vars, d): vars = vars.split() @@ -70,6 +73,12 @@ python buildinfo_image () { bb.build.exec_func("buildinfo", d) } +python buildinfo_deploy() { + src = d.expand("${IMAGE_ROOTFS}/${IMAGE_BUILDINFO_FILE}") + dst = d.expand("${IMGDEPLOYDIR}/${IMAGE_NAME}.buildinfo") + oe.path.copyhardlink(src, dst) +} + python buildinfo_sdk () { d.setVar("BUILDINFODEST", "${SDK_OUTPUT}/${SDKPATH}") d.setVar("IMAGE_BUILDINFO_FILE", d.getVar("SDK_BUILDINFO_FILE")) @@ -79,3 +88,10 @@ python buildinfo_sdk () { IMAGE_PREPROCESS_COMMAND += "buildinfo_image" POPULATE_SDK_PRE_TARGET_COMMAND += "buildinfo_sdk" +python () { + if oe.utils.vartrue('IMAGE_BUILDINFO_DEPLOY', True, False, d): + d.appendVar("IMAGE_PREPROCESS_COMMAND", " buildinfo_deploy") + d.appendVarFlag("do_image", "postfuncs", " create_symlinks") + d.appendVarFlag("do_image", "subimages", " buildinfo") +} +