mbox series

[v6,0/5] Add support for containerized root filesystems

Message ID 20210309205239.652677-1-silvano.cirujano-cuesta@siemens.com
Headers show
Series Add support for containerized root filesystems | expand

Message

Silvano Cirujano Cuesta March 9, 2021, 10:52 a.m. UTC
This patch series provides support for containerized root filesystems,
for both target images and SDKs.

For containerized target images the new image type `container-img` has
been added.

For containerized SDKs the task `populate_sdk` has been extended.

Containerized root filesystems are easy to distribute and run, enabling
this way following scenarios:
 - Use ISAR to build container images meant to be run only in containers.
 - Use the same ISAR configuration to build images for containers, VMs
   and bare-metal.
 - Easy SDK distribution and "installation".
 - Quickly testing certain applications in the workstation using the
   target root filesystem.

In order to build containerized target root filesystems `IMAGE_TYPE` has
to be `container-img`, additionally the container image format can be
selected with the variable `CONTAINER_FORMATS`. The default format is
`docker-archive`.

In order to build containerized SDKs the variable `SDK_FORMAT` has to
provide any of the supported container formats (e.g. `docker-archive`).
The default format is the legacy non-containerized: `tar_xz`.

It also provides a sample machine, multiconfigs and ci-testing.

More information about its usage is documented in the file
docs/user_manual.md.

A PoC/demo of this functionality (only the SDK part) has been created
based on the project https://github.com/siemens/meta-iot2050.
Jan Kiszka already tested and liked it! =>
https://github.com/siemens/meta-iot2050/issues/86#issuecomment-768907845

Successful builds of both containerized target and SDK are available on
the same PoC project:
 - https://github.com/Silvanoc/meta-iot2050/actions/runs/558311580
 - https://github.com/Silvanoc/meta-iot2050/actions/runs/558311581
and also the resulting images:
 - https://github.com/users/Silvanoc/packages/container/package/meta-iot2050%2Fiot2050-debian-arm64
 - https://github.com/users/Silvanoc/packages/container/package/meta-iot2050%2Fiot2050-debian-sdk-arm64

In order to get a feeling about its usage (you need Docker or Podman),
follow these simple copy&paste instructions:
https://github.com/Silvanoc/meta-iot2050/blob/master/kas/BUILDING-SDK-CONTAINER.md#running-the-sdk
Build instructions are available in the upper part of that document.

Two new dependencies (umoci and skopeo -backporting from bullseye to
buster works easily) are required to create containerized root
filesystems (as specified in the documentation).

Typical container image management actions (e.g. push an image to a
container image regitry) are out of scope. Available tools (Docker,
Skopeo, Buildah, Podman,...) should be used for these actions.

A patch will follow this one to get the dependencies into the container
images being provided by the project
https://github.com/siemens/kas (for `kas-container`, for example).

Silvano Cirujano Cuesta (5):
  classes: add root filesystem containerizing class
  classes: add new image type 'container-img'
  sdk: add support for containerized sdk
  docs: document creation of container images
  ci: add container image testing configurations

 doc/user_manual.md                            | 127 ++++++++++++++++++
 meta-isar/conf/machine/container.conf         |   5 +
 .../conf/multiconfig/container-bullseye.conf  |   4 +
 .../conf/multiconfig/container-buster.conf    |   4 +
 .../conf/multiconfig/container-focal.conf     |   4 +
 .../conf/multiconfig/container-stretch.conf   |   4 +
 meta/classes/container-img.bbclass            |  18 +++
 .../classes/image-container-extension.bbclass |  81 +++++++++++
 meta/classes/image-sdk-extension.bbclass      |  42 +++++-
 meta/classes/image.bbclass                    |   1 +
 scripts/ci_build.sh                           |  11 +-
 11 files changed, 293 insertions(+), 8 deletions(-)
 create mode 100644 meta-isar/conf/machine/container.conf
 create mode 100644 meta-isar/conf/multiconfig/container-bullseye.conf
 create mode 100644 meta-isar/conf/multiconfig/container-buster.conf
 create mode 100644 meta-isar/conf/multiconfig/container-focal.conf
 create mode 100644 meta-isar/conf/multiconfig/container-stretch.conf
 create mode 100644 meta/classes/container-img.bbclass
 create mode 100644 meta/classes/image-container-extension.bbclass

Comments

