No description
Find a file
Simon de Vlieger f9ff8ffbf1 specfile: build requires libxcrypt-compat
We received a commit downstream by Björn Esser. After asking around for
the reasoning behind the commit it seems that we're likely assuming that
this package is available in the buildroot.

Let's depend on it explicitly instead of assuming it is there.

Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-02-03 11:27:37 +00:00
.github github: run tests inside a fedora container 2025-01-25 11:05:05 +00:00
cmd/image-builder cmd: add new describe-image command 2025-01-31 10:57:50 +00:00
doc doc: initial documentation 2025-01-31 08:06:22 +00:00
internal testutil: add new CaptureStdio helper 2025-01-29 15:21:33 +00:00
test test: add test that checks that --progress works correctly 2025-01-29 15:21:33 +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 ci/packit: enable fedora PRs 2025-02-03 08:26:21 +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 doc: initial documentation 2025-01-31 08:06:22 +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 Containerfile: build without cgo to avoid arm64 crashing 2025-01-29 20:50:10 +00:00
entrypoint.sh ibcli: use /var/cache/image-builder/store as default for --store 2024-12-19 11:35:15 +00:00
go-vendor-tools.toml spec: use go-vendor-tools to generate license 2025-01-21 10:38:20 +00:00
go.mod image-builder: update TestBuildIntegrationErrors tests 2025-01-29 15:21:33 +00:00
go.sum image-builder: update TestBuildIntegrationErrors tests 2025-01-29 15:21:33 +00:00
HACKING.md HACKING: drop -cli 2025-01-20 13:32:25 +00:00
image-builder.spec specfile: build requires libxcrypt-compat 2025-02-03 11:27:37 +00:00
LICENSE chore: LICENSE 2024-12-16 09:13:44 +00:00
Makefile Makefile: Enhance and improve help 2025-01-20 18:22:44 +00:00
README.md doc: initial documentation 2025-01-31 08:06:22 +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.

Compilation

You can compile the application in cmd/image-builder with the normal go command or use

$ make build

To compile without go build tags you will need to install the required RPMs:

$ sudo dnf install gpgme-devel

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 --with-manifest option an osbuild manifest will be placed in the output directory too.

With the --with-sbom option an SPDX SBOM document 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 --with-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.

Q: What is the relation to bootc-image-builder? A: Both projects are very close. The bootc-image-builder focuses on providing image-based artifacts while image-builder works with traditional package based inputs. We expect the two projects to merge eventually and they already share a lot of code.

Project

Repository