Commit graph

2198 commits

Author SHA1 Message Date
Tomas Hozza
1fec2c476d Cloud API: add support for gce-rhui image type
Signed-off-by: Tomas Hozza <thozza@redhat.com>
2022-07-22 11:39:49 +01:00
Christian Kellner
d842bdba21 distro/rhel8: support for embedding container
Support for adding containers in non-ostree images. The reason we
don't support OSTree artefacts just yet is that the default storage
location for container is `/var/lib/containers/storage`. But for
OSTree images all content in `/var` is discarded, since that is
deployment specific data. We therefore need to store the containers
somewhere else, e.g. `/usr/share/containers/storage`, but then also
need to configure the system to find containers in that location.
osbuild only recently gained the corresponding stage to do so and
thus this will be done in a follow up.
2022-07-21 13:32:07 +02:00
Christian Kellner
0d4fac101c weldr: support container embedding
Add support for resolving containers via `container.Resolvers`.
NB: this happens synchronously in the compose handler, very much
like dep-solving.
2022-07-21 13:32:07 +02:00
Christian Kellner
2007d67fd2 distro/rhel90: support for embedding container
Support for adding containers in non-ostree images. The reason we
don't support OSTree artefacts just yet is that the default storage
location for container is `/var/lib/containers/storage`. But for
OSTree images all content in `/var` is discarded, since that is
deployment specific data. We therefore need to store the containers
somewhere else, e.g. `/usr/share/containers/storage`, but then also
need to configure the system to find containers in that location.
osbuild only recently gained the corresponding stage to do so and
thus this will be done in a follow up.
2022-07-21 13:32:07 +02:00
Christian Kellner
fbd6d804f0 blueprint: add support for containers
Add a new `containers` section that can be used to request the
embedding of containers into images. The only requirement is
the source property to specify where to fetch the container from.
This suppports specifying the digest of the container or the tag.
In case none is given it defaults to the `latest` tag. The `Name`
field can be used to optionally specify a name to use inside the
image.
NB: currently no tools or apis support container resolution yet.
This follows in the next commits.
2022-07-21 13:32:07 +02:00
Christian Kellner
49b37d672b osbuild: support generating container sources
Modify the existing `GenSources` helper to also support generating
`org.osbuild.skopeo` source for fetching container images.
2022-07-21 13:32:07 +02:00
Christian Kellner
7f3f016ed1 distro: add containers arg to ImageType.Manifest
This is the first step to support embedding container images. Here
we add the `containers []container.Spec` argument to supply images
with resolved container specifications. For now all distros will
return an error in case a container is actually supplied since none
of them currently support embedding containers. NB: also no apis or
tools will actually resolve containers.
2022-07-21 13:32:07 +02:00
Christian Kellner
f8804358a4 osbuild: add new org.osbuild.skopeo stage
Add bindings for the `org.osbuild.skopeo` that can be used to copy
container images, accessed via the `org.osbuild.containers` input,
into images.
The constructor is designed with ease of use in mind and takes
the needed container inputs and the storage path option, i.e.
where to store the container in the images.
2022-07-21 13:32:07 +02:00
Christian Kellner
718b0c0c32 osbuild: add support for org.osbuild.container inputs
Add bindings for `org.osbuild.conainer` inputs which can be used to
supply containers to stages. Currently only fetching containers via
sources is supported.
2022-07-21 13:32:07 +02:00
Christian Kellner
513ae6d3d0 osbuild: add support for the org.osbuild.skopeo source
Add bindings for the `org.osbuild.skopeo` source that can be used
to fetch container images from container registires.
2022-07-21 13:32:07 +02:00
Christian Kellner
b4f890a909 container: add tests for resolver
Add checks for the new `container.Resolver`, including the failure
case.
2022-07-21 13:32:07 +02:00
Christian Kellner
76d80295fa container: add new resolver helper
Add a new class `container.Resolver` which can be used to resolve
multiple container images to their respective ids in parallel.
It should make it easy for all existing tools and api endpoints
to adpot container resultion.
2022-07-21 13:32:07 +02:00
Christian Kellner
dcbdcf4419 container: simple client resolver tests
Add some basic checks for the new `client.Resolve` method.
Specifically that pinning down the ids is working as expected.
2022-07-21 13:32:07 +02:00
Christian Kellner
60135dd5df container: add mock container registry for testing
Create a small only mock container registry to test `Client`.
Currently the registry is read-only and thus cannot be used
for upload tests but it can and will be used for container
resolution checks.
2022-07-21 13:32:07 +02:00
Christian Kellner
60607af26c container: ability to resolve containers to specs
Add a new `Resolve` method to `Client` that will resolve its `Target`
to the corresponding manifest digest id and its corresponding iamge
identifier. The former can be used in the URL to fetch a specific
image from the registry via `<name>@<digest>` and the latter uniquely
identifies a container image via the hash of its configuration object.
This should stay the same across pulls and is also the id returned via
`podman pull` and `podman images`.
Since (most) container images are OS and architecture specific a tag
often points to a manifest list that contains all available options.
Therefore the resolve operation needs to choose the correct arch for
image. A new pair of getters `Set{Architecture,Variant}Choice` lets
the user control which architecture/variant is selected during the
resolution process.
2022-07-21 13:32:07 +02:00
Christian Kellner
bd42243882 container: set default auth file path to sane location
Ensure that the `Client.AuthFilePath` points to a sane location,
which here means that the location is either accessible by the
current user or does not exist. This is because any other error
opening the auth file with lead to a overall failure when trying
to access container registries, even if the target resources is
public.
The reason we have to set it ourselves is that by default the
containers library looks in a sub-path of `XDG_RUNTIME_DIR` and if
that variable is not set it falls-back to `/run/containers/<uid>`.
Since `XDG_RUNTIME_DIR` is indeed not set for the composer process
started via systemd, it will fall-back, but it does not have access
to `/run/containers` and finding the authorization info for any
request will fail with "permission denied".
Add a setter so that we can set the `Client.AuthFilePath` to a
different location than the default one.
2022-07-21 13:32:07 +02:00
Christian Kellner
e53b9c8bb2 container/client: rework credentials storage
Instead of keeping an extra field in `Client`, we just use the
existing `sysCtx.DockerAuthConfig` structure. When the context
is later copied during the upload operation the credentials
will be copied as well. It also saves us from syncing the
credentials if we directly use said `sysCtx` for operations.
2022-07-21 13:32:07 +02:00
Christian Kellner
865a899f70 container/client: rework tls settings
Instead of having an extra field, `TlsVerify`, on the `Client` and
then later setting the corresponding `SystemContext` options, use
the existing `SystemContext` field of `Client`. The corresponding
field is a tri-state: unset, true, false, which is represented as
a pointer to boolean in the `Client`'s new getter and setter. This
also inverts the boolean logic from verify TLS to skip TLS which
aligns very well with the corresponding fields in the upload target
struct.
In addition we properly capitalize some existing variables.
2022-07-21 13:32:07 +02:00
Ondřej Budai
e779562f3c worker: remove osbuild-koji job
Koji API removed by the previous commit was the last user of osbuild-koji job.
Let's remove it since nothing uses it. This also removes all of the
compatibility code in Cloud API, see concerns below:

Compatibility concerns:
- the internal deployment was moved to a completely different composer
  instance, thus there are no old jobs
- Fedora deployment is still unused in prod, thus we don't care about keeping
  backward compatibility of the old jobs

Signed-off-by: Ondřej Budai <ondrej@budai.cz>
2022-07-19 16:00:52 +02:00
Ondřej Budai
74eb3860df internal: remove kojiapi
We no longer use it, let's remove it. If you are wondering what to use instead,
use Cloud API. It supports everything that Koji API supported and more.

Signed-off-by: Ondřej Budai <ondrej@budai.cz>
2022-07-19 16:00:52 +02:00
Ondřej Budai
058edd3d76 cloudapi: remove a confusing test
This test tested two things:

1) Invalid route - this is already covered by TestUnknownRoute
2) Invalid UUID in the compose status route - this is now covered by
   TestComposeStatusInvalidUUID

Signed-off-by: Ondřej Budai <ondrej@budai.cz>
2022-07-19 16:00:52 +02:00
Ondřej Budai
3e25f5ef76 remove all traces of fedora 34
Fedora 34 is EOL, let's remove all traces of it, including:

- distro definition
- repositories (and test one)
- test manifests
- special package set rules
- hacks from the spec file

Signed-off-by: Ondřej Budai <ondrej@budai.cz>
2022-07-18 20:38:33 +02:00
Brian C. Lane
d3af314e58 users_stage: Don't allow empty passwords
Make sure empty passwords are set to nil so they result in a locked
account.

