Skip to content
Search Fedora

    Browse this documentation

    Building Fedora 45 images with image-builder

    Fedora 45 switches Atomic Desktop disk image builds to image-builder, and Anaconda gains an Atomic-oriented WebUI (official ChangeSet: Build disk images for Atomic Desktops with image-builder, Anaconda WebUI Fedora Atomic).

    For most people this means the entry point for custom images moved from kickstart to blueprints. Here is the usage we measured on F45.

    Terminal window
    sudo dnf install image-builder
    image-builder version
    image-builder:
    version: 87.0.0

    F45 ships 87.x, whose CLI is the Go rewrite — the command structure is nothing like the older composer-cli, so do not copy old tutorials.

    Terminal window
    image-builder list | grep fedora-45
    image-builder describe --distro fedora-45 --arch x86_64 qcow2

    describe prints (verbatim):

    @WARNING - the output format is not stable yet and may change
    distro: fedora-45
    type: generic-qcow2
    arch: x86_64
    os_version: "45"
    bootmode: hybrid
    partition_type: gpt
    default_filename: disk.qcow2

    Fields worth remembering:

    FieldMeaningWhen it matters
    typethe real image type, generic-qcow2pass qcow2 to the build command, not generic-qcow2
    bootmodehybridboots both UEFI and BIOS
    partition_typegptcompatibility on older BIOS machines
    default_filenamedisk.qcow2rename when building several images
    Terminal window
    cat > f45-web.toml <<'EOF'
    name = "f45-web"
    description = "Fedora 45 minimal web server image"
    version = "0.1.0"
    [[packages]]
    name = "nginx"
    version = "*"
    [customizations]
    hostname = "f45-web"
    EOF

    The three parts:

    • name / description / version: the blueprint’s identity; only a version bump makes it a new revision;
    • [[packages]]: extra packages, version = "*" takes the newest in the repositories;
    • [customizations]: hostname, users, timezone — settings applied before first boot.
    Terminal window
    sudo mkdir -p /tmp/ib-out
    sudo image-builder build qcow2 \
    --distro fedora-45 \
    --arch x86_64 \
    --blueprint f45-web.toml \
    --output-dir /tmp/ib-out

    osbuild runs the build and logs per-package downloads:

    source/org.osbuild.librepo: Downloaded Packages/p/python3-jsonschema-specifications-2025.9.1-4.fc45.noarch.rpm
    source/org.osbuild.librepo: Downloaded Packages/f/fedora-release-identity-basic-45-13.noarch.rpm
    source/org.osbuild.librepo: Downloaded Packages/e/elfutils-libs-0.196-1.fc45.x86_64.rpm

    On success osbuild prints the artifact path and checksum:

    qcow2: f3f4c0cdde0b7914f4ff51690d1ebc2a38b8d403535ddf7211dd3e86395ed609
    Checkpoints
    Image build successful: /tmp/ib-out/fedora-45-generic-qcow2-x86_64.qcow2

    The artifact lands in --output-dir:

    Terminal window
    ls -lh /tmp/ib-out/
    -rw-r--r--. 1 root root 941M fedora-45-generic-qcow2-x86_64.qcow2

    Three things to remember: the filename is built from distro/type/arch (not the blueprint name), it is owned by root with restrictive permissions (chown before distributing), and keep the checksum for recipients to verify.

    kickstartblueprint
    Describesthe installation processthe image contents
    Runsat install timeat build time
    Reproducibilitydepends on the repos that dayversions can be pinned
    Outputan installed systema distributable image file

    They are not replacements: kickstart still drives ordinary installs, blueprints pre-build an image for distribution. Atomic takes the second route.

    F45’s Anaconda adds an Atomic-oriented WebUI. Practical effects:

    • Installing Atomic looks more like “pick an image, write it, configure on first boot”, moving away from the classic partitioning wizard;
    • First-boot configuration (Ignition / blueprints) becomes the automation entry point instead of post-install hand edits;
    • Custom images now have one entry point, the blueprint, so “building” has a single description across a team.
    1. Whether your build scripts still depend on composer-cli or the old kickstart-assembly paths;
    2. Whether your install media now comes from the new build outputs;
    3. Whether first-boot configuration matches your automation.