manifest: new CoreOS Installer pipeline
New CoreOS Installer (coi-tree) pipeline. Based on the existing pipeline in rhel9/pipelines.
This commit is contained in:
parent
b8ec2cb09d
commit
c8710e407c
1 changed files with 161 additions and 0 deletions
161
internal/manifest/coreos_installer.go
Normal file
161
internal/manifest/coreos_installer.go
Normal file
|
|
@ -0,0 +1,161 @@
|
||||||
|
package manifest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/osbuild/osbuild-composer/internal/blueprint"
|
||||||
|
"github.com/osbuild/osbuild-composer/internal/osbuild"
|
||||||
|
"github.com/osbuild/osbuild-composer/internal/platform"
|
||||||
|
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CoreOSInstaller struct {
|
||||||
|
Base
|
||||||
|
|
||||||
|
// Packages to install in addition to the ones required by the
|
||||||
|
// pipeline.
|
||||||
|
ExtraPackages []string
|
||||||
|
|
||||||
|
// Extra repositories to install packages from
|
||||||
|
ExtraRepos []rpmmd.RepoConfig
|
||||||
|
|
||||||
|
platform platform.Platform
|
||||||
|
repos []rpmmd.RepoConfig
|
||||||
|
packageSpecs []rpmmd.PackageSpec
|
||||||
|
kernelName string
|
||||||
|
kernelVer string
|
||||||
|
product string
|
||||||
|
version string
|
||||||
|
Variant string
|
||||||
|
|
||||||
|
// Biosdevname indicates whether or not biosdevname should be used to
|
||||||
|
// name network devices when booting the installer. This may affect
|
||||||
|
// the naming of network devices on the target system.
|
||||||
|
Biosdevname bool
|
||||||
|
|
||||||
|
FDO *blueprint.FDOCustomization
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCoreOSInstaller creates an CoreOS installer pipeline object.
|
||||||
|
func NewCoreOSInstaller(m *Manifest,
|
||||||
|
buildPipeline *Build,
|
||||||
|
platform platform.Platform,
|
||||||
|
repos []rpmmd.RepoConfig,
|
||||||
|
kernelName,
|
||||||
|
product,
|
||||||
|
version string) *CoreOSInstaller {
|
||||||
|
p := &CoreOSInstaller{
|
||||||
|
Base: NewBase(m, "coi-tree", buildPipeline),
|
||||||
|
platform: platform,
|
||||||
|
repos: repos,
|
||||||
|
kernelName: kernelName,
|
||||||
|
product: product,
|
||||||
|
version: version,
|
||||||
|
}
|
||||||
|
buildPipeline.addDependent(p)
|
||||||
|
m.addPipeline(p)
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: refactor - what is required to boot and what to build, and
|
||||||
|
// do they all belong in this pipeline?
|
||||||
|
func (p *CoreOSInstaller) getBootPackages() []string {
|
||||||
|
packages := []string{
|
||||||
|
"grub2-tools",
|
||||||
|
"grub2-tools-extra",
|
||||||
|
"grub2-tools-minimal",
|
||||||
|
"efibootmgr",
|
||||||
|
}
|
||||||
|
|
||||||
|
switch p.platform.GetArch() {
|
||||||
|
case platform.ARCH_X86_64:
|
||||||
|
packages = append(packages,
|
||||||
|
"grub2-efi-x64",
|
||||||
|
"grub2-efi-x64-cdboot",
|
||||||
|
"grub2-pc",
|
||||||
|
"grub2-pc-modules",
|
||||||
|
"shim-x64",
|
||||||
|
"syslinux",
|
||||||
|
"syslinux-nonlinux",
|
||||||
|
)
|
||||||
|
case platform.ARCH_AARCH64:
|
||||||
|
packages = append(packages,
|
||||||
|
"grub2-efi-aa64-cdboot",
|
||||||
|
"grub2-efi-aa64",
|
||||||
|
"shim-aa64",
|
||||||
|
)
|
||||||
|
default:
|
||||||
|
panic(fmt.Sprintf("unsupported arch: %s", p.platform.GetArch()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return packages
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *CoreOSInstaller) getBuildPackages() []string {
|
||||||
|
packages := p.getBootPackages()
|
||||||
|
packages = append(packages,
|
||||||
|
"rpm",
|
||||||
|
"lorax-templates-generic",
|
||||||
|
)
|
||||||
|
return packages
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *CoreOSInstaller) getPackageSetChain() []rpmmd.PackageSet {
|
||||||
|
packages := p.getBootPackages()
|
||||||
|
return []rpmmd.PackageSet{
|
||||||
|
{
|
||||||
|
Include: append(packages, p.ExtraPackages...),
|
||||||
|
Repositories: append(p.repos, p.ExtraRepos...),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *CoreOSInstaller) getPackageSpecs() []rpmmd.PackageSpec {
|
||||||
|
return p.packageSpecs
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *CoreOSInstaller) serializeStart(packages []rpmmd.PackageSpec) {
|
||||||
|
if len(p.packageSpecs) > 0 {
|
||||||
|
panic("double call to serializeStart()")
|
||||||
|
}
|
||||||
|
p.packageSpecs = packages
|
||||||
|
if p.kernelName != "" {
|
||||||
|
p.kernelVer = rpmmd.GetVerStrFromPackageSpecListPanic(p.packageSpecs, p.kernelName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *CoreOSInstaller) serializeEnd() {
|
||||||
|
if len(p.packageSpecs) == 0 {
|
||||||
|
panic("serializeEnd() call when serialization not in progress")
|
||||||
|
}
|
||||||
|
p.kernelVer = ""
|
||||||
|
p.packageSpecs = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *CoreOSInstaller) serialize() osbuild.Pipeline {
|
||||||
|
pipeline := p.Base.serialize()
|
||||||
|
|
||||||
|
pipeline.AddStage(osbuild.NewRPMStage(osbuild.NewRPMStageOptions(p.repos), osbuild.NewRpmStageSourceFilesInputs(p.packageSpecs)))
|
||||||
|
pipeline.AddStage(osbuild.NewBuildstampStage(&osbuild.BuildstampStageOptions{
|
||||||
|
Arch: p.platform.GetArch().String(),
|
||||||
|
Product: p.product,
|
||||||
|
Variant: p.Variant,
|
||||||
|
Version: p.version,
|
||||||
|
Final: true,
|
||||||
|
}))
|
||||||
|
pipeline.AddStage(osbuild.NewLocaleStage(&osbuild.LocaleStageOptions{Language: "C.UTF-8"}))
|
||||||
|
dracutStageOptions := dracutStageOptions(p.kernelVer, p.Biosdevname, []string{
|
||||||
|
"coreos-installer",
|
||||||
|
"fdo",
|
||||||
|
})
|
||||||
|
if p.FDO != nil && p.FDO.DiunPubKeyRootCerts != "" {
|
||||||
|
pipeline.AddStage(osbuild.NewFDOStageForRootCerts(p.FDO.DiunPubKeyRootCerts))
|
||||||
|
dracutStageOptions.Install = []string{"/fdo_diun_pub_key_root_certs.pem"}
|
||||||
|
}
|
||||||
|
pipeline.AddStage(osbuild.NewDracutStage(dracutStageOptions))
|
||||||
|
return pipeline
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *CoreOSInstaller) GetPlatform() platform.Platform {
|
||||||
|
return p.platform
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue