kiwi-ng
Create customized operating system images
TLDR
Build an appliance
Show build result of built appliance
Display help
Display version
SYNOPSIS
kiwi-ng command [options] [arguments]
Common commands include:
kiwi-ng build: Builds a disk image from a description.
kiwi-ng prepare: Prepares a root tree from a description.
kiwi-ng system: Manages and lists existing kiwi-ng systems.
kiwi-ng clean: Removes existing build artifacts.
PARAMETERS
--profile
Selects a specific image profile defined within the description.
--debug
Enables verbose debug messages for troubleshooting build processes.
--allow-existing-build-dir
Permits using a build directory that already exists, rather than requiring a clean one.
--color {auto,always,never}
Controls terminal colorization for output messages.
--description
Specifies the path to the XML image description file (used with 'build' command).
--target-dir
Sets the output directory where the final image artifacts will be placed (used with 'build' command).
--ignore-missing-packages
Prevents the build from failing if specified packages are not found in repositories.
--clean-build-dir
Cleans the build directory before starting a new image build.
--set-repo
Adds one or more additional repositories to be used during the image build.
DESCRIPTION
kiwi-ng is a powerful, next-generation operating system image builder for Linux distributions. It allows users to declaratively define the contents and structure of a custom Linux image using XML configuration files. From these descriptions, kiwi-ng can generate a wide array of image types, including bootable ISOs for live systems or installations, virtual machine images (like KVM, OCI, QCOW2), cloud images, and container images (Docker, OCI).
Developed primarily for openSUSE and SUSE Linux Enterprise, kiwi-ng is designed to be highly generic and supports building images for various other Linux distributions. It handles the entire lifecycle of image creation, from bootstrapping the base system and installing packages to configuring bootloaders, creating filesystems, and assembling the final image artifact. Its modular design and extensive feature set make it a versatile tool for reproducible image creation for diverse deployment scenarios.
CAVEATS
kiwi-ng is a powerful tool but requires a good understanding of Linux system architecture and image building concepts. Its declarative XML description files, while flexible, can become complex for intricate image definitions. Builds can be resource-intensive, requiring substantial CPU, RAM, and disk space, especially for larger images. While designed to be distribution-agnostic, its origins in the SUSE/openSUSE ecosystem mean some default behaviors or optimizations might align best with those distributions.
IMAGE TYPES
kiwi-ng supports building a diverse range of image formats, including bootable ISOs (live/install), virtual machine images (RAW, QCOW2, OCI, KVM), cloud images, and container images (Docker, OCI). This flexibility allows for targeted deployment across various platforms.
XML DESCRIPTION FILES
Image content and build processes are defined declaratively using XML files. These files specify everything from the base system, included packages, repositories, and scripts to partitioning schemes and bootloader configurations, ensuring reproducible builds.
HISTORY
kiwi-ng (Next Generation) is the successor to the original kiwi image building tool. The initial kiwi tool was primarily written in Perl and C++. kiwi-ng represents a complete re-implementation in Python, aimed at improving modularity, maintainability, and extending support for a wider range of modern image formats, including cloud and container images. Its development reflects the evolving needs of reproducible and automated operating system image creation in diverse deployment environments.
SEE ALSO
chroot(1): Used for changing root directory, fundamental for system building., mkfs(8): Utility for building a Linux filesystem., mount(8): Utility for mounting filesystems., zypper(8) / dnf(8) / apt(8): Package managers often used by kiwi-ng to populate images., virt-builder(1): A similar tool from libguestfs for creating VM images., isohybrid(1): Tool to make ISO images bootable from both CD/DVD and USB.