6 Data modules #
Data modules are essentially directories in the data tree. There are
three different kinds of data modules:
Image Definition Modules
Any part of the image definition can be in a data module that is
included by the _include statement from the main image definition.
Image Configuration Scriptlets
Configuration scriptlets are stored in data/scripts.
Those scriptlets can be used to compose an image configuration script or
image setup script config and setup key in the image definition.
Overlay Files
Files that can be directly included in the image description and will be
copied into the image’s file system by KIWI during the build process.
Overlay files are stored under data/overlayfiles.
6.1 Image definition modules #
Any directory under data that is not scripts or overlayfiles
is considered an image definition data module and may be included in the
main image definition using the _include statement.
Inheritance rules apply similarly to the image definition tree, but
additionally, keg supports sub-versions of data modules. This can be used for
instance to create slightly different versions of modules for use with
different image versions while still sharing most of the image definition
between those versions.
For this purpose, keg supports the include-paths directive in the image
definition. Include paths are paths that get appended to any source path and
those get scanned for input files as well. See the following image definition
as an example:
include-paths:
leap15/1
leap15/2
image:
preferences:
- _include:
- base/common
packages:
- _include:
- base/common
config:
- _include:
- base/commonThis tells keg, when adding data from directory data/base/common to
the image data dictionary, to also look into sub directories leap15/2,
leap15/1, and leap15 (through inheritance). This would lead to
the following directories being scanned:
data data/common data/common/base data/common/base/leap15 data/common/base/leap15/1 data/common/base/leap15/2
This allows for example to put generic configuration bits in
data/common/base, Leap 15 specific configuration in
data/common/base/leap15, and adjust the configuration for minor
versions, if necessary.
When merging the included dictionaries into the main dictionary, keg only
copies the dictionary under the top level key that matches the key under
which the _include statement is. That means, assuming the YAML files
collected from the above trees resulted in the following data structure:
preferences:
locale: en_US
timezone: UTC
type:
_attributes:
firmware: efi
image: vmx
packages:
_namespace_base_packages:
package:
- bash
- glibc
- kernel-default
config:
_namespace_base_services:
services:
- sshdWould result in a data structure like this:
include-paths:
leap15/1
leap15/2
image:
preferences:
locale: en_US
timezone: UTC
type:
_attributes:
firmware: efi
image: vmx
packages:
_namespace_base_packages:
package:
- bash
- glibc
- kernel-default
config:
_namespace_base_services:
services:
- sshdMerging based on the parent key allows for grouping of different types of configuration data in one data module.
6.2 Image configuration scriptlets #
Configuration scriptlets are individual script snippets that can be used
to generate image configuration scripts. KIWI runs those scripts at
certain points in the image build process. They can be used to do changes
to the system’s configuration.
The scriptlets are located in data/scripts and are required to have a
.sh suffix. These are referenced in the scripts lists of the config
or setup sections in the image definition (without the .sh suffix).
See Section 5.1.2, “config” for details on the config section.
6.3 Overlay files #
KIWI image descriptions can contain optional overlay archives, which will be
extracted into the system’s root directory before the image is created.
Overlay files are located in sub-directories in data/overlayfiles,
with each sub-directory representing an overlay files module. Any directory
structure under the module’s top directory is preserved.
Overlay files modules can be referenced in the archive section of the image
definition using the _include_overlays directive. See Section 5.1.4, “archive” for
details.