Anton Mikanovich March 10, 2021, 6:18 a.m. UTC | #1
09.03.2021 23:52, Silvano Cirujano Cuesta wrote:
> This patch series provides support for containerized root filesystems,
> for both target images and SDKs.
>
> For containerized target images the new image type `container-img` has
> been added.
>
> For containerized SDKs the task `populate_sdk` has been extended.
>
> Containerized root filesystems are easy to distribute and run, enabling
> this way following scenarios:
>   - Use ISAR to build container images meant to be run only in containers.
>   - Use the same ISAR configuration to build images for containers, VMs
>     and bare-metal.
>   - Easy SDK distribution and "installation".
>   - Quickly testing certain applications in the workstation using the
>     target root filesystem.
>
> In order to build containerized target root filesystems `IMAGE_TYPE` has
> to be `container-img`, additionally the container image format can be
> selected with the variable `CONTAINER_FORMATS`. The default format is
> `docker-archive`.
>
> In order to build containerized SDKs the variable `SDK_FORMAT` has to
> provide any of the supported container formats (e.g. `docker-archive`).
> The default format is the legacy non-containerized: `tar_xz`.
>
> It also provides a sample machine, multiconfigs and ci-testing.
>
> More information about its usage is documented in the file
> docs/user_manual.md.
>
> A PoC/demo of this functionality (only the SDK part) has been created
> based on the project https://github.com/siemens/meta-iot2050.
> Jan Kiszka already tested and liked it! =>
> https://github.com/siemens/meta-iot2050/issues/86#issuecomment-768907845
>
> Successful builds of both containerized target and SDK are available on
> the same PoC project:
>   - https://github.com/Silvanoc/meta-iot2050/actions/runs/558311580
>   - https://github.com/Silvanoc/meta-iot2050/actions/runs/558311581
> and also the resulting images:
>   - https://github.com/users/Silvanoc/packages/container/package/meta-iot2050%2Fiot2050-debian-arm64
>   - https://github.com/users/Silvanoc/packages/container/package/meta-iot2050%2Fiot2050-debian-sdk-arm64
>
> In order to get a feeling about its usage (you need Docker or Podman),
> follow these simple copy&paste instructions:
> https://github.com/Silvanoc/meta-iot2050/blob/master/kas/BUILDING-SDK-CONTAINER.md#running-the-sdk
> Build instructions are available in the upper part of that document.
>
> Two new dependencies (umoci and skopeo -backporting from bullseye to
> buster works easily) are required to create containerized root
> filesystems (as specified in the documentation).
>
> Typical container image management actions (e.g. push an image to a
> container image regitry) are out of scope. Available tools (Docker,
> Skopeo, Buildah, Podman,...) should be used for these actions.
>
> A patch will follow this one to get the dependencies into the container
> images being provided by the project
> https://github.com/siemens/kas (for `kas-container`, for example).
>
> Silvano Cirujano Cuesta (5):
>    classes: add root filesystem containerizing class
>    classes: add new image type 'container-img'
>    sdk: add support for containerized sdk
>    docs: document creation of container images
>    ci: add container image testing configurations
>
>   doc/user_manual.md                            | 127 ++++++++++++++++++
>   meta-isar/conf/machine/container.conf         |   5 +
>   .../conf/multiconfig/container-bullseye.conf  |   4 +
>   .../conf/multiconfig/container-buster.conf    |   4 +
>   .../conf/multiconfig/container-focal.conf     |   4 +
>   .../conf/multiconfig/container-stretch.conf   |   4 +
>   meta/classes/container-img.bbclass            |  18 +++
>   .../classes/image-container-extension.bbclass |  81 +++++++++++
>   meta/classes/image-sdk-extension.bbclass      |  42 +++++-
>   meta/classes/image.bbclass                    |   1 +
>   scripts/ci_build.sh                           |  11 +-
>   11 files changed, 293 insertions(+), 8 deletions(-)
>   create mode 100644 meta-isar/conf/machine/container.conf
>   create mode 100644 meta-isar/conf/multiconfig/container-bullseye.conf
>   create mode 100644 meta-isar/conf/multiconfig/container-buster.conf
>   create mode 100644 meta-isar/conf/multiconfig/container-focal.conf
>   create mode 100644 meta-isar/conf/multiconfig/container-stretch.conf
>   create mode 100644 meta/classes/container-img.bbclass
>   create mode 100644 meta/classes/image-container-extension.bbclass
>
Thanks for adding CI cases, but Jenkins failed during do_populate_sdk:

14:17:17 + SDK_FORMAT=docker-archive
14:17:17 + BB_ENV_WHITELIST=' SDK_FORMAT'
14:17:17 + bitbake -c do_populate_sdk mc:qemuarm-stretch:isar-image-base
...
14:17:18 ERROR: Unable to parse 
/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb
14:17:18 Traceback (most recent call last):
14:17:18   File 
"/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/parse/ast.py", 
line 382, in 
multi_finalize(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb', 
d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>):
14:17:18          try:
14:17:18     >        finalize(fn, d)
14:17:18          except bb.parse.SkipRecipe as e:
14:17:18   File 
"/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/parse/ast.py", 
line 347, in 
finalize(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb', 
d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>, variant=None):
14:17:18
14:17:18     >        bb.parse.siggen.finalise(fn, d, variant)
14:17:18
14:17:18   File 
"/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/siggen.py", line 
182, in 
SignatureGeneratorBasicHash.finalise(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb', 
d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>, variant=None):
14:17:18              try:
14:17:18     >            taskdeps = self._build_data(fn, d)
14:17:18              except bb.parse.SkipRecipe:
14:17:18   File 
"/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/siggen.py", line 
150, in 
SignatureGeneratorBasicHash._build_data(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb', 
d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>):
14:17:18              ignore_mismatch = 
((d.getVar("BB_HASH_IGNORE_MISMATCH") or '') == '1')
14:17:18     >        tasklist, gendeps, lookupcache = 
bb.data.generate_dependencies(d, self.basewhitelist)
14:17:18
14:17:18   File 
"/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/data.py", line 
371, in generate_dependencies(d=<bb.data_smart.DataSmart object at 
0x7f12917e1c50>, whitelist={'SHELL', 'DEPLOY_DIR', 'PRSERV_DUMPFILE', 
'SDKPKGSUFFIX', 'FILE_DIRNAME', 'TERM', 'COREBASE', 'LICENSE_PATH', 
'STAGING_DIR_HOST', 'SSTATE_PKGARCH', 'PKGDATA_DIR', 'THISDIR', 'USER', 
'EXTERNAL_TOOLCHAIN', 'PWD', 'DL_DIR', 'LOGNAME', 'PATH', 
'BB_LIMITEDDEPS', 'CCACHE', 'BB_TASKHASH', 'CCACHE_DIR', 
'PARALLEL_MAKE', 'BBSERVER', 'PRSERV_LOCKDOWN', 'BBPATH', 
'BB_WORKERCONTEXT', 'PRSERV_HOST', 'WORKDIR', 'FILE', 
'CCACHE_NOHASHDIR', 'PRSERV_DUMPDIR', 'FILESEXTRAPATHS', 'HOME', 
'BUILD_ARCH', 'STAMPCLEAN', 'SSTATE_DIR', 'TMPDIR', 'FILESPATH', 
'STAGING_DIR_TARGET'}):
14:17:18          keys = set(key for key in d if not key.startswith("__"))
14:17:18     >    shelldeps = set(key for key in 
d.getVar("__exportlist", False) if d.getVarFlag(key, "export", False) 
and not d.getVarFlag(key, "unexport", False))
14:17:18          varflagsexcl = d.getVar('BB_SIGNATURE_EXCLUDE_FLAGS')
14:17:18 TypeError: 'NoneType' object is not iterable

Full log: 
http://ci.isar-build.org:8080/job/isar_am_devel_fast/92/consoleFull
Henning Schild March 10, 2021, 6:28 a.m. UTC | #2
Silvano you might want to push this to
https://code.siemens.com/ebsy/debian/isar to make use of our CI.

Henning

Am Tue,  9 Mar 2021 21:52:34 +0100
schrieb "[ext] Silvano Cirujano Cuesta"
<silvano.cirujano-cuesta@siemens.com>:

