distro/rhel85: add support for edge raw images
OSBuild Composer can now build the RHEL 8.5 Raw Images. This images are compressed raw images, i.e. a file that has a partition layout with an deployed OSTree commit in it. It can be used to flash onto a hard drive or booted in a virtual machine. An existing OSTree commit needs to be provided. The following image new types are supported: edge-raw-image.
This commit is contained in:
parent
c6b2d3009b
commit
1a063680b5
6 changed files with 71 additions and 8 deletions
10
docs/news/unreleased/rhel8.5-edge-raw-images.md
Normal file
10
docs/news/unreleased/rhel8.5-edge-raw-images.md
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
# Add RHEL for Edge Raw Images for 8.5
|
||||
|
||||
OSBuild Composer can now build the RHEL 8.5 Raw Images. This images are
|
||||
compressed raw images, i.e. a file that has a partition layout with an
|
||||
deployed OSTree commit in it. It can be used to flash onto a hard drive
|
||||
or booted in a virtual machine. An existing OSTree commit needs to
|
||||
be provided.
|
||||
The following image new types are supported: edge-raw-image.
|
||||
|
||||
Relevant PR: https://github.com/osbuild/osbuild-composer/pull/1667
|
||||
|
|
@ -420,7 +420,11 @@ func (t *imageType) checkOptions(customizations *blueprint.Customizations, optio
|
|||
}
|
||||
}
|
||||
|
||||
if kernelOpts := customizations.GetKernel(); kernelOpts.Append != "" && t.rpmOstree {
|
||||
if t.name == "edge-raw-image" && options.OSTree.Parent == "" {
|
||||
return fmt.Errorf("edge raw images require specifying a URL from which to retrieve the OSTree commit")
|
||||
}
|
||||
|
||||
if kernelOpts := customizations.GetKernel(); kernelOpts.Append != "" && t.rpmOstree && (!t.bootable || t.bootISO) {
|
||||
return fmt.Errorf("kernel boot parameter customizations are not supported for ostree types")
|
||||
}
|
||||
|
||||
|
|
@ -515,6 +519,7 @@ func newDistro(name, modulePlatformID, ostreeRef string) distro.Distro {
|
|||
pipelines: edgeCommitPipelines,
|
||||
exports: []string{"commit-archive"},
|
||||
}
|
||||
|
||||
edgeOCIImgType := imageType{
|
||||
name: "edge-container",
|
||||
nameAliases: []string{"rhel-edge-container"},
|
||||
|
|
@ -535,6 +540,24 @@ func newDistro(name, modulePlatformID, ostreeRef string) distro.Distro {
|
|||
pipelines: edgeContainerPipelines,
|
||||
exports: []string{"container"},
|
||||
}
|
||||
|
||||
edgeRawImgType := imageType{
|
||||
name: "edge-raw-image",
|
||||
nameAliases: []string{"rhel-edge-raw-image"},
|
||||
filename: "image.raw.xz",
|
||||
mimeType: "application/xz",
|
||||
packageSets: map[string]packageSetFunc{
|
||||
buildPkgsKey: edgeRawImageBuildPackageSet,
|
||||
},
|
||||
defaultSize: 10 * GigaByte,
|
||||
rpmOstree: true,
|
||||
bootable: true,
|
||||
bootISO: false,
|
||||
pipelines: edgeRawImagePipelines,
|
||||
exports: []string{"archive"},
|
||||
basePartitionTables: edgeBasePartitionTables,
|
||||
}
|
||||
|
||||
edgeInstallerImgType := imageType{
|
||||
name: "edge-installer",
|
||||
nameAliases: []string{"rhel-edge-installer"},
|
||||
|
|
@ -793,8 +816,8 @@ func newDistro(name, modulePlatformID, ostreeRef string) distro.Distro {
|
|||
exports: []string{"bootiso"},
|
||||
}
|
||||
|
||||
x86_64.addImageTypes(qcow2ImgType, vhdImgType, vmdkImgType, openstackImgType, amiImgTypeX86_64, ec2ImgTypeX86_64, ec2HaImgTypeX86_64, tarImgType, tarInstallerImgTypeX86_64, edgeCommitImgType, edgeInstallerImgType, edgeOCIImgType, edgeSimplifiedInstallerImgType)
|
||||
aarch64.addImageTypes(qcow2ImgType, openstackImgType, amiImgTypeAarch64, ec2ImgTypeAarch64, tarImgType, edgeCommitImgType, edgeInstallerImgType, edgeOCIImgType, edgeSimplifiedInstallerImgType)
|
||||
x86_64.addImageTypes(qcow2ImgType, vhdImgType, vmdkImgType, openstackImgType, amiImgTypeX86_64, ec2ImgTypeX86_64, ec2HaImgTypeX86_64, tarImgType, tarInstallerImgTypeX86_64, edgeCommitImgType, edgeInstallerImgType, edgeOCIImgType, edgeRawImgType, edgeSimplifiedInstallerImgType)
|
||||
aarch64.addImageTypes(qcow2ImgType, openstackImgType, amiImgTypeAarch64, ec2ImgTypeAarch64, tarImgType, edgeCommitImgType, edgeInstallerImgType, edgeOCIImgType, edgeRawImgType, edgeSimplifiedInstallerImgType)
|
||||
ppc64le.addImageTypes(qcow2ImgType, tarImgType)
|
||||
s390x.addImageTypes(qcow2ImgType, tarImgType)
|
||||
|
||||
|
|
|
|||
|
|
@ -417,6 +417,8 @@ func TestDistro_ManifestError(t *testing.T) {
|
|||
_, err := imgType.Manifest(bp.Customizations, imgOpts, nil, nil, 0)
|
||||
if imgTypeName == "edge-commit" || imgTypeName == "edge-container" {
|
||||
assert.EqualError(t, err, "kernel boot parameter customizations are not supported for ostree types")
|
||||
} else if imgTypeName == "edge-raw-image" {
|
||||
assert.EqualError(t, err, "edge raw images require specifying a URL from which to retrieve the OSTree commit")
|
||||
} else if imgTypeName == "edge-installer" || imgTypeName == "edge-simplified-installer" {
|
||||
assert.EqualError(t, err, fmt.Sprintf("boot ISO image type \"%s\" requires specifying a URL from which to retrieve the OSTree commit", imgTypeName))
|
||||
} else {
|
||||
|
|
@ -445,6 +447,7 @@ func TestArchitecture_ListImageTypes(t *testing.T) {
|
|||
"edge-commit",
|
||||
"edge-container",
|
||||
"edge-installer",
|
||||
"edge-raw-image",
|
||||
"edge-simplified-installer",
|
||||
"tar",
|
||||
"image-installer",
|
||||
|
|
@ -461,6 +464,7 @@ func TestArchitecture_ListImageTypes(t *testing.T) {
|
|||
"edge-container",
|
||||
"edge-installer",
|
||||
"edge-simplified-installer",
|
||||
"edge-raw-image",
|
||||
"tar",
|
||||
},
|
||||
},
|
||||
|
|
@ -577,7 +581,7 @@ func TestDistro_CustomFileSystemManifestError(t *testing.T) {
|
|||
_, err := imgType.Manifest(bp.Customizations, distro.ImageOptions{}, nil, nil, 0)
|
||||
if imgTypeName == "edge-commit" || imgTypeName == "edge-container" {
|
||||
assert.EqualError(t, err, "Custom mountpoints are not supported for ostree types")
|
||||
} else if imgTypeName == "edge-installer" || imgTypeName == "edge-simplified-installer" {
|
||||
} else if imgTypeName == "edge-installer" || imgTypeName == "edge-simplified-installer" || imgTypeName == "edge-raw-image" {
|
||||
continue
|
||||
} else {
|
||||
assert.EqualError(t, err, "The following custom mountpoints are not supported [\"/boot\"]")
|
||||
|
|
@ -605,7 +609,7 @@ func TestDistro_TestRootMountPoint(t *testing.T) {
|
|||
_, err := imgType.Manifest(bp.Customizations, distro.ImageOptions{}, nil, nil, 0)
|
||||
if imgTypeName == "edge-commit" || imgTypeName == "edge-container" {
|
||||
assert.EqualError(t, err, "Custom mountpoints are not supported for ostree types")
|
||||
} else if imgTypeName == "edge-installer" || imgTypeName == "edge-simplified-installer" {
|
||||
} else if imgTypeName == "edge-installer" || imgTypeName == "edge-simplified-installer" || imgTypeName == "edge-raw-image" {
|
||||
continue
|
||||
} else {
|
||||
assert.NoError(t, err)
|
||||
|
|
@ -633,7 +637,7 @@ func TestDistro_CustomFileSystemSubDirectories(t *testing.T) {
|
|||
_, err := imgType.Manifest(bp.Customizations, distro.ImageOptions{}, nil, nil, 0)
|
||||
if imgTypeName == "edge-commit" || imgTypeName == "edge-container" {
|
||||
assert.EqualError(t, err, "Custom mountpoints are not supported for ostree types")
|
||||
} else if imgTypeName == "edge-installer" || imgTypeName == "edge-simplified-installer" {
|
||||
} else if imgTypeName == "edge-installer" || imgTypeName == "edge-simplified-installer" || imgTypeName == "edge-raw-image" {
|
||||
continue
|
||||
} else {
|
||||
assert.NoError(t, err)
|
||||
|
|
@ -661,7 +665,7 @@ func TestDistro_CustomFileSystemPatternMatching(t *testing.T) {
|
|||
_, err := imgType.Manifest(bp.Customizations, distro.ImageOptions{}, nil, nil, 0)
|
||||
if imgTypeName == "edge-commit" || imgTypeName == "edge-container" {
|
||||
assert.EqualError(t, err, "Custom mountpoints are not supported for ostree types")
|
||||
} else if imgTypeName == "edge-installer" || imgTypeName == "edge-simplified-installer" {
|
||||
} else if imgTypeName == "edge-installer" || imgTypeName == "edge-simplified-installer" || imgTypeName == "edge-raw-image" {
|
||||
continue
|
||||
} else {
|
||||
assert.EqualError(t, err, "The following custom mountpoints are not supported [\"/variable\"]")
|
||||
|
|
@ -689,7 +693,7 @@ func TestDistro_CustomUsrPartitionNotLargeEnough(t *testing.T) {
|
|||
_, err := imgType.Manifest(bp.Customizations, distro.ImageOptions{}, nil, nil, 0)
|
||||
if imgTypeName == "edge-commit" || imgTypeName == "edge-container" {
|
||||
assert.EqualError(t, err, "Custom mountpoints are not supported for ostree types")
|
||||
} else if imgTypeName == "edge-installer" || imgTypeName == "edge-simplified-installer" {
|
||||
} else if imgTypeName == "edge-installer" || imgTypeName == "edge-simplified-installer" || imgTypeName == "edge-raw-image" {
|
||||
continue
|
||||
} else {
|
||||
assert.NoError(t, err)
|
||||
|
|
|
|||
|
|
@ -65,6 +65,12 @@ func edgeBuildPackageSet(t *imageType) rpmmd.PackageSet {
|
|||
})
|
||||
}
|
||||
|
||||
func edgeRawImageBuildPackageSet(t *imageType) rpmmd.PackageSet {
|
||||
return edgeBuildPackageSet(t).Append(
|
||||
bootPackageSet(t),
|
||||
)
|
||||
}
|
||||
|
||||
// installer boot package sets, needed for booting and
|
||||
// also in the build host
|
||||
|
||||
|
|
|
|||
|
|
@ -593,6 +593,23 @@ func edgeImagePipelines(t *imageType, filename string, options distro.ImageOptio
|
|||
return pipelines, xzPipeline.Name, nil
|
||||
}
|
||||
|
||||
func edgeRawImagePipelines(t *imageType, customizations *blueprint.Customizations, options distro.ImageOptions, repos []rpmmd.RepoConfig, packageSetSpecs map[string][]rpmmd.PackageSpec, rng *rand.Rand) ([]osbuild.Pipeline, error) {
|
||||
pipelines := make([]osbuild.Pipeline, 0)
|
||||
pipelines = append(pipelines, *buildPipeline(repos, packageSetSpecs[buildPkgsKey]))
|
||||
|
||||
imgName := t.filename
|
||||
|
||||
// create the raw image
|
||||
imagePipelines, _, err := edgeImagePipelines(t, imgName, options, rng)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pipelines = append(pipelines, imagePipelines...)
|
||||
|
||||
return pipelines, nil
|
||||
}
|
||||
|
||||
func buildPipeline(repos []rpmmd.RepoConfig, buildPackageSpecs []rpmmd.PackageSpec) *osbuild.Pipeline {
|
||||
p := new(osbuild.Pipeline)
|
||||
p.Name = "build"
|
||||
|
|
|
|||
|
|
@ -353,10 +353,13 @@ var imageTypeCompatMapping = map[string]string{
|
|||
"rhel-edge-commit": "rhel-edge-commit",
|
||||
"rhel-edge-container": "rhel-edge-container",
|
||||
"rhel-edge-installer": "rhel-edge-installer",
|
||||
"rhel-raw-image": "rhel-raw-image",
|
||||
"rhel-edge-raw-image": "rhel-edge-raw-image",
|
||||
"rhel-edge-simplified-installer": "rhel-edge-simplified-installer",
|
||||
"edge-commit": "edge-commit",
|
||||
"edge-container": "edge-container",
|
||||
"edge-installer": "edge-installer",
|
||||
"edge-raw-image": "edge-raw-image",
|
||||
"edge-simplified-installer": "edge-simplified-installer",
|
||||
"image-installer": "image-installer",
|
||||
"test_type": "test_type", // used only in json_test.go
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue