Commit graph

37 commits

Author SHA1 Message Date
Gianluca Zuccarelli
f4ee0bfabf distro: add root filesystem support 2021-07-28 21:44:03 +01:00
Achilleas Koutsou
74d61b9ae2 distro/rhel85: fix edge-installer build packages
The edge-installer build root requires the installer build package set.
2021-07-24 15:54:00 +02:00
Achilleas Koutsou
e0178bd76e distro/rhel85: add kernel to main OS package set
If there's no kernel in the main package set, the standard/default
kernel will be added while depsolving. This causes issues when an
alternative kernel is selected in the blueprint. Both kernels will be
installed (one from the blueprint and one from the main OS set) which
causes issues with ostree image types.
2021-07-24 15:54:00 +02:00
Tomas Hozza
3a2415d970 distro/rhel85: add image type aliases for EDGE image types
EDGE image types are defined under a different name for RHEL-8.5,
specifically they don't contain the "rhel-" prefix any more. To ensure
backward compatibility, add image type aliases for all EDGE image types
with the "rhel-" prefix.

Image type aliases are used only when getting a specific imageType
instance by its name. When listing all available image types for an
architecture, only the current image type names are returned, without
any aliases. This prevents the image types from being exposed multiple
times under different names via Weldr API.

Extend the distro unit tests to test image type aliases.

Signed-off-by: Tomas Hozza <thozza@redhat.com>
2021-07-24 15:54:00 +02:00
Tomas Hozza
e45e117a0b distro/rhel85: don't copy architecture when adding it to a distro
Originally, a copy of an architecture instance was always created when it
was added to a distro definition using the `addArches()` method.
However in reality, only a subset of structure members were copied,
which could create unexpected behavior and issues. This behavior is
identical to the behavior when image types are added to an architecture.
However the situation with image types differs in one aspect,
specifically that a single image type definition is usually reused
by multiple architecture definitions, while an architecture definition
is always used only by a single distribution definition.
Due to the fact that the image type contains a reference to the
architecture to which it has been added, the creation of a copy can not
be reasonably avoided. On the other hand, adding a copy of an architecture
to a distribution definition is not necessary.

Downside of creating copies of the architecture is that the image types
associated with it referred always to the original architecture
definition instance and not to the copy. So while references in the
direction of Distro -> Arch -> Image Type were correct and working, the
other direction was broken. Image Type -> (original) Arch -> (nil)
Distro.

Modify `distribution.AddArches()` method to directly add the passed
architecture instances to the distribution definition, instead of adding
their copies.

Signed-off-by: Tomas Hozza <thozza@redhat.com>
2021-07-24 15:54:00 +02:00
Ondřej Budai
d1da221a8c distro/rhel85: fix name of exported pipeline
it's actually vpc, not vhd

Signed-off-by: Ondřej Budai <ondrej@budai.cz>
2021-07-24 15:54:00 +02:00
Achilleas Koutsou
8d64cb9665 distro/rhel85: const strings for package set keys
const string keys make the names easier to reuse or change and is less
error prone.
2021-07-24 15:54:00 +02:00
Achilleas Koutsou
cba720e63f rhel85: depsolve blueprint packages separately
To avoid packages specified in a blueprint from conflicting with exclude
lists, we depsolve blueprint packages separately and pass them into the
Manifest generator under the new "blueprint" package set key.

This approach has the added benefit that dependencies of packages
specified in the blueprint are not subject to exclusion in addition to
the explicitly named packages.

The OS pipeline which installs the packages for the base system merges
the two package sets before running the RPM stage. The signature of the
function is changed to explicitly require blueprint packages be
specified (though `nil` or empty slice is valid).

The kernel selection test is adapted to merge the package sets before
counting kernel package.