> This patch series provides support for containerized root filesystems,
> for both target images and SDKs.
> 
> For containerized target images the new image type `container-img` has
> been added.
> 
> For containerized SDKs the task `populate_sdk` has been extended.
> 
> Containerized root filesystems are easy to distribute and run,
> enabling this way following scenarios:
>  - Use ISAR to build container images meant to be run only in
> containers.
>  - Use the same ISAR configuration to build images for containers, VMs
>    and bare-metal.
>  - Easy SDK distribution and "installation".
>  - Quickly testing certain applications in the workstation using the
>    target root filesystem.
> 
> In order to build containerized target root filesystems `IMAGE_TYPE`
> has to be `container-img`, additionally the container image format
> can be selected with the variable `CONTAINER_FORMATS`. The default
> format is `docker-archive`.
> 
> In order to build containerized SDKs the variable `SDK_FORMAT` has to
> provide any of the supported container formats (e.g.
> `docker-archive`). The default format is the legacy
> non-containerized: `tar_xz`.
> 
> It also provides a sample machine, multiconfigs and ci-testing.
> 
> More information about its usage is documented in the file
> docs/user_manual.md.
> 
> A PoC/demo of this functionality (only the SDK part) has been created
> based on the project https://github.com/siemens/meta-iot2050.
> Jan Kiszka already tested and liked it! =>
> https://github.com/siemens/meta-iot2050/issues/86#issuecomment-768907845
> 
> Successful builds of both containerized target and SDK are available
> on the same PoC project:
>  - https://github.com/Silvanoc/meta-iot2050/actions/runs/558311580
>  - https://github.com/Silvanoc/meta-iot2050/actions/runs/558311581
> and also the resulting images:
>  -
> https://github.com/users/Silvanoc/packages/container/package/meta-iot2050%2Fiot2050-debian-arm64
>  -
> https://github.com/users/Silvanoc/packages/container/package/meta-iot2050%2Fiot2050-debian-sdk-arm64
> 
> In order to get a feeling about its usage (you need Docker or Podman),
> follow these simple copy&paste instructions:
> https://github.com/Silvanoc/meta-iot2050/blob/master/kas/BUILDING-SDK-CONTAINER.md#running-the-sdk
> Build instructions are available in the upper part of that document.
> 
> Two new dependencies (umoci and skopeo -backporting from bullseye to
> buster works easily) are required to create containerized root
> filesystems (as specified in the documentation).
> 
> Typical container image management actions (e.g. push an image to a
> container image regitry) are out of scope. Available tools (Docker,
> Skopeo, Buildah, Podman,...) should be used for these actions.
> 
> A patch will follow this one to get the dependencies into the
> container images being provided by the project
> https://github.com/siemens/kas (for `kas-container`, for example).
> 
> Silvano Cirujano Cuesta (5):
>   classes: add root filesystem containerizing class
>   classes: add new image type 'container-img'
>   sdk: add support for containerized sdk
>   docs: document creation of container images
>   ci: add container image testing configurations
> 
>  doc/user_manual.md                            | 127
> ++++++++++++++++++ meta-isar/conf/machine/container.conf         |
> 5 + .../conf/multiconfig/container-bullseye.conf  |   4 +
>  .../conf/multiconfig/container-buster.conf    |   4 +
>  .../conf/multiconfig/container-focal.conf     |   4 +
>  .../conf/multiconfig/container-stretch.conf   |   4 +
>  meta/classes/container-img.bbclass            |  18 +++
>  .../classes/image-container-extension.bbclass |  81 +++++++++++
>  meta/classes/image-sdk-extension.bbclass      |  42 +++++-
>  meta/classes/image.bbclass                    |   1 +
>  scripts/ci_build.sh                           |  11 +-
>  11 files changed, 293 insertions(+), 8 deletions(-)
>  create mode 100644 meta-isar/conf/machine/container.conf
>  create mode 100644 meta-isar/conf/multiconfig/container-bullseye.conf
>  create mode 100644 meta-isar/conf/multiconfig/container-buster.conf
>  create mode 100644 meta-isar/conf/multiconfig/container-focal.conf
>  create mode 100644 meta-isar/conf/multiconfig/container-stretch.conf
>  create mode 100644 meta/classes/container-img.bbclass
>  create mode 100644 meta/classes/image-container-extension.bbclass
>
Silvano Cirujano Cuesta March 10, 2021, 7:18 a.m. UTC | #3
On 10/03/2021 17:18, Anton Mikanovich wrote:
> 09.03.2021 23:52, Silvano Cirujano Cuesta wrote:
>> This patch series provides support for containerized root filesystems,
>> for both target images and SDKs.
>>
>> For containerized target images the new image type `container-img` has
>> been added.
>>
>> For containerized SDKs the task `populate_sdk` has been extended.
>>
>> Containerized root filesystems are easy to distribute and run, enabling
>> this way following scenarios:
>>   - Use ISAR to build container images meant to be run only in containers.
>>   - Use the same ISAR configuration to build images for containers, VMs
>>     and bare-metal.
>>   - Easy SDK distribution and "installation".
>>   - Quickly testing certain applications in the workstation using the
>>     target root filesystem.
>>
>> In order to build containerized target root filesystems `IMAGE_TYPE` has
>> to be `container-img`, additionally the container image format can be
>> selected with the variable `CONTAINER_FORMATS`. The default format is
>> `docker-archive`.
>>
>> In order to build containerized SDKs the variable `SDK_FORMAT` has to
>> provide any of the supported container formats (e.g. `docker-archive`).
>> The default format is the legacy non-containerized: `tar_xz`.
>>
>> It also provides a sample machine, multiconfigs and ci-testing.
>>
>> More information about its usage is documented in the file
>> docs/user_manual.md.
>>
>> A PoC/demo of this functionality (only the SDK part) has been created
>> based on the project https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fsiemens%2Fmeta-iot2050&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980089588%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=%2FB%2BNBKhRCkVNy%2FGEbAiFgEUZBpy0VmhkWdpvNq2wokM%3D&amp;reserved=0.
>> Jan Kiszka already tested and liked it! =>
>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fsiemens%2Fmeta-iot2050%2Fissues%2F86%23issuecomment-768907845&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980089588%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=Os3cY15D2myT5sdPINARBh63iwb3GpE5IlupRGnA0v0%3D&amp;reserved=0
>>
>> Successful builds of both containerized target and SDK are available on
>> the same PoC project:
>>   - https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FSilvanoc%2Fmeta-iot2050%2Factions%2Fruns%2F558311580&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980089588%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=N3DUdGxhNOWlvbatGxopSWPWsMXsXdvsKmIsOh1KtyU%3D&amp;reserved=0
>>   - https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FSilvanoc%2Fmeta-iot2050%2Factions%2Fruns%2F558311581&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980089588%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=cOkongJ%2BtbrEvaquB241NbaK1nQHHiY%2FrgbYHPFAjeo%3D&amp;reserved=0
>> and also the resulting images:
>>   - https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fusers%2FSilvanoc%2Fpackages%2Fcontainer%2Fpackage%2Fmeta-iot2050%252Fiot2050-debian-arm64&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980089588%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=UegaXdy58CUxX8%2FsDnG8cy3V9uy9IUyh8yA00U%2FSaR4%3D&amp;reserved=0
>>   - https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fusers%2FSilvanoc%2Fpackages%2Fcontainer%2Fpackage%2Fmeta-iot2050%252Fiot2050-debian-sdk-arm64&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980089588%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=wss3OIVsS2ulaQ4Jr7ria0wMna6Y0U8Ahp9M3XQU5PM%3D&amp;reserved=0
>>
>> In order to get a feeling about its usage (you need Docker or Podman),
>> follow these simple copy&paste instructions:
>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FSilvanoc%2Fmeta-iot2050%2Fblob%2Fmaster%2Fkas%2FBUILDING-SDK-CONTAINER.md%23running-the-sdk&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980089588%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=%2FiIv247NEqKV%2F2osF6hL5S4QiA6T8yqd5TQpi3EbuGQ%3D&amp;reserved=0
>> Build instructions are available in the upper part of that document.
>>
>> Two new dependencies (umoci and skopeo -backporting from bullseye to
>> buster works easily) are required to create containerized root
>> filesystems (as specified in the documentation).
>>
>> Typical container image management actions (e.g. push an image to a
>> container image regitry) are out of scope. Available tools (Docker,
>> Skopeo, Buildah, Podman,...) should be used for these actions.
>>
>> A patch will follow this one to get the dependencies into the container
>> images being provided by the project
>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fsiemens%2Fkas&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980099579%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=eozG3LQR9pRGIcNiz9a0DckXhkBu8pcas9c%2F%2BWon9mU%3D&amp;reserved=0 (for `kas-container`, for example).
>>
>> Silvano Cirujano Cuesta (5):
>>    classes: add root filesystem containerizing class
>>    classes: add new image type 'container-img'
>>    sdk: add support for containerized sdk
>>    docs: document creation of container images
>>    ci: add container image testing configurations
>>
>>   doc/user_manual.md                            | 127 ++++++++++++++++++
>>   meta-isar/conf/machine/container.conf         |   5 +
>>   .../conf/multiconfig/container-bullseye.conf  |   4 +
>>   .../conf/multiconfig/container-buster.conf    |   4 +
>>   .../conf/multiconfig/container-focal.conf     |   4 +
>>   .../conf/multiconfig/container-stretch.conf   |   4 +
>>   meta/classes/container-img.bbclass            |  18 +++
>>   .../classes/image-container-extension.bbclass |  81 +++++++++++
>>   meta/classes/image-sdk-extension.bbclass      |  42 +++++-
>>   meta/classes/image.bbclass                    |   1 +
>>   scripts/ci_build.sh                           |  11 +-
>>   11 files changed, 293 insertions(+), 8 deletions(-)
>>   create mode 100644 meta-isar/conf/machine/container.conf
>>   create mode 100644 meta-isar/conf/multiconfig/container-bullseye.conf
>>   create mode 100644 meta-isar/conf/multiconfig/container-buster.conf
>>   create mode 100644 meta-isar/conf/multiconfig/container-focal.conf
>>   create mode 100644 meta-isar/conf/multiconfig/container-stretch.conf
>>   create mode 100644 meta/classes/container-img.bbclass
>>   create mode 100644 meta/classes/image-container-extension.bbclass
>>
> Thanks for adding CI cases, but Jenkins failed during do_populate_sdk:

