mbox series

[v4,0/5] Introduce container fetcher and pre-loader

Message ID cover.1721407122.git.jan.kiszka@siemens.com
Headers show
Series Introduce container fetcher and pre-loader | expand

Message

Jan Kiszka July 19, 2024, 4:38 p.m. UTC
We noticed internally that there are at least 3 implementations for
solving the task of pre-loading container images into isar-built base
systems, may it be that the images are not publicly available or the
device is only poorly connected, if at all. This series tries to solve
the task generically - hopefully.

Changes in v4
 - fetch per architecture, no longer full multi-arch
 - directly archive and compress in download task
 - use hard links where possible to reduce disk usage
 - always use zstd, remove configurability

Changes in v3:
 - do not compress container deb packages [Benedikt]
 - fix various spelling issues in the doc [Adriaan, Benedikt]

Changes in v2:
 - switch to open-coded unpack before loading
 - switch to zstd as default compression
 - use default compression settings from bitbake.conf
 - add support for delete-after-load (opt-in)
 - factor out fetched container installation into separate task
   (should make self-built container packaging easier)
 - use BPN instead of PN
 - add "Requires" to systemd service
 - use PACKAGE_ARCH to select container arch (rather than DISTRO_ARCH)
 - add CI test
 - add documentation

Jan

Jan Kiszka (5):
  Introduce fetcher from container registries
  container-loader: Introduce helper to load container images into local
    registry
  meta-isar: Add demo packages for installing prebuilt containers
  ci: Add test cases for container fetching and loading
  doc: Describe how to use the container fetcher and loader

 doc/user_manual.md                            | 58 +++++++++++++
 kas/package/Kconfig                           | 19 ++++
 kas/package/pkg_prebuilt-docker-img.yaml      |  9 ++
 kas/package/pkg_prebuilt-podman-img.yaml      |  9 ++
 .../prebuilt-docker-img_0.1.bb                | 12 +++
 .../prebuilt-podman-img_0.1.bb                | 10 +++
 .../recipes-core/images/isar-image-ci.bb      |  2 +
 meta/classes/dpkg-base.bbclass                |  6 ++
 meta/lib/container_fetcher.py                 | 86 +++++++++++++++++++
 .../container-loader/container-loader.inc     | 73 ++++++++++++++++
 .../container-loader/docker-loader.inc        | 10 +++
 .../files/container-loader.service.tmpl       | 12 +++
 .../files/container-loader.sh.tmpl            | 18 ++++
 .../container-loader/podman-loader.inc        | 10 +++
 testsuite/citest.py                           | 21 +++++
 15 files changed, 355 insertions(+)
 create mode 100644 kas/package/pkg_prebuilt-docker-img.yaml
 create mode 100644 kas/package/pkg_prebuilt-podman-img.yaml
 create mode 100644 meta-isar/recipes-app/prebuilt-container/prebuilt-docker-img_0.1.bb
 create mode 100644 meta-isar/recipes-app/prebuilt-container/prebuilt-podman-img_0.1.bb
 create mode 100644 meta/lib/container_fetcher.py
 create mode 100644 meta/recipes-support/container-loader/container-loader.inc
 create mode 100644 meta/recipes-support/container-loader/docker-loader.inc
 create mode 100644 meta/recipes-support/container-loader/files/container-loader.service.tmpl
 create mode 100755 meta/recipes-support/container-loader/files/container-loader.sh.tmpl
 create mode 100644 meta/recipes-support/container-loader/podman-loader.inc

Comments

Uladzimir Bely Aug. 8, 2024, 6:35 a.m. UTC | #1
On Fri, 2024-07-19 at 18:38 +0200, 'Jan Kiszka' via isar-users wrote:
> We noticed internally that there are at least 3 implementations for
> solving the task of pre-loading container images into isar-built base
> systems, may it be that the images are not publicly available or the
> device is only poorly connected, if at all. This series tries to
> solve
> the task generically - hopefully.
> 
> Changes in v4
>  - fetch per architecture, no longer full multi-arch
>  - directly archive and compress in download task
>  - use hard links where possible to reduce disk usage
>  - always use zstd, remove configurability
> 
> Changes in v3:
>  - do not compress container deb packages [Benedikt]
>  - fix various spelling issues in the doc [Adriaan, Benedikt]
> 
> Changes in v2:
>  - switch to open-coded unpack before loading
>  - switch to zstd as default compression
>  - use default compression settings from bitbake.conf
>  - add support for delete-after-load (opt-in)
>  - factor out fetched container installation into separate task
>    (should make self-built container packaging easier)
>  - use BPN instead of PN
>  - add "Requires" to systemd service
>  - use PACKAGE_ARCH to select container arch (rather than
> DISTRO_ARCH)
>  - add CI test
>  - add documentation
> 
> Jan
> 
> Jan Kiszka (5):
>   Introduce fetcher from container registries
>   container-loader: Introduce helper to load container images into
> local
>     registry
>   meta-isar: Add demo packages for installing prebuilt containers
>   ci: Add test cases for container fetching and loading
>   doc: Describe how to use the container fetcher and loader
> 
>  doc/user_manual.md                            | 58 +++++++++++++
>  kas/package/Kconfig                           | 19 ++++
>  kas/package/pkg_prebuilt-docker-img.yaml      |  9 ++
>  kas/package/pkg_prebuilt-podman-img.yaml      |  9 ++
>  .../prebuilt-docker-img_0.1.bb                | 12 +++
>  .../prebuilt-podman-img_0.1.bb                | 10 +++
>  .../recipes-core/images/isar-image-ci.bb      |  2 +
>  meta/classes/dpkg-base.bbclass                |  6 ++
>  meta/lib/container_fetcher.py                 | 86
> +++++++++++++++++++
>  .../container-loader/container-loader.inc     | 73 ++++++++++++++++
>  .../container-loader/docker-loader.inc        | 10 +++
>  .../files/container-loader.service.tmpl       | 12 +++
>  .../files/container-loader.sh.tmpl            | 18 ++++
>  .../container-loader/podman-loader.inc        | 10 +++
>  testsuite/citest.py                           | 21 +++++
>  15 files changed, 355 insertions(+)
>  create mode 100644 kas/package/pkg_prebuilt-docker-img.yaml
>  create mode 100644 kas/package/pkg_prebuilt-podman-img.yaml
>  create mode 100644 meta-isar/recipes-app/prebuilt-
> container/prebuilt-docker-img_0.1.bb
>  create mode 100644 meta-isar/recipes-app/prebuilt-
> container/prebuilt-podman-img_0.1.bb
>  create mode 100644 meta/lib/container_fetcher.py
>  create mode 100644 meta/recipes-support/container-loader/container-
> loader.inc
>  create mode 100644 meta/recipes-support/container-loader/docker-
> loader.inc
>  create mode 100644 meta/recipes-support/container-
> loader/files/container-loader.service.tmpl
>  create mode 100755 meta/recipes-support/container-
> loader/files/container-loader.sh.tmpl
>  create mode 100644 meta/recipes-support/container-loader/podman-
> loader.inc
> 
> -- 
> 2.43.0
> 

Applied to next (w/o patch 4 for CI), thanks.