Adaptation of changes in
https://github.com/osbuild/osbuild-composer/pull/1349
2021-07-24 15:54:00 +02:00
Achilleas Koutsou
b8d34d7679 distro/rhel85: introduce the ami image type
This is a copy of the ami image type from RHEL 8.4.
Small modifications are necessary.
2021-07-24 15:54:00 +02:00
Achilleas Koutsou
9c3c956655 distro/rhel85: aarch64 uefi: true 2021-07-24 15:54:00 +02:00
Achilleas Koutsou
3f0f4ffab9 distro/rhel85: simplify edge types and package sets
- Cleaned up distro-specific edge package sets
- Added edge package set merging in PackageSets() function
- Edge image type definitions are no longer arch specific, just like the
  other image types
2021-07-24 15:54:00 +02:00
Achilleas Koutsou
876a67ccb0 distro/rhel85: introduce the openstack image type 2021-07-24 15:54:00 +02:00
Achilleas Koutsou
ceba83dcca distro/rhel85: introduce the vmdk image type 2021-07-24 15:54:00 +02:00
Achilleas Koutsou
1ed9008785 distro/rhel85: introduce the vhd image type 2021-07-24 15:54:00 +02:00
Achilleas Koutsou
3eae16badb distro/rhel85: remove installer type for aarch64
The installer image type needs package definitions and testing before it
can be included in aarch64.
Removing for now.
2021-07-24 15:54:00 +02:00
Achilleas Koutsou
f09bf063c8 distro/rhel85: tidy up package sets
- Move all package set definitions to package_sets.go file.
- Do not append image package sets to arch and distro sets; this happens
  automatically in PackageSets() method.
- Fix architecture-specific package sets (boot and build where
  available).
2021-07-24 15:54:00 +02:00
Achilleas Koutsou
bf61ca422f distro/rhel85: introduce the qcow2 image type
- distro definition
- qcow2 package set
- pipeline generation function (unfinished)
2021-07-24 15:54:00 +02:00
Achilleas Koutsou
5f53b3865f rhel85: append "boot" package sets to "packages"
If an image type is marked "bootable", append the package set with  name
"boot".
2021-07-01 12:48:32 +02:00
Achilleas Koutsou
e8dd5b3248 rhel85: move package sets to separate file
Package sets shared between multiple image types are statically defined
in functions.
2021-07-01 12:48:32 +02:00
Achilleas Koutsou
49df4a70af rhel85: add base build package set to distribution 2021-07-01 12:48:32 +02:00
Achilleas Koutsou
f1e805658c rhel85: distro and arch package sets
Add package sets to the top level distribution and the
architectures. Merge package sets when requested through
`imageType.PackageSets()`.
This allows us to have "cascading" package sets:
    distro > arch > image type

Previously this was only supported for the build packages. The idea is
generalised based on the idea of arbitrary package sets.

Certain package sets have special meaning (for the distro):
- packages: blueprint packages and special option packages are merged
  into this one.
- build: is not expected to be defined on the image type so it is merged
  from the distro and arch explicitly.
2021-07-01 12:48:32 +02:00
Achilleas Koutsou
38f5b23e87 rhel85: tar image type
Traditional tar image type.
Pipelines generation function for tar image type uses the same pipelines
and stages as the tar installer, but exports the OS image directly.
2021-07-01 12:48:32 +02:00
Achilleas Koutsou
242f6d3c44 rhel85: tar installer main pipeline
Define a core set of packages and stages shared by images.
2021-07-01 12:48:32 +02:00
Achilleas Koutsou
19d15af788 rhel85: new image type tar-installer 2021-07-01 12:48:32 +02:00
Achilleas Koutsou
139c8eb3c4 Revert "rhel85: nolint package for unused private functions"
Pipeline generation functions are now used by the new image definitions.

This reverts commit cca084d5ce.
2021-06-29 17:26:43 +01:00
Achilleas Koutsou
f789f785a4 rhel85: rhel-edge image definitions
Image definitions added for all three edge types:
edge-commit
edge-container
edge-installer

