kiwi-el8/doc/source/image_description/elements.rst
Marcus Schäfer 94de1336d8
Support custom partitions
In addition to the volume volume management settings also
allow to setup low level table entries like in the following
example:

<partitions>
    <partition name="var" size="100" mountpoint="/var" filesystem="ext3"/>
</partitions>
2021-11-03 13:31:17 +01:00

1202 lines
43 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.. _image-description-elements:
Image Description Elements
==========================
.. note::
This document provides a reference for the elements
and attributes of the {kiwi} XML document in version |version|
.. _sec.image:
<image>
-------
The toplevel of any {kiwi} image description
.. code:: xml
<image schemaversion="{schema_version}" name="{exc_image_base_name}">
<!-- descendants -->
</image>
The image definition starts with an image tag and requires the schema
format at version {schema_version}. The attribute name specifies the name
of the image which is also used for the filenames created by KIWI. Because
we dont want spaces in filenames the name attribute must not have any
spaces in its name.
The following optional attributes can be inserted in the image tag:
displayname
Allows setup of the boot menu title for the selected boot loader. So
you can have *suse-SLED-foo* as the image name but a different name
as the boot display name. Spaces are not allowed in the display name
because it causes problems for some boot loaders and kiwi did not
take the effort to separate the ones which can display them correctly
from the ones which can't
id
sets an identification number which appears as file ``/etc/ImageID``
within the image.
.. _sec.include:
<include>
---------
Optional include of XML file content from file
.. code:: xml
<image schemaversion="{schema_version}" name="{exc_image_base_name}">
<include from="description.xml"/>
</image>
with file :file:`description.xml` as follows:
.. code:: xml
<image>
<description type="system">
<author>name</author>
<contact>contact</contact>
<specification>text</specification>
</description>
</image>
This will replace the `include` statement with the contents
of :file:`description.xml`. The validation of the result happens
after the inclusion of all `include` references.
.. note::
The include information must be embedded into an `<image>`
root node. Only the inner elements of the root node will
be included. The processing of XML data via XSLT always
requires a root node which is the reason why this is
required to be specified for include files as well.
.. note::
Nesting of include statements in other include files is
not supported. This will lead to unresolved include
statements in the final document and will cause the
runtime checker to complain about it.
.. note::
The include is implemented via a XSLT stylesheet and therefore
expects an XML document. Other markup formats are not supported
as include reference.
.. _sec.description:
<description>
-------------
Provide an image identity.
.. code:: xml
<description type="system">
<author>name</author>
<contact>contact</contact>
<specification>text</specification>
</description>
The mandatory description section contains information about the creator
of this image description. The attribute type could be either of the
value `system` which indicates this is a system image description or at
value `boot` for custom kiwi boot image descriptions.
The following optional sub sections can be inserted below the description tag:
license
Specifies the license name which applies to this image description.
.. _sec.preferences:
<preferences>
-------------
Setup image type and layout.
.. code:: xml
<preferences arch="arch">
<version>1.2.3</version>
<packagemanager name="zypper"/>
<type image="tbz"/>
</preferences>
The mandatory preferences section contains information about the
supported image type(s), the used package manager, the version of this
image, and further optional elements. The preferences section can
be configured to apply only for a certain architecture. In this
case specify the `arch` attribute with a value as it is reported
by :command:`uname -m`
<preferences><version>
~~~~~~~~~~~~~~~~~~~~~~
The mandatory image version must be a three-part version number of the
format: **Major**.\ **Minor**.\ **Release**. In case of changes to
the image description the following rules should apply:
* For smaller image modifications that do not add or remove any new
packages, only the release number is incremented. The XML description
file(``config.xml``) remains unchanged.
* For image changes that involve the addition or removal of packages
the minor number is incremented and the release number is reset.
* For image changes that changes the behavior or geometry of the
image file the major number is incremented.
<preferences><packagemanager>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The mandatory packagemanager element specifies which package manager
should be used to handle software packages. The packagemanager setup
is connected to the distribution used to build the image. The following
table shows which package manager is connected to which distributor:
+--------------+-----------------+
| Distributor | Package Manager |
+==============+=================+
| SUSE | zypper |
+--------------+-----------------+
| RedHat | dnf |
+--------------+-----------------+
| Debian Based | apt |
+--------------+-----------------+
| Arch Linux | pacman |
+--------------+-----------------+
In general the specification of one preferences section is sufficient.
However, its possible to specify multiple preferences sections and
distinguish between the sections via the profiles attribute.
In combination with the above the preferences element supports the
following optional elements:
<preferences><rpm-locale-filtering>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
locale-filtering can be set to "true" or "false". If set to "true" it
sets the install_lang macro for RPM based installations to the RPM
configured locale list. This results in language specific files to
become filtered out by `rpm` if they don't match the configured list.
.. code:: xml
<preferences>
<rpm-locale-filtering>true</rpm-locale-filtering>
</preferences>
.. note::
It depends on the individual package design if the install_lang
macro contents apply to the package or not.
<preferences><rpm-check-signatures>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Specifies whether package signatures should be checked or not
.. code:: xml
<preferences>
<rpm-check-signatures>true</rpm-check-signatures>
</preferences>
<preferences><rpm-excludedocs>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Specifies whether files marked as documentation should be skipped
during installation
.. code:: xml
<preferences>
<rpm-excludedocs>true</rpm-excludedocs>
</preferences>
<preferences><keytable>
~~~~~~~~~~~~~~~~~~~~~~~
Specifies the name of the console keymap to use. The value
corresponds to a map file in ``/usr/share/kbd/keymaps/xkb``.
.. code:: xml
<preferences>
<keytable>us</keytable>
</preferences>
<preferences><timezone>
~~~~~~~~~~~~~~~~~~~~~~~
Specifies the time zone. Available time zones are located in the
``/usr/share/zoneinfo`` directory. Specify the attribute value
relative to ``/usr/share/zoneinfo``. For example, specify
Europe/Berlin for ``/usr/share/zoneinfo/Europe/Berlin``.
.. code:: xml
<preferences>
<timezone>Europe/Berlin</timezone>
</preferences>
<preferences><locale>
~~~~~~~~~~~~~~~~~~~~~
Specifies the name of the UTF-8 locale to use, which defines the
contents of the RC_LANG system environment variable used in the
image and to run the custom scripts specified as part of the
{kiwi} image description. Please note only UTF-8 locales are
supported here which also means that the encoding must *not* be part
of the locale information. This means you need to specify the
locale using the 4-digit name like the following example: en_US or
en_US,de_DE
.. code:: xml
<preferences>
<locale>en_US</locale>
</preferences>
<preferences><bootsplash-theme>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Specifies the name of the plymouth bootsplash theme to use
.. code:: xml
<preferences>
<bootsplash-theme>bgrt</bootsplash-theme>
</preferences>
<preferences><bootloader-theme>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Specifies the name of the bootloader theme to use if that used
bootloader has theme support.
.. code:: xml
<preferences>
<bootloader-theme>openSUSE</bootloader-theme>
</preferences>
Along with the version and the packagemanager at least one image type
element must be specified to indicate which image type should be build.
<preferences><type>
~~~~~~~~~~~~~~~~~~~
At least one type element must be configured. It is possible to
specify multiple type elements in a preferences block. To set a given
type description as the default image use the boolean attribute primary
and set its value to true:
.. code:: xml
<preferences>
<type image="typename" primary="true"/>
</preferences>
The image type to be created is determined by the value of the image
attribute. The following list describes the supported types and
possible values of the image attribute:
image="tbz"
A simple tar archive image. The tbz type packs the contents of
the image root tree into a xz compressed tarball.
image="btrfs|ext2|ext3|ext4|squashfs|xfs"
A filesystem image. The image root tree data is packed into a
filesystem image of the given type. An image of that type can
be loop mounted and accessed according to the capabiities of
the selected filesystem.
image="iso"
An iso image which can be dumped on a CD/DVD or USB stick
and boots off from this media without interfering with other
system storage components. A useful pocket system for testing
and demo and debugging purposes.
image="oem"
An image representing an expandable system disk. This means after
deployment the system can resize itself to the new disk geometry.
The resize operation is configurable as part of the image description
and an installation image for CD/DVD, USB stick and Network deployment
can be created in addition. For use in cloud frameworks like
Amazon EC2, Google Compute Engine or Microsoft Azure this disk
type also supports the common virtual disk formats.
image="docker"
An archive image suitable for the docker container engine.
The image can be loaded via the `docker load` command and
works within the scope of the container engine
image="oci"
An archive image that builds a container matching the OCI
(Open Container Interface) standard. The container should be
able to run with any oci compliant container engine.
image="appx"
An archive image suitable for the Windows Subsystem For Linux
container engine. The image can be loaded From a Windows System
that has support for WSL activated.
image="kis"
An optional root filesystem image associated with a kernel and initrd.
The use case for this component image type is highly customizable.
Many different deployment strategies are possible.
For completion of a type description, there could be several other
optional attributes and child elements. The `type` element supports a
plethora of optional attributes, some of these are only relevant for
certain build types and will be covered in extra chapters that describes
the individual image types more detailed. Certain attributes are however
useful for nearly all build types and will be covered next:
bootpartition="true|false":
Boolean parameter notifying {kiwi} whether an extra boot
partition should be used or not (the default depends on the current
layout). This will override {kiwi}'s default layout.
bootpartsize="nonNegativeInteger":
For images with a separate boot partition this attribute
specifies the size in MB. If not set the boot partition
size is set to 200 MB
efipartsize="nonNegativeInteger":
For images with an EFI fat partition this attribute
specifies the size in MB. If not set the EFI partition
size is set to 20 MB
efiparttable="msdos|gpt":
For images with an EFI firmware specifies the partition
table type to use. If not set defaults to the GPT partition
table type
btrfs_quota_groups="true|false":
Boolean parameter to activate filesystem quotas if
the filesystem is `btrfs`. By default quotas are inactive.
btrfs_root_is_snapshot="true|false":
Boolean parameter that tells {kiwi} to install
the system into a btrfs snapshot. The snapshot layout is compatible with
snapper. By default snapshots are turned off.
btrfs_root_is_readonly_snapshot="true|false":
Boolean parameter notifying {kiwi} that
the btrfs root filesystem snapshot has to made read-only. if this option
is set to true, the root filesystem snapshot it will be turned into
read-only mode, once all data has been placed to it. The option is only
effective if `btrfs_root_is_snapshot` is also set to true. By default the
root filesystem snapshot is writable.
compressed="true|false":
Specifies whether the image output file should be
compressed or not. This option is only used for filesystem only images or
for the `pxe` or `cpio` types.
editbootconfig="file_path":
Specifies the path to a script which is called right
before the bootloader is installed. The script runs relative to the
directory which contains the image structure.
editbootinstall="file_path":
Specifies the path to a script which is called right
after the bootloader is installed. The script runs relative to the
directory which contains the image structure.
filesystem="btrfs|ext2|ext3|ext4|squashfs|xfs":
The root filesystem
firmware="efi|uefi":
Specifies the boot firmware of the appliance, supported
options are: `bios`, `ec2`, `efi`, `uefi`, `ofw` and `opal`.
This attribute is used to differentiate the image according to the
firmware which boots up the system. It mostly impacts the disk
layout and the partition table type. By default `bios` is used on x86,
`ofw` on PowerPC and `efi` on ARM.
force_mbr="true|false":
Boolean parameter to force the usage of a MBR partition
table even if the system would default to GPT. This is occasionally
required on ARM systems that use a EFI partition layout but which must
not be stored in a GPT. Note that forcing a MBR partition table incurs
limitations with respect to the number of available partitions and their
sizes.
fsmountoptions="option_string":
Specifies the filesystem mount options which are passed
via the `-o` flag to :command:`mount` and are included in
:file:`/etc/fstab`.
fscreateoptions="option_string":
Specifies the filesystem options used to create the
filesystem. In {kiwi} the filesystem utility to create a filesystem is
called without any custom options. The default options are filesystem
specific and are provided along with the package that provides the
filesystem utility. For the Linux `ext[234]` filesystem, the default
options can be found in the :file:`/etc/mke2fs.conf` file. Other
filesystems provides this differently and documents information
about options and their defaults in the respective manual page, e.g
:command:`man mke2fs`. With the `fscreateoptions` attribute it's possible
to directly influence how the filesystem will be created. The options
provided as a string are passed to the command that creates the
filesystem without any further validation by {kiwi}. For example, to turn
off the journal on creation of an ext4 filesystem the following option
would be required:
.. code:: xml
<preferences>
<type fscreateoptions="-O ^has_journal"/>
</preferences>
kernelcmdline="string":
Additional kernel parameters passed to the kernel by the
bootloader.
luks="passphrase":
Supplying a value will trigger the encryption of the partitions
using the LUKS extension and using the provided string as the
password. Note that the password must be entered when booting the
appliance!
target_blocksize="number":
Specifies the image blocksize in bytes which has to
match the logical blocksize of the target storage device. By default 512
Bytes is used, which works on many disks. You can obtain the blocksize
from the `SSZ` column in the output of the following command:
.. code:: shell-session
blockdev --report $DEVICE
target_removable="true|false":
Indicate if the target disk for oem images is deployed
to a removable device e.g a USB stick or not. This only
affects the EFI setup if requested and in the end avoids
the creation of a custom boot menu entry in the firmware
of the target machine. By default the target disk is
expected to be non-removable
spare_part="number":
Request a spare partition right before the root partition
of the requested size. The attribute takes a size value
and allows a unit in MB or GB, e.g 200M. If no unit is given
the value is considered to be mbytes. A spare partition
can only be configured for the disk image type oem
spare_part_mountpoint="dir_path":
Specify mount point for spare partition in the system.
Can only be configured for the disk image type oem
spare_part_fs="btrfs|ext2|ext3|ext4|xfs":
Specify filesystem for spare partition in the system.
Can only be configured for the disk image type oem
spare_part_fs_attributes="attribute_list":
Specify filesystem attributes for the spare partition.
Attributes can be specified as comma separated list.
Currently the attributes `no-copy-on-write` and `synchronous-updates`
are available. Can only be configured for the disk image
type oem
spare_part_is_last="true|false":
Specify if the spare partition should be the last one in
the partition table. Can only be configured for the `oem`
type with oem-resize switched off. By default the root
partition is the last one and the spare partition lives
before it. With this attribute that setup can be toggled.
However, if the root partition is no longer the last one
the oem repart/resize code can no longer work because
the spare part would block it. Because of that moving
the spare part at the end of the disk is only applied
if oem-resize is switched off. There is a runtime
check in the {kiwi} code to check this condition
devicepersistency="by-uuid|by-label":
Specifies which method to use for persistent device names.
This will affect all files written by kiwi that includes
device references for example `etc/fstab` or the `root=`
parameter in the kernel commandline. By default by-uuid
is used
squashfscompression="uncompressed|gzip|lzo|lz4|xz|zstd":
Specifies the compression type for mksquashfs
overlayroot="true|false"
For the `oem` type only, specifies to use an `overlayfs` based root
filesystem consisting out of a squashfs compressed read-only root
filesystem combined with a write-partition or tmpfs.
The optional kernel boot parameter `rd.root.overlay.readonly` can
be used to point the write area into a `tmpfs` instead of
the existing persistent write-partition. In this mode all
written data is temporary until reboot of the system. The kernel
boot parameter `rd.root.overlay.size` can be used to configure
the size for the `tmpfs` that is used for the `overlayfs` mount
process if `rd.root.overlay.readonly` is requested. That size
basically configures the amount of space available for writing
new data during the runtime of the system. The default value
is set to `50%` which means one half of the available RAM space can
be used for writing new data. By default the persistent
write-partition is used. The size of that partition can be
influenced via the optional `<size>` element in the `<type>`
section or via the optional `<oem-resize>` element in the
`<oemconfig>` section of the XML description. Setting a fixed
`<size>` value will set the size of the image disk to that
value and results in an image file of that size. The available
space for the write partition is that size reduced by the
size the squashfs read-only system needs. If the `<oem-resize>`
element is set to `true` an eventually given `<size>` element
will not have any effect because the write partition will be
resized on first boot to the available disk space.
bootfilesystem="ext2|ext3|ext4|fat32|fat16":
If an extra boot partition is required this attribute
specify which filesystem should be used for it. The
type of the selected bootloader might overwrite this
setting if there is no alternative possible though.
flags="overlay|dmsquash"
For the iso image type specifies the live iso technology and
dracut module to use. If set to overlay the kiwi-live dracut
module will be used to support a live iso system based on
squashfs+overlayfs. If set to dmsquash the dracut standard
dmsquash-live module will be used to support a live iso
system based on the capabilities of the upstream dracut
module.
format="gce|ova|qcow2|vagrant|vmdk|vdi|vhd|vhdx|vhd-fixed":
For disk image type oem, specifies the format of
the virtual disk such that it can run on the desired target
virtualization platform.
formatoptions="string":
Specifies additional format options passed on to qemu-img
formatoptions is a comma separated list of format specific
options in a name=value format like qemu-img expects it.
kiwi will take the information and pass it as parameter to
the -o option in the qemu-img call
fsmountoptions="string":
Specifies the filesystem mount options which also ends up in fstab
The string given here is passed as value to the -o option of mount
fscreateoptions="string":
Specifies options to use at creation time of the filesystem
force_mbr="true|false":
Force use of MBR (msdos table) partition table even if the
use of the GPT would be the natural choice. On e.g some
arm systems an EFI partition layout is required but must
not be stored in a GPT. For those rare cases this attribute
allows to force the use of the msdos table including all
its restrictions in max partition size and amount of
partitions
gpt_hybrid_mbr="true|false":
For GPT disk types only: Create a hybrid GPT/MBR partition table
hybridpersistent="true|false":
For the live ISO type, triggers the creation of a partition for
a COW file to keep data persistent over a reboot
hybridpersistent_filesystem="ext4|xfs":
For the live ISO type, set the filesystem to use for persistent
writing if a hybrid image is used as disk on e.g a USB Stick.
By default the ext4 filesystem is used.
initrd_system="kiwi|dracut|none":
Specify which initrd builder to use, default is set to `dracut`.
If set to `none` the image is build without an initrd. Depending
on the image type this can lead to a non bootable system as its
now a kernel responsibility if the given root device can be
mounted or not.
metadata_path="dir_path":
Specifies a path to additional metadata required for the selected
image type or its tools used to create that image type.
.. note::
Currently this is only effective for the appx container image type.
installboot="failsafe-install|harddisk|install":
Specifies the bootloader default boot entry for the initial
boot of a {kiwi} install image.
.. note::
This value is only evaluated for grub
install_continue_on_timeout="true|false":
Specifies the boot timeout handling for the {kiwi}
install image. If set to "true" the configured timeout
or its default value applies. If set to "false" no
timeout applies in the boot menu of the install image.
installprovidefailsafe="true|false":
Specifies if the bootloader menu should provide an
failsafe entry with special kernel parameters or not
installiso="true|false"
Specifies if an install iso image should be created.
This attribute is only available for the `oem` type.
The generated ISO image is an hybrid ISO which can be
used as disk on e.g a USB stick or as ISO.
installpxe="true|false":
Specifies if a tarball that contains all data for a pxe network
installation should be created. This attribute is only available
for the `oem` type.
mediacheck="true|false":
For ISO images, specifies if the bootloader menu should provide an
mediacheck entry to verify ISO integrity or not. Disabled by default
and only available for the x86 arch family.
mdraid="mirroring|striping":
Setup software raid in degraded mode with one disk
Thus only mirroring and striping is possible
primary="true|false":
Specifies this type to be the primary type. If no type option
is given on the commandline, {kiwi} will build this type
ramonly="true|false":
For all images that are configured to use the overlay filesystem
this setting forces any COW(Copy-On-Write) action to happen in RAM.
rootfs_label="string":
Label name to set for the root filesystem. By default `ROOT` is used
volid="string":
For the ISO type only, specifies the volume ID (volume name or label)
to be written into the master block. There is space for 32 characters.
vhdfixedtag="GUID_string":
For the VHD disk format, specifies the GUID
derived_from="string":
For container images, specifies the image URI of the container image.
The image created by {kiwi} will use the specified container as the
base root to work on.
publisher="string":
For ISO images, specifies the publisher name of the ISO.
The following sections shows the supported child elements of the `type`
element including references to their usage in a detailed type setup:
<preferences><type><bootloader>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Used to describe the bootloader setup in the oem disk image type.
For details see: :ref:`disk-bootloader`
<preferences><type><containerconfig>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Used to describe the container configuration metadata in docker or wsl
image types. For details see: :ref:`building_docker_build` and:
:ref:`building_wsl_build`
<preferences><type><vagrantconfig>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Used to describe vagrant configuration metadata in a disk image
that is being used as a vagrant box. For details see: :ref:`setup_vagrant`
<preferences><type><systemdisk>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Used to describe the volumes of the disk area which
contains the root filesystem. Volumes are either a feature
of the used filesystem or LVM is used for this purpose.
For details see: :ref:`custom_volumes`
.. note::
When both `<partitions>` and `<systemdisk>` are used, `<partitions>`
are evaluated first and mount points defined in `<partitions>` cannot
be redefined as `<systemdisk>` volumes. The two types define a
complete disk setup, so there cannot be any overlapping volumes
or mount points. As a result, whatever is written in `<partitions>`
cannot be expressed in the same way in `<volumes>`.
<preferences><type><partitions>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Used to describe the geometry of the disk on the level of the
partition table. For details see: :ref:`custom_partitions`
<preferences><type><oemconfig>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Used to customize the deployment process in an oem disk image.
For details see: :ref:`oem_customize`
<preferences><type><size>
~~~~~~~~~~~~~~~~~~~~~~~~~
Used to customize the size of the resulting disk image in an
oem image. For details see: :ref:`disk-the-size-element`
<preferences><type><machine>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Used to customize the virtual machine configuration which describes
the components of an emulated hardware.
For details see: :ref:`disk-the-machine-element`
<preferences><type><installmedia>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Used to customize the installation media images created for oem images
deployment.
For details see: :ref:`installmedia_customize`
.. _sec.repository:
<repository>
-------------
Setup software sources for the image.
.. code:: xml
<repository>
<source path="uri"/>
</repository>
The mandatory repository element specifies the location and type of a
repository to be used by the package manager as a package installation
source. {kiwi} supports apt, dnf, pacman and zypper as package managers,
specified with the packagemanager element. The repository element has
the following optional attributes:
alias="name"
Specifies an alternative name for the configured repository. If the
attribute is not specified {kiwi} will generate a random alias name
for the repository.
components="name"
Used for Debian (apt) based repositories only. Specifies the
component name that should be used from the repository. By default
the `main` component is used
distribution="name"
Used for Debian (apt) based repositories only. Specifies the
distribution name to be used on call of `debootstrap`
imageonly="true|false"
Specifies whether or not this repository should be configured in
the resulting image without using it at build time. By default
the value is set to false
repository_gpgcheck="true|false"
Specifies whether or not this specific repository is configured to
to run repository signature validation. If not set, no value is
appended into the repository configuration file. If set the
relevant key information needs to be provided on the {kiwi}
commandline using the `--signing-key` option
customize="/path/to/custom_script"
Custom script hook which is invoked with the repo file as parameter
for each file created by {kiwi}.
.. note::
If the script is provided as relative path it will
be searched in the image description directory
imageinclude="true|false"
Specifies whether the given repository should be configured as a
repository in the image or not. The default behavior is that
repositories used to build an image are not configured as a
repository inside the image. This feature allows you to change the
behavior by setting the value to true.
.. note:: Scope of repository uri's
The repository is configured in the image according to the source
path as specified with the path attribute of the source element.
Therefore, if the path is not a fully qualified URL, you may need
to adjust the repository file in the image to accommodate the
expected location. It is recommended that you use the alias
attribute in combination with the imageinclude attribute to
avoid having unpredictable random names assigned to the
repository you wish to include in the image.
password="string"
Specifies a password for the given repository. The password attribute
must be used in combination with the username attribute. Dependent on
the repository location this information may not be used.
username="name"
Specifies a user name for the given repository. The username
attribute must be used in combination with the password attribute.
Dependent on the repository location this information may not be
used.
prefer-license="true|false"
The repository providing this attribute will be used primarily to
install the license tarball if found on that repository. If no
repository with a preferred license attribute exists, the search
happens over all repositories. It's not guaranteed in that case that
the search order follows the repository order like they are written
into the XML description.
priority="number"
Specifies the repository priority for this given repository. Priority
values are treated differently by different package managers.
Repository priorities allow the package management system to
disambiguate packages that may be contained in more than one of the
configured repositories. The zypper package manager for example
prefers packages from a repository with a *lower* priority over
packages from a repository with higher priority values.
The value 99 means “no priority is set”. For other package managers
please refer to the individual documentation about repository priorities.
sourcetype="baseurl|metalink|mirrorlist"
Specifies the source type of the repository path. Depending on if the
source path is a simple url or a pointer to a metadata file or mirror
list, the configured package manager needs to be setup appropriately.
By default the source is expected to be a simple repository baseurl.
use_for_bootstrap="true|false"
Used for Debian (apt) based repositories only. It specifies whether
this repository should be the one used for bootstrapping or not.
It is set to 'false' by default. Only a single repository is allowed
to be used for bootstrapping, if no repository is set for the bootstrap
the last one in the description XML is used.
<repository><source>
~~~~~~~~~~~~~~~~~~~~
The location of a repository is specified by the path attribute of the
mandatory source child element:
.. code:: xml
<repository alias="kiwi">
<source path="{exc_kiwi_repo}"/>
</repository>
The location specification may include
the `%arch` macro which will expand to the architecture of the image
building host. The value for the path attribute may begin with any of
the following location indicators:
* ``dir:///local/path``
An absolute path to a directory accessible through the local file system.
* ``ftp://<ftp://>``
A ftp protocol based network location.
* ``http://<http://>``
A http protocol based network location.
* ``https://<https://>``
A https protocol based network location.
.. note:: https repositories
When specifying a https location for a repository it is generally
necessary to include the openssl certificates and a cracklib word
dictionary as package entries in the bootstrap section of the
image configuration. The names of the packages to include are
individual to the used distribution. On SUSE systems as one example
this would be `openssl-certs` and `cracklib-dict-full`
* ``iso://<iso://>``
An absolute path to an .iso file accessible via the local file
system. {kiwi} will loop mount the the .iso file to a temporary
directory with a generated name. The generated path is provided to
the specified package manager as a directory based repository location.
* ``obs://Open:Build:Service:Project:Name``
A reference to a project in the Open Build Service (OBS). {kiwi}
translates the given project path into a remote url at which
the given project hosts the packages.
* ``obsrepositories:/``
A placeholder for the Open Build Service (OBS) to indicate that all
repositories are taken from the project configuration in OBS.
.. _sec.packages:
<packages>
-----------
Setup software components to be installed in the image.
.. code:: xml
<packages type="type"/>
The mandatory packages element specifies the setup of a packages
group for the given type. The value of the type attribute specifies
at which state in the build process the packages group gets handled,
supported values are as follows:
type="bootstrap"
Bootstrap packages, list of packages to be installed first into
a new (empty) root tree. The packages list the required components
to support a chroot environment from which further software
components can be installed
type="image"
Image packages, list of packages to be installed as part of a chroot
operation inside of the new root tree.
type="uninstall|delete"
Packages to be uninstalled or deleted. For further details
see :ref:`uninstall-system-packages`
type="*image_type_name*"
Packages to be installed for the given image type name. For example
if set to type="iso", the packages in this group will only be
installed if the iso image type is build.
The packages element must contain at least one child element of the
following list to provide specific configuration information for the
specified packages group:
<packages><package>
~~~~~~~~~~~~~~~~~~~
.. code:: xml
<packages type="image"/>
<package name="name" arch="arch"/>
</packages>
The package element installs the given package name. The optional
`arch` attribute can be used to limit the installation of the package
to the host architecture from which {kiwi} is called. The `arch`
attribute is also available in all of the following elements.
<packages><namedCollection>
~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code:: xml
<packages type="image" patternType="onlyRequired">
<namedCollection name="base"/>
</packages>
The namedCollection element is used to install a number of packages
grouped together under a name. This is a feature of the individual
distribution and used in the implementation of the {kiwi} package
manager backend. At the moment collections are only supported for
SUSE and RedHat based distributions. The optional `patternType` attribute
is used to control the behavior of the dependency resolution of
the package collection. `onlyRequired` installs only the collection
and its required packages. `plusRecommended` installs the collection,
any of its required packages and any recommended packages.
.. note:: Collections on SUSE
On SUSE based distributions collections are names patterns and are
just simple packages. To get the names of the patterns such that
they can be used in a namedCollection type the following command:
`$ zypper patterns`. If for some reason the collection name cannot
be used it is also possible to add the name of the package that
provides the collection as part of a `package` element. To get the
names of the pattern packages type the following command:
`$ zypper search patterns`. By convention all packages that starts
with the name "patterns-" are representing a pattern package.
.. note:: Collections on RedHat
On RedHat based distributions collections are named groups and are
extra metadata. To get the names of these groups type the following
command: `$ dnf group list`. Please note that group names are allowed
to contain whitespace characters.
<packages><archive>
~~~~~~~~~~~~~~~~~~~
.. code:: xml
<packages type="image"/>
<archive name="name" target_dir="some/path"/>
</packages>
The archive element takes the `name` attribute and looks up the
given name as file on the system. If specified relative {kiwi}
looks up the name in the image description directory. The archive
is installed using the `tar` program. Thus the file name is
expected to be a tar archive. The compression of the archive is
detected automatically by the tar program. The optional target_dir
attribute can be used to specify a target directory to unpack the
archive.
<packages><ignore>
~~~~~~~~~~~~~~~~~~
.. code:: xml
<packages type="image"/>
<ignore name="name"/>
</packages>
The ignore element instructs the used package manager to ignore the
given package name at installation time. Please note whether or not
the package can be ignored is up to the package manager. Packages
that are hard required by other packages in the install procedure
cannot be ignored and the package manager will simply ignore the
request.
<packages><product>
~~~~~~~~~~~~~~~~~~~
.. code:: xml
<packages type="image">
<product name="name"/>
</packages>
The product element instructs the used package manager to install
the given product. What installation of a product means is up to
the package manager and also distribution specific. This feature
currently only works on SUSE based distributions
.. _sec.users:
<users>
--------
Setup image users.
.. code:: xml
<users>
<user
name="user"
groups="group_list"
home="dir"
id="number"
password="text"
pwdformat="encrypted|plain"
realname="name"
shell="path"
/>
</users>
The optional users element contains the user setup {kiwi} should create
in the system. At least one user child element must be specified as
part of the users element. Multiple user elements may be specified.
Each `user` element represents a specific user that is added or
modified. The following attributes are mandatory:
name="name":
the UNIX username
password="string"
The password for this user account. It can be provided either
in cleartext form or encrypted. An encrypted password can be created
using `openssl` as follows:
.. code::
$ openssl passwd -1 -salt xyz PASSWORD
It is also possible to specify the password as a non encrypted string
by using the pwdformat attribute and setting its value to `plain`.
{kiwi} will then encrypt the password prior to the user being added
to the system.
.. warning:: plain text passwords
We do not recommend plain passwords as they will be readable in
the image configuration in plain text
All specified users and groups will be created if they do not already
exist. The defined users will be part of the group(s) specified
with the groups attribute or belong to the default group as configured
in the system. If specified the first entry in the groups list is used
as the login group.
Additionally, the following optional attributes can be specified:
home="path":
The path to the user's home directory
groups="group_a,group_b":
A comma separated list of UNIX groups. The first element of the
list is used as the user's primary group. The remaining elements are
appended to the user's supplementary groups. When no groups are assigned
then the system's default primary group will be used.
id="number":
The numeric user id of this account.
pwdformat="plain|encrypted":
The format in which `password` is provided. The default if not
specified is `encrypted`.
.. _sec.profiles:
<profiles>
-----------
Manage image namespace(s).
.. code:: xml
<profiles>
<profile name="name" description="text"/>
</profiles>
The optional profiles section lets you maintain one image description
while allowing for variation of other sections that are included. A
separate profile element must be specified for each variation. The
profile child element, which has name and description attributes,
specifies an alias name used to mark sections as belonging to a profile,
and a short description explaining what this profile does.
For example to mark a set of packages as belonging to a profile, simply
annotate them with the profiles attribute as shown below:
.. code:: xml
<packages type="image" profiles="profile_name">
<package name="name"/>
</packages>
It is also possible to mark sections as belonging to multiple profiles
by separating the names in the profiles attribute with a comma:
.. code:: xml
<packages type="image" profiles="profile_A,profile_B">
<package name="name"/>
</packages>
If a section tag does not have a profiles attribute, it is globally
present in the configuration. If global sections and profiled sections
contains the same sub-sections, the profiled sections will overwrite
the global sections in the order of the provided profiles. For a better
overview of the result configuration when profiles are used we
recommend to put data that applies in any case to non profiled (global)
sections and only extend those global sections with profiled data.
For example:
.. code:: xml
<preferences>
<version>1.2.3</version>
<packagemanager name="zypper"/>
</preferences>
<preferences profiles="oem_qcow_format">
<type image="oem" filesystem="ext4" format="qcow2"/>
</preferences>
<preferences profiles="oem_vmdk_format">
<type image="oem" filesystem="ext4" format="vmdk"/>
</preferences>
The above example configures two version of the same oem type.
One builds a disk in qcow2 format the other builds a disk in
vmdk format. The global preferences section without a profile
assigned will be used in any case and defines those preferences
settings that are common to any build process. A user can
select both profiles at a time but that will result in building
the disk format that is specified last because one is overwriting
the other.
Use of one or more profile(s) during image generation is triggered
by the use of the ``--profile`` command line argument. multiple profiles
can be selected by passing this option multiple times.