From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6696398247980695552 X-Received: by 2002:ac2:5601:: with SMTP id v1mr6839582lfd.106.1559128937898; Wed, 29 May 2019 04:22:17 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a2e:651a:: with SMTP id z26ls234919ljb.1.gmail; Wed, 29 May 2019 04:22:17 -0700 (PDT) X-Google-Smtp-Source: APXvYqxg0aFP6DoOpdZqj1j/IYMqifKOjiRduOLOkgLahVkZIZ3WTRSI2JxpPA+Eq7rx+5FNj+Is X-Received: by 2002:a2e:129b:: with SMTP id 27mr36900487ljs.104.1559128937391; Wed, 29 May 2019 04:22:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559128937; cv=none; d=google.com; s=arc-20160816; b=HpRX756iRBaX5lZ57OLoj0WPsR4bwcaNsO9mJcvV6LtJYe+Q7FsIIBIBLd7pTnCvto 3I7vb9w0gIBeUd4IB6RsFIKTHz04yOPv5OFJl8RKR9Kw91cwpQgNJRbwefP65AswsV7t K7qEgYX5aJoo85R4/Hfi2dx8YK8STx9S3ujtKVo78SeVKHV5Iwn7XXS4ysvW0JcfOXCT /w1eBG4QvugzW3gwLnaekz6bomCi58Z/76VSICjC4kH+cRQjJofEntzhFbBbUnWWKUwc pXSOpRBNUrgHQy7mHUA5hoLm4eu9bPtfFmdbTawUI3HiIU4j4/j0hYWAqzvEBHF7VQ4J wB4Q== 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:subject:cc:to:from:date; bh=28Cxoi6piwTzGX0K+q94lTsBwTMKW42oWmaau13ZSpk=; b=ctkSn/4eNUkmrgYmpeVKe9IlUM1FJD9joc2nrtk8Al5pQg2HyMs4MXL5/6ljoOV9+P /hisB9aAq82wfMvLR24WpZo74Uy18rfhQ7wP0lBRAnVPlWLM7h8rWbip8pzjERlQtEUV 2RU8gJuWNyP6TzEMEMRUekldhuWU0Qpddt1aOe5VjCjra0ZMkMm7Ya8D8gm1R2qoCg/l Yas7Xh4DhDpUgdR6YaGSsJqXXwcf/7c/2NA8z6V3XyEdaWDl4CsgK0/zmOL2ELV/QCrd +Wz+rKrds5Hzj/0Pf1ZLJ7r59EFEaGSSxxD2sMXfe1TqFfYWOVzA4SQzYS50jSrm+XvS 0m6w== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of henning.schild@siemens.com designates 194.138.37.39 as permitted sender) smtp.mailfrom=henning.schild@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Return-Path: Received: from lizzard.sbs.de (lizzard.sbs.de. [194.138.37.39]) by gmr-mx.google.com with ESMTPS id p88si548700lja.5.2019.05.29.04.22.17 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 29 May 2019 04:22:17 -0700 (PDT) Received-SPF: pass (google.com: domain of henning.schild@siemens.com designates 194.138.37.39 as permitted sender) client-ip=194.138.37.39; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of henning.schild@siemens.com designates 194.138.37.39 as permitted sender) smtp.mailfrom=henning.schild@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from mail1.sbs.de (mail1.sbs.de [192.129.41.35]) by lizzard.sbs.de (8.15.2/8.15.2) with ESMTPS id x4TBMFlV017657 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 29 May 2019 13:22:16 +0200 Received: from md1za8fc.ad001.siemens.net ([139.25.69.101]) by mail1.sbs.de (8.15.2/8.15.2) with ESMTP id x4TBMFb6017909; Wed, 29 May 2019 13:22:15 +0200 Date: Wed, 29 May 2019 13:22:15 +0200 From: Henning Schild To: "[ext] claudius.heine.ext@siemens.com" Cc: , Claudius Heine Subject: Re: [RFC PATCH 1/1] add minimization image extension Message-ID: <20190529132215.09f61932@md1za8fc.ad001.siemens.net> In-Reply-To: <20190529104506.10508-2-claudius.heine.ext@siemens.com> References: <20190529104506.10508-1-claudius.heine.ext@siemens.com> <20190529104506.10508-2-claudius.heine.ext@siemens.com> X-Mailer: Claws Mail 3.17.3 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-TUID: XRNZY8WdL0RP Hey, looks good! I once had something similar but much less flexible in a transient packages somehwere, uninstalling apt and removing a ton of files. I did use "ncdu" to identify files to look at. And there is https://wiki.debian.org/ReduceDebian with some more ideas. I guess one additional harsh but effective step could be deleting kernel modules and rebuilding depmod. And if an initrd is used, rebuild that as well. Henning Am Wed, 29 May 2019 12:45:06 +0200 schrieb "[ext] claudius.heine.ext@siemens.com" : > 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"