1 Overview #
Abstract
This document provides a conceptual overview about the steps of creating
                an image description with keg which can be used to build an appliance
                with the KIWI appliance builder.
Copyright © 2022 SUSE LLC and contributors. All rights reserved.
Except where otherwise noted, this document is licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC-BY-SA 4.0): https://creativecommons.org/licenses/by-sa/4.0/legalcode.
For SUSE trademarks, see http://www.suse.com/company/legal/. All third-party trademarks are the property of their respective owners. Trademark symbols (®, ™ etc.) denote trademarks of SUSE and its affiliates. Asterisks (*) denote third-party trademarks.
All information found in this book has been compiled with utmost attention to detail. However, this does not guarantee complete accuracy. Neither SUSE LLC, its affiliates, the authors nor the translators shall be held liable for possible errors or the consequences thereof.
1.1 Conceptual overview #
Keg is a tool which helps to create and manage image descriptions for use with
                the KIWI appliance builder. A KIWI
                image description consists of a single XML document that specifies type,
                configuration, and content of the image to build. Optionally there can be
                configuration scripts and overlay archives added to an image description,
                which allow for further configuration and additional content.
Since KIWI image descriptions are monolithic, maintaining a number of image
                descriptions that have considerable overlap with respect to content and setup
                can be cumbersome and error-prone. Keg attempts to alleviate that by
                allowing image descriptions to be broken into modules. Those modules can be
                composed in different ways in so called image definitions, and modules can
                inherit from parent modules which allows for fine-tuning for specific image
                setups. Configuration scripts and overlay archives can also be generated in a
                modular fashion.
The collection of source data required for keg to produce image descriptions
                is called recipes. Keg recipes are typically kept in a git repository,
                and keg has support for producing change logs from git commit history, but
                this is not a requirement. A recipes repository provides keg with the
                information how an image description is to be composed as well as the content
                of the components.
The basic principle of operation is that when keg is executed, it is pointed
                to a directory within the recipes repository and it reads any YAML files in
                that directory and any parent directories and merges their contents into a
                dictionary. How the image definition data is structured and composed is not
                relevant, as long as the resulting dictionary represents a valid image
                definition. This allows for a lot of flexibility in the layout of a recipes
                repository. The SUSE Public Cloud Keg Recipes repository provides an example of a
                highly modular one with strong use of inheritance.
For more details on what constitutes a recipes repository, see section
                Chapter 4, Recipes basics (ff).
1.2 Working with keg #
To create an image description, keg needs to be installed, as well
                as KIWI, as the latter is used by keg to validate the final image
                description. See Chapter 2, Installation for information about how to install
                keg, and KIWI Installation about how to install
                KIWI.
Additionally, a recipes repository is required. The following example uses
                the aforementioned SUSE Public Cloud keg recipes:
$ git clone https://github.com/SUSE-Enceladus/keg-recipes.git
$ mkdir sles15-sp4-byos
$ keg --recipes-root keg-recipes --dest-dir sles15-sp4-byos \
      cross-cloud/sles/byos/15-sp4After the keg command completes the destination directory specified with
                --dest-dir contains a description for a SUSE Linux Enterprise Server 15 SP4
                image for use in the Public Clouds. It can be processed with KIWI to build an
                image. For more details about KIWI image descriptions, see
                https://osinside.github.io/kiwi/image_description.html.
Recipes used to generate an image description can be spread over multiple
                repositories. For that purpose, the --recipes-root command line argument may
                be given multiple times, with each one specifying a different recipes
                repository. Repositories will be searched in the order they are specified, and
                for any dictionary key, config scriptlet, or overlay archive module that
                exists in multiple repositories, the one that is read last will be used.
Using multiple repositories for recipes can be useful in some
                situations. For example, if some parts of recipes data are public and some
                private, they can be kept in different repositories. It could also be used to
                base recipes on an upstream repository and only maintain additional image
                definitions or modifications in a separate repository.
Keg also provides support for producing image descriptions for use with the
                Open Build Service. It can generate
                _multibuild files that are required by OBS for image descriptions with
                multiple profiles, and it comes with an OBS Source Service plug-in for
                automating generating image descriptions. See Chapter 8, Keg OBS source service
                for details.