Commit graph

77 commits

Author SHA1 Message Date
Simon de Vlieger
c99aa91265 main: describe auto-detect distro
Other commands such as `manifest`, and `build` auto detect the
distribution if none is given. `describe` is the odd one out that
requires `--distro`. Let's also autoselect there.

Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-04-08 08:38:19 +00:00
Simon de Vlieger
274a75387b main: rename list-images to list
Rename the `list-images` command to `list`. We don't have `-image(s)` in
our other subcommands so this is for consistency.

We keep a `list-images` alias behind for compatibility reasons.

Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-04-08 07:34:20 +00:00
Simon de Vlieger
a963712152 main: also eat depsolve warnings in manifest
Let's consume the depsolve warnings everywhere, including during
manifest generation.

Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-04-08 07:27:35 +00:00
Simon de Vlieger
ad9943e99d main: eat depsolve warnings
When running `image-builder` warnings are emitted during manifest
generation. Depending on the definitions or customizations packages
can be excluded from groups which leads to:

```
No match for group package "dracut-config-rescue"
```

Interspersing with normal output. Let's pass along another byte buffer
for the warnings from manifest generation to be written into.

Note that this also needs plumbing [1] to land in `images` first.

[1]: https://github.com/osbuild/images/pull/1384

Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-04-08 07:27:35 +00:00
Simon de Vlieger
412fe34b41 main: rename describe-image to describe
Leaves behind a compatibility alias.

Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-04-04 07:02:28 +00:00
Michael Vogt
0f348301d9 main: add base partition table to describe-image
This commit adds the (base) partition table to the `describe-image`
command. It needs https://github.com/osbuild/images/pull/1376

It currently looks like:
```yaml
$ image-builder describe-image qcow2 --distro fedora-41
@WARNING - the output format is not stable yet and may change
distro: fedora-41
...
partition_table:
  uuid: D209C89E-EA5E-4FBD-B161-B461CCE297E0
  type: gpt
  partitions:
    - size: 1048576
      type: 21686148-6449-6E6F-744E-656564454649
      bootable: true
      uuid: FAC7F1FB-3E8D-4137-A512-961DE09A5549
    - size: 209715200
      type: C12A7328-F81F-11D2-BA4B-00A0C93EC93B
      uuid: 68B2905B-DF3E-4FB3-80FA-49D1E773AA33
      payload:
        type: vfat
        uuid: 7B77-95E7
        label: EFI-SYSTEM
        mountpoint: /boot/efi
        fstab_options: defaults,uid=0,gid=0,umask=077,shortname=winnt
        fstab_passno: 2
    - size: 524288000
      type: 0FC63DAF-8483-4772-8E79-3D69D8477DE4
      uuid: CB07C243-BC44-4717-853E-28852021225B
      payload:
        type: ext4
        label: boot
        mountpoint: /boot
        fstab_options: defaults
    - size: 2147483648
      type: 0FC63DAF-8483-4772-8E79-3D69D8477DE4
      uuid: 6264D520-3FB9-423F-8AB8-7A0A8E3D3562
      payload:
        type: ext4
        label: root
        mountpoint: /
        fstab_options: defaults
```
2025-04-03 17:25:16 +00:00
Brian C. Lane
2cfe043f5e main: Add a --version flag to show the build version
This embeds the version at build time and displays it when passed the
--version flag.
2025-04-01 06:50:24 +00:00
Simon de Vlieger
63bb56e12d import: refer to pkg
Change the progress imports to refer to `pkg/progress` inside this
repository as it was imported from `bootc-image-builder`.

Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-03-31 19:42:59 +00:00
Simon de Vlieger
02461ac2a3 main: allow seed setting
Allow users to define the seed that's used for manifest generation.
Regenerating an image with a given seed leads to the same manifest
(provided depsolving does the same).

The seed is normally mostly used to generate random filesystem UUIDs.

This will need a bunch of documentation in a follow up since the use
cases are meant to be advanced but it can really speed up multi-type and
rebuilds of the same image.

Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-03-31 17:31:12 +00:00
Michael Vogt
d00e76ced1 main: tweak handling of --output-name to avoid adding double extensions
This commit tweaks the handling of the `--output-name` option so
that is a name with the same extension as the image is passed that
is just silently ignored. Its a common issue that first time
users run:
```console
$ image-builder build --output-name foo.qcow2 qcow2
```
which currently leads to a foo.qcow2.qcow2. With this commit
the expected "foo.qcow2" will appear.
2025-03-27 14:03:11 +00:00
Michael Vogt
d4c31389a9 main: show output directory content after image build
This commit adds the content of the output directory when a
build is finished. This is a convenient feature to make it easier
for the users.

