LinuxCommandLibrary

kiwi-ng

Create customized operating system images

TLDR

Build an appliance

$ kiwi-ng system build --description=[path/to/directory] --target-dir=[path/to/directory]
copy

Show build result of built appliance
$ kiwi-ng result list --target-dir=[path/to/directory]
copy

Display help
$ kiwi-ng help
copy

Display version
$ kiwi-ng -v
copy

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.

Copied to clipboard