No description
Find a file
Simon de Vlieger ebba957fad test: add combi test sbom/manifest
Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-01-20 15:42:21 +00:00
.github build(deps): bump actions/setup-go from 4 to 5 2025-01-17 08:03:08 +00:00
cmd/image-builder test: add combi test sbom/manifest 2025-01-20 15:42:21 +00:00
internal ibcli: add new --extra-artifacts option with sbom support 2025-01-19 21:57:14 +00:00
test test: update container test args 2025-01-20 15:42:21 +00:00
tools spec: rename to image-builder 2025-01-20 13:32:25 +00:00
.gitignore prepare all syntax for linters and spellchecks 2025-01-07 12:29:58 +00:00
.golangci.yml pre-commit: introduce make lint 2025-01-07 12:29:58 +00:00
.packit.yaml spec: rename to image-builder 2025-01-20 13:32:25 +00:00
.pre-commit-config.yaml pre-commit: re-enable golangci-lint 2025-01-16 14:16:31 +00:00
.pylintrc pre-commit: introduce make lint 2025-01-07 12:29:58 +00:00
.spellcheck-en-custom.txt README: document the new --extra-artifacts=sbom option 2025-01-19 21:57:14 +00:00
.spellcheck.yml spellcheck: ignore release_artifacts directory 2025-01-15 15:58:00 +00:00
.yamllint pre-commit: introduce make lint 2025-01-07 12:29:58 +00:00
Containerfile repos: lookup <buildin>, /{etc,usr/share}/image-builder/repositories 2025-01-09 16:17:50 +00:00
entrypoint.sh ibcli: use /var/cache/image-builder/store as default for --store 2024-12-19 11:35:15 +00:00
go.mod go.mod: move to latest snapshot 2025-01-17 13:29:01 +00:00
go.sum go.mod: move to latest snapshot 2025-01-17 13:29:01 +00:00
HACKING.md HACKING: drop -cli 2025-01-20 13:32:25 +00:00
image-builder.spec spec: update descriptions 2025-01-20 13:32:25 +00:00
LICENSE chore: LICENSE 2024-12-16 09:13:44 +00:00
Makefile makefile: use -cli archive names 2025-01-20 13:32:25 +00:00
README.md main: add --extra-artifacts=manifest 2025-01-20 14:12:30 +00:00
setup.cfg pre-commit: introduce make lint 2025-01-07 12:29:58 +00:00

image-builder CLI

Build images from the command line in a convenient way.

Run via container

$ sudo podman run --privileged \
   -v ./output:/output \
   ghcr.io/osbuild/image-builder-cli:latest \
   build \
   --distro fedora-41 \
   minimal-raw

Installation

This project is under development right now and we provide up-to-date development snapshots in the following way:

A COPR RPM build https://copr.fedorainfracloud.org/coprs/g/osbuild/image-builder/

Via the go build system:

$ go run github.com/osbuild/image-builder-cli/cmd/image-builder@main

or install it into $GOPATH/bin

$ go install github.com/osbuild/image-builder-cli/cmd/image-builder@main

We plan to provide rpm packages in fedora as well.

Prerequisites

Make sure to have the required osbuild RPMs installed:

$ sudo dnf install osbuild osbuild-depsolve-dnf

Examples

Listing

To see the list of buildable images run:

$ image-builder list-images
...
centos-9 type:qcow2 arch:x86_64
...
rhel-10.0 type:ami arch:x86_64
...

Building

To actually build an image run:

$ sudo image-builder build qcow2 --distro centos-9
...

this will create a directory centos-9-qcow2-x86_64 under which the output is stored.

With the --extra-artifacts=manifest an osbuild manifest will be placed in the output directory too.

Blueprints

Blueprints are supported, first create a config.toml and put e.g. the following content in:

[[customizations.user]]
name = "alice"
password = "bob"
key = "ssh-rsa AAA ... user@email.com"
groups = ["wheel"]

Note that both toml and json are supported for the blueprint format.

See https://osbuild.org/docs/user-guide/blueprint-reference/ for the full blueprint reference.

Then just pass them as an additional argument after the image type:

$ sudo image-builder build qcow2 --blueprint ./config.toml --distro centos-9
...

SBOMs

It is possible to generate spdx based SBOM (software bill of materials) documents as part of the build. Just pass --extra-artifacts=sbom and it will put them into the output directory.

Filtering

When listing images, it is possible to filter:

$ image-builder list-images --filter ami
...
centos-9 type:ami arch:x86_64
...
rhel-8.5 type:ami arch:aarch64
...
rhel-10.0 type:ami arch:aarch64

or be more specific

$ image-builder list-images --filter "arch:x86*" --filter "distro:*centos*"
centos-9 type:ami arch:x86_64
...
centos-9 type:qcow2 arch:x86_64
...

The following filters are currently supported, shell-style globbing is supported:

  • distro: the distro name (e.g. fedora-41)
  • arch: the architecture name (e.g. x86_64)
  • type: the image type name (e.g. qcow2)
  • bootmode: the bootmode (legacy, UEFI, hybrid)

Output control

The output can also be switched, supported are "text", "json":

$ image-builder list-images --output=json
[
  {
    "distro": {
      "name": "centos-9"
    },
    "arch": {
      "name": "aarch64"
    },
    "image_type": {
      "name": "ami"
    }
  },
...
  {
    "distro": {
      "name": "rhel-10.0"
    },
    "arch": {
      "name": "x86_64"
    },
    "image_type": {
      "name": "wsl"
    }
  }
]

FAQ

Q: Does this require a backend. A: The osbuild binary is used to actually build the images but beyond that no setup is required, i.e. no daemons like osbuild-composer.

Q: Can I have custom repository files? A: Sure! The repositories are encoded in json in "-.json", files, e.g. "fedora-41.json". See these examples. Use the "--datadir" switch and place them under "repositories/name-version.json", e.g. for: "--datadir /my-project --distro foo-1" a json file must be put under "/my-project/repositories/foo-1.json.

Project

Repository