Also add a test for the password hashing in NewUserStageOptions()
2022-07-16 22:54:26 +01:00
Brian C. Lane
6adf3f5b7b blueprint: Don't allow empty password
If the password is set to "" it will get hashed, allowing access to the
account in some circumstances. Console and ssh login don't appear to
work in practice, but su to the account from another user account is
possible.

This sets the empty password to nil which makes sure that it ends up as
a locked account.
2022-07-16 22:54:26 +01:00
Brian C. Lane
20bf0c4836 blueprint: Hash all user passwords
This commit changes blueprint behavior to always store the hash of the
password for the 'customizations.user' accounts. Note that missing or
blank passwords are not hashed and should be dealt with at a lower
layer.

Resolves: rhbz#2107358
2022-07-16 22:54:26 +01:00
Achilleas Koutsou
9d4a351ca6 Rename osbuild2 package to osbuild 2022-07-14 16:54:00 +02:00
Achilleas Koutsou
01d87b4e60 osbuild1: DELETED 2022-07-14 16:54:00 +02:00
Achilleas Koutsou
dcef56c75a osbuild2: move v1 stage metadata parsing to convertStageResults
Make the v1StageResult.Metadata a simple json.RawMessage and perform the
RawMessage to StageMetadata conversion in the convertStage functions.
This lets us get rid of the custom v1StageResult Unmarshaller and the
v1RawStageResult, and makes the whole conversion process easier to
trace.
2022-07-14 16:54:00 +02:00
Achilleas Koutsou
d68a95c533 osbuild2: copy Result types from osbuild1
Types, parsing functions and helpers copied from osbuild1 to
osbuild2/v1result.go.
The metadata handling is simplified: osbuild1 stage metadata for the RPM
and ostree-commit stages is identical to the osbuild2 counterparts.
2022-07-14 16:54:00 +02:00
Achilleas Koutsou
c1956ba6e1 Use osbuild2 Manifest in all tests
The test_distro Manifest, which is used in tests across multiple
packages, was using the old structure.  Updated to the v2 structure and
adapted all tests.
2022-07-14 16:54:00 +02:00
Achilleas Koutsou
8eb12018c0 osbuild2: move v1 result handling code to separate file 2022-07-14 16:54:00 +02:00
Achilleas Koutsou
1c218bc633 osbuild2: fix package docstring 2022-07-14 16:54:00 +02:00
Simon de Vlieger
78ae275c61 jobqueue: store an expiry date
This introduces an expiry date (default: 14 days from insert date) and
adjust the service-maintenance script to delete jobs that are older than
the expiration date.
2022-07-13 17:26:04 +02:00
Tom Gundersen
e844453c85 manifest: make filename optional and generalise Tree
We have three kinds of operating system trees, until we unify them to one,
hide them behind one interface. Use this to read the architecture from the
Tree rather than pass it in as a string to parent pipelines.

Also, make the filename parameter optional in a few places, there should be no
reason to set this rather than introspect it (except for backwards
compatibility).

