From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6721684426774806528 X-Received: by 2002:a2e:9b57:: with SMTP id o23mr11086548ljj.67.1565346699534; Fri, 09 Aug 2019 03:31:39 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a2e:6556:: with SMTP id z83ls11007333ljb.11.gmail; Fri, 09 Aug 2019 03:31:38 -0700 (PDT) X-Google-Smtp-Source: APXvYqwIEFzCMa9BLkB1sUKtKYN8Syepg3RARnYpU7wyhcO/CuqpLfPyfVW1eOKhz2BCYTXwA3WM X-Received: by 2002:a2e:9a82:: with SMTP id p2mr11149355lji.64.1565346698833; Fri, 09 Aug 2019 03:31:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565346698; cv=none; d=google.com; s=arc-20160816; b=D1TcFSm4e7zO1iU9zaztDFexyZR/nJ8nsg/8Tf1/atsuPursbY4Ewc42p0D/D+sGDA SHr1QKc5kILZiSRQxcLT415ZoQHMaLjYQdpD/qqUU58jRca/VPZPOIg1DMUzJ9Gun+5k +43tahVqGXD1KKnzv+f2vmE5hz34oqz8MSP6LCreOUDB3jOX4/XKY46rB/eXeIKBD071 B1E/qfx69MLpcqVVSbYGTZUmLF5ndI/wJrdk80suSNs2vCBTwhmJqWy+gMxuyvrwEqn3 bOkP1EK3XlHMQ1N4F+q/SxSV65F01qLtWT56qwrJl0zKC9BZXSsV+TViU8wX7HnZnHzu 3fjA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=zVJM8IRI4LZpwOalCUrZ3t2j0QoBjWfsAfNbQbLe+L4=; b=seIzvuDVAejdmyC5UzPjYm5Y/JtYz6y2ttBTciJQUltkGIrtLASMFsEtSYdHLhd8JY GJcyXPPUMzM6u2D+FYm6nc0mj+Z61N9IMCzg8cZ0Z4KDq/Tk6TN2BeVcSLETMh+cwHnA NKTYzART9zsZJVFk5TH7wWO+7R7M0MqNP8Y+S9fcbcd9nJ5cFvedQ1NpzrNDEq2CBDRj lj8WgovTfjD23MskEWTnjeNFedbFykno6a8X2Zz20U6mDb5epqj7k9sJYAJBHl+dB7Z3 IgKspA4i0X2VgoZ2HflpkcL0QOoAE16y8adprlqjZGuiJ373odufYjaDw7nRJQ8tKnIw SsWA== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of quirin.gylstorff@siemens.com designates 192.35.17.14 as permitted sender) smtp.mailfrom=Quirin.Gylstorff@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Return-Path: Received: from david.siemens.de (david.siemens.de. [192.35.17.14]) by gmr-mx.google.com with ESMTPS id s14si5957747ljg.4.2019.08.09.03.31.38 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 09 Aug 2019 03:31:38 -0700 (PDT) Received-SPF: pass (google.com: domain of quirin.gylstorff@siemens.com designates 192.35.17.14 as permitted sender) client-ip=192.35.17.14; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of quirin.gylstorff@siemens.com designates 192.35.17.14 as permitted sender) smtp.mailfrom=Quirin.Gylstorff@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from mail2.sbs.de (mail2.sbs.de [192.129.41.66]) by david.siemens.de (8.15.2/8.15.2) with ESMTPS id x79AVcvo017146 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 9 Aug 2019 12:31:38 +0200 Received: from debian.ad001.siemens.net ([139.25.68.238]) by mail2.sbs.de (8.15.2/8.15.2) with ESMTP id x79AVbsL003526; Fri, 9 Aug 2019 12:31:37 +0200 From: "Q. Gylstorff" To: isar-users@googlegroups.com Cc: Quirin Gylstorff Subject: [PATCH v3] meta/classes: generate bill of material from image Date: Fri, 9 Aug 2019 12:30:46 +0200 Message-Id: <20190809103046.10493-1-Quirin.Gylstorff@siemens.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <2c58eae5-4d77-776f-3d4e-5fda95dc27d5@siemens.com> References: <2c58eae5-4d77-776f-3d4e-5fda95dc27d5@siemens.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TUID: GAx7BEt8Ka+J From: Quirin Gylstorff To create products it is necessary to have a list of used packages for clearance and to security monitoring. To get a simple list of packages use dpkg-query and generate a list with the following pattern: source name| source version | binary package name | binary version The list is stored in ${IMAGE_FULLNAME}.rootfs.manifest Remove the feature with: ROOTFS_FEATURES_remove = "generate-manifest" Signed-off-by: Quirin Gylstorff --- Changes: v3: Add list of manifest for buildchroot manifest This list can be exdent to add additional output generators v2: use FEATURE instead of own variable .../image-package-list-extension.bbclass | 66 +++++++++++++++++++ meta/classes/image.bbclass | 3 +- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 meta/classes/image-package-list-extension.bbclass diff --git a/meta/classes/image-package-list-extension.bbclass b/meta/classes/image-package-list-extension.bbclass new file mode 100644 index 0000000..11896f1 --- /dev/null +++ b/meta/classes/image-package-list-extension.bbclass @@ -0,0 +1,66 @@ +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2019 +# +# SPDX-License-Identifier: MIT + +MANIFESTS ?= "target build" +MANIFEST_build[rootfs] ?= "/var/lib/dpkg" +MANIFEST_target[rootfs] ?= "${PP_ROOTFS}/var/lib/dpkg" + +def gen_manifests_array(d, listname, entryname, flags, verb_flags=None): + from itertools import chain + + entries = (d.getVar(listname, True) or "").split() + return " ".join( + ":".join( + chain( + (entry,), + ( + (",".join( + ( + d.getVarFlag(entryname + "_" + entry, flag, True) or "" + ).split() + ) if flag not in (verb_flags or []) else ( + d.getVarFlag(entryname + "_" + entry, flag, True) or "" + )).replace(":","=") + for flag in flags + ), + ) + ) + for entry in entries + ) + + +IMAGE_MANIFESTS =+ "${@gen_manifests_array(d, 'MANIFESTS', 'MANIFEST', ['rootfs'])}" + +image_generate_manifest[dirs] = "${DEPLOY_DIR_IMAGE}" +image_generate_manifest() { + image_do_mounts + list='${@" ".join(d.getVar('IMAGE_MANIFESTS', True).split())} ' + while true; do + list_rest="${list#*:* }" + entry="${list%%${list_rest}}" + list="${list_rest}" + + if [ -z "${entry}" ]; then + break + fi + # Add colon to the end of the entry and remove trailing space: + entry="${entry% }:" + + # Decode entries: + name="${entry%%:*}" + entry="${entry#${name}:}" + + rootfs="${entry%%:*}" + entry="${entry#${rootfs}:}" + + + sudo -E chroot ${BUILDCHROOT_DIR} \ + /usr/bin/dpkg-query --admindir="$rootfs" \ + -f '${source:Package}|${source:Version}|${binary:Package}|${Version}\n' -W > \ + ${DEPLOY_DIR_IMAGE}/${IMAGE_FULLNAME}."$name".manifest + done +} +ROOTFS_POSTPROCESS_COMMAND += "${@bb.utils.contains('ROOTFS_FEATURES', 'generate-manifest', 'image_generate_manifest', '', d)}" + diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index ec6bd39..60dd9fb 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -58,7 +58,7 @@ image_do_mounts() { } ROOTFSDIR = "${IMAGE_ROOTFS}" -ROOTFS_FEATURES += "copy-package-cache clean-package-cache finalize-rootfs" +ROOTFS_FEATURES += "copy-package-cache clean-package-cache finalize-rootfs generate-manifest" ROOTFS_PACKAGES += "${IMAGE_PREINSTALL} ${IMAGE_INSTALL}" inherit rootfs @@ -68,6 +68,7 @@ inherit image-tools-extension inherit image-postproc-extension inherit image-locales-extension inherit image-account-extension +inherit image-package-list-extension # Extra space for rootfs in MB ROOTFS_EXTRA ?= "64" -- 2.20.1