From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Tue, 11 Mar 2025 22:09:56 +0100 X-Sieve: CMU Sieve 2.4 Received: from mail-lj1-f190.google.com (mail-lj1-f190.google.com [209.85.208.190]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 52BL9tqx017064 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Tue, 11 Mar 2025 22:09:56 +0100 Received: by mail-lj1-f190.google.com with SMTP id 38308e7fff4ca-30bf170cf0asf26362161fa.0 for ; Tue, 11 Mar 2025 14:09:56 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1741727390; cv=pass; d=google.com; s=arc-20240605; b=OH65iWzohEMZywgNFcQogyXeo1Xox3PdGJC8eNjdw4PuUDB/un6dqKK9k/FxbqKMUz ReVfK4MRp0YHK4Zx9hWhHVPPCx3owWQ6kDFyJByhNMztjnArHYnHNBntP4J+B8Q8YeXQ AIflEDZs5bnS1L9yPXQVG1lx9Tc8mdWfieFAv5eHfwTeHwPSh03Mk4OT7v/s7xpgHOzg MG/g5HixJUpZDSvmsMBGPXxNpG7737bqqsDp04FgOb2GPVs1+CujVQ83lcOuxwj1tsSE 8EuF2ENesOPKWSmZXlZ0JVRI9flC6kqdBCjcxfyvEg8gqwFhOX+F1KyALuXKA1UtrHPs pBVQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to:feedback-id:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=6CvD8lPgKW7ETtMqy8jWu28rKy++g6DUTwDKJxvP06Q=; fh=jxi1uwU4+42ktL12pr+A+svSG//Rq5AS11WJDT2PS+w=; b=gZcbDnk6rgSBlY6ipXMBgt8WjFot5jRw8bWVwW2eTqLm71y43ExmHUNcaMtcUh3Xyv u7R2WrJGmrV2fgT7AoEW/uYMIPqKTK2qJeGf9YFDaf1LoQ5FvJBwaPDCqlnEsmDNGSTR oKNga5sNSbJ9GQ1JSX5M7wOmZFse7UxJgO2H95U8OfBiQqtcrvKGrTfcb8xeBdxHw2rZ zsyy9Hsj1Ju3Vr2QQqCXwPwTR9ODjj+D0SZCOuSCHAKIGkjmg4oo7SVK3KHbwrbCPZNC lK8MSdyiWeRJpwNAKmE+zyxv70DUtDKBG1N5mEOpitQFWl9MJ0HEu7Aoul0GgpePZVqr xs1Q==; darn=ilbers.de ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=VJCEny8N; spf=pass (google.com: domain of fm-1325773-20250311210946eb56298a2db6c64bcf-jf83_5@rts-flowmailer.siemens.com designates 185.136.65.228 as permitted sender) smtp.mailfrom=fm-1325773-20250311210946eb56298a2db6c64bcf-Jf83_5@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1741727390; x=1742332190; darn=ilbers.de; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:feedback-id :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=6CvD8lPgKW7ETtMqy8jWu28rKy++g6DUTwDKJxvP06Q=; b=NVCZC5H2+22iyDFnlcYGhTNrJ2TGa7mqNIUkgIRtvDU8m/D9WEOTK+/RWTN7IjdWAs gcDZBXQ0Qm43i+RGmyHXZeZWbQ7ooUyI5jk9ig7AOwi3j9cGodOzi5GjZqwtJqdgK0zJ n1UfckJKbJm2VwbBBv2VXqj79I5Jm8DhQY++E3HGlyargorMBT87EX5EpHIhyWZXBEg1 q+L9bhj4kqVtB+tAQ5Av4SnzZ3cVIqojt6asvlhTUNeMRJM+wxNS7XbUeDBQHsW7wlVE 1tu75PW8fghEIfkUArDzk5n7cmlyN+k54TsYrm/2wqOeSY9yijhM+dSBnXJp8tdVl4tE zcdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741727390; x=1742332190; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:feedback-id :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-beenthere:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=6CvD8lPgKW7ETtMqy8jWu28rKy++g6DUTwDKJxvP06Q=; b=pQILLchIyuHtJVbaSistWZk+XDm2zxIELZhvTAf36IZnPWiVFdFu4qrcGlDKh3LYHY ftVoOG1l/T7RmyjUsqA1MdBPidzTmpmfKT3Fqrg3j6BxYuO7m8r03+a4hCstdjkAxq4t o3K37PrRBPFtZMcox/3R4gnCnzON+/1mNEaueMk92G9AAy6mZi//oNH//VVE7Nfm3HWS ZWBnDgECO1g933BA0DWJ/05kAt/i+aCvLSgwxIfqGOcKq94d/KFrFHro1EORsbwqWruu 0iiRRMxCvQSp/MgVeCaMUl8U28yTEXqwnU/93uBWc3Szbyrh+1wWjaE2wLrzsgJ5BXj/ QPhg== X-Forwarded-Encrypted: i=2; AJvYcCXW/6TtPG1tlkX4uNf0XYlN2qnyhRKIqjqluY26H/86J/hkHOuPh+xc1AaOQIOmeasWbypF@ilbers.de X-Gm-Message-State: AOJu0YwFVFgcmIU0r+esdpdKpAKbVsUb4tOSZE9K+oGn1zSvnFljjGIe i/5vOlmXGF0HgkwzDWk9JAomj+IE4EkJIY1K0V3reugMJ2CwUY0h X-Google-Smtp-Source: AGHT+IE2vuS6BJ435V828RS/eBbQdJkVWsI5HZRNOd+R3BP8TYRizvzjxmlTeFLeBNLpQpKWVLzKUQ== X-Received: by 2002:a2e:a274:0:b0:30b:c96a:775 with SMTP id 38308e7fff4ca-30c20685ad8mr16426981fa.14.1741727389427; Tue, 11 Mar 2025 14:09:49 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com; h=Adn5yVHn6NOyyT6y/B9cyAHXZ+54IfQLRJx9U7tdrTAd3uOx/Q== Received: by 2002:a05:651c:1285:b0:30c:2dce:7716 with SMTP id 38308e7fff4ca-30c2dce7942ls1028251fa.2.-pod-prod-02-eu; Tue, 11 Mar 2025 14:09:47 -0700 (PDT) X-Received: by 2002:a05:651c:211b:b0:30b:b9e4:13c5 with SMTP id 38308e7fff4ca-30c20648a62mr24249871fa.4.1741727386996; Tue, 11 Mar 2025 14:09:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1741727386; cv=none; d=google.com; s=arc-20240605; b=DwZ0eFG61KUHJ5Adi7r+LsvjD/dBbeFk5yLi0368Jnk4mYr9TdSYSzQJk8z7QC0cCc 3lqGUES5cT9+mYeLMkiirYA1EtNTs6YnstPXO0QkYTHsD741955yUxRWRp0vAoxXmDve ZELzI0Ef+kNbeCjdeOdHzArYk86eMIHBXnrRA/BTu5Fav9jQ1b00wQ3wNaVmf6Z5wwjr wJTJ4leNp8rHmDgihAQsnOOEyzoDxPceDv/RvzJQlBSG8p7nrqhXZ/W+84Tso9l5UGu1 QVSrSNgy+7/EBMh7VaqU69WDD3gnEJ1gQ/dRHVHXiAqT+7Ze5gtoDBs/a0zQAP2IUzbl B4Yw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=feedback-id:content-transfer-encoding:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature; bh=gjM1q9H7D4fGhoWvD0bP26ITHpr42z1FTpT1tsUZiBA=; fh=bxwHoRtzgcBE20fsluyIAvpVkk49eQhu61r0Hn3s3Yc=; b=adt0gCCzXsUSDEWZXGU7fUCOQL3Jw5FIB3Us/I2omUDC3JH3hX0jRXi9/6eRl0VIrZ MGI85Z6no3vRRnHR9bvleifqjPQZ1WZ3pqjB3SevNkUQ5yu11S2NGEfbY+OVEsjVMJVu e8zFsTv1BEcZcj43dcMemkvKHzpCq/BweB2I/GyUSGsBp+kKcMngqquveYu9abjHhEpv W4CnaZZSDrLFbo1Wytx6ylxiGLsTS8XBvGOOiaDiY49QdtWnsyBpeNHYsXgQYZ/NB1zz LeCXxOPWNhaA1cnZwyKITLv/7Byn8RVxFN/YntNfn5dXSZjvW7dKuth0eSXodp2B0si6 GU0w==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=VJCEny8N; spf=pass (google.com: domain of fm-1325773-20250311210946eb56298a2db6c64bcf-jf83_5@rts-flowmailer.siemens.com designates 185.136.65.228 as permitted sender) smtp.mailfrom=fm-1325773-20250311210946eb56298a2db6c64bcf-Jf83_5@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from mta-65-228.siemens.flowmailer.net (mta-65-228.siemens.flowmailer.net. [185.136.65.228]) by gmr-mx.google.com with ESMTPS id 38308e7fff4ca-30be99c911dsi2464761fa.5.2025.03.11.14.09.46 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 Mar 2025 14:09:46 -0700 (PDT) Received-SPF: pass (google.com: domain of fm-1325773-20250311210946eb56298a2db6c64bcf-jf83_5@rts-flowmailer.siemens.com designates 185.136.65.228 as permitted sender) client-ip=185.136.65.228; Received: by mta-65-228.siemens.flowmailer.net with ESMTPSA id 20250311210946eb56298a2db6c64bcf for ; Tue, 11 Mar 2025 22:09:46 +0100 From: "chris.larson via isar-users" To: isar-users@googlegroups.com Cc: Cedric Hombourger , Christopher Larson Subject: [PATCH 1/3] classes: add 'customization' package support Date: Tue, 11 Mar 2025 14:09:36 -0700 Message-ID: <20250311210939.4090-2-chris.larson@siemens.com> In-Reply-To: <20250311210939.4090-1-chris.larson@siemens.com> References: <20250311210939.4090-1-chris.larson@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1325773:519-21489:flowmailer X-Original-Sender: chris.larson@siemens.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=VJCEny8N; spf=pass (google.com: domain of fm-1325773-20250311210946eb56298a2db6c64bcf-jf83_5@rts-flowmailer.siemens.com designates 185.136.65.228 as permitted sender) smtp.mailfrom=fm-1325773-20250311210946eb56298a2db6c64bcf-Jf83_5@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com X-Original-From: chris.larson@siemens.com Reply-To: chris.larson@siemens.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list isar-users@googlegroups.com; contact isar-users+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: isar-users@googlegroups.com X-Google-Group-Id: 914930254986 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , X-Spam-Status: No, score=-4.9 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2,RCVD_IN_RP_CERTIFIED, RCVD_IN_RP_RNBL,RCVD_IN_RP_SAFE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on shymkent.ilbers.de X-TUID: OVLdwAEmI+nt From: Christopher Larson A number of downstream layers have customization dpkg-raw recipes making use of template variables to support build-time settings: add the infrastructure to Isar to help uniformization of such recipes. Settings are often specific to a DISTRO, MACHINE or IMAGE: provide a mechanism to decorate (prefix or suffix) packages being constructed and pulled into the image. This helps use of customization packages in multiconfig builds but also with the deployment of binary package feeds for projects supporting multiple variants. To create a customization package, a recipe must inherit the `dpkg-customization` bbclass. By default, images will inherit the `image-customizations` class, which will install the package for any customizations listed in `CUSTOMIZATIONS`. To add variables to the customization package names, beyond the default DISTRO and MACHINE, add them to `CUSTOMIZATION_VARS` as variable references (`${DISTRO}`, `${MACHINE}`). By default, these variables are appended to the package name, but if they should be prefixed, add them to `CUSTOMIZATION_VARS_PREFIXED`. By default, the `DISTRO` and `MACHINE` variables are used, and the `DISTRO` is prefixed, while the `MACHINE` is suffixed. To enable support for per-image changes, and per-image customization packages, add the image name to `CUSTOMIZATION_FOR_IMAGES`. In the customization package recipe, the `IMAGE` variable will be set to the image name, and the package name will be decorated with the image name. The `IMAGE` will also be added to the `OVERRIDES`, allowing for variable definitions like this in the customization recipe: HOSTNAME:isar-image-ci = "isar-ci" When `CUSTOMIZATION_FOR_IMAGES` is defined, `${IMAGE}` will be implicitly added to `CUSTOMIZATION_VARS`, and the package will be decorated with the image name. Signed-off-by: Christopher Larson --- meta/classes/customization-base.bbclass | 21 +++++++++++++ meta/classes/dpkg-customization.bbclass | 37 +++++++++++++++++++++++ meta/classes/image-customizations.bbclass | 30 ++++++++++++++++++ meta/classes/image.bbclass | 1 + 4 files changed, 89 insertions(+) create mode 100644 meta/classes/customization-base.bbclass create mode 100644 meta/classes/dpkg-customization.bbclass create mode 100644 meta/classes/image-customizations.bbclass diff --git a/meta/classes/customization-base.bbclass b/meta/classes/customization-base.bbclass new file mode 100644 index 00000000..82cad67e --- /dev/null +++ b/meta/classes/customization-base.bbclass @@ -0,0 +1,21 @@ +# Common class for customization packages, used by dpkg-customization.bbclass +# and image-customizations.bbclass. + +LIST_VARIABLES += "CUSTOMIZATIONS CUSTOMIZATION_VARS CUSTOMIZATION_VARS_PREFIXED" + +CUSTOMIZATIONS ?= "" +CUSTOMIZATIONS[doc] = "List of customization packages to be installed in images." + +CUSTOMIZATION_VARS ?= "${DISTRO} ${MACHINE}" +CUSTOMIZATION_VARS[doc] = "List of variables that should be added to customization package names." +CUSTOMIZATION_VARS_IMAGE ?= "${IMAGE}" +CUSTOMIZATION_VARS:append = " ${@d.getVar('CUSTOMIZATION_VARS_IMAGE') if d.getVar('CUSTOMIZATION_FOR_IMAGES').strip() else ''}" + +CUSTOMIZATION_VARS_PREFIXED ?= "${DISTRO}" +CUSTOMIZATION_VARS_PREFIXED[doc] = "List of variables from CUSTOMIZATION_VARS that should be prefixed rather than suffixed to customization package names." + +CUSTOMIZATION_FOR_IMAGES ?= "" +CUSTOMIZATION_FOR_IMAGES[doc] = "List of images that should install the customizations in CUSTOMIZATIONS" + +CUSTOMIZATION_PREFIX ?= "${@'-'.join(var for var in d.getVar('CUSTOMIZATION_VARS').split() if var in d.getVar('CUSTOMIZATION_VARS_PREFIXED'))}" +CUSTOMIZATION_SUFFIX ?= "${@'-'.join(var for var in d.getVar('CUSTOMIZATION_VARS').split() if var not in d.getVar('CUSTOMIZATION_VARS_PREFIXED'))}" diff --git a/meta/classes/dpkg-customization.bbclass b/meta/classes/dpkg-customization.bbclass new file mode 100644 index 00000000..7b8c586b --- /dev/null +++ b/meta/classes/dpkg-customization.bbclass @@ -0,0 +1,37 @@ +inherit dpkg-raw customization-base + +PRE_CUSTOMIZATION_PN := "${PN}" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" +PN =. "${@d.getVar('CUSTOMIZATION_PREFIX') + '-' if d.getVar('CUSTOMIZATION_PREFIX') else ''}" +PN .= "${@'-' + d.getVar('CUSTOMIZATION_SUFFIX') if d.getVar('CUSTOMIZATION_SUFFIX') else ''}" + +BBCLASSEXTEND = "${@' '.join(f'dpkg-customization:{image}' for image in d.getVar('CUSTOMIZATION_FOR_IMAGES').split())}" + +python customization_virtclass_handler() { + orig_pn = d.getVar('PRE_CUSTOMIZATION_PN') + + d = e.data + extend = d.getVar('BBEXTENDCURR') or '' + variant = d.getVar('BBEXTENDVARIANT') or '' + if extend != 'dpkg-customization' or variant == '': + d.appendVar('PROVIDES', f' {orig_pn}') + d.setVar('IMAGE', '') + return + + vars = (d.getVar('CUSTOMIZATION_VARS', expand=False) or '').split() + if '${IMAGE}' not in vars: + return + + images = (d.getVar('CUSTOMIZATION_FOR_IMAGES') or '').split() + if variant not in images: + return + + d.setVar('IMAGE', variant) + if not d.getVar('BPN').endswith(f'-{variant}'): + d.appendVar('BPN', f'-{variant}') + d.appendVar('PROVIDES', f' {orig_pn}-{variant}') + d.appendVar('OVERRIDES', f':{variant}') +} +addhandler customization_virtclass_handler +customization_virtclass_handler[eventmask] = "bb.event.RecipePreFinalise" + diff --git a/meta/classes/image-customizations.bbclass b/meta/classes/image-customizations.bbclass new file mode 100644 index 00000000..996f3fb8 --- /dev/null +++ b/meta/classes/image-customizations.bbclass @@ -0,0 +1,30 @@ +inherit customization-base + +def customization_packages(d): + customizations = d.getVar('CUSTOMIZATIONS').split() + if not customizations: + return '' + + # Use image-specific customization if enabled for this image + images = (d.getVar('CUSTOMIZATION_FOR_IMAGES') or '').split() + image = d.getVar('BPN') + if not images or image not in images: + d.setVar('IMAGE', '') + else: + d.setVar('IMAGE', image) + + prefix = d.getVar('CUSTOMIZATION_PREFIX') + if prefix: + prefix += '-' + + suffix = d.getVar('CUSTOMIZATION_SUFFIX') + if suffix: + suffix = '-customization-' + suffix + else: + suffix = '-customization' + + customizations = [ prefix + package + suffix for package in customizations ] + return ' '.join(customizations) + +CUSTOMIZATION_PACKAGES = "${@ customization_packages(d) }" +IMAGE_INSTALL:append = " ${CUSTOMIZATION_PACKAGES}" diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index 56eca202..d36bb816 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -80,6 +80,7 @@ inherit image-tools-extension inherit image-postproc-extension inherit image-locales-extension inherit image-account-extension +inherit image-customizations # Extra space for rootfs in MB ROOTFS_EXTRA ?= "64" -- 2.47.2 -- You received this message because you are subscribed to the Google Groups "isar-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to isar-users+unsubscribe@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/isar-users/20250311210939.4090-2-chris.larson%40siemens.com.