From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6696398247980695552 X-Received: by 2002:adf:efc3:: with SMTP id i3mr3001315wrp.45.1559126714851; Wed, 29 May 2019 03:45:14 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a05:600c:1101:: with SMTP id b1ls532936wma.3.canary-gmail; Wed, 29 May 2019 03:45:14 -0700 (PDT) X-Google-Smtp-Source: APXvYqxcmtu4DuU9aAoo7Bety5r0IzD+HUFm5UC/DCkzvaVn6ZG4lGUuJab7652ndeBWYtnaxhSg X-Received: by 2002:a1c:f61a:: with SMTP id w26mr6510645wmc.47.1559126714455; Wed, 29 May 2019 03:45:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559126714; cv=none; d=google.com; s=arc-20160816; b=CbSNif1Bcb+22nJ9EJQZKgaw++jXPiL06BOJNp3u+BU97v9e8RiE4jgupK/v4v6gDV 436+dMctHE+e/dRjxJCWnZNrgXze5RCnAbGApWwSEtYnlfnNsv4ncV3p+ZbvuqX4rl4v V9UjW2OXnEBVWTjWgkk9relW7WSGUyVz7clLTXMpY4D4ADX0Td5XWnfKGy9Z69UWr54E zVBVoVEGd6L28EuMHvzu3QXTkBh1Tbqjqs1gvn1SFFyEfvcKzVwBbA2R6q05KDaKT01B /EjgDNKO+vDkvsibP7QrGe6rUTdl6/H2DV0b5nt6+VQIZ0W3MTiCgS/7Huu82mpVfg6I CvHw== 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=9J2vPLtoDA1bgxKF9ecGZy5K1UMlan+DvIehKCa0p3c=; b=FXM5+laESU6bsa7f9ZUuAKNjYaZbgAmltFTDkqZLIs5xeoIQluFekI3rXSPbEVg2pG DOU+1yvtazAVCIeUK5v3H8SCOhYnbtsGCapcpUc/Yp1IXK3DlHSlpv4FMKuwDEHTdfdr eDV2Q+NwgJ/ck+Xh58Zzp1OGZeuXm4KJkyCYnhPbol5akay6hYD+5vMmePGYfzY1Ibcq 07S+I2Xs5JQo3ZKOWMmBZ9A9p6NAy9VUsp9jx6zca2S5uVMWyFuVykAFxghKgmAO7CPd 3n2GtcI1pr+qkVB1poPwMi08FtqP6pEo2mvgfijrLkZA+Zmmxh5f7YbUkAZJ5lmq7n/A izjA== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of claudius.heine.ext@siemens.com designates 194.138.37.40 as permitted sender) smtp.mailfrom=claudius.heine.ext@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Return-Path: Received: from gecko.sbs.de (gecko.sbs.de. [194.138.37.40]) by gmr-mx.google.com with ESMTPS id z11si63134wmc.2.2019.05.29.03.45.14 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 29 May 2019 03:45:14 -0700 (PDT) Received-SPF: pass (google.com: domain of claudius.heine.ext@siemens.com designates 194.138.37.40 as permitted sender) client-ip=194.138.37.40; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of claudius.heine.ext@siemens.com designates 194.138.37.40 as permitted sender) smtp.mailfrom=claudius.heine.ext@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 gecko.sbs.de (8.15.2/8.15.2) with ESMTPS id x4TAjDMk005627 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 29 May 2019 12:45:13 +0200 Received: from ring.ppmd.siemens.net (linux-ses-ext02.ppmd.siemens.net [139.25.69.232]) by mail2.sbs.de (8.15.2/8.15.2) with ESMTP id x4TAjD8G019027; Wed, 29 May 2019 12:45:13 +0200 From: claudius.heine.ext@siemens.com To: isar-users@googlegroups.com Cc: Claudius Heine Subject: [RFC PATCH 1/1] add minimization image extension Date: Wed, 29 May 2019 12:45:06 +0200 Message-Id: <20190529104506.10508-2-claudius.heine.ext@siemens.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190529104506.10508-1-claudius.heine.ext@siemens.com> References: <20190529104506.10508-1-claudius.heine.ext@siemens.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TUID: Z++Di7ozctCB From: Claudius Heine In case storage space on the device is limited, it is necessary to remove all packages and files that are not strictly needed for the device to perform its function. This minimization feature allows to remove packages and files after the creation of the image and possible break the package management. Signed-off-by: Claudius Heine --- .../recipes-core/images/isar-image-ubi.bb | 2 + .../image-minimizing-extension.bbclass | 80 +++++++++++++++++++ meta/classes/image.bbclass | 1 + meta/classes/rootfs.bbclass | 3 +- 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 meta/classes/image-minimizing-extension.bbclass diff --git a/meta-isar/recipes-core/images/isar-image-ubi.bb b/meta-isar/recipes-core/images/isar-image-ubi.bb index 3b41f23..2971edf 100644 --- a/meta-isar/recipes-core/images/isar-image-ubi.bb +++ b/meta-isar/recipes-core/images/isar-image-ubi.bb @@ -24,3 +24,5 @@ DTB_IMG = "${PP_DEPLOY}/${DTB_FILE}" UBIFS_IMG = "${PP_DEPLOY}/${UBIFS_IMAGE_FILE}" FIT_IMG = "${PP_DEPLOY}/${FIT_IMAGE_FILE}" + +IMAGE_MINIMIZATION_FEATURES += "remove-bug remove-bash-completion remove-manpages remove-info remove-lintian remove-locale remove-apt remove-dpkg remove-doc remove-licenses" diff --git a/meta/classes/image-minimizing-extension.bbclass b/meta/classes/image-minimizing-extension.bbclass new file mode 100644 index 0000000..f26f545 --- /dev/null +++ b/meta/classes/image-minimizing-extension.bbclass @@ -0,0 +1,80 @@ +# This software is a part of ISAR. +# Copyright (C) Siemens AG, 2019 +# +# SPDX-License-Identifier: MIT +# +# This class extends the image.bbclass for minimizing the root file system + +# Features: +# remove-bug +# remove-bash-completion +# remove-manpages +# remove-info +# remove-lintian +# remove-locale +# remove-apt +# remove-dpkg +# remove-doc +# remove-licenses +IMAGE_MINIMIZATION_FEATURES ?= "" + +IMAGE_MINIMIZATION_PACKAGES ?= "" +IMAGE_MINIMIZATION_FILES ?= "" + +IMAGE_MINIMIZATION_FILES += "${@bb.utils.contains('IMAGE_MINIMIZATION_FEATURES', 'remove-bug', '/usr/share/bug', '', d)}" +IMAGE_MINIMIZATION_FILES += "${@bb.utils.contains('IMAGE_MINIMIZATION_FEATURES', 'remove-bash-completion', '/usr/share/bash-completion', '', d)}" +IMAGE_MINIMIZATION_FILES += "${@bb.utils.contains('IMAGE_MINIMIZATION_FEATURES', 'remove-manpages', '/usr/share/man /usr/share/man-db', '', d)}" +IMAGE_MINIMIZATION_FILES += "${@bb.utils.contains('IMAGE_MINIMIZATION_FEATURES', 'remove-info', '/usr/share/info', '', d)}" +IMAGE_MINIMIZATION_FILES += "${@bb.utils.contains('IMAGE_MINIMIZATION_FEATURES', 'remove-lintian', '/usr/share/lintian', '', d)}" +IMAGE_MINIMIZATION_FILES += "${@bb.utils.contains('IMAGE_MINIMIZATION_FEATURES', 'remove-locale', '/usr/share/locale', '', d)}" +IMAGE_MINIMIZATION_FILES += "${@bb.utils.contains('IMAGE_MINIMIZATION_FEATURES', 'remove-apt', '/var/cache/apt /var/lib/apt /etc/apt', '', d)}" +IMAGE_MINIMIZATION_PACKAGES += "${@bb.utils.contains('IMAGE_MINIMIZATION_FEATURES', 'remove-apt', d.getVar('IMAGE_MINIMIZATION_PACKAGES_APT'), '', d)}" +IMAGE_MINIMIZATION_PACKAGES_APT = 'apt libapt-pkg5.0 debian-archive-keyring' +IMAGE_MINIMIZATION_FILES += "${@bb.utils.contains('IMAGE_MINIMIZATION_FEATURES', 'remove-dpkg', '/var/lib/dpkg /etc/dpkg /etc/dpkg-cross', '', d)}" +IMAGE_MINIMIZATION_PACKAGES += "${@bb.utils.contains('IMAGE_MINIMIZATION_FEATURES', 'remove-dpkg', 'dpkg', '', d)}" +IMAGE_MINIMIZATION_FILES += "${@bb.utils.contains('IMAGE_MINIMIZATION_FEATURES', 'remove-doc', '/usr/share/doc-base', '', d)}" +IMAGE_MINIMIZATION_FILES += "${@bb.utils.contains('IMAGE_MINIMIZATION_FEATURES', 'remove-licenses', '/usr/share/common-licenses', '', d)}" + +ROOTFS_INSTALL_COMMAND += "image_install_minimization" +image_install_minimization[weight] = "5" +image_install_minimization() { + sudo rm -rf '${WORKDIR}/dpkg-admin' + sudo cp -a '${ROOTFSDIR}/var/lib/dpkg' '${WORKDIR}/dpkg-admin' +} + +ROOTFS_POSTPROCESS_COMMAND += "image_postprocess_minimization" + +image_postprocess_minimization() { + image_do_mounts + + sudo mkdir -p '${BUILDROOT_ROOTFS}/dpkg-admin' + mountpoint -q '${BUILDROOT_ROOTFS}/dpkg-admin' || \ + sudo mount --bind '${WORKDIR}/dpkg-admin' '${BUILDROOT_ROOTFS}/dpkg-admin' + + for package in ${IMAGE_MINIMIZATION_PACKAGES}; do + sudo chroot ${BUILDCHROOT_DIR} /usr/bin/dpkg \ + --root='${PP_ROOTFS}' \ + --admindir='${PP_ROOTFS}/dpkg-admin' \ + --force-remove-essential --force-depends -P $package + done + + mountpoint -q '${BUILDROOT_ROOTFS}/dpkg-admin' && + sudo umount -l '${BUILDROOT_ROOTFS}/dpkg-admin' + sudo rmdir '${BUILDROOT_ROOTFS}/dpkg-admin' + + for file in ${IMAGE_MINIMIZATION_FILES}; do + sudo rm -rf '${IMAGE_ROOTFS}/'"$file" + done + + if [ -n '${@bb.utils.contains('IMAGE_MINIMIZATION_FEATURES', 'remove-doc', '1', '', d)}' ]; then + sudo find '${IMAGE_ROOTFS}/usr/share/doc' -type f \ + \! -regex '${IMAGE_ROOTFS}/usr/share/doc/[^/]+/\(copyright\|CREDITS\|AUTHORS\).*' \ + -delete + fi + + if [ -n '${@bb.utils.contains('IMAGE_MINIMIZATION_FEATURES', 'remove-licenses', '1', '', d)}' ]; then + sudo find '${IMAGE_ROOTFS}/usr/share/doc' -type f \ + -regex '${IMAGE_ROOTFS}/usr/share/doc/[^/]+/\(copyright\|CREDITS\|AUTHORS\).*' \ + -delete + fi +} diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index 5682134..681cdc4 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -67,6 +67,7 @@ inherit image-tools-extension inherit image-postproc-extension inherit image-locales-extension inherit image-account-extension +inherit image-minimizing-extension # Extra space for rootfs in MB ROOTFS_EXTRA ?= "64" diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass index c7e0435..59a431e 100644 --- a/meta/classes/rootfs.bbclass +++ b/meta/classes/rootfs.bbclass @@ -205,7 +205,8 @@ rootfs_postprocess_finalize() { rm -f "${ROOTFSDIR}/etc/apt/sources.list.d/isar-apt.list" rm -f "${ROOTFSDIR}/etc/apt/sources.list.d/base-apt.list" - mv "${ROOTFSDIR}/etc/apt/sources-list" \ + test -e "${ROOTFSDIR}/etc/apt/sources-list" && \ + mv "${ROOTFSDIR}/etc/apt/sources-list" \ "${ROOTFSDIR}/etc/apt/sources.list.d/bootstrap.list" rm -f "${ROOTFSDIR}/etc/apt/sources-list" -- 2.20.1