From patchwork Wed Nov 5 12:12:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Quirin Gylstorff X-Patchwork-Id: 4549 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Wed, 05 Nov 2025 13:14:17 +0100 X-Sieve: CMU Sieve 2.4 Received: from mail-lf1-f61.google.com (mail-lf1-f61.google.com [209.85.167.61]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 5A5CEF0i018895 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 5 Nov 2025 13:14:15 +0100 Received: by mail-lf1-f61.google.com with SMTP id 2adb3069b0e04-59436279838sf1767824e87.0 for ; Wed, 05 Nov 2025 04:14:15 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1762344846; cv=pass; d=google.com; s=arc-20240605; b=SoGreAUfDpvLpMcgVfx2DDt+HE6jNW0NqhP8x+ne0hOp6cvXmTvLt1C+YaBDH28l6e zqnnAsqwqgZKwa0gygBdrEC3YzZiE2b2EHBYZFEZ4uoPbaEPrDLJZiu0CSc/eS+qYYGC ioGU2QH2OQSjFn2JlCDx9g5hPWfWPho87qdtyrvYK/MRNgH3or71uUICfaC6zN8FamaE Bm7Dn+DWEg5LiQfGouvs9zxzAiU/jvo9smmZspHeaj7jJwuMlGO0PyWXYtQtzTDOiXJV vAJB+qNwwcPuiqFLwvsNAz8eGz8Lmjxocak2vkTScJy1JTNMC0fnrnZU0phKxzNIb9Gg vHPQ== 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:to:from :dkim-signature; bh=mMd4mC27XwEySK2xWe1ttRl5STQbaHuoGhOJ1HVyIg4=; fh=DPPm6I1TNMZlNC4PXeUYZhkjNAjx8TmFSv+YpqXYvsA=; b=bWmMf6hVX6na4ua/eUxvjtlg4xGnbWCYGYQweqnUIb6meZDwUUw7uAUYVYQUNLri3q L8cqR+GtbRavBBJFhx1VegVtN4kSyxaP/TnI4zDoEV0pOnN3gRIWH4pAUvn6/syjF9gY rha/jGtq7dAXVsuU7DJwmElCarMIuOlxNoJLlqI7XYiyPBGZOgHYDUNkrdubNmRJgvuF 2S6/2ttIbOeRaeFcXujDUfszp0NBXrNUNGxWl1ogO9dtA5mmJTOeFud5vAo9xOAZFblD lbcY54s/tOXV1+DKGshAOQ4lX+nehdmzriZ43UT3i9eVNvpfjkx3sE0+k1bzEZX6AQse 0gmg==; darn=isar-build.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=bV+cxZGC; spf=pass (google.com: domain of fm-51332-202511051214029c8a3f866900020732-2vxwt3@rts-flowmailer.siemens.com designates 185.136.64.225 as permitted sender) smtp.mailfrom=fm-51332-202511051214029c8a3f866900020732-2vxWT3@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=1762344846; x=1762949646; darn=isar-build.org; 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:to:from :from:to:cc:subject:date:message-id:reply-to; bh=mMd4mC27XwEySK2xWe1ttRl5STQbaHuoGhOJ1HVyIg4=; b=IGwrkytuIuwMVdbXT63PZrPlPsY+gYehNxJIyuhfzz+kcEM/V/P8iwMoHaivWp0jQ+ MDID/TsLAdu4ZsjtfTZ2Z0hsYNvsFKhBnERk9Oq6fk+tsrGY13G4UmWwUuJX8zmvzp6k uE28n1gIiOxbeBCBHoDiuMFUrvWQrPX03EGWSiFoJ+2KewW8/SFhMdifs52Vp5W6EtTo 40xJPBdudfd7Nvd5ioT7dyC9fbb2qtR7Bwo+gyYw+2cJuKoOWWAxTF8R1HLKA2PhLxcv TBR1HG4CybCeX7GqcSnasQ4X46gH1NJxwPQ5c7KIOqhxjLvXjQ19pj2SXUeuAWchX7E7 nBWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762344846; x=1762949646; 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:to:from :x-beenthere:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=mMd4mC27XwEySK2xWe1ttRl5STQbaHuoGhOJ1HVyIg4=; b=o5qNS5PYhVVkUS6tYBJTQGPF4lSCuk4mEIk/FU9pWIa99L3FfTNq2fsvRxn3oA44zg cMfycxd2QAz3BTOWLuw33q1GUtlqnUdYmbkDXUiTRA4/zPadO2aNFbnZx1xzeZ/ViMud +dlo2U+j3xXAXRpwT9ZHb/9+hnuWF0PB3uanpVsvrS5ICZWNw3j3iIXoYzrj8LafTs0e tfX391zZQo9xDIOR7h7+8QK4ZbV5xrtQAjKkFYPhn/OC2l4kyHTOJZzJGcslViXMzGHa 2K8XUlDczgC8HA+eI0ACny5m9MdM3i7Oyh+9dFwo6523OHzL7JvJ7V0dLI0QjGomFW54 KVfQ== X-Forwarded-Encrypted: i=2; AJvYcCXPlPKY2KPFlzqWMxKUJpCD6fu9SkLgV6STWKYfGB7A5ZCsjOwUabUW12Iaf37RbgfSHjnUMCU=@isar-build.org X-Gm-Message-State: AOJu0Yxy/VEs/Z9vBY/dQwWAITNZ903IITKdWguEbvH+aNJA9f3u4mrX TJuFXnWKpuIlqYGNxwmSNLEvoJ4zMEn4gRIMkEEQPwbUvXpikV+bMLdO X-Google-Smtp-Source: AGHT+IHnO3TQ3F7G7W8YJn40nVOvmCZZcDUbNJmMrGyeU6q9o/0e4RkRO5lpk6H0xRfqEWO/68W0Nw== X-Received: by 2002:a05:6512:b17:b0:583:903e:b5a4 with SMTP id 2adb3069b0e04-5943d8058d4mr874103e87.46.1762344846388; Wed, 05 Nov 2025 04:14:06 -0800 (PST) X-BeenThere: isar-users@googlegroups.com; h="Ae8XA+Zj+9n8646n1LHOpVdUPPCEkqqUjalf+LWHnd/bLQwzDw==" Received: by 2002:a05:6512:63d5:20b0:594:2bb1:82cc with SMTP id 2adb3069b0e04-5942bb1867dls873915e87.2.-pod-prod-05-eu; Wed, 05 Nov 2025 04:14:02 -0800 (PST) X-Received: by 2002:a05:6512:3c88:b0:592:f330:205 with SMTP id 2adb3069b0e04-5943d771b9cmr827954e87.1.1762344842546; Wed, 05 Nov 2025 04:14:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1762344842; cv=none; d=google.com; s=arc-20240605; b=R0ae0kHqzTDx7DpZi+D7OdxCmB9JB3fwK2HUJvNBbmxxZ8yOJ/xlo94MELO0hP4Juk wfe34obt86kHMzyh/2XIewiwVxSxW1Qxdn2Wg3W/IQOtkRY1QKO74SBbcdYo19ayw/7D t4Ywraw78hoDjv/drLSetLCIevtXGjdgD1ljQTX2zIcDPuaouOXWFllwf7uM0dkonJZn /qAOPTs3oYRozHaCJ9eK38G0EIGTo3J9+KO0R4oTe5405rlmhD0KBnwyYVSEEJP5cZ4q vfdg50qr4mWc9YFwo2ycj/Q1Lmnz8oUWe6BQ8XCQxK63HgB7cl85yxFSh4DwUfGf9gzh d0ww== 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:to:from:dkim-signature; bh=1/qIwziwHg8z62T6DMmIIBMDQOB6VYqEs2nmRCuML14=; fh=pD9NMAE6punlmxDz2SM7DMFwkWrKOHAvTYxfub7CxRs=; b=Yxa4aJn6woOCywj81krrwPh68zlturS6DUohLjGzEV1MtyCR3eCGEIKeDQzJw4Ohis +2gocAbp2cf3zEztpyY/9rDziOhdkqQgftZIDeJlqokF9oGfzMQF92wC10BnG5Vw8AtE +uJK9vz1dksu1BF4d2Ew5dHijMGjrZ9BvzdIuPFdcKLHAxS4/R27s5Y2ws90VnYiI5EG rFsR6HMruk0CeDJm1K6PUCsrlS2gCFWZuIiLqZv3zMYenWNsFLBI3LTo+Mw0SJv7bkZY ht+YKiwp1hKw86g7asBAJKTK5cfeuuWRXTCShfNsR8YCyhKNRC/0zPlw3X7lGzayj9Jz DFfw==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=bV+cxZGC; spf=pass (google.com: domain of fm-51332-202511051214029c8a3f866900020732-2vxwt3@rts-flowmailer.siemens.com designates 185.136.64.225 as permitted sender) smtp.mailfrom=fm-51332-202511051214029c8a3f866900020732-2vxWT3@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from mta-64-225.siemens.flowmailer.net (mta-64-225.siemens.flowmailer.net. [185.136.64.225]) by gmr-mx.google.com with ESMTPS id 2adb3069b0e04-594342db21dsi97287e87.0.2025.11.05.04.14.02 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Nov 2025 04:14:02 -0800 (PST) Received-SPF: pass (google.com: domain of fm-51332-202511051214029c8a3f866900020732-2vxwt3@rts-flowmailer.siemens.com designates 185.136.64.225 as permitted sender) client-ip=185.136.64.225; Received: by mta-64-225.siemens.flowmailer.net with ESMTPSA id 202511051214029c8a3f866900020732 for ; Wed, 05 Nov 2025 13:14:02 +0100 X-Patchwork-Original-From: "'Quirin Gylstorff' via isar-users" From: Quirin Gylstorff To: isar-users@googlegroups.com, jan.kiszka@siemens.com, felix.moessbauer@siemens.com, cedric.hombourger@siemens.com Subject: [PATCH v7 11/13] Add dracut module helper Date: Wed, 5 Nov 2025 13:12:42 +0100 Message-ID: <20251105121350.114449-12-Quirin.Gylstorff@siemens.com> In-Reply-To: <20251105121350.114449-1-Quirin.Gylstorff@siemens.com> References: <20251105121350.114449-1-Quirin.Gylstorff@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-51332:519-21489:flowmailer X-Original-Sender: quirin.gylstorff@siemens.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=bV+cxZGC; spf=pass (google.com: domain of fm-51332-202511051214029c8a3f866900020732-2vxwt3@rts-flowmailer.siemens.com designates 185.136.64.225 as permitted sender) smtp.mailfrom=fm-51332-202511051214029c8a3f866900020732-2vxWT3@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com X-Original-From: Quirin Gylstorff Reply-To: Quirin Gylstorff 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-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= From: Quirin Gylstorff This adds a helper class similar to initramfs-hook to generate a dracut module based on dpkg-raw. Signed-off-by: Quirin Gylstorff --- meta/classes-recipe/dracut-module.bbclass | 87 +++++++++++++++++++ .../dracut-module/files/module-setup.sh.tmpl | 42 +++++++++ 2 files changed, 129 insertions(+) create mode 100644 meta/classes-recipe/dracut-module.bbclass create mode 100644 meta/recipes-initramfs/dracut-module/files/module-setup.sh.tmpl diff --git a/meta/classes-recipe/dracut-module.bbclass b/meta/classes-recipe/dracut-module.bbclass new file mode 100644 index 00000000..364fb5b4 --- /dev/null +++ b/meta/classes-recipe/dracut-module.bbclass @@ -0,0 +1,87 @@ +# +# Copyright (c) Siemens AG, 2025 +# +# Authors: +# Quirin Gylstorff +# +# SPDX-License-Identifier: MIT +# + +inherit dpkg-raw + +FILESPATH:append = ":${LAYERDIR_core}/recipes-initramfs/dracut-module/files" + +DPKG_ARCH = "all" + +DRACUT_MODULE_SETUP = "module-setup.sh" +SRC_URI:append = "file://${DRACUT_MODULE_SETUP}.tmpl" + +DRACUT_MODULE_NO ??= "50" +DRACUT_MODULE_NAME ?= "${@ d.getVar('PN')[7:] if d.getVar('PN').startswith('dracut-') else d.getVAR('PN')}" + +DEBIAN_DEPENDS = "dracut-core" +DRACUT_MODULE_PATH = "${D}/usr/lib/dracut/modules.d/${DRACUT_MODULE_NO}${DRACUT_MODULE_NAME}/" + +DRACUT_REQUIRED_BINARIES ??= "" +DRACUT_MODULE_DEPENDENCIES ??= "" +DRACUT_CHECK_CONTENT_FILE_NAME ??= "" +DRACUT_DEPENDS_CONTENT_FILE_NAME ??= "" +DRACUT_CMDLINE_CONTENT_FILE_NAME ??= "" +DRACUT_INSTALL_CONTENT_FILE_NAME ??= "" +DRACUT_INSTALLKERNEL_CONTENT_FILE_NAME ??= "" + +def add_file_if_variable_is_set(d, variable_name, prefix): + variable = d.getVar(variable_name) or '' + if variable: + return f"{prefix}{variable}" + return '' + +def replace_marker_with_file_content(template_file, content_file, marker): + with open(template_file, 'r') as template_fd: + tmpl_content = template_fd.read() + + with open(content_file, 'r') as content_fd: + content = content_fd.read() + + new_tpml_content = tmpl_content.replace(marker, content) + with open(template_file, 'w') as tmpl_fd: + tmpl_fd.write(new_tpml_content) + +SRC_URI:append = " ${@ add_file_if_variable_is_set(d, 'DRACUT_CHECK_CONTENT_FILE_NAME', 'file://')} \ + ${@ add_file_if_variable_is_set(d, 'DRACUT_DEPENDS_CONTENT_FILE_NAME', 'file://')} \ + ${@ add_file_if_variable_is_set(d, 'DRACUT_CMDLINE_CONTENT_FILE_NAME', 'file://')} \ + ${@ add_file_if_variable_is_set(d, 'DRACUT_INSTALL_CONTENT_FILE_NAME', 'file://')} \ + ${@ add_file_if_variable_is_set(d, 'DRACUT_INSTALLKERNEL_CONTENT_FILE_NAME', 'file://')}" + +TEMPLATE_FILES:append = " \ + ${DRACUT_MODULE_SETUP}.tmpl \ + " + +TEMPLATE_VARS:append = " \ + DRACUT_REQUIRED_BINARIES \ + DRACUT_MODULE_DEPENDENCIES \ + " +python do_add_additional_dracut_configuration() { + workdir = os.path.normpath(d.getVar('WORKDIR')) + module_setup = d.getVar('DRACUT_MODULE_SETUP') + module_setup_tpml = f"{module_setup}.tmpl" + content_file_name_to_marker = { + "DRACUT_CHECK_CONTENT_FILE_NAME" : "# ISAR_DRACUT_CHECK", + "DRACUT_DEPENDS_CONTENT_FILE_NAME" : "# ISAR_DRACUT_DEPENDS", + "DRACUT_CMDLINE_CONTENT_FILE_NAME" : "# ISAR_DRACUT_CMDLINE", + "DRACUT_INSTALL_CONTENT_FILE_NAME" : "# ISAR_DRACUT_INSTALL", + "DRACUT_INSTALLKERNEL_CONTENT_FILE_NAME" : "# ISAR_DRACUT_KERNELINSTALL" + } + + for var_name, marker in content_file_name_to_marker.items(): + file_name = d.getVar(var_name) or '' + if file_name: + replace_marker_with_file_content(f"{workdir}/{module_setup_tpml}", + f"{workdir}/{file_name}", marker) +} +addtask add_additional_dracut_configuration before do_transform_template after do_patch + +do_install[cleandirs] += "${DRACUT_MODULE_PATH}" +do_install:append() { + install -m 770 ${WORKDIR}/${DRACUT_MODULE_SETUP} ${DRACUT_MODULE_PATH} +} diff --git a/meta/recipes-initramfs/dracut-module/files/module-setup.sh.tmpl b/meta/recipes-initramfs/dracut-module/files/module-setup.sh.tmpl new file mode 100644 index 00000000..be0f4c54 --- /dev/null +++ b/meta/recipes-initramfs/dracut-module/files/module-setup.sh.tmpl @@ -0,0 +1,42 @@ +#!/bin/bash + +# called by dracut +check() { + + # If the binary(s) requirements are not fulfilled the module can't be installed. + require_binaries \ + ${DRACUT_REQUIRED_BINARIES} \ + || return 1 + # ISAR_DRACUT_CHECK + return 0 + +} + +# Module dependency requirements. +depends() { + echo "${DRACUT_MODULE_DEPENDENCIES}" + # ISAR_DRACUT_DEPENDS + return 0 + +} +installkernel() { + # ISAR_DRACUT_KERNELINSTALL + return 0 +} + +cmdline() { + # ISAR_DRACUT_CMDLINE + return 0 +} + +install() { + for executable in ${DRACUT_REQUIRED_BINARIES}; do + if exec_path=$(command -v $executable 2>/dev/null); then + inst_binary "$exec_path" + else + echo "(ERROR): Unable to copy $executable" >&2 + exit 1 + fi + done + # ISAR_DRACUT_INSTALL +}