Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-kiwi for openSUSE:Factory checked in at 2021-10-23 23:13:44 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-kiwi (Old) and /work/SRC/openSUSE:Factory/.python-kiwi.new.1890 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-kiwi" Sat Oct 23 23:13:44 2021 rev:85 rq:926893 version:9.24.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-kiwi/python-kiwi.changes 2021-10-16 22:46:53.380653970 +0200 +++ /work/SRC/openSUSE:Factory/.python-kiwi.new.1890/python-kiwi.changes 2021-10-23 23:13:53.092978414 +0200 @@ -1,0 +2,68 @@ +Fri Oct 15 10:02:06 CEST 2021 - Marcus Sch??fer <m...@suse.de> + +- Bump version: 9.24.0 ??? 9.24.1 + +------------------------------------------------------------------- +Thu Oct 14 16:00:27 CEST 2021 - Marcus Sch??fer <m...@suse.de> + +- Make sure embedded test exposes the kernel + +------------------------------------------------------------------- +Thu Oct 14 11:27:16 CEST 2021 - Marcus Sch??fer <m...@suse.de> + +- Fixed use of LUKS encrypted images with empty pass + + For initial provisioning of LUKS encrypted disk images an + empty passphrase key is handy to avoid interaction in the + deployment process. However, the dracut kiwi modules were + lacking the information that the luks keyfile could be an + empty passphrase key which must not be opened with the + potential risk to get prompted for input. This commit + introduces a new profile environment variable evaluated + by the dracut kiwi lib code to open the LUKS pool and + allows to distinguish the situation on key files with + or without a passphrase + +------------------------------------------------------------------- +Thu Oct 14 10:11:01 CEST 2021 - Marcus Sch??fer <m...@suse.de> + +- Fixed type annotations for LuksDevice class + +------------------------------------------------------------------- +Wed Oct 13 17:10:30 CEST 2021 - Marcus Sch??fer <m...@suse.de> + +- Fixed repo setup for test-image-embedded + + Use obsrepositories + +------------------------------------------------------------------- +Wed Oct 13 17:03:48 CEST 2021 - Marcus Sch??fer <m...@suse.de> + +- Added a build test for no-initrd / no-bootloader + + It's allowed to configure an image building without an + initrd and/or bootloader setup. These are settings mostly + used in the embedded world and this build test makes sure + images of that kind can be build + +------------------------------------------------------------------- +Wed Oct 13 00:31:49 CEST 2021 - Marcus Sch??fer <m...@suse.de> + +- Add support for portable result data (#1949) + + In addition to the serialized Result instance kiwi.result + file this commit also creates a portable version of this + information in kiwi.result.json. Only the information that + can be expressed as json document is part of the portable + version. This is related to Issue #1918 + +------------------------------------------------------------------- +Thu Oct 07 16:12:47 CEST 2021 - Marcus Sch??fer <m...@suse.de> + +- Added documentation for kiwi stackbuild plugin + + Restructure the documentation to put all plugin documentation + under its own category. Add a chapter about the stackbuild + plugin, it's concepts and use cases. This Fixes #1907 + +------------------------------------------------------------------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-kiwi.spec ++++++ --- /var/tmp/diff_new_pack.4H9sVa/_old 2021-10-23 23:13:53.612978669 +0200 +++ /var/tmp/diff_new_pack.4H9sVa/_new 2021-10-23 23:13:53.616978670 +0200 @@ -43,7 +43,7 @@ %endif Name: python-kiwi -Version: 9.24.0 +Version: 9.24.1 Provides: kiwi-schema = 7.4 Release: 0 Url: https://github.com/OSInside/kiwi @@ -335,6 +335,7 @@ %else Requires: python%{python3_pkgversion}-PyYAML %endif +Requires: python%{python3_pkgversion}-simplejson Requires: python%{python3_pkgversion}-docopt Requires: python%{python3_pkgversion}-lxml Requires: python%{python3_pkgversion}-requests ++++++ PKGBUILD ++++++ --- /var/tmp/diff_new_pack.4H9sVa/_old 2021-10-23 23:13:53.640978682 +0200 +++ /var/tmp/diff_new_pack.4H9sVa/_new 2021-10-23 23:13:53.640978682 +0200 @@ -3,7 +3,7 @@ pkgname=('python-kiwi' 'kiwi-man-pages' 'dracut-kiwi-lib' 'dracut-kiwi-oem-repart' 'dracut-kiwi-oem-dump' 'dracut-kiwi-live' 'dracut-kiwi-overlay') arch=(x86_64) -pkgver=9.24.0 +pkgver=9.24.1 pkgrel=0 pkgdesc="KIWI - Appliance Builder Next Generation" url="https://github.com/SUSE/kiwi/tarball/master" @@ -12,7 +12,7 @@ provides=(kiwi-ng kiwi) source=("${pkgname}.tar.gz") changelog="${pkgname}.changes" -md5sums=('83e3f0776a09b90ef04108ec46ee76bc') +md5sums=('070111b542fb65e4bebff3cf6affe8c0') build() { ++++++ python-kiwi.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/.bumpversion.cfg new/kiwi-9.24.1/.bumpversion.cfg --- old/kiwi-9.24.0/.bumpversion.cfg 2021-10-07 09:54:22.000000000 +0200 +++ new/kiwi-9.24.1/.bumpversion.cfg 2021-10-15 10:02:06.000000000 +0200 @@ -1,5 +1,5 @@ [bumpversion] -current_version = 9.24.0 +current_version = 9.24.1 commit = True tag = True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/.virtualenv.dev-requirements.txt new/kiwi-9.24.1/.virtualenv.dev-requirements.txt --- old/kiwi-9.24.0/.virtualenv.dev-requirements.txt 2021-09-02 16:55:04.000000000 +0200 +++ new/kiwi-9.24.1/.virtualenv.dev-requirements.txt 2021-10-13 09:15:07.000000000 +0200 @@ -31,6 +31,7 @@ types-requests types-PyYAML types-mock +types-simplejson # Generate Data Structures from XML Schema # http://pythonhosted.org/generateDS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/.virtualenv.requirements.txt new/kiwi-9.24.1/.virtualenv.requirements.txt --- old/kiwi-9.24.0/.virtualenv.requirements.txt 2021-07-14 18:09:36.000000000 +0200 +++ new/kiwi-9.24.1/.virtualenv.requirements.txt 2021-10-13 09:15:07.000000000 +0200 @@ -19,3 +19,6 @@ # markup support anymarkup + +# json support that also knows about tuples +simplejson diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/PKG-INFO new/kiwi-9.24.1/PKG-INFO --- old/kiwi-9.24.0/PKG-INFO 2021-10-07 09:57:15.000000000 +0200 +++ new/kiwi-9.24.1/PKG-INFO 2021-10-15 10:04:10.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: kiwi -Version: 9.24.0 +Version: 9.24.1 Summary: KIWI - Appliance Builder (next generation) Home-page: https://osinside.github.io/kiwi Author: Marcus Schaefer Binary files old/kiwi-9.24.0/doc/build/latex/kiwi.pdf and new/kiwi-9.24.1/doc/build/latex/kiwi.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/doc/build/man/kiwi.8 new/kiwi-9.24.1/doc/build/man/kiwi.8 --- old/kiwi-9.24.0/doc/build/man/kiwi.8 2021-10-07 09:57:11.000000000 +0200 +++ new/kiwi-9.24.1/doc/build/man/kiwi.8 2021-10-15 10:04:08.000000000 +0200 @@ -27,7 +27,7 @@ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "KIWI" "8" "Oct 07, 2021" "9.24.0" "KIWI NG" +.TH "KIWI" "8" "Oct 15, 2021" "9.24.1" "KIWI NG" .SH NAME kiwi \- Creating Operating System Images .SH SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/doc/build/man/kiwi::image::info.8 new/kiwi-9.24.1/doc/build/man/kiwi::image::info.8 --- old/kiwi-9.24.0/doc/build/man/kiwi::image::info.8 2021-10-07 09:57:11.000000000 +0200 +++ new/kiwi-9.24.1/doc/build/man/kiwi::image::info.8 2021-10-15 10:04:08.000000000 +0200 @@ -27,7 +27,7 @@ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "KIWI::IMAGE::INFO" "8" "Oct 07, 2021" "9.24.0" "KIWI NG" +.TH "KIWI::IMAGE::INFO" "8" "Oct 15, 2021" "9.24.1" "KIWI NG" .SH NAME kiwi::image::info \- Provide detailed information about an image description .SH SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/doc/build/man/kiwi::image::resize.8 new/kiwi-9.24.1/doc/build/man/kiwi::image::resize.8 --- old/kiwi-9.24.0/doc/build/man/kiwi::image::resize.8 2021-10-07 09:57:11.000000000 +0200 +++ new/kiwi-9.24.1/doc/build/man/kiwi::image::resize.8 2021-10-15 10:04:08.000000000 +0200 @@ -27,7 +27,7 @@ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "KIWI::IMAGE::RESIZE" "8" "Oct 07, 2021" "9.24.0" "KIWI NG" +.TH "KIWI::IMAGE::RESIZE" "8" "Oct 15, 2021" "9.24.1" "KIWI NG" .SH NAME kiwi::image::resize \- Resize disk images to new geometry .SH SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/doc/build/man/kiwi::result::bundle.8 new/kiwi-9.24.1/doc/build/man/kiwi::result::bundle.8 --- old/kiwi-9.24.0/doc/build/man/kiwi::result::bundle.8 2021-10-07 09:57:11.000000000 +0200 +++ new/kiwi-9.24.1/doc/build/man/kiwi::result::bundle.8 2021-10-15 10:04:08.000000000 +0200 @@ -27,7 +27,7 @@ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "KIWI::RESULT::BUNDLE" "8" "Oct 07, 2021" "9.24.0" "KIWI NG" +.TH "KIWI::RESULT::BUNDLE" "8" "Oct 15, 2021" "9.24.1" "KIWI NG" .SH NAME kiwi::result::bundle \- Bundle build results .SH SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/doc/build/man/kiwi::result::list.8 new/kiwi-9.24.1/doc/build/man/kiwi::result::list.8 --- old/kiwi-9.24.0/doc/build/man/kiwi::result::list.8 2021-10-07 09:57:11.000000000 +0200 +++ new/kiwi-9.24.1/doc/build/man/kiwi::result::list.8 2021-10-15 10:04:08.000000000 +0200 @@ -27,7 +27,7 @@ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "KIWI::RESULT::LIST" "8" "Oct 07, 2021" "9.24.0" "KIWI NG" +.TH "KIWI::RESULT::LIST" "8" "Oct 15, 2021" "9.24.1" "KIWI NG" .SH NAME kiwi::result::list \- List build results .SH SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/doc/build/man/kiwi::system::build.8 new/kiwi-9.24.1/doc/build/man/kiwi::system::build.8 --- old/kiwi-9.24.0/doc/build/man/kiwi::system::build.8 2021-10-07 09:57:11.000000000 +0200 +++ new/kiwi-9.24.1/doc/build/man/kiwi::system::build.8 2021-10-15 10:04:08.000000000 +0200 @@ -27,7 +27,7 @@ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "KIWI::SYSTEM::BUILD" "8" "Oct 07, 2021" "9.24.0" "KIWI NG" +.TH "KIWI::SYSTEM::BUILD" "8" "Oct 15, 2021" "9.24.1" "KIWI NG" .SH NAME kiwi::system::build \- Build image in combined prepare and create step .SH SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/doc/build/man/kiwi::system::create.8 new/kiwi-9.24.1/doc/build/man/kiwi::system::create.8 --- old/kiwi-9.24.0/doc/build/man/kiwi::system::create.8 2021-10-07 09:57:11.000000000 +0200 +++ new/kiwi-9.24.1/doc/build/man/kiwi::system::create.8 2021-10-15 10:04:08.000000000 +0200 @@ -27,7 +27,7 @@ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "KIWI::SYSTEM::CREATE" "8" "Oct 07, 2021" "9.24.0" "KIWI NG" +.TH "KIWI::SYSTEM::CREATE" "8" "Oct 15, 2021" "9.24.1" "KIWI NG" .SH NAME kiwi::system::create \- Create image from prepared root system .SH SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/doc/build/man/kiwi::system::prepare.8 new/kiwi-9.24.1/doc/build/man/kiwi::system::prepare.8 --- old/kiwi-9.24.0/doc/build/man/kiwi::system::prepare.8 2021-10-07 09:57:11.000000000 +0200 +++ new/kiwi-9.24.1/doc/build/man/kiwi::system::prepare.8 2021-10-15 10:04:08.000000000 +0200 @@ -27,7 +27,7 @@ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "KIWI::SYSTEM::PREPARE" "8" "Oct 07, 2021" "9.24.0" "KIWI NG" +.TH "KIWI::SYSTEM::PREPARE" "8" "Oct 15, 2021" "9.24.1" "KIWI NG" .SH NAME kiwi::system::prepare \- Prepare image root system .SH SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/doc/build/man/kiwi::system::update.8 new/kiwi-9.24.1/doc/build/man/kiwi::system::update.8 --- old/kiwi-9.24.0/doc/build/man/kiwi::system::update.8 2021-10-07 09:57:11.000000000 +0200 +++ new/kiwi-9.24.1/doc/build/man/kiwi::system::update.8 2021-10-15 10:04:08.000000000 +0200 @@ -27,7 +27,7 @@ .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "KIWI::SYSTEM::UPDATE" "8" "Oct 07, 2021" "9.24.0" "KIWI NG" +.TH "KIWI::SYSTEM::UPDATE" "8" "Oct 15, 2021" "9.24.1" "KIWI NG" .SH NAME kiwi::system::update \- Update/Upgrade image root system .SH SYNOPSIS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/doc/source/conf.py new/kiwi-9.24.1/doc/source/conf.py --- old/kiwi-9.24.0/doc/source/conf.py 2021-10-07 09:54:22.000000000 +0200 +++ new/kiwi-9.24.1/doc/source/conf.py 2021-10-15 10:02:06.000000000 +0200 @@ -140,7 +140,7 @@ # built documents. # # The short X.Y version. -version = '9.24.0' +version = '9.24.1' # The full version, including alpha/beta/rc tags. release = version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/doc/source/index.rst new/kiwi-9.24.1/doc/source/index.rst --- old/kiwi-9.24.0/doc/source/index.rst 2021-09-02 16:55:04.000000000 +0200 +++ new/kiwi-9.24.1/doc/source/index.rst 2021-10-15 10:02:03.000000000 +0200 @@ -20,7 +20,7 @@ quickstart commands troubleshooting - self_contained + plugins concept_and_workflow image_description image_types_and_results diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/doc/source/plugins/self_contained.rst new/kiwi-9.24.1/doc/source/plugins/self_contained.rst --- old/kiwi-9.24.0/doc/source/plugins/self_contained.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/kiwi-9.24.1/doc/source/plugins/self_contained.rst 2021-10-15 10:02:03.000000000 +0200 @@ -0,0 +1,81 @@ +.. _self_contained: + +Building in a Self-Contained Environment +======================================== + +.. note:: **Abstract** + + Users building images with {kiwi} face problems if they want + to build an image matching one of the following criteria: + + * build should happen as non root user. + + * build should happen on a host system distribution for which + no {kiwi} packages exists. + + * build happens on an incompatible host system distribution + compared to the target image distribution. For example + building an apt/dpkg based system on an rpm based system. + + * run more than one build process at the same time on the + same host. + + * run a build process for a different target architecture + compared to the host architecture (Cross Arch Image Build) + + This document describes how to perform the build process in + a self contained environment using fast booting virtual + machines to address the issues listed above. + + The changes on the machine to become a build host will + be reduced to the requirements of the {kiwi} `boxed plugin` + +Requirements +------------ + +Add the {kiwi} repo from the Open Build Service. For details see +:ref:`installation-from-obs`. The following {kiwi} plugin needs to be +installed on the build system: + +.. code:: bash + + $ sudo zypper in python3-kiwi_boxed_plugin + +Building with the boxbuild command +---------------------------------- + +The installation of the {kiwi} boxed plugin has registered a new kiwi +command named `boxbuild`. The command implementation uses KVM as +virtualization technology and runs the {kiwi} `build` command inside of +a KVM controlled virtual machine. For running the build process in a +virtual machine it's required to provide VM images that are suitable +to perform this job. We call the VM images `boxes` and they contain +kiwi itself as well as all other components needed to build appliances. +Those boxes are hosted in the Open Build Service and are publicly +available at the `Subprojects` tab in the: `Virtualization:Appliances:SelfContained <https://build.opensuse.org/project/show/Virtualization:Appliances:SelfContained>`__ +project. + +As a user you don't need to work with the boxes because this is all done +by the plugin and provided as a service by the {kiwi} team. The `boxbuild` +command knows where to fetch the box and also cares for an update of the +box when it has changed. + +Building an image with the `boxbuild` command is similar to building with +the `build` command. The plugin validates the given command call with the +capabilities of the `build` command. Thus one part of the `boxbuild` command +is exactly the same as with the `build` command. The separation between +`boxbuild` and `build` options is done using the `--` separator like +shown in the following example: + +.. code:: bash + + $ kiwi-ng --type iso system boxbuild --box leap -- \ + --description kiwi/build-tests/{exc_description_disk} \ + --set-repo {exc_repo_leap} \ + --target-dir /tmp/myimage + +.. note:: + + The provided `--description` and `--target-dir` options are + setup as shared folders between the host and the guest. No other + data will be shared with the host. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/doc/source/plugins/stackbuild.rst new/kiwi-9.24.1/doc/source/plugins/stackbuild.rst --- old/kiwi-9.24.0/doc/source/plugins/stackbuild.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/kiwi-9.24.1/doc/source/plugins/stackbuild.rst 2021-10-15 10:02:03.000000000 +0200 @@ -0,0 +1,227 @@ +.. _stackbuild: + +Building based on Containers +============================ + +.. note:: **Abstract** + + When building images exposes one of the following + requirements the stackbuild plugin provides an opportunity + to address it: + + * Preserve the image rootfs for a later rebuild without + requiring the original software repositories. + + * Build an image based on an existing container. + + * Build an image based on a container stack. + + * Transform a container into a {kiwi} image type + +Installation +------------ + +Add the {kiwi} repo from the Open Build Service. For details see +:ref:`installation-from-obs`. The following {kiwi} plugin needs to be +installed on the build system: + +.. code:: bash + + $ sudo zypper in python3-kiwi_stackbuild_plugin + +Concept +------- + +The design of the stackbuild plugin is two fold: + +First the plugin comes with a command called `stash` which allows +to store a kiwi built root tree as an OCI container. OCI stands for +*Open Container Interface* and is a defacto standard format in the +container world. Once the container got created it can be managed +using the preferred container toolchain. The plugin code itself +uses `podman` to work with containers. + +As a next step and with the root tree as a container the plugin offers +the opportunity to build images based on one ore more containers. +That's also the reason why the plugin is called *stackbuild* as it +allows you to stack different root containers together. +Consequently the other command provided is named `stackbuild`. + +The `stash` and `stackbuild` commands can be used independently +from each other. If there is already a registry with containers +that should be used to build images from, `stackbuild` can +directly consume them. + +This concept leads to a number of use cases and a few of them were +picked and put into the abstract of this article. For the purpose +of documenting the functionality of the plugin only a part of the +possibilities are taken into account as follows: + +.. _stash: + +Create a stash +-------------- + +The `stash` command creates an OCI compliant container from a given +{kiwi-product} image root tree and registers it in the local +container registry. From there a user can push it to any registry +of choice. + +The following example creates a stash of a Tumbleweed build +and illustrates how to register it in a foreign container +registry: + +.. code:: bash + + # Build some image... + $ git clone https://github.com/OSInside/kiwi.git + $ sudo kiwi-ng system build \ + --description kiwi/build-tests/x86/tumbleweed/test-image-MicroOS/ \ + --set-repo http://download.opensuse.org/tumbleweed/repo/oss \ + --target-dir /tmp/myTWToday + + # Stash the image root into a container + $ sudo kiwi-ng system stash \ + --root /tmp/myTWToday/build/image-root \ + --container-name twmos-snapshot + + # Register the stash in a registry + $ podman login + $ podman push twmos-20211008 \ + docker://docker.io/.../twmos-snapshot:2021-10-08 + +If the `stash` command is called multiple times with the same +container-name this leads to a new layer in the container for +each call. To inspect the number of layers added to the +container the following command can be used: + +.. code:: bash + + $ podman inspect twmos-snapshot + +To list all stashes created by the `stash` command the following +command can be used + +.. code:: bash + + $ kiwi-ng system stash --list + +Rebuild from a stash +-------------------- + +The `stackbuild` command takes the given container(s) from the local or +remote registry and uses it/them to either rebuild an image from that +data or build a new image on top of that data. If multiple containers +are given the `stackbuild` command stacks them together in the order +as they were provided. + +.. note:: + + When using multiple containers the result stack root tree is + created from a sequence of rsync commands into the same target + directory. The stackbuild plugin does this with any container + content given and does not check, validate or guarantee that + the selection of containers are actually stackable or leads to + an usable root tree. This means it's in the responsibility of + the caller to make sure the provided containers can actually + be stacked together in the given order. + +To simply rebuild the image from the stash created in :ref:`stash` +call `stackbuild` as follows: + +.. code:: bash + + # Delete the image + $ sudo rm -rf /tmp/myTWToday + + # Rebuild image from stash + $ sudo kiwi-ng system stackbuild \ + --stash twmos-snapshot:2021-10-08 \ + --target-dir /tmp/myTWToday + +This rebuilds the image from the stash and the {kiwi} configuration +inside of the stash. As all rootfs data is already in the stash, the +command will not need external resources to rebuild the image. + +Turn a container into a VM image +-------------------------------- + +Another use case for the `stackbuild` plugin is the transformation +of container images into another image type that is supported by {kiwi}. +The following example demonstrates how an existing container image +from the openSUSE registry can be turned into a virtual machine image. + +When moving a container into a virtual machine image the following +aspects has to be taken into account: + +1. A container image usually has no kernel installed. +2. A container image usually has no bootloader installed. +3. A container image usually has no user configured. + +For a VM image the mentioned aspects are mandatory. Therefore +the following {kiwi} image description contains this additional +information which the container cannot provide: Create the +{kiwi} description as follows: + +.. code:: bash + + $ mkdir container_to_VM_layer + $ vi container_to_VM_layer/config.kiwi + +And place the following content: + +.. code:: xml + + <?xml version="1.0" encoding="utf-8"?> + + <image schemaversion="6.8" name="Leap-VM"> + <description type="system"> + <author>The Author</author> + <contact>u...@example.org</contact> + <specification> + Leap Container as VM + </specification> + </description> + <preferences> + <type image="oem" filesystem="xfs" firmware="uefi"> + <oemconfig> + <oem-resize>false</oem-resize> + </oemconfig> + </type> + <version>1.99.1</version> + <packagemanager>zypper</packagemanager> + <locale>en_US</locale> + <keytable>us</keytable> + <timezone>UTC</timezone> + </preferences> + <repository type="rpm-md" alias="Leap_15_3"> + <source path="obs://openSUSE:Leap:15.3/standard"/> + </repository> + <packages type="image"> + <package name="grub2"/> + <package name="grub2-x86_64-efi" arch="x86_64"/> + <package name="grub2-i386-pc"/> + <package name="shim"/> + <package name="kernel-default"/> + </packages> + <users> + <user password="$1$wYJUgpM5$RXMMeASDc035eX.NbYWFl0" home="/root" name="root" groups="root"/> + </users> + </image> + +To build the virtual machine image from the current hosted Leap 15.3 +container at SUSE, call the following `stackbuild` command: + +.. code:: bash + + $ sudo kiwi-ng system stackbuild \ + --stash leap:15.3 \ + --from-registry registry.opensuse.org/opensuse \ + --target-dir /tmp/myLeap \ + --description container_to_VM_layer + +The resulting virtual machine image can be booted as follows: + +.. code:: bash + + $ qemu-kvm Leap-VM.x86_64-1.99.1.raw diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/doc/source/plugins.rst new/kiwi-9.24.1/doc/source/plugins.rst --- old/kiwi-9.24.0/doc/source/plugins.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/kiwi-9.24.1/doc/source/plugins.rst 2021-10-15 10:02:03.000000000 +0200 @@ -0,0 +1,13 @@ +KIWI Plugins +============ + +.. note:: + + This document provides a list of the existing {kiwi-product} plugins + which provides extended functionality for version |version|. + +.. toctree:: + :maxdepth: 1 + + plugins/self_contained + plugins/stackbuild diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/doc/source/self_contained.rst new/kiwi-9.24.1/doc/source/self_contained.rst --- old/kiwi-9.24.0/doc/source/self_contained.rst 2021-07-14 18:09:36.000000000 +0200 +++ new/kiwi-9.24.1/doc/source/self_contained.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,81 +0,0 @@ -.. _self_contained: - -Building in a Self-Contained Environment -======================================== - -.. note:: **Abstract** - - Users building images with {kiwi} face problems if they want - to build an image matching one of the following criteria: - - * build should happen as non root user. - - * build should happen on a host system distribution for which - no {kiwi} packages exists. - - * build happens on an incompatible host system distribution - compared to the target image distribution. For example - building an apt/dpkg based system on an rpm based system. - - * run more than one build process at the same time on the - same host. - - * run a build process for a different target architecture - compared to the host architecture (Cross Arch Image Build) - - This document describes how to perform the build process in - a self contained environment using fast booting virtual - machines to address the issues listed above. - - The changes on the machine to become a build host will - be reduced to the requirements of the {kiwi} `boxed plugin` - -Requirements ------------- - -Add the {kiwi} repo from the Open Build Service. For details see -:ref:`installation-from-obs`. The following {kiwi} plugin needs to be -installed on the build system: - -.. code:: bash - - $ sudo zypper in python3-kiwi_boxed_plugin - -Building with the boxbuild command ----------------------------------- - -The installation of the {kiwi} boxed plugin has registered a new kiwi -command named `boxbuild`. The command implementation uses KVM as -virtualization technology and runs the {kiwi} `build` command inside of -a KVM controlled virtual machine. For running the build process in a -virtual machine it's required to provide VM images that are suitable -to perform this job. We call the VM images `boxes` and they contain -kiwi itself as well as all other components needed to build appliances. -Those boxes are hosted in the Open Build Service and are publicly -available at the `Subprojects` tab in the: `Virtualization:Appliances:SelfContained <https://build.opensuse.org/project/show/Virtualization:Appliances:SelfContained>`__ -project. - -As a user you don't need to work with the boxes because this is all done -by the plugin and provided as a service by the {kiwi} team. The `boxbuild` -command knows where to fetch the box and also cares for an update of the -box when it has changed. - -Building an image with the `boxbuild` command is similar to building with -the `build` command. The plugin validates the given command call with the -capabilities of the `build` command. Thus one part of the `boxbuild` command -is exactly the same as with the `build` command. The separation between -`boxbuild` and `build` options is done using the `--` separator like -shown in the following example: - -.. code:: bash - - $ kiwi-ng --type iso system boxbuild --box leap -- \ - --description kiwi/build-tests/{exc_description_disk} \ - --set-repo {exc_repo_leap} \ - --target-dir /tmp/myimage - -.. note:: - - The provided `--description` and `--target-dir` options are - setup as shared folders between the host and the guest. No other - data will be shared with the host. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/dracut/modules.d/99kiwi-lib/kiwi-luks-lib.sh new/kiwi-9.24.1/dracut/modules.d/99kiwi-lib/kiwi-luks-lib.sh --- old/kiwi-9.24.0/dracut/modules.d/99kiwi-lib/kiwi-luks-lib.sh 2021-07-14 18:09:36.000000000 +0200 +++ new/kiwi-9.24.1/dracut/modules.d/99kiwi-lib/kiwi-luks-lib.sh 2021-10-15 10:02:03.000000000 +0200 @@ -23,8 +23,22 @@ } function activate_luks { + declare kiwi_luks_empty_passphrase=${kiwi_luks_empty_passphrase} local device=$1 - /usr/lib/systemd/systemd-cryptsetup attach luks "${device}" + if [ "${kiwi_luks_empty_passphrase}" = "true" ];then + # There is no keyfile and kiwi has created the luks pool with + # an empty key. Therefore it can be opened without interaction + # but this requires to manually call luksOpen since + # with systemd-cryptsetup we saw it still asking for + # a passphrase + cryptsetup \ + --key-file /dev/zero \ + --keyfile-size 32 \ + luksOpen "${device}" luks + else + # There is a keyfile and we need to get prompted to enter the passphrase + /usr/lib/systemd/systemd-cryptsetup attach luks "${device}" + fi wait_for_storage_device "/dev/mapper/luks" set_root_map "/dev/mapper/luks" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/kiwi/builder/disk.py new/kiwi-9.24.1/kiwi/builder/disk.py --- old/kiwi-9.24.0/kiwi/builder/disk.py 2021-09-07 16:17:23.000000000 +0200 +++ new/kiwi-9.24.1/kiwi/builder/disk.py 2021-10-15 10:02:03.000000000 +0200 @@ -296,7 +296,7 @@ luks_root.create_crypto_luks( passphrase=self.luks, os=self.luks_os, - keyfile=self.luks_boot_keyfile if luks_need_keyfile else None + keyfile=self.luks_boot_keyfile if luks_need_keyfile else '' ) if luks_need_keyfile: self.luks_boot_keyfile_setup = ''.join( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/kiwi/storage/luks_device.py new/kiwi-9.24.1/kiwi/storage/luks_device.py --- old/kiwi-9.24.0/kiwi/storage/luks_device.py 2021-09-02 16:55:04.000000000 +0200 +++ new/kiwi-9.24.1/kiwi/storage/luks_device.py 2021-10-15 10:02:03.000000000 +0200 @@ -39,7 +39,7 @@ :param object storage_provider: Instance of class based on DeviceProvider """ - def __init__(self, storage_provider: DeviceProvider): + def __init__(self, storage_provider: DeviceProvider) -> None: # bind the underlaying block device providing class instance # to this object (e.g loop) if present. This is done to guarantee # the correct destructor order when the device should be released. @@ -73,8 +73,8 @@ def create_crypto_luks( self, passphrase: str, os: str = None, - options: list = None, keyfile: str = None - ): + options: list = None, keyfile: str = '' + ) -> None: """ Create luks device. Please note the passphrase is readable at creation time of this image. Make sure your host system @@ -156,7 +156,7 @@ ) self.luks_device = '/dev/mapper/' + self.luks_name - def create_crypttab(self, filename: str): + def create_crypttab(self, filename: str) -> None: """ Create crypttab, setting the UUID of the storage device @@ -192,7 +192,7 @@ return self.storage_provider.is_loop() @staticmethod - def create_random_keyfile(filename: str): + def create_random_keyfile(filename: str) -> None: """ Create keyfile with random data diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/kiwi/system/profile.py new/kiwi-9.24.1/kiwi/system/profile.py --- old/kiwi-9.24.0/kiwi/system/profile.py 2021-09-02 16:55:04.000000000 +0200 +++ new/kiwi-9.24.1/kiwi/system/profile.py 2021-10-15 10:02:03.000000000 +0200 @@ -334,6 +334,8 @@ type_section.get_vga() self.dot_profile['kiwi_startsector'] = \ self.xml_state.get_disk_start_sector() + self.dot_profile['kiwi_luks_empty_passphrase'] = \ + True if type_section.get_luks() == '' else False def _profile_names_to_profile(self): # kiwi_profiles diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/kiwi/system/result.py new/kiwi-9.24.1/kiwi/system/result.py --- old/kiwi-9.24.0/kiwi/system/result.py 2021-07-14 18:09:36.000000000 +0200 +++ new/kiwi-9.24.1/kiwi/system/result.py 2021-10-13 09:15:07.000000000 +0200 @@ -16,6 +16,7 @@ # along with kiwi. If not, see <http://www.gnu.org/licenses/> # import logging +import simplejson import pickle import os from typing import ( @@ -96,11 +97,16 @@ for key, value in sorted(list(self.result_files.items())): log.info('--> %s: %s', key, value.filename) - def dump(self, filename: str) -> None: + def dump(self, filename: str, portable: bool = True) -> None: """ Picke dump this instance to a file :param str filename: file path name + :param bool portable: + If set to true also create a .json formatted variant + of the dump file which contains the elements of this + instance that could be expressed in a portable json + document. Default is set to: True :raises KiwiResultError: if pickle fails to dump :class:`Result` instance @@ -108,6 +114,13 @@ try: with open(filename, 'wb') as result: pickle.dump(self, result) + if portable: + with open(filename + '.json', 'w') as result_portable: + result_portable.write( + simplejson.dumps( + self.result_files, sort_keys=True, indent=4 + ) + os.linesep + ) except Exception as e: raise KiwiResultError( 'Failed to pickle dump results: %s' % format(e) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/kiwi/version.py new/kiwi-9.24.1/kiwi/version.py --- old/kiwi-9.24.0/kiwi/version.py 2021-10-07 09:54:22.000000000 +0200 +++ new/kiwi-9.24.1/kiwi/version.py 2021-10-15 10:02:06.000000000 +0200 @@ -18,5 +18,5 @@ """ Global version information used in kiwi and the package """ -__version__ = '9.24.0' -__githash__ = '1f545b82c17fbcb5ef74ed169ad59662ffb03bcd' +__version__ = '9.24.1' +__githash__ = '4467c1e4d93b94708e3a8587cde68dc45b2a4826' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/kiwi.egg-info/PKG-INFO new/kiwi-9.24.1/kiwi.egg-info/PKG-INFO --- old/kiwi-9.24.0/kiwi.egg-info/PKG-INFO 2021-10-07 09:57:15.000000000 +0200 +++ new/kiwi-9.24.1/kiwi.egg-info/PKG-INFO 2021-10-15 10:04:09.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: kiwi -Version: 9.24.0 +Version: 9.24.1 Summary: KIWI - Appliance Builder (next generation) Home-page: https://osinside.github.io/kiwi Author: Marcus Schaefer diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/kiwi.egg-info/SOURCES.txt new/kiwi-9.24.1/kiwi.egg-info/SOURCES.txt --- old/kiwi-9.24.0/kiwi.egg-info/SOURCES.txt 2021-10-07 09:57:15.000000000 +0200 +++ new/kiwi-9.24.1/kiwi.egg-info/SOURCES.txt 2021-10-15 10:04:09.000000000 +0200 @@ -30,8 +30,8 @@ doc/source/index.rst doc/source/installation.rst doc/source/overview.rst +doc/source/plugins.rst doc/source/quickstart.rst -doc/source/self_contained.rst doc/source/troubleshooting.rst doc/source/working_with_images.rst doc/source/.images/intro.png @@ -92,6 +92,8 @@ doc/source/contributing/scripts_testing.rst doc/source/image_description/elements.rst doc/source/overview/workflow.rst +doc/source/plugins/self_contained.rst +doc/source/plugins/stackbuild.rst doc/source/troubleshooting/filesystems.rst doc/source/working_with_images/build_in_buildservice.rst doc/source/working_with_images/build_with_profiles.rst diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/kiwi.egg-info/requires.txt new/kiwi-9.24.1/kiwi.egg-info/requires.txt --- old/kiwi-9.24.0/kiwi.egg-info/requires.txt 2021-10-07 09:57:15.000000000 +0200 +++ new/kiwi-9.24.1/kiwi.egg-info/requires.txt 2021-10-15 10:04:09.000000000 +0200 @@ -3,3 +3,4 @@ pyxattr requests PyYAML +simplejson diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/package/python-kiwi-spec-template new/kiwi-9.24.1/package/python-kiwi-spec-template --- old/kiwi-9.24.0/package/python-kiwi-spec-template 2021-10-06 17:10:46.000000000 +0200 +++ new/kiwi-9.24.1/package/python-kiwi-spec-template 2021-10-13 09:15:07.000000000 +0200 @@ -335,6 +335,7 @@ %else Requires: python%{python3_pkgversion}-PyYAML %endif +Requires: python%{python3_pkgversion}-simplejson Requires: python%{python3_pkgversion}-docopt Requires: python%{python3_pkgversion}-lxml Requires: python%{python3_pkgversion}-requests diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/setup.py new/kiwi-9.24.1/setup.py --- old/kiwi-9.24.0/setup.py 2021-10-07 09:57:12.000000000 +0200 +++ new/kiwi-9.24.1/setup.py 2021-10-15 10:04:09.000000000 +0200 @@ -66,7 +66,8 @@ 'lxml', 'pyxattr', 'requests', - 'PyYAML' + 'PyYAML', + 'simplejson' ], 'packages': ['kiwi'], 'cmdclass': { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/test/data/example_dot_profile_config.xml new/kiwi-9.24.1/test/data/example_dot_profile_config.xml --- old/kiwi-9.24.0/test/data/example_dot_profile_config.xml 2021-07-14 18:09:37.000000000 +0200 +++ new/kiwi-9.24.1/test/data/example_dot_profile_config.xml 2021-10-15 10:02:03.000000000 +0200 @@ -19,7 +19,7 @@ <rpm-check-signatures>false</rpm-check-signatures> <bootsplash-theme>openSUSE</bootsplash-theme> <bootloader-theme>openSUSE</bootloader-theme> - <type image="oem" primary="true" filesystem="ext3" installiso="true" kernelcmdline="splash" firmware="efi" ramonly="true" xen_server="true"> + <type image="oem" primary="true" filesystem="ext3" installiso="true" kernelcmdline="splash" firmware="efi" ramonly="true" xen_server="true" luks=""> <systemdisk> <volume name="usr/lib" size="1G"/> <volume name="@root" freespace="500M"/> Binary files old/kiwi-9.24.0/test/unit/.coverage and new/kiwi-9.24.1/test/unit/.coverage differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/test/unit/system/profile_test.py new/kiwi-9.24.1/test/unit/system/profile_test.py --- old/kiwi-9.24.0/test/unit/system/profile_test.py 2021-09-02 16:55:04.000000000 +0200 +++ new/kiwi-9.24.1/test/unit/system/profile_test.py 2021-10-15 10:02:03.000000000 +0200 @@ -93,6 +93,7 @@ 'kiwi_type': 'oem', 'kiwi_vga': None, 'kiwi_startsector': 2048, + 'kiwi_luks_empty_passphrase': True, 'kiwi_wwid_wait_timeout': None, 'kiwi_xendomain': 'dom0', 'kiwi_rootpartuuid': None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kiwi-9.24.0/test/unit/system/result_test.py new/kiwi-9.24.1/test/unit/system/result_test.py --- old/kiwi-9.24.0/test/unit/system/result_test.py 2021-07-14 18:09:37.000000000 +0200 +++ new/kiwi-9.24.1/test/unit/system/result_test.py 2021-10-13 09:15:07.000000000 +0200 @@ -1,6 +1,6 @@ import logging from mock import ( - patch, Mock, mock_open + patch, Mock, mock_open, call ) from pytest import ( raises, fixture @@ -39,18 +39,22 @@ self.result.print_results() @patch('pickle.dump') - def test_dump(self, mock_pickle_dump): - + @patch('simplejson.dumps') + def test_dump(self, mock_simplejson_dumps, mock_pickle_dump): m_open = mock_open() with patch('builtins.open', m_open, create=True): assert self.result.dump('kiwi.result') is None - m_open.assert_called_once_with( - 'kiwi.result', 'wb' - ) + assert m_open.call_args_list == [ + call('kiwi.result', 'wb'), + call('kiwi.result.json', 'w') + ] mock_pickle_dump.assert_called_once_with( self.result, m_open.return_value ) + mock_simplejson_dumps.assert_called_once_with( + self.result.result_files, sort_keys=True, indent=4 + ) @patch('pickle.dump') def test_dump_failed(self, mock_pickle_dump):