debian-forge-composer/internal/manifest/iso.go
Tom Gundersen 4961a17ba8 manifest: implicitly track pipelines in manifest
Pipelines are now added to their manifest on creation, and we
ensure that dependants are associated with the same manifest.
2022-07-04 23:04:29 +01:00

62 lines
1.6 KiB
Go

package manifest
import (
"github.com/osbuild/osbuild-composer/internal/osbuild2"
)
// An ISOPipeline represents a bootable ISO file created from an
// an existing ISOTreePipeline.
type ISOPipeline struct {
BasePipeline
ISOLinux bool
treePipeline *ISOTreePipeline
filename string
}
func NewISOPipeline(m *Manifest,
buildPipeline *BuildPipeline,
treePipeline *ISOTreePipeline,
filename string) *ISOPipeline {
p := &ISOPipeline{
BasePipeline: NewBasePipeline(m, "bootiso", buildPipeline, nil),
treePipeline: treePipeline,
filename: filename,
}
buildPipeline.addDependent(p)
if treePipeline.BasePipeline.manifest != m {
panic("tree pipeline from different manifest")
}
m.addPipeline(p)
return p
}
func (p *ISOPipeline) serialize() osbuild2.Pipeline {
pipeline := p.BasePipeline.serialize()
pipeline.AddStage(osbuild2.NewXorrisofsStage(xorrisofsStageOptions(p.filename, p.treePipeline.isoLabel, p.ISOLinux), osbuild2.NewXorrisofsStagePipelineTreeInputs(p.treePipeline.Name())))
pipeline.AddStage(osbuild2.NewImplantisomd5Stage(&osbuild2.Implantisomd5StageOptions{Filename: p.filename}))
return pipeline
}
func xorrisofsStageOptions(filename, isolabel string, isolinux bool) *osbuild2.XorrisofsStageOptions {
options := &osbuild2.XorrisofsStageOptions{
Filename: filename,
VolID: isolabel,
SysID: "LINUX",
EFI: "images/efiboot.img",
ISOLevel: 3,
}
if isolinux {
options.Boot = &osbuild2.XorrisofsBoot{
Image: "isolinux/isolinux.bin",
Catalog: "isolinux/boot.cat",
}
options.IsohybridMBR = "/usr/share/syslinux/isohdpfx.bin"
}
return options
}