public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
* [RFC PATCH 0/1] Image minimization
@ 2019-05-29 10:45 claudius.heine.ext
  2019-05-29 10:45 ` [RFC PATCH 1/1] add minimization image extension claudius.heine.ext
  2019-05-29 10:56 ` [RFC PATCH 0/1] Image minimization Jan Kiszka
  0 siblings, 2 replies; 6+ messages in thread
From: claudius.heine.ext @ 2019-05-29 10:45 UTC (permalink / raw)
  To: isar-users; +Cc: Claudius Heine

From: Claudius Heine <ch@denx.de>

Hi,

here is a RFC patch that adds a minimization extensions to images.

The basic idea behind this is that it allows to remove specific packages and
files from the root file system in a post-processing step. This is useful in
case there are tight storage space restrictions. It breaks the package
management in multiple different ways and degrees, but the main idea is to
reduce the root file system to a minimal set of files that are necessary for the
device to still perform its function.

I envision the `IMAGE_MINIMIZATION_FEATURES`, `IMAGE_MINIMIZATION_PACKAGES` and
`IMAGE_MINIMIZATION_FILES` to be the user facing interface for this.

While removing packages, I use the dpkg from the buildchroot in order to be
independent from the tools on the image. This also allows to remove dpkg while
still being able to use it.

I would like to hear some input about the general design, before I start
cleaning that up and testing it more intensively.

thanks,
Claudius

Claudius Heine (1):
  add minimization image extension

 .../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

-- 
2.20.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [RFC PATCH 1/1] add minimization image extension
  2019-05-29 10:45 [RFC PATCH 0/1] Image minimization claudius.heine.ext
@ 2019-05-29 10:45 ` claudius.heine.ext
  2019-05-29 11:22   ` Henning Schild
  2019-05-29 10:56 ` [RFC PATCH 0/1] Image minimization Jan Kiszka
  1 sibling, 1 reply; 6+ messages in thread
From: claudius.heine.ext @ 2019-05-29 10:45 UTC (permalink / raw)
  To: isar-users; +Cc: Claudius Heine

From: Claudius Heine <ch@denx.de>

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 <ch@denx.de>
---
 .../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


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [RFC PATCH 0/1] Image minimization
  2019-05-29 10:45 [RFC PATCH 0/1] Image minimization claudius.heine.ext
  2019-05-29 10:45 ` [RFC PATCH 1/1] add minimization image extension claudius.heine.ext
@ 2019-05-29 10:56 ` Jan Kiszka
  1 sibling, 0 replies; 6+ messages in thread
From: Jan Kiszka @ 2019-05-29 10:56 UTC (permalink / raw)
  To: [ext] claudius.heine.ext@siemens.com, isar-users; +Cc: Claudius Heine

On 29.05.19 12:45, [ext] claudius.heine.ext@siemens.com wrote:
> From: Claudius Heine <ch@denx.de>
> 
> Hi,
> 
> here is a RFC patch that adds a minimization extensions to images.
> 
> The basic idea behind this is that it allows to remove specific packages and
> files from the root file system in a post-processing step. This is useful in
> case there are tight storage space restrictions. It breaks the package
> management in multiple different ways and degrees, but the main idea is to
> reduce the root file system to a minimal set of files that are necessary for the
> device to still perform its function.
> 
> I envision the `IMAGE_MINIMIZATION_FEATURES`, `IMAGE_MINIMIZATION_PACKAGES` and
> `IMAGE_MINIMIZATION_FILES` to be the user facing interface for this.
> 
> While removing packages, I use the dpkg from the buildchroot in order to be
> independent from the tools on the image. This also allows to remove dpkg while
> still being able to use it.
> 
> I would like to hear some input about the general design, before I start
> cleaning that up and testing it more intensively.

Looks reasonable from the interface POV. So, users would normally only juggle
with our predefined minimizations features and, thus,
IMAGE_MINIMIZATION_FEATURES. Only very few cases would then require stepping one
level down and fiddle directly with package lists or even individual files.
Would likely make this reasonably convenient.

I would suggest adding a tiny demo image as well, something that only gives you
a shell prompt or so.

Jan

-- 
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [RFC PATCH 1/1] add minimization image extension
  2019-05-29 10:45 ` [RFC PATCH 1/1] add minimization image extension claudius.heine.ext
@ 2019-05-29 11:22   ` Henning Schild
  2019-05-29 11:28     ` Henning Schild
  2019-05-29 11:29     ` Jan Kiszka
  0 siblings, 2 replies; 6+ messages in thread
From: Henning Schild @ 2019-05-29 11:22 UTC (permalink / raw)
  To: [ext] claudius.heine.ext@siemens.com; +Cc: isar-users, Claudius Heine

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"
<claudius.heine.ext@siemens.com>:

> From: Claudius Heine <ch@denx.de>
> 
> 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 <ch@denx.de>
> ---
>  .../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"


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [RFC PATCH 1/1] add minimization image extension
  2019-05-29 11:22   ` Henning Schild
@ 2019-05-29 11:28     ` Henning Schild
  2019-05-29 11:29     ` Jan Kiszka
  1 sibling, 0 replies; 6+ messages in thread
From: Henning Schild @ 2019-05-29 11:28 UTC (permalink / raw)
  To: [ext] claudius.heine.ext@siemens.com; +Cc: isar-users, Claudius Heine

Am Wed, 29 May 2019 13:22:15 +0200
schrieb "[ext] Henning Schild" <henning.schild@siemens.com>:

> 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.

This one probably is not even worth the effort, because such restricted
devices are rare and will die out soon (fingers crossed). And they will
likely get a custom kernel anyways.

But i would suggest the demo image to use a custom minimal kernel. So
we can just "du -sh" that rootfs when someone asks how small you can
get.

Henning

> Henning
> 
> Am Wed, 29 May 2019 12:45:06 +0200
> schrieb "[ext] claudius.heine.ext@siemens.com"
> <claudius.heine.ext@siemens.com>:
> 
> > From: Claudius Heine <ch@denx.de>
> > 
> > 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 <ch@denx.de>
> > ---
> >  .../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"  
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [RFC PATCH 1/1] add minimization image extension
  2019-05-29 11:22   ` Henning Schild
  2019-05-29 11:28     ` Henning Schild
@ 2019-05-29 11:29     ` Jan Kiszka
  1 sibling, 0 replies; 6+ messages in thread
From: Jan Kiszka @ 2019-05-29 11:29 UTC (permalink / raw)
  To: [ext] Henning Schild, [ext] claudius.heine.ext@siemens.com
  Cc: isar-users, Claudius Heine

On 29.05.19 13:22, [ext] Henning Schild wrote:
> 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.

Well, kernel modules is a topic for custom kernels - if you customize, you don't
need to delete. But deleting initrds is indeed a nice reusable pattern. Most
systems with custom kernels have no need for them anyway.

Jan

-- 
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-05-29 11:29 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-29 10:45 [RFC PATCH 0/1] Image minimization claudius.heine.ext
2019-05-29 10:45 ` [RFC PATCH 1/1] add minimization image extension claudius.heine.ext
2019-05-29 11:22   ` Henning Schild
2019-05-29 11:28     ` Henning Schild
2019-05-29 11:29     ` Jan Kiszka
2019-05-29 10:56 ` [RFC PATCH 0/1] Image minimization Jan Kiszka

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox