Message ID | 20230803122147.596713-1-Quirin.Gylstorff@siemens.com |
---|---|
State | RFC |
Headers | show |
Series | [RFC] imagetypes_container: Remove unnecessary packages | expand |
On Thu, 2023-08-03 at 14:21 +0200, Quirin Gylstorff wrote: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > Remove unnecessary packages from the container image to save disk > space. > This remove by default the following packages: > - init > - initramfs-tools > - linux-image-<KERNEL_NAME> > - systemd > - systemd-sysv > - udev > > Additional Packages can be removed by adding them to the variable > `CONTAINER_IMAGE_REMOVE_PKGS`. Any news on this? This would be very useful. Felix > > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- > meta/classes/imagetypes_container.bbclass | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/meta/classes/imagetypes_container.bbclass > b/meta/classes/imagetypes_container.bbclass > index bd751280..6e0db186 100644 > --- a/meta/classes/imagetypes_container.bbclass > +++ b/meta/classes/imagetypes_container.bbclass > @@ -11,6 +11,8 @@ USING_CONTAINER = > "${@bb.utils.contains_any('IMAGE_BASETYPES', d.getVar('CONTAIN > > CONTAINER_IMAGE_NAME ?= "${PN}-${DISTRO}-${DISTRO_ARCH}" > CONTAINER_IMAGE_TAG ?= "${PV}-${PR}" > +CONTAINER_IMAGE_REMOVE_PKGS ?= "" > +CONTAINER_IMAGE_REMOVE_PKGS += "init systemd-sysv systemd initramfs- > tools udev ${KERNEL_IMAGE_PKG}" > > python() { > if not d.getVar('USING_CONTAINER') == '1': > @@ -42,6 +44,21 @@ do_containerize() { > > # add root filesystem as the flesh of the skeleton > sudo cp --reflink=auto -a "${rootfs}"/* > "${oci_img_dir}_unpacked/rootfs/" > + > + # cleanup image > + if [ -n "${CONTAINER_IMAGE_REMOVE_PKGS}" ]; then > + RMPKGS=$(sudo -E chroot "${oci_img_dir}_unpacked/rootfs/" \ > + dpkg-query \ > + -f '${Package}\n' \ > + -W ${CONTAINER_IMAGE_REMOVE_PKGS} 2>/dev/null || true) > + fi > + bbdebug 1 "Remove packages ${RMPKGS}" > + if [ -n "${RMPKGS}" ]; then > + sudo -E chroot "${oci_img_dir}_unpacked/rootfs/" \ > + dpkg --purge --force-depends ${RMPKGS} && \ > + apt-get autoremove > + fi > + > # clean-up temporary files > sudo find "${oci_img_dir}_unpacked/rootfs/tmp" -mindepth 1 - > delete >
diff --git a/meta/classes/imagetypes_container.bbclass b/meta/classes/imagetypes_container.bbclass index bd751280..6e0db186 100644 --- a/meta/classes/imagetypes_container.bbclass +++ b/meta/classes/imagetypes_container.bbclass @@ -11,6 +11,8 @@ USING_CONTAINER = "${@bb.utils.contains_any('IMAGE_BASETYPES', d.getVar('CONTAIN CONTAINER_IMAGE_NAME ?= "${PN}-${DISTRO}-${DISTRO_ARCH}" CONTAINER_IMAGE_TAG ?= "${PV}-${PR}" +CONTAINER_IMAGE_REMOVE_PKGS ?= "" +CONTAINER_IMAGE_REMOVE_PKGS += "init systemd-sysv systemd initramfs-tools udev ${KERNEL_IMAGE_PKG}" python() { if not d.getVar('USING_CONTAINER') == '1': @@ -42,6 +44,21 @@ do_containerize() { # add root filesystem as the flesh of the skeleton sudo cp --reflink=auto -a "${rootfs}"/* "${oci_img_dir}_unpacked/rootfs/" + + # cleanup image + if [ -n "${CONTAINER_IMAGE_REMOVE_PKGS}" ]; then + RMPKGS=$(sudo -E chroot "${oci_img_dir}_unpacked/rootfs/" \ + dpkg-query \ + -f '${Package}\n' \ + -W ${CONTAINER_IMAGE_REMOVE_PKGS} 2>/dev/null || true) + fi + bbdebug 1 "Remove packages ${RMPKGS}" + if [ -n "${RMPKGS}" ]; then + sudo -E chroot "${oci_img_dir}_unpacked/rootfs/" \ + dpkg --purge --force-depends ${RMPKGS} && \ + apt-get autoremove + fi + # clean-up temporary files sudo find "${oci_img_dir}_unpacked/rootfs/tmp" -mindepth 1 -delete