- Remove stage-specific input types when they are org.osbuild.tree input types. - Use PipelineTreeInputs when stage requires a single tree input reference with an arbitrary key. - For Stages that require a specific key with a tree input, make the key part of the NewXStage() function and only allow specifying the name of the pipeline from which to copy the tree as part of the function arguments.
81 lines
2.3 KiB
Go
81 lines
2.3 KiB
Go
package manifest
|
|
|
|
import (
|
|
"github.com/osbuild/osbuild-composer/internal/artifact"
|
|
"github.com/osbuild/osbuild-composer/internal/osbuild"
|
|
"github.com/osbuild/osbuild-composer/internal/platform"
|
|
)
|
|
|
|
// A RawOSTreeImage represents a raw ostree image file which can be booted in a
|
|
// hypervisor. It is created from an existing OSTreeDeployment.
|
|
type RawOSTreeImage struct {
|
|
Base
|
|
treePipeline *OSTreeDeployment
|
|
Filename string
|
|
platform platform.Platform
|
|
}
|
|
|
|
func NewRawOStreeImage(m *Manifest,
|
|
buildPipeline *Build,
|
|
platform platform.Platform,
|
|
treePipeline *OSTreeDeployment) *RawOSTreeImage {
|
|
p := &RawOSTreeImage{
|
|
Base: NewBase(m, "image", buildPipeline),
|
|
treePipeline: treePipeline,
|
|
Filename: "disk.img",
|
|
platform: platform,
|
|
}
|
|
buildPipeline.addDependent(p)
|
|
if treePipeline.Base.manifest != m {
|
|
panic("tree pipeline from different manifest")
|
|
}
|
|
m.addPipeline(p)
|
|
return p
|
|
}
|
|
|
|
func (p *RawOSTreeImage) getBuildPackages() []string {
|
|
packages := p.platform.GetBuildPackages()
|
|
packages = append(packages, p.platform.GetPackages()...)
|
|
packages = append(packages, p.treePipeline.PartitionTable.GetBuildPackages()...)
|
|
packages = append(packages,
|
|
"rpm-ostree",
|
|
|
|
// these should be defined on the platform
|
|
"dracut-config-generic",
|
|
"efibootmgr",
|
|
)
|
|
return packages
|
|
}
|
|
|
|
func (p *RawOSTreeImage) serialize() osbuild.Pipeline {
|
|
pipeline := p.Base.serialize()
|
|
|
|
pt := p.treePipeline.PartitionTable
|
|
if pt == nil {
|
|
panic("no partition table in live image")
|
|
}
|
|
|
|
for _, stage := range osbuild.GenImagePrepareStages(pt, p.Filename, osbuild.PTSfdisk) {
|
|
pipeline.AddStage(stage)
|
|
}
|
|
|
|
inputName := "root-tree"
|
|
copyOptions, copyDevices, copyMounts := osbuild.GenCopyFSTreeOptions(inputName, p.treePipeline.Name(), p.Filename, pt)
|
|
copyInputs := osbuild.NewPipelineTreeInputs(inputName, p.treePipeline.Name())
|
|
pipeline.AddStage(osbuild.NewCopyStage(copyOptions, copyInputs, copyDevices, copyMounts))
|
|
|
|
for _, stage := range osbuild.GenImageFinishStages(pt, p.Filename) {
|
|
pipeline.AddStage(stage)
|
|
}
|
|
|
|
if grubLegacy := p.treePipeline.platform.GetBIOSPlatform(); grubLegacy != "" {
|
|
pipeline.AddStage(osbuild.NewGrub2InstStage(osbuild.NewGrub2InstStageOption(p.Filename, pt, grubLegacy)))
|
|
}
|
|
|
|
return pipeline
|
|
}
|
|
|
|
func (p *RawOSTreeImage) Export() *artifact.Artifact {
|
|
p.Base.export = true
|
|
return artifact.New(p.Name(), p.Filename, nil)
|
|
}
|