Do you have the documented dependencies (umoci and skopeo backported from bullseye) in the CI system? I've tested the commands manually on my system using kas-container and they worked, but your setup is slightly different.

>
> 14:17:17 + SDK_FORMAT=docker-archive
> 14:17:17 + BB_ENV_WHITELIST=' SDK_FORMAT'
> 14:17:17 + bitbake -c do_populate_sdk mc:qemuarm-stretch:isar-image-base
> ...
> 14:17:18 ERROR: Unable to parse /workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb
> 14:17:18 Traceback (most recent call last):
> 14:17:18   File "/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/parse/ast.py", line 382, in multi_finalize(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb', d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>):
> 14:17:18          try:
> 14:17:18     >        finalize(fn, d)
> 14:17:18          except bb.parse.SkipRecipe as e:
> 14:17:18   File "/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/parse/ast.py", line 347, in finalize(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb', d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>, variant=None):
> 14:17:18
> 14:17:18     >        bb.parse.siggen.finalise(fn, d, variant)
> 14:17:18
> 14:17:18   File "/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/siggen.py", line 182, in SignatureGeneratorBasicHash.finalise(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb', d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>, variant=None):
> 14:17:18              try:
> 14:17:18     >            taskdeps = self._build_data(fn, d)
> 14:17:18              except bb.parse.SkipRecipe:
> 14:17:18   File "/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/siggen.py", line 150, in SignatureGeneratorBasicHash._build_data(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb', d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>):
> 14:17:18              ignore_mismatch = ((d.getVar("BB_HASH_IGNORE_MISMATCH") or '') == '1')
> 14:17:18     >        tasklist, gendeps, lookupcache = bb.data.generate_dependencies(d, self.basewhitelist)
> 14:17:18
> 14:17:18   File "/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/data.py", line 371, in generate_dependencies(d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>, whitelist={'SHELL', 'DEPLOY_DIR', 'PRSERV_DUMPFILE', 'SDKPKGSUFFIX', 'FILE_DIRNAME', 'TERM', 'COREBASE', 'LICENSE_PATH', 'STAGING_DIR_HOST', 'SSTATE_PKGARCH', 'PKGDATA_DIR', 'THISDIR', 'USER', 'EXTERNAL_TOOLCHAIN', 'PWD', 'DL_DIR', 'LOGNAME', 'PATH', 'BB_LIMITEDDEPS', 'CCACHE', 'BB_TASKHASH', 'CCACHE_DIR', 'PARALLEL_MAKE', 'BBSERVER', 'PRSERV_LOCKDOWN', 'BBPATH', 'BB_WORKERCONTEXT', 'PRSERV_HOST', 'WORKDIR', 'FILE', 'CCACHE_NOHASHDIR', 'PRSERV_DUMPDIR', 'FILESEXTRAPATHS', 'HOME', 'BUILD_ARCH', 'STAMPCLEAN', 'SSTATE_DIR', 'TMPDIR', 'FILESPATH', 'STAGING_DIR_TARGET'}):
> 14:17:18          keys = set(key for key in d if not key.startswith("__"))
> 14:17:18     >    shelldeps = set(key for key in d.getVar("__exportlist", False) if d.getVarFlag(key, "export", False) and not d.getVarFlag(key, "unexport", False))
> 14:17:18          varflagsexcl = d.getVar('BB_SIGNATURE_EXCLUDE_FLAGS')
> 14:17:18 TypeError: 'NoneType' object is not iterable
>
> Full log: https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fci.isar-build.org%3A8080%2Fjob%2Fisar_am_devel_fast%2F92%2FconsoleFull&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980099579%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=SS%2FYypaMBwrC9dvwJCeIrW9EjPqVfF2RXFghcfAn4Lc%3D&amp;reserved=0
>
Henning Schild March 10, 2021, 7:25 a.m. UTC | #4
Am Wed, 10 Mar 2021 18:18:23 +0100
schrieb "[ext] Silvano Cirujano Cuesta"
<silvano.cirujano-cuesta@siemens.com>:

> On 10/03/2021 17:18, Anton Mikanovich wrote:
> > 09.03.2021 23:52, Silvano Cirujano Cuesta wrote:  
> >> This patch series provides support for containerized root
> >> filesystems, for both target images and SDKs.
> >>
> >> For containerized target images the new image type `container-img`
> >> has been added.
> >>
> >> For containerized SDKs the task `populate_sdk` has been extended.
> >>
> >> Containerized root filesystems are easy to distribute and run,
> >> enabling this way following scenarios:
> >>   - Use ISAR to build container images meant to be run only in
> >> containers.
> >>   - Use the same ISAR configuration to build images for
> >> containers, VMs and bare-metal.
> >>   - Easy SDK distribution and "installation".
> >>   - Quickly testing certain applications in the workstation using
> >> the target root filesystem.
> >>
> >> In order to build containerized target root filesystems
> >> `IMAGE_TYPE` has to be `container-img`, additionally the container
> >> image format can be selected with the variable
> >> `CONTAINER_FORMATS`. The default format is `docker-archive`.
> >>
> >> In order to build containerized SDKs the variable `SDK_FORMAT` has
> >> to provide any of the supported container formats (e.g.
> >> `docker-archive`). The default format is the legacy
> >> non-containerized: `tar_xz`.
> >>
> >> It also provides a sample machine, multiconfigs and ci-testing.
> >>
> >> More information about its usage is documented in the file
> >> docs/user_manual.md.
> >>
> >> A PoC/demo of this functionality (only the SDK part) has been
> >> created based on the project
> >> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fsiemens%2Fmeta-iot2050&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980089588%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=%2FB%2BNBKhRCkVNy%2FGEbAiFgEUZBpy0VmhkWdpvNq2wokM%3D&amp;reserved=0.
> >> Jan Kiszka already tested and liked it! =>
> >> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fsiemens%2Fmeta-iot2050%2Fissues%2F86%23issuecomment-768907845&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980089588%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=Os3cY15D2myT5sdPINARBh63iwb3GpE5IlupRGnA0v0%3D&amp;reserved=0
> >>
> >> Successful builds of both containerized target and SDK are
> >> available on the same PoC project:
> >>   -
> >> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FSilvanoc%2Fmeta-iot2050%2Factions%2Fruns%2F558311580&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980089588%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=N3DUdGxhNOWlvbatGxopSWPWsMXsXdvsKmIsOh1KtyU%3D&amp;reserved=0
> >>   -
> >> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FSilvanoc%2Fmeta-iot2050%2Factions%2Fruns%2F558311581&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980089588%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=cOkongJ%2BtbrEvaquB241NbaK1nQHHiY%2FrgbYHPFAjeo%3D&amp;reserved=0
> >> and also the resulting images:
> >>   -
> >> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fusers%2FSilvanoc%2Fpackages%2Fcontainer%2Fpackage%2Fmeta-iot2050%252Fiot2050-debian-arm64&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980089588%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=UegaXdy58CUxX8%2FsDnG8cy3V9uy9IUyh8yA00U%2FSaR4%3D&amp;reserved=0
> >>   -
> >> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fusers%2FSilvanoc%2Fpackages%2Fcontainer%2Fpackage%2Fmeta-iot2050%252Fiot2050-debian-sdk-arm64&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980089588%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=wss3OIVsS2ulaQ4Jr7ria0wMna6Y0U8Ahp9M3XQU5PM%3D&amp;reserved=0
> >>
> >> In order to get a feeling about its usage (you need Docker or
> >> Podman), follow these simple copy&paste instructions:
> >> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FSilvanoc%2Fmeta-iot2050%2Fblob%2Fmaster%2Fkas%2FBUILDING-SDK-CONTAINER.md%23running-the-sdk&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980089588%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=%2FiIv247NEqKV%2F2osF6hL5S4QiA6T8yqd5TQpi3EbuGQ%3D&amp;reserved=0
> >> Build instructions are available in the upper part of that
> >> document.
> >>
> >> Two new dependencies (umoci and skopeo -backporting from bullseye
> >> to buster works easily) are required to create containerized root
> >> filesystems (as specified in the documentation).
> >>
> >> Typical container image management actions (e.g. push an image to a
> >> container image regitry) are out of scope. Available tools (Docker,
> >> Skopeo, Buildah, Podman,...) should be used for these actions.
> >>
> >> A patch will follow this one to get the dependencies into the
> >> container images being provided by the project
> >> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fsiemens%2Fkas&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980099579%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=eozG3LQR9pRGIcNiz9a0DckXhkBu8pcas9c%2F%2BWon9mU%3D&amp;reserved=0
> >> (for `kas-container`, for example).
> >>
> >> Silvano Cirujano Cuesta (5):
> >>    classes: add root filesystem containerizing class
> >>    classes: add new image type 'container-img'
> >>    sdk: add support for containerized sdk
> >>    docs: document creation of container images
> >>    ci: add container image testing configurations
> >>
> >>   doc/user_manual.md                            | 127
> >> ++++++++++++++++++ meta-isar/conf/machine/container.conf         |
> >>   5 + .../conf/multiconfig/container-bullseye.conf  |   4 +
> >>   .../conf/multiconfig/container-buster.conf    |   4 +
> >>   .../conf/multiconfig/container-focal.conf     |   4 +
> >>   .../conf/multiconfig/container-stretch.conf   |   4 +
> >>   meta/classes/container-img.bbclass            |  18 +++
> >>   .../classes/image-container-extension.bbclass |  81 +++++++++++
> >>   meta/classes/image-sdk-extension.bbclass      |  42 +++++-
> >>   meta/classes/image.bbclass                    |   1 +
> >>   scripts/ci_build.sh                           |  11 +-
> >>   11 files changed, 293 insertions(+), 8 deletions(-)
> >>   create mode 100644 meta-isar/conf/machine/container.conf
> >>   create mode 100644
> >> meta-isar/conf/multiconfig/container-bullseye.conf create mode
> >> 100644 meta-isar/conf/multiconfig/container-buster.conf create
> >> mode 100644 meta-isar/conf/multiconfig/container-focal.conf create
> >> mode 100644 meta-isar/conf/multiconfig/container-stretch.conf
> >> create mode 100644 meta/classes/container-img.bbclass create mode
> >> 100644 meta/classes/image-container-extension.bbclass 
> > Thanks for adding CI cases, but Jenkins failed during
> > do_populate_sdk:  
> 
> Do you have the documented dependencies (umoci and skopeo backported
> from bullseye) in the CI system? I've tested the commands manually on
> my system using kas-container and they worked, but your setup is
> slightly different.

AFAIK the jenkins runner is debian buster running "shell" jobs. New
deps will not work here.
I did not review the changes, but hope those new deps have been added
to the docs.

Henning

> >
> > 14:17:17 + SDK_FORMAT=docker-archive
> > 14:17:17 + BB_ENV_WHITELIST=' SDK_FORMAT'
> > 14:17:17 + bitbake -c do_populate_sdk
> > mc:qemuarm-stretch:isar-image-base ...
> > 14:17:18 ERROR: Unable to parse
> > /workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb
> > 14:17:18 Traceback (most recent call last): 14:17:18   File
> > "/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/parse/ast.py",
> > line 382, in
> > multi_finalize(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb',
> > d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>): 14:17:18
> >      try: 14:17:18     >        finalize(fn, d) 14:17:18
> > except bb.parse.SkipRecipe as e: 14:17:18   File
> > "/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/parse/ast.py",
> > line 347, in
> > finalize(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb',
> > d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>,
> > variant=None): 14:17:18 14:17:18     >
> > bb.parse.siggen.finalise(fn, d, variant) 14:17:18 14:17:18   File
> > "/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/siggen.py",
> > line 182, in
> > SignatureGeneratorBasicHash.finalise(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb',
> > d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>,
> > variant=None): 14:17:18              try: 14:17:18     >
> > taskdeps = self._build_data(fn, d) 14:17:18              except
> > bb.parse.SkipRecipe: 14:17:18   File
> > "/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/siggen.py",
> > line 150, in
> > SignatureGeneratorBasicHash._build_data(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb',
> > d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>): 14:17:18
> >          ignore_mismatch = ((d.getVar("BB_HASH_IGNORE_MISMATCH") or
> > '') == '1') 14:17:18     >        tasklist, gendeps, lookupcache =
> > bb.data.generate_dependencies(d, self.basewhitelist) 14:17:18
> > 14:17:18   File
> > "/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/data.py",
> > line 371, in generate_dependencies(d=<bb.data_smart.DataSmart
> > object at 0x7f12917e1c50>, whitelist={'SHELL', 'DEPLOY_DIR',
> > 'PRSERV_DUMPFILE', 'SDKPKGSUFFIX', 'FILE_DIRNAME', 'TERM',
> > 'COREBASE', 'LICENSE_PATH', 'STAGING_DIR_HOST', 'SSTATE_PKGARCH',
> > 'PKGDATA_DIR', 'THISDIR', 'USER', 'EXTERNAL_TOOLCHAIN', 'PWD',
> > 'DL_DIR', 'LOGNAME', 'PATH', 'BB_LIMITEDDEPS', 'CCACHE',
> > 'BB_TASKHASH', 'CCACHE_DIR', 'PARALLEL_MAKE', 'BBSERVER',
> > 'PRSERV_LOCKDOWN', 'BBPATH', 'BB_WORKERCONTEXT', 'PRSERV_HOST',
> > 'WORKDIR', 'FILE', 'CCACHE_NOHASHDIR', 'PRSERV_DUMPDIR',
> > 'FILESEXTRAPATHS', 'HOME', 'BUILD_ARCH', 'STAMPCLEAN',
> > 'SSTATE_DIR', 'TMPDIR', 'FILESPATH', 'STAGING_DIR_TARGET'}):
> > 14:17:18          keys = set(key for key in d if not
> > key.startswith("__")) 14:17:18     >    shelldeps = set(key for key
> > in d.getVar("__exportlist", False) if d.getVarFlag(key, "export",
> > False) and not d.getVarFlag(key, "unexport", False)) 14:17:18
> >    varflagsexcl = d.getVar('BB_SIGNATURE_EXCLUDE_FLAGS') 14:17:18
> > TypeError: 'NoneType' object is not iterable
> >
> > Full log:
> > https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fci.isar-build.org%3A8080%2Fjob%2Fisar_am_devel_fast%2F92%2FconsoleFull&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C70ab5dc719fe445169a008d8e3e01c27%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509898980099579%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=SS%2FYypaMBwrC9dvwJCeIrW9EjPqVfF2RXFghcfAn4Lc%3D&amp;reserved=0 
>
Silvano Cirujano Cuesta March 10, 2021, 7:30 a.m. UTC | #5
On 10/03/2021 18:25, Henning Schild wrote:
> Am Wed, 10 Mar 2021 18:18:23 +0100
> schrieb "[ext] Silvano Cirujano Cuesta"
> <silvano.cirujano-cuesta@siemens.com>:
>
>> On 10/03/2021 17:18, Anton Mikanovich wrote:
>>> 09.03.2021 23:52, Silvano Cirujano Cuesta wrote:  
>>>> This patch series provides support for containerized root
>>>> filesystems, for both target images and SDKs.
>>>>
>>>> For containerized target images the new image type `container-img`
>>>> has been added.
>>>>
>>>> For containerized SDKs the task `populate_sdk` has been extended.
>>>>
>>>> Containerized root filesystems are easy to distribute and run,
>>>> enabling this way following scenarios:
>>>>   - Use ISAR to build container images meant to be run only in
>>>> containers.
>>>>   - Use the same ISAR configuration to build images for
>>>> containers, VMs and bare-metal.
>>>>   - Easy SDK distribution and "installation".
>>>>   - Quickly testing certain applications in the workstation using
>>>> the target root filesystem.
>>>>
>>>> In order to build containerized target root filesystems
>>>> `IMAGE_TYPE` has to be `container-img`, additionally the container
>>>> image format can be selected with the variable
>>>> `CONTAINER_FORMATS`. The default format is `docker-archive`.
>>>>
>>>> In order to build containerized SDKs the variable `SDK_FORMAT` has
>>>> to provide any of the supported container formats (e.g.
>>>> `docker-archive`). The default format is the legacy
>>>> non-containerized: `tar_xz`.
>>>>
>>>> It also provides a sample machine, multiconfigs and ci-testing.
>>>>
>>>> More information about its usage is documented in the file
>>>> docs/user_manual.md.
>>>>
>>>> A PoC/demo of this functionality (only the SDK part) has been
>>>> created based on the project
>>>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fsiemens%2Fmeta-iot2050&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C9aeeebc3bbcd43639e3408d8e3e97906%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509939186866083%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=%2B2icpBtgUxWlC%2Byu%2B8mzTX%2B5f%2FUqwxx32eSm1OIt7jE%3D&amp;reserved=0.
>>>> Jan Kiszka already tested and liked it! =>
>>>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fsiemens%2Fmeta-iot2050%2Fissues%2F86%23issuecomment-768907845&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C9aeeebc3bbcd43639e3408d8e3e97906%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509939186866083%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=KobF91tR3qTPXkVlm1siBENSZ8GI2yVgV%2FUR4wA%2Fa1g%3D&amp;reserved=0
>>>>
>>>> Successful builds of both containerized target and SDK are
>>>> available on the same PoC project:
>>>>   -
>>>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FSilvanoc%2Fmeta-iot2050%2Factions%2Fruns%2F558311580&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C9aeeebc3bbcd43639e3408d8e3e97906%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509939186866083%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=SfmgjQlfFHt5GTWS1Bkh9fgYzdVus%2BxAQWL1HXU%2FEiM%3D&amp;reserved=0
>>>>   -
>>>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FSilvanoc%2Fmeta-iot2050%2Factions%2Fruns%2F558311581&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C9aeeebc3bbcd43639e3408d8e3e97906%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509939186866083%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=tXRuiVa7uhPLnRG7Ll2oLrz%2BGP85bR6HEOOzTp7J%2Bxo%3D&amp;reserved=0
>>>> and also the resulting images:
>>>>   -
>>>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fusers%2FSilvanoc%2Fpackages%2Fcontainer%2Fpackage%2Fmeta-iot2050%252Fiot2050-debian-arm64&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C9aeeebc3bbcd43639e3408d8e3e97906%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509939186876071%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=BKHSEDqOAHeum%2FGYdREIysEJ1JCTm68npNBZhgYkOr4%3D&amp;reserved=0
>>>>   -
>>>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fusers%2FSilvanoc%2Fpackages%2Fcontainer%2Fpackage%2Fmeta-iot2050%252Fiot2050-debian-sdk-arm64&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C9aeeebc3bbcd43639e3408d8e3e97906%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509939186876071%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=EhFGqF5PnTNkeZub1%2FzDzFCClAT0cN4v2A95D85NEjo%3D&amp;reserved=0
>>>>
>>>> In order to get a feeling about its usage (you need Docker or
>>>> Podman), follow these simple copy&paste instructions:
>>>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FSilvanoc%2Fmeta-iot2050%2Fblob%2Fmaster%2Fkas%2FBUILDING-SDK-CONTAINER.md%23running-the-sdk&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C9aeeebc3bbcd43639e3408d8e3e97906%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509939186876071%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=GMOqu5mVVazU%2FnvpjiWLDoatp2Yi4XmYMkpZNLCMZts%3D&amp;reserved=0
>>>> Build instructions are available in the upper part of that
>>>> document.
>>>>
>>>> Two new dependencies (umoci and skopeo -backporting from bullseye
>>>> to buster works easily) are required to create containerized root
>>>> filesystems (as specified in the documentation).
>>>>
>>>> Typical container image management actions (e.g. push an image to a
>>>> container image regitry) are out of scope. Available tools (Docker,
>>>> Skopeo, Buildah, Podman,...) should be used for these actions.
>>>>
>>>> A patch will follow this one to get the dependencies into the
>>>> container images being provided by the project
>>>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fsiemens%2Fkas&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C9aeeebc3bbcd43639e3408d8e3e97906%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509939186876071%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=0XCjNwZVf%2By0WL2C%2BRTRiVmgZT34dL0auBRFila0Uqs%3D&amp;reserved=0
>>>> (for `kas-container`, for example).
>>>>
>>>> Silvano Cirujano Cuesta (5):
>>>>    classes: add root filesystem containerizing class
>>>>    classes: add new image type 'container-img'
>>>>    sdk: add support for containerized sdk
>>>>    docs: document creation of container images
>>>>    ci: add container image testing configurations
>>>>
>>>>   doc/user_manual.md                            | 127
>>>> ++++++++++++++++++ meta-isar/conf/machine/container.conf         |
>>>>   5 + .../conf/multiconfig/container-bullseye.conf  |   4 +
>>>>   .../conf/multiconfig/container-buster.conf    |   4 +
>>>>   .../conf/multiconfig/container-focal.conf     |   4 +
>>>>   .../conf/multiconfig/container-stretch.conf   |   4 +
>>>>   meta/classes/container-img.bbclass            |  18 +++
>>>>   .../classes/image-container-extension.bbclass |  81 +++++++++++
>>>>   meta/classes/image-sdk-extension.bbclass      |  42 +++++-
>>>>   meta/classes/image.bbclass                    |   1 +
>>>>   scripts/ci_build.sh                           |  11 +-
>>>>   11 files changed, 293 insertions(+), 8 deletions(-)
>>>>   create mode 100644 meta-isar/conf/machine/container.conf
>>>>   create mode 100644
>>>> meta-isar/conf/multiconfig/container-bullseye.conf create mode
>>>> 100644 meta-isar/conf/multiconfig/container-buster.conf create
>>>> mode 100644 meta-isar/conf/multiconfig/container-focal.conf create
>>>> mode 100644 meta-isar/conf/multiconfig/container-stretch.conf
>>>> create mode 100644 meta/classes/container-img.bbclass create mode
>>>> 100644 meta/classes/image-container-extension.bbclass 
>>> Thanks for adding CI cases, but Jenkins failed during
>>> do_populate_sdk:  
>> Do you have the documented dependencies (umoci and skopeo backported
>> from bullseye) in the CI system? I've tested the commands manually on
>> my system using kas-container and they worked, but your setup is
>> slightly different.
> AFAIK the jenkins runner is debian buster running "shell" jobs. New
> deps will not work here.
> I did not review the changes, but hope those new deps have been added
> to the docs.
>
> Henning

Yes, it's documented both in the cover letter (look for 'umoci' in this e-mail) and in the user manual => https://github.com/Silvanoc/isar/commit/54c0af643f4011da1cf5171f1b8d8c29cf52769d#diff-266dae8a4f0ac77fb09535e9bbf9fa2516ea79ebc5c91b4781c6a537a6f8d64cR89

 Silvano

>
>>> 14:17:17 + SDK_FORMAT=docker-archive
>>> 14:17:17 + BB_ENV_WHITELIST=' SDK_FORMAT'
>>> 14:17:17 + bitbake -c do_populate_sdk
>>> mc:qemuarm-stretch:isar-image-base ...
>>> 14:17:18 ERROR: Unable to parse
>>> /workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb
>>> 14:17:18 Traceback (most recent call last): 14:17:18   File
>>> "/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/parse/ast.py",
>>> line 382, in
>>> multi_finalize(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb',
>>> d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>): 14:17:18
>>>      try: 14:17:18     >        finalize(fn, d) 14:17:18
>>> except bb.parse.SkipRecipe as e: 14:17:18   File
>>> "/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/parse/ast.py",
>>> line 347, in
>>> finalize(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb',
>>> d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>,
>>> variant=None): 14:17:18 14:17:18     >
>>> bb.parse.siggen.finalise(fn, d, variant) 14:17:18 14:17:18   File
>>> "/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/siggen.py",
>>> line 182, in
>>> SignatureGeneratorBasicHash.finalise(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb',
>>> d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>,
>>> variant=None): 14:17:18              try: 14:17:18     >
>>> taskdeps = self._build_data(fn, d) 14:17:18              except
>>> bb.parse.SkipRecipe: 14:17:18   File
>>> "/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/siggen.py",
>>> line 150, in
>>> SignatureGeneratorBasicHash._build_data(fn='/workspace/build/isar_am_devel_fast/92/meta-isar/recipes-app/libhello/libhello.bb',
>>> d=<bb.data_smart.DataSmart object at 0x7f12917e1c50>): 14:17:18
>>>          ignore_mismatch = ((d.getVar("BB_HASH_IGNORE_MISMATCH") or
>>> '') == '1') 14:17:18     >        tasklist, gendeps, lookupcache =
>>> bb.data.generate_dependencies(d, self.basewhitelist) 14:17:18
>>> 14:17:18   File
>>> "/workspace/build/isar_am_devel_fast/92/bitbake/lib/bb/data.py",
>>> line 371, in generate_dependencies(d=<bb.data_smart.DataSmart
>>> object at 0x7f12917e1c50>, whitelist={'SHELL', 'DEPLOY_DIR',
>>> 'PRSERV_DUMPFILE', 'SDKPKGSUFFIX', 'FILE_DIRNAME', 'TERM',
>>> 'COREBASE', 'LICENSE_PATH', 'STAGING_DIR_HOST', 'SSTATE_PKGARCH',
>>> 'PKGDATA_DIR', 'THISDIR', 'USER', 'EXTERNAL_TOOLCHAIN', 'PWD',
>>> 'DL_DIR', 'LOGNAME', 'PATH', 'BB_LIMITEDDEPS', 'CCACHE',
>>> 'BB_TASKHASH', 'CCACHE_DIR', 'PARALLEL_MAKE', 'BBSERVER',
>>> 'PRSERV_LOCKDOWN', 'BBPATH', 'BB_WORKERCONTEXT', 'PRSERV_HOST',
>>> 'WORKDIR', 'FILE', 'CCACHE_NOHASHDIR', 'PRSERV_DUMPDIR',
>>> 'FILESEXTRAPATHS', 'HOME', 'BUILD_ARCH', 'STAMPCLEAN',
>>> 'SSTATE_DIR', 'TMPDIR', 'FILESPATH', 'STAGING_DIR_TARGET'}):
>>> 14:17:18          keys = set(key for key in d if not
>>> key.startswith("__")) 14:17:18     >    shelldeps = set(key for key
>>> in d.getVar("__exportlist", False) if d.getVarFlag(key, "export",
>>> False) and not d.getVarFlag(key, "unexport", False)) 14:17:18
>>>    varflagsexcl = d.getVar('BB_SIGNATURE_EXCLUDE_FLAGS') 14:17:18
>>> TypeError: 'NoneType' object is not iterable
>>>
>>> Full log:
>>> https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fci.isar-build.org%3A8080%2Fjob%2Fisar_am_devel_fast%2F92%2FconsoleFull&amp;data=04%7C01%7Csilvano.cirujano-cuesta%40siemens.com%7C9aeeebc3bbcd43639e3408d8e3e97906%7C38ae3bcd95794fd4addab42e1495d55a%7C1%7C0%7C637509939186876071%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=9PeSmqXdC07ubN7xFJ4uH90hxprBnG4NuR4z5EMa8Ug%3D&amp;reserved=0