Thanks to Simon for suggesting this!
2025-03-27 13:21:43 +00:00
Michael Vogt
fe713a0995 main: tweak how ibcli determines if bootstraping is needed
This simplifies the way that ibcli determines if the manifest
needs a bootstrap stage or not. The logic is simple:
- when doing `image-builder manifest` we never include one
- when doing `image-builder build --arch` we add one if the
  target arch and host arch differ

Instead of passing a callback this is now just a simple bool
option. Thanks to Achilleas for suggesting this.

Co-Authored-by: Achilleas Koutsou <achilleas@koutsou.net>
2025-03-27 08:42:49 +00:00
Michael Vogt
8e6a6673f5 main: auto-cross build for foreign architectures 2025-03-25 11:58:24 +00:00
Simon de Vlieger
e7b9fbff1e ibcli: don't split outputfilename
A small test for a basename that includes dotted parts (as used by for
example Fedora's buildsystem).

Also some code changes to make this test pass, it seems that SBOM base
was determined based on some other filename which is now no longer
relevant?

Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-03-14 14:47:36 +00:00
Michael Vogt
b51d1f983a image-builder: use testutil.Chdir() in TestBuildIntegrationHappy 2025-03-14 14:47:36 +00:00
Michael Vogt
ccb4269b62 ibcli: add new --output-name flag
This commit adds a new `--output-name` flag that will rename
the resulting artifact after it was build. All auxillary artifacts
like buildlog, sbom etc are also name based on the same basename.

See also https://github.com/osbuild/images/pull/1039 for how
this could be simpler (especially the fake osbuild).

Closes: https://github.com/osbuild/image-builder-cli/issues/43
2025-03-14 14:47:36 +00:00
Michael Vogt
8635a22ad9 main: skip arch checks onIMAGE_BUILDER_EXPERIMENTAL=bootstrap
This commit skips the arch checks if the experimental "bootstrap"
option is used. The main use-case of this option is to bootstrap
a foreign architecture so just assume that and skip arch checks
when set.

This allows to write:
```
$ IMAGE_BUILDER_EXPERIMENTAL=bootstrap=ghcr.io/mvo5/fedora-buildroot:41 \
   ./image-builder build --arch=riscv64 minimal-raw --distro=fedora-41
```
and do a riscv64 cross arch build.
2025-03-12 18:10:46 +00:00
Michael Vogt
06e73caec1 main: show "success" message with output dir when build finishes
This commit adds a "success" message that also contains the output
dir when the build finishes.

Thanks to SimonS for suggesting this!
2025-03-12 17:03:59 +00:00
Michael Vogt
c3ca146161 main: fix creating output dir for --with-buildlog
Trivial fix for the missing `mkdir()` call when `--with-buildlog`
is specified (and the matching test update).
2025-03-07 13:17:10 +00:00
Simon de Vlieger
4d9cf723fd main: rename output to format
We had a chat about this and we feel that `format` is less ambiguous a
name for this argument.

Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-02-27 10:58:11 +00:00
Simon de Vlieger
58aa0cf87b main: rename basedir -> base-dir
Rename the `basedir` argument to be consistent with `output-dir`
by hyphenation.

Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-02-27 10:58:11 +00:00
Michael Vogt
2e741a70ad main: add build --with-buildlog
This commit adds a new `--with-buildlog` option that will automatically
create a buildlog in the output directory.
2025-02-25 12:08:51 +00:00
Lukas Zapletal
6dd8515801 main: simplify upload error handling 2025-02-18 09:49:16 +00:00
Michael Vogt
bc5be2ba8a main: add --force-repo flag
This commit adds an `--force-repo` flag that can be used
to replace all the base repositories with a base url to
a repository. This is useful for testing but also dangerous
as it will not do any checks and happily use a fedora-42 repository
for centos-8 depsolving.

This will make the use-case of the koji builder easier and is
also something that the `build` tool in `images` supports.
2025-02-13 11:31:06 +00:00
Michael Vogt
e2aeecec8e repos: make clearer why newRepoRegistry is a var
This commit reworks the `newRepoRegistry` func so that its easier
to see that it is a variable so that it can be overriden by the
tests. In the tests we want to use the `testrepos` we get from
images and in the real implementation we want to use the full
repo loader with search-paths and extra repos.
2025-02-12 12:57:27 +01:00
Michael Vogt
a11e124133 main: add new --extra-repo flag
This commit adds a  new flag `--extra-repo` that can be used
to point to a repository url that is added to the base
repositories when depsolving. Note that *no* gpg checking
will be performed for such repos as there is no way to
add gpg-keys (yet) via this mechanism.

This means that with a repo created with e.g. `createrepo_c` like
```console
$ mkdir repo
$ (cd repo && dnf download hello)
$ createrepo_c ./repo
```
and a blueprint like:
```toml
[[packages]]
name = "hello"
```
a manifest is generated that gets hello from this local repo:
```console
$ image-builder  --extra-repo file:$(pwd)/repo manifest qcow2 --distro centos-9 --blueprint ./bp.toml |jq|grep hello
          "path": "hello-2.12.1-5.fc41.x86_64.rpm",
```
Note that this is part of the base repositories so anything with a
higher version number will get pulled from the extra-repo, even
system libraries or kernels. Note also that this repository does
not become part of the image so after the image build all rpms
from there are not updated (unless of course the normal repos
have higher versions of them).

Note as well that there is no safeguard right now against adding
extra repos for the wrong version of the distro, i.e. one could
add an extra repo build against/for fedora-42 on a fedora-40 image
which most likely will break with bad depsolve errors. But that
is okay, this option is meant for advanced users and testing.
2025-02-12 12:57:21 +01:00
Michael Vogt
25f21a3205 main: add upload support directly to build
This commit adds support to upload the build image directly to
the target cloud. Currently only ami/AWS is supported.

If the cloud specific configuration is given at the commandline
and the image type is a cloud image the cloud upload will happen
automatically (just like with bib). Incomplete upload config is
an error.
2025-02-11 13:38:04 +01:00
Michael Vogt
e41377b82a main: add new upload command
This commit adds a new `upload` command that can be used to
upload a raw image to the cloud. Currently only AWS is
supported but as images adds more clouds to the uploader interfac
we can easily expand more.

The cloud is currently detected via the file extension, that
mapping probably should also go into the `images` library.
2025-02-11 13:38:04 +01:00
Michael Vogt
0678d8ddfd main: update for new reporegistry.New() api (c.f. pr#1179)
This commit updates ibcli for the new API in images for the
`reporegistry.New()`. The main incompatible change is that the
`/repositories` part is not longer automatically added inside
the library so we need to add it on the call-site.

This needs https://github.com/osbuild/images/pull/1179
2025-02-10 20:40:56 +01:00
Michael Vogt
0a3c642772 go.mod: update to get the latest progress fixes from bib
This commit updates the `progress` package to get the latest
fixes, most notably
https://github.com/osbuild/bootc-image-builder/pull/820
2025-02-10 11:46:55 +01:00
Simon de Vlieger
036de52a39
describeimg: typo in describe output
`os_vesion` -> `os_version`

Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-02-06 20:00:49 +01:00
Michael Vogt
7c6db68c98 main: add -v,--verbose switch that enables verbose build logging
This commit adds a new `-v,--verbose` switch that enables verbose
build logging.

Closes: https://github.com/osbuild/image-builder-cli/issues/112
2025-02-05 09:36:38 +00:00
Michael Vogt
19ef77337a main: reset the terminal properly on SIGINT,SIGTERM
This commit fixes the issue that on `CTRL-C` (SIGINT) the progress
is not properly cleared. It also catches SIGTERM for good measure.

No test right now as this is hard to test automatically :/

Closes: https://github.com/osbuild/image-builder-cli/issues/123
2025-02-04 13:11:11 +00:00
Michael Vogt
24dc23ac3b main: fix auto-detected distro that is non-visible, tweak order
This commit fixes the issue that the auto-detect distro is not
visible in the progress message. It also tweaks the order of
the message to show:
```
Building manifest for <distro>-<img-type>
```
to be more conistent.

Closes: https://github.com/osbuild/image-builder-cli/issues/121
2025-02-04 12:21:13 +00:00
Michael Vogt
3c2e8dd9af cmd: add new describe-image command
This commit adds a new `describe-image` comamnd that contains
the details about the given image type. The output is yaml as
it is both nicely human readable and also machine readable.

Note that this version carries an invalid yaml header on
purpose to avoid people replying on the feature for scripts
before it is stable.

The output looks like this:
```yaml
$ ./image-builder describe-image rhel-9.1 tar
@WARNING - the output format is not stable yet and may change
distro: rhel-9.1
type: tar
arch: x86_64
os_vesion: "9.1"
bootmode: none
partition_type: ""
default_filename: root.tar.xz
packages:
  include:
    - policycoreutils
    - selinux-policy-targeted
    - selinux-policy-targeted
  exclude:
    - rng-tools
```

Thanks to Ondrej Budai for the idea and the example.
2025-01-31 10:57:50 +00:00
Michael Vogt
c590c38d4f main: silence all logrus logging for now
This commit silences logrus logging for now by just dicarding
everything from it. The rational is that the underlying libraries
produce a lot of output, e.g. every build currently results in
```console
$ image-builder build qcow2
WARN[0000] Failed to load consumer certs: no consumer key found
...
```
which is confusing to our users. What is worse is that containers
also uses logrus so we can get random warnings without context
from there too. Until we have a way to filter log messages this
seems to be the most practical way.

We can add `--verbose` or `--debug` later to enable these kinds
of messages.
2025-01-30 17:30:31 +00:00
Michael Vogt
0f0815d268 main: tweak the help of manifest and build
This commit tweaks the help output for the manifest and build
commands to make clear that only the image type is a required
argument but the rest can be overriden via extra flags.

Thanks to Achilleas for noticing.
2025-01-29 20:50:47 +00:00
Michael Vogt
f46ca14f85 image-builder: update TestBuildIntegrationErrors tests
This commit updates the tests for the error reporting. Since
we are now using the new "progress" module we can no longer
directly mock osStderr. So this now uses the new testutil
helper `CaptureStdio`.

Note also that the behavior of `verbose` and `term` is slightly
different - for backward compatibility in `verbose` mode the
stderr from osbuild is directly connected to the caller stderr.

For term mode this is not done to prevent spurious message from
leaking into the terminal progress and the full error is available
from the actual go error as captured output.
2025-01-29 15:21:33 +00:00
Michael Vogt
1198c73102 main: add progress support via bibs code
This commit add progress reporting similar to what `bib` is doing.
It imports the progress from `bootc-image-builder` for now. There
is an open PR for moving this to images but there are some
concerns about moving it there so for now we just use bib.
This is not too bad because eventually bib and ibcli will merge.
2025-01-29 15:21:33 +00:00
Simon de Vlieger
af0fa97403 manifest: slightly clean up directory creation
Co-authored-by: Michael Vogt <michael.vogt@gmail.com>
Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-01-29 11:56:14 +00:00
Simon de Vlieger
34de7d7ce5 build: directory creation
This now precreates the directory as it's possible that the directory
doesn't exist yet at this point; see #94.

Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-01-29 11:56:14 +00:00
Michael Vogt
98e4bebcfa image-builder: drop internal manifestgen in favor of images
This commit drops the internal `manifestgen` package in favor
of using the version in `images` now that
https://github.com/osbuild/images/pull/1153 is merged.
2025-01-27 10:14:53 +00:00
Ondřej Budai
5d1be8bbb1 cmd/image-builder: fix typos in cobra descs 2025-01-27 08:46:32 +00:00
Michael Vogt
222d42dc1c test: consolidate the build argument tests into a single table
This commit puts the build argument tests into a single table to
cosolidate them a bit.
2025-01-25 11:08:01 +00:00
Florian Schüller
b4815631a3 cmd/image-builder/main: fix typo in --filter help 2025-01-24 14:05:17 +00:00
Florian Schüller
3f881601fc cmd/image-builder/main: improve wording of --blueprint help
When reading `--blueprint string`, I briefly thought it might
also be possible to put a whole blueprint content as string
into image-builder-cli argument.
This wording should avoid misunderstandings.
2025-01-24 14:00:54 +00:00
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
Simon de Vlieger
613f56e7d2 image-builder: slight cleanup
Remove all slice operations.

Co-authored-by: Michael Vogt <michael.vogt@gmail.com>
Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-01-20 15:42:21 +00:00
Simon de Vlieger
585d349d0f image-builder: --extra-artifacts split
Split out `--extra-artifacts` into `--with-sbom` and `--with-manifest`.

Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-01-20 15:42:21 +00:00
Simon de Vlieger
ee38c45122 image-builder: rename --store to --cache
Closes #77.

Signed-off-by: Simon de Vlieger <supakeen@redhat.com>
2025-01-20 15:42:21 +00:00