Lastly, add another playground example sample to build a raw image.
2022-07-12 08:19:57 +01:00
Tom Gundersen
d00b98c134 manifest: don't stutter
Replace `pipeline.OSPipeline` with `pipeline.OS`, etc.

Also rename `LiveImg` to `RawImage`.
2022-07-12 08:19:57 +01:00
Tom Gundersen
529bc803db runner: introduce runner abstraction
For now all it does is represent the name of the runner and what requirements
it has of the build pipeline.

Move some package definitions from the runner package set to where it belongs.
2022-07-12 08:19:57 +01:00
Tom Gundersen
1b924ae30c osbuild-worker/osbuild: move out execution helper
Move the execution helper for osbuild into the osbuild2 package so it can be
reused. In the process, generalise it slightly.
2022-07-12 08:19:57 +01:00
Tom Gundersen
fa7d2f2647 manifest/build: explicitly pull in glibc
This should have no practical effect, but ldconfig is used from
runners, so it is strictly speaking a requirement.

At the same time document the remaining TODO's in the build
pipeline.
2022-07-12 08:19:57 +01:00
Tom Gundersen
b405ce4d89 manifest/build: replace explicit dnf with implicit rpm
The pipelines don't use dnf, only rpm. Let the ones that need it pull it in.
2022-07-12 08:19:57 +01:00
Tom Gundersen
b714dcb780 manifest/build: pull in tar implicitly
The tar pipeline requires tar, let only that pull it in.
2022-07-12 08:19:57 +01:00
Tom Gundersen
fed620b861 disk/partition_table: expose GetBuildPackages() function
This describes the packages necessary to create the partition table.

Use this in the pipelines and drop the explicit mentions from the build
pipeline.
2022-07-12 08:19:57 +01:00
Tom Gundersen
0d3d35e154 manifest/build: pull in selinux packages implicitly
The build pipeline requires the selinux packages only if we are going to be
labelling the files in the target OS. Otherwise, skip it.

manifest/build: pull in selinux-targeted unconditionally

This is unconditionally used by the build pipeline itself, until we make that
conditional, it needs to be installed.
2022-07-12 08:19:57 +01:00
Tom Gundersen
8df99d2b31 manifest/build: we depend on /bin/cp, always pull in coreutils 2022-07-12 08:19:57 +01:00
Tom Gundersen
9160319152 manifest/build: move out qemu-img
Let each pipeline that requires it pull in qemu-img.
2022-07-12 08:19:57 +01:00
Achilleas Koutsou
fdc6790472 distro: remove rhel84 package 2022-07-08 09:30:34 +01:00
Achilleas Koutsou
3289f9b07b distro/rhel8: explicitly enable google agent services for 8.4
The google-guest-agent services don't get enabled on 8.4.  The reason
for this is currently unknown.  Enabling them explicitly works.
2022-07-08 09:30:34 +01:00
Achilleas Koutsou
8a25113104 distro/rhel8: explicitly enable greenboot services for 8.4 edge
The greenboot packages on 8.4 are not enabled by presets, so we need to
explicitly enable them when building.
2022-07-08 09:30:34 +01:00
Achilleas Koutsou
0bf09ba60c distro/rhel8: separate minor-version-specific image types
edge-raw and edge-simplified-installer: only on 8.6+
ec2 and ec2-ha: available on all RHEL 8
ec2-sap: available on 8.4 and 8.6+ (no 8.5)

The ec2-sap image requires ansible, which in 8.4 is called `ansible` and
was replaced by `ansible-core` in 8.6.
2022-07-08 09:30:34 +01:00
Achilleas Koutsou
ca1b559e30 Move RHEL 8.4 definition to the common rhel8 package 2022-07-08 09:30:34 +01:00
fkolwa
832c555a21 internal/distro: Add GCE RHUI image type+package set 2022-07-07 14:28:59 +02:00