From patchwork Wed Aug 20 02:55:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Khang D Nguyen X-Patchwork-Id: 68832 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 8F90FCA0EE6 for ; Wed, 20 Aug 2025 02:56:37 +0000 (UTC) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (NAM11-BN8-obe.outbound.protection.outlook.com [40.107.236.120]) by mx.groups.io with SMTP id smtpd.web10.11269.1755658587961718683 for ; Tue, 19 Aug 2025 19:56:28 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="dkim: body hash did not verify" header.i=@os.amperecomputing.com header.s=selector2 header.b=AWJ2Ytfy; spf=pass (domain: os.amperecomputing.com, ip: 40.107.236.120, mailfrom: khangng@os.amperecomputing.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UlHjl75BKN1SB4evJVmX6vwpdahNYvZ+2AoV5zHbrwc89XbR3ElbIv6vwf0U0c1anU65wWG+WmuwD7L3A9T5uUjpbW+9iI4BALzm5TY2oIgFl65GFMff91ReMBEfHTuGmMRx+jtho4rtAa3NyZPhxpPZRbspx/VDFt2cmKBedmduP0/fOlI1ffwtPPG2py9O/CxSM4dZGB1jOTxcIL3eDa6aVQSR+6K5dvHqEtgoiR6bZUwKUqyni46UuFvvFC9AjOVaiPr/vc672XPIr0QHID8cTNCQ8PTwmerqru7j8/zgackHTXI4hSK//WsNgu9w0if7noEDbOqFSGKErroSTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=u57gszog7PO1YDnkV+wCAvgpAB4X8Od/WA0oNUZAcAA=; b=vEKfAxhHtzZxuAiUTpIfe4NlYU+CU6U9oSa2aDstM8kN4o797X37MNh8YCmNioTatoU2ojzE2F1ikk7qL5fJprWiw/U+Z/llOMa53uUd+PgghXqry8M/SMRSAaeyAES+LNOyOpKzXx4AEXH9FvKuwWahhIUlDMm6DZAofV4mnG1FWZ3mVP2WlvtwZvI2dKx65Dk07+qjgF8JdVXLFm6BC1RE6FcDweq8n88hmhWVB3+OFiBEnKBWcmoVCWR/91VfmNnCS1FOsGcmQHPzaFCHQP30Bt/5I54tvKpmFmm4R4PU3WQkxLI8S+LLdn97Xr5VRiZIv3beYyAS891t80qcPw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=u57gszog7PO1YDnkV+wCAvgpAB4X8Od/WA0oNUZAcAA=; b=AWJ2Ytfy/ygcmqQ551+YAAT0PNWcqbKj34nxZqnWLn0bVAUr0qOKSTNqttKkfVL1jwhduSvgfncy/+qBHxrR2O40Y0nPdVX0JsWkCqq5aC4AX/+nRagINLEyhEsg9oAHbe3Ku/MPuFbTeZy9q+cXpF1JixrfpyKcm3WpNK/LR9Q= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SN6PR01MB4384.prod.exchangelabs.com (2603:10b6:805:ee::11) by CO6PR01MB7434.prod.exchangelabs.com (2603:10b6:303:135::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.24; Wed, 20 Aug 2025 02:56:23 +0000 Received: from SN6PR01MB4384.prod.exchangelabs.com ([fe80::9d63:c258:3b55:1adb]) by SN6PR01MB4384.prod.exchangelabs.com ([fe80::9d63:c258:3b55:1adb%6]) with mapi id 15.20.9031.023; Wed, 20 Aug 2025 02:56:23 +0000 From: Khang D Nguyen To: openembedded-core@lists.openembedded.org CC: Hieu Le , Khang D Nguyen Subject: [PATCH] systemd.bbclass: deduplicate template and instance lines in preset file Date: Wed, 20 Aug 2025 09:55:24 +0700 Message-ID: <20250820025524.1361942-1-khangng@os.amperecomputing.com> X-Mailer: git-send-email 2.47.2 X-ClientProxiedBy: SGAP274CA0005.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:b6::17) To SN6PR01MB4384.prod.exchangelabs.com (2603:10b6:805:ee::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN6PR01MB4384:EE_|CO6PR01MB7434:EE_ X-MS-Office365-Filtering-Correlation-Id: 8d3fac4a-0869-4db0-d87c-08dddf952599 X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|376014|1800799024|366016|38350700014; X-Microsoft-Antispam-Message-Info: Jz1f7mSqZS82Dct6d7kmX5RA70CFzRPWkfyAf5JiF6lM9JeP2p1Mh/yLoTafHVUrWmu1JuNamp/LtnRgA7YKHk4yTEE8hZtok5YZGAKtcRExJBhGkveh3VwqoNIgMu0XTcjCrUqScsiQ48Q6tJJMzlftOxz62qVzkUtnkS+lbv3ZWJeyTJWPJ3n2lLsToZU0+nNJocXmR6wOMhuLkefJTXFo2DJRhW63eN4z3h0fteZdEOPmZH17f00fWt3nAjw13I4Pbu44dpRbGnopLcmJqiP2HJ/oBK7ISC6DfQfdbTQjwUHF+wleJL58hEVANt9buyGZ2s3r+TCvcWqJWzwT5MiU6q6pWbaWlz7NkDGxxAyrfwAeKfCPCHbiZPYfwgR9fcOhBYZUNPt/7/7ksGqK24dH98GNwLq9U7G1r3kFiPX9i6idbVKAUzr5pOQZXY0EnBPUcost6gdGd6XF1dI+ObLBkauqlrdtOpa8vaWfQBlT/jk5+/DuzljJi7VEVVXOE4uav2Tfj5DAn06tf8Di8vcT54nzOK2doUGB2d9DbX55mE9kejbrUHFZ/3EK01lgVaUwR26prtVkrQTX0jrhLbOAz21PRH5dt3UMf7Dhya4VwdzdpcjT2oFz/MgiS7ACW2WxkoMKlmqWkeRGHS7FQu3h8DodNAg+D/O9cSpYprBV0SMDrJPuXvZmDYbuDaZ5ck2025zeFNh2KdHDqGnBaMYOpDP+qoLb9iy46f0BGoFzHq4dF2QvFrVSiOppFcJfwKa9L1V5C8a4UEppsQCddIRqKVb6w801P1jAHYUw7uwFr0PgaFI0xrsF+dX5htqFKioQBZ/TeLczQqbNSZvhvdtH9ULevYxxvZXD1MKvCifMCqHFDuGhDnff8UazjyO33iVj9r8Tiv6KY5KXB2YtB6WqSYUPP3Vn/GymEfxic8Ie6dYAl5NVaL9UFK/jriNs9RIeuEkQ0F0AbB220SIt7XOkODt1nkeJd3HUzhNhQejkbcmjsdfBqgbzv887uFsbHUgi3spOd76zp/nGQFnmDrDtsRFCd8smaIw+F8DY1A+RzpYWTgmqdItUCH0wO0A3Q39KJzwd749zeUgdQ2/Z4bBg9FNzv61u6p+BsLQ8t43xi4vu1dVUJsrPRRCA8DMZ5WiTIzd4uv9GTVaX/jvLpOd7gdIiuXLxwti0at9tSilEtPcpvVA8KKRarwHmP1YSFUMDBfe/1F7y+YWWvBUGZ4S8Q+4aoyUixJeSwwFLYPran9FUcElZ5eDFsg21cZBzJ91zeZ9gnLLFAhgM6QlFc4iy+Tn1B9YpoLfN9jhweVutj5oN7XjxhCNW2buiTQGDJjQDopyS2IPHnYlrYk+AvbaORrS6gVuzVMO5x2f9boSn0PFaHaEFHRNHcx6i1XA1fpb2Aw/mesrKPevc/gZE66ThYIAMjOWW+CSJhIuSlQA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR01MB4384.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(376014)(1800799024)(366016)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: KKmPxbheREGWinSTGZ1heK3rBacorIDRuJqyePuRLQInURF7VvC9aWD6qIj6hbG8Ju9Xx6zA6X5BMQ35V8FHujmDefMtO7tpj/u6f7YfyB5qzAoimtjZS922mFVRgzhUb9CP6vNYOng3VniqOZSGcIOh1NxBg8BTtL3ZQCMojJvlIVsFI4SaN569g7zzXTNGkq67NdWn2uu9zrYE85KAjJL6yu4epogVJEzeKWxHrj+a48oxUjSK5YNyV88kIgehLaXMF6pOZYHWtrq121OxuRJPe1nHlNlLXqPDxK+1bEtr5D4wb7VDQxBJHC3wfSLZacrpcByjHJUZmfsHBruh1UywRXT3HYRotvldgJq1UREC/rjYsaepmDFn1z12O5go5HTCvxFMGrqk2KB+ADHXgHhj3m811ml4jDNho05TN3A4SeDdISkYwgWqvhpiRDTDHktFPxlbWGK1V7diMk5KhfXXm0fHFrFT6VCytdDGG7gDb+FigVbvVpjm/omEapiD5lXzR3rinvNSm1j8ah5K1zp6HhfsM2kDO4dDU2duN1PoTXRDUMHtThcj83cFaM/5WwR5bwzB/gm3iWUUCGqTL1KJFZjFnm+Jjcq6Gnlgyt9Jb2SJfdVCiJacE5x+Knc2e6ffNjpHmdikDKbWyZHmPXyO62rZZIrwC81VKpSLED4uVQ5JmWyCc7L6f70gJYaNlsHNjCuZgYQDgF+/qRC7O+7FYG+L3hwz6t6pg9+H1WnFkZh69sPVg7qTrJBtr2RC+pXokKp5SSwSCtU4r687kZkpMcsrHYOjwWlGtE6Ci1avlpkhL1fREjPQQCKoDks3eo9eq+SYII2aNZ6OmNzgr65p96TL51fx5KH4VQl15iEsILdtCfFkF+WDjU+1tHKy6uY5kdDxRjwsCU21e+71qcc3urHNa5CSWgEAcpryDLMkPu2n2F7ft3MXlthmfYHWJII73Mvr5m1S3tOSVv8LLFMIabydVacdPynU4yxZZaYS3rRulthqyhBXw/LlJ3rL967LyMuWgcsOOgLVXLTSUQWZIK+9qp1QUKCR9PhguV6uAKyDChAdlqottuwOzW4S05A0Btg/4ht15FXBDjid5MWs7PCrlPVcf7qFgG/QANNmDBLdcsgOPjSWdOC4egbnAesm19c7gT7Puh+9+kXa6hK5vU/7NIbc9oJx/QQooD1VAn57FFrz5www5CHcax3BGWcKzXZvH6a5oGLGpZuPHy2F2qQ9/0SpFv/1Kt1Ut8ts5tH8y/kUdhrZ/xYFMaLLXD7IbF3Lnwqx78YrbBAdMZ1Q+oQYawTygmme5c1I4F1cejHhfIdD9xFk8XRI+bEmYCs6deYtTwdf2AJAg/S6lp7JgyaXyLloyEFPpkrLcSaUMdGuA9t/1FP+SgrwEMOqEjMCslHiBnrr9IKetm5SN3hL79vSZN7OB0xfK+ljOpkUYzMAiEsRF7DwWOlSio8lKGVp32rjg1mnV9+H6HJ//If9JcbrpiNuxju/a0/N6dw5K2SsMYlYUhm8cv8R8qyjBWXUcJUz4G1TFfmDe6eyLtid4FM2nZfoEhLtUUrOWycHCWXMMOYkGVSHn5xUZ5x0bYq4tBaIgZqZ0qAqwG75CLOYf7CMwqBkbHlYhuUKw3U= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8d3fac4a-0869-4db0-d87c-08dddf952599 X-MS-Exchange-CrossTenant-AuthSource: SN6PR01MB4384.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2025 02:56:23.3633 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sF3pAxtKAgvXQkakpr7d/zCVd5bqOq2j5jDOqy/IqS3uG6mT44oiWkWXOv6Z3OeSUcLmg5YlRPs0S82zSabxs5UyvU3a+5wghhJIsNH7+hJd1jk0UvuTgOnEZ8YUuzBZ X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR01MB7434 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Wed, 20 Aug 2025 02:56:37 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/222152 If SYSTEMD_SERVICE contains both template and instance names, the preset file will contain two lines: one describing the template name and one describing the instance names. This is problematic because systemd.preset only use the first matching one [1], leading to the instances not getting enabled. For example, openbmc's obmc-console recipe has the following final SYSTEMD_SERVICE variable: ``` SYSTEMD_SERVICE:obmc-console = " \ obmc-console@.service \ obmc-console-ssh@.service \ obmc-console-ssh@2200.service \ " ``` The resulting preset file will contain lines with the same name: ``` enable obmc-console@.service enable obmc-console-ssh@.service enable obmc-console-ssh@.service 2200 ``` Fix this by interpreting the template name as a special case of empty instances. Tested: preset files are generated correctly: ``` enable obmc-console@.service enable obmc-console-ssh@.service 2200 ``` [1]: https://www.freedesktop.org/software/systemd/man/257/systemd.preset.html#Preset%20File%20Format Fixes: f33d9b1f434e ("systemd.bbclass: generate preset for templates") Signed-off-by: Khang D Nguyen --- meta/classes-recipe/systemd.bbclass | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/meta/classes-recipe/systemd.bbclass b/meta/classes-recipe/systemd.bbclass index 12c59647be..0e9f7cfa33 100644 --- a/meta/classes-recipe/systemd.bbclass +++ b/meta/classes-recipe/systemd.bbclass @@ -249,9 +249,12 @@ python systemd_populate_packages() { (servicename, instance, service_type) = re.split('[@.]', service) template_services.setdefault(servicename + '@.' + service_type, []).append(instance) else: - fd.write("%s %s\n" % (action,service)) + template_services.setdefault(service, []) for template, instances in template_services.items(): - fd.write("%s %s %s\n" % (action, template, ' '.join(instances))) + if instances: + fd.write("%s %s %s\n" % (action, template, ' '.join(instances))) + else: + fd.write("%s %s\n" % (action, template)) d.appendVar("FILES:%s" % pkg, ' ' + oe.path.join(d.getVar("systemd_unitdir"), "%s-preset/98-%s.preset" % (prefix, pkg))) # Run all modifications once when creating package