Manifest pipelines generation methods attached to image types.
2021-06-29 17:26:43 +01:00
Martin Sehnoutka
71233fd860 distro: add fedora 34 and 35 aliases to f33
composer doesn't support f34 or f35, but it should be possible to build
these even with the f33 distro definition. Introduce f34 and f35 repos
and aliases for f33.
2021-06-05 20:31:45 +02:00
Tomas Hozza
fba9fe1072 Make the Distroregistry FromHost() return distro with correct name
Composer does not have 1:1 mapping of what can be the Host Distro name
and the names of supported distributions held in the Distroregistry.

The fact that the host distro `Name()` method as passed to the Weldr API
does not return the same name as what is used as distro name for
repository definitions. This makes it hard to use `distro.Distro` and
`distro.Arch` directly and rely on the values returned by them as their
name.

Add `New*HostDistro()` to all distro definitions, accepting the name
that should be returned by the distro's `Name()` method. This is useful
mainly if the host distro is Beta or Stream variant of the distro.

Change the distroregistry.Registry to contain host distro as a separate
value set when creating it using `New()` function. This value is
returned by `Registry.FromHost()` method. Determining the host distro is
handled by the `NewDefault()` function. Move the distro name mangling to
distroregistry package. Add relevant unit tests.

Signed-off-by: Tomas Hozza <thozza@redhat.com>
2021-05-14 15:43:00 +02:00
Achilleas Koutsou
cca084d5ce rhel85: nolint package for unused private functions
Package contains unexported helper functions for future implementations
of pipelines.
2021-05-11 12:10:09 +02:00
Achilleas Koutsou
9412477b3f rhel85: split distro into multiple files
Split pipelines, inputs, and options into separate files for easier
navigation.
2021-05-11 12:10:09 +02:00
Achilleas Koutsou
95947f60c7 rhel85: pipeline function separation
The single `pipelines()` function is now replaced by multiple functions
for different purposes:
- `edgeCorePipelines()` defines the pipelines that create an edge
  commit. This is used by both the `edge-commit` and `edge-container`
  images.
- `edgeCommitPipelines()` and `edgeContainerPipelines()` define the
  pipelines for `edge-commit` and `edge-container` respectively. They
  share the core pipelines but differ in their final pipeline for
  assembling the image into either a tarball or a container.
- `edgeInstallerPipeline()` shares almost no common parts with other
  pipelines (only the `buildPipeline()`).

The `pipelines` function for each image type is set during creation of
the instance.

Individual pipeline functions are no longer methods of the image type.
2021-05-11 12:10:09 +02:00
Achilleas Koutsou
2833e99928 rhel85: add tar pipeline
Tar pipeline helper function that contains a single tar stage.
This is the equivalent of the old tar assembler.
2021-05-11 12:10:09 +02:00
Achilleas Koutsou
5c3dd46d63 rhel85: installer pipelines definition
Separate function for installer-specific pipelines.
The installer image type is very different compared to the other edge
types (and even more so compared to the more general images), so
separating out the pipelines that are specific to the installer Manifest
makes the whole method a bit more readable.

This function is not "wired" to the main pipelines generation, but will
be when the image type is defined.
2021-05-11 12:10:09 +02:00
Achilleas Koutsou
f7882993f9 osbuild2/bootiso: arch-based xz compression option
Added a helper function to the bootiso stage for setting the BCJ option
for xz compression.
The FSCompression struct is changed to use a pointer for the Options
substruct so it can be omitted when nil (omitempty).
2021-05-11 12:10:09 +02:00
Achilleas Koutsou
3cf8a545a6 rhel85: pipelines and stages helper functions
Based on rhel84 with minor changes:
- moved options and customizations checking to its own method on
  imageType.
- added global `osVersion = "8.5"` for use in various labels and
  metadata files.
- pipelines() function is empty and returns with "not implemented" error
  since  no image types are defined.
2021-05-11 12:10:09 +02:00
Achilleas Koutsou
6789bcca98 rhel85: implement PackageSets() method 2021-05-11 12:10:09 +02:00
Achilleas Koutsou
ee5d59ab44 New distro: rhel85
Distro skeleton for RHEL 8.5 with implementations for the basic methods.
Initialiser (New()) creates empty architectures.
2021-05-11 12:10:09 +02:00