Blame internal/distro/rhel84/distro.go

Packit Service 509fd4
package rhel84
Packit Service 509fd4
Packit Service 509fd4
import (
Packit Service 509fd4
	"encoding/json"
Packit Service 509fd4
	"errors"
Packit Service 509fd4
	"fmt"
Packit Service 509fd4
	"io"
Packit Service 509fd4
	"math/rand"
Packit Service 509fd4
	"sort"
Packit Service 509fd4
Packit Service 509fd4
	"github.com/osbuild/osbuild-composer/internal/disk"
Packit Service 509fd4
	"github.com/osbuild/osbuild-composer/internal/distro"
Packit Service 15f37d
	osbuild "github.com/osbuild/osbuild-composer/internal/osbuild1"
Packit Service 509fd4
Packit Service 509fd4
	"github.com/google/uuid"
Packit Service 509fd4
Packit Service 509fd4
	"github.com/osbuild/osbuild-composer/internal/blueprint"
Packit Service 509fd4
	"github.com/osbuild/osbuild-composer/internal/crypt"
Packit Service 509fd4
	"github.com/osbuild/osbuild-composer/internal/rpmmd"
Packit Service 509fd4
)
Packit Service 509fd4
Packit Service 509fd4
const name = "rhel-84"
Packit Service bcdfb1
const centosName = "centos-8"
Packit Service 509fd4
const modulePlatformID = "platform:el8"
Packit Service bcdfb1
const ostreeRef = "rhel/8/%s/edge"
Packit Service 509fd4
Packit Service 509fd4
type distribution struct {
Packit Service 509fd4
	arches        map[string]architecture
Packit Service 15f37d
	imageTypes    map[string]distro.ImageType
Packit Service 509fd4
	buildPackages []string
Packit Service bcdfb1
	isCentos      bool
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
type architecture struct {
Packit Service 509fd4
	distro             *distribution
Packit Service 509fd4
	name               string
Packit Service 509fd4
	bootloaderPackages []string
Packit Service 509fd4
	buildPackages      []string
Packit Service 509fd4
	legacy             string
Packit Service 509fd4
	uefi               bool
Packit Service 15f37d
	imageTypes         map[string]distro.ImageType
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
type imageType struct {
Packit Service 509fd4
	arch                    *architecture
Packit Service 509fd4
	name                    string
Packit Service 509fd4
	filename                string
Packit Service 509fd4
	mimeType                string
Packit Service 509fd4
	packages                []string
Packit Service 509fd4
	excludedPackages        []string
Packit Service 509fd4
	enabledServices         []string
Packit Service 509fd4
	disabledServices        []string
Packit Service 509fd4
	defaultTarget           string
Packit Service 509fd4
	kernelOptions           string
Packit Service 509fd4
	bootable                bool
Packit Service 509fd4
	rpmOstree               bool
Packit Service 509fd4
	defaultSize             uint64
Packit Service 509fd4
	partitionTableGenerator func(imageOptions distro.ImageOptions, arch distro.Arch, rng *rand.Rand) disk.PartitionTable
Packit Service 509fd4
	assembler               func(pt *disk.PartitionTable, options distro.ImageOptions, arch distro.Arch) *osbuild.Assembler
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (a *architecture) Distro() distro.Distro {
Packit Service 509fd4
	return a.distro
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (t *imageType) Arch() distro.Arch {
Packit Service 509fd4
	return t.arch
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (d *distribution) ListArches() []string {
Packit Service 509fd4
	archs := make([]string, 0, len(d.arches))
Packit Service 509fd4
	for name := range d.arches {
Packit Service 509fd4
		archs = append(archs, name)
Packit Service 509fd4
	}
Packit Service 509fd4
	sort.Strings(archs)
Packit Service 509fd4
	return archs
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (d *distribution) GetArch(arch string) (distro.Arch, error) {
Packit Service 509fd4
	a, exists := d.arches[arch]
Packit Service 509fd4
	if !exists {
Packit Service 509fd4
		return nil, errors.New("invalid architecture: " + arch)
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	return &a, nil
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service bcdfb1
func (d *distribution) addArches(arches ...architecture) {
Packit Service bcdfb1
	if d.arches == nil {
Packit Service bcdfb1
		d.arches = map[string]architecture{}
Packit Service bcdfb1
	}
Packit Service bcdfb1
Packit Service 509fd4
	for _, a := range arches {
Packit Service 509fd4
		d.arches[a.name] = architecture{
Packit Service 509fd4
			distro:             d,
Packit Service 509fd4
			name:               a.name,
Packit Service 509fd4
			bootloaderPackages: a.bootloaderPackages,
Packit Service 509fd4
			buildPackages:      a.buildPackages,
Packit Service 509fd4
			uefi:               a.uefi,
Packit Service 509fd4
			imageTypes:         a.imageTypes,
Packit Service 509fd4
		}
Packit Service 509fd4
	}
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (a *architecture) Name() string {
Packit Service 509fd4
	return a.name
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (a *architecture) ListImageTypes() []string {
Packit Service 509fd4
	formats := make([]string, 0, len(a.imageTypes))
Packit Service 509fd4
	for name := range a.imageTypes {
Packit Service 509fd4
		formats = append(formats, name)
Packit Service 509fd4
	}
Packit Service 509fd4
	sort.Strings(formats)
Packit Service 509fd4
	return formats
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (a *architecture) GetImageType(imageType string) (distro.ImageType, error) {
Packit Service 509fd4
	t, exists := a.imageTypes[imageType]
Packit Service 509fd4
	if !exists {
Packit Service 509fd4
		return nil, errors.New("invalid image type: " + imageType)
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 15f37d
	return t, nil
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service bcdfb1
func (a *architecture) addImageTypes(imageTypes ...imageType) {
Packit Service bcdfb1
	if a.imageTypes == nil {
Packit Service 15f37d
		a.imageTypes = map[string]distro.ImageType{}
Packit Service bcdfb1
	}
Packit Service 509fd4
	for _, it := range imageTypes {
Packit Service 15f37d
		a.imageTypes[it.name] = &imageType{
Packit Service 509fd4
			arch:                    a,
Packit Service 509fd4
			name:                    it.name,
Packit Service 509fd4
			filename:                it.filename,
Packit Service 509fd4
			mimeType:                it.mimeType,
Packit Service 509fd4
			packages:                it.packages,
Packit Service 509fd4
			excludedPackages:        it.excludedPackages,
Packit Service 509fd4
			enabledServices:         it.enabledServices,
Packit Service 509fd4
			disabledServices:        it.disabledServices,
Packit Service 509fd4
			defaultTarget:           it.defaultTarget,
Packit Service 509fd4
			kernelOptions:           it.kernelOptions,
Packit Service 509fd4
			bootable:                it.bootable,
Packit Service 509fd4
			rpmOstree:               it.rpmOstree,
Packit Service 509fd4
			defaultSize:             it.defaultSize,
Packit Service 509fd4
			partitionTableGenerator: it.partitionTableGenerator,
Packit Service 509fd4
			assembler:               it.assembler,
Packit Service 509fd4
		}
Packit Service 509fd4
	}
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 15f37d
// For the secondary implementation of image type.
Packit Service 15f37d
// Temporary; for supporting the new Manifest schema, until everything is
Packit Service 15f37d
// ported.
Packit Service 15f37d
func (a *architecture) addS2ImageTypes(imageTypes ...imageTypeS2) {
Packit Service 15f37d
	for _, it := range imageTypes {
Packit Service 15f37d
		a.imageTypes[it.name] = &imageTypeS2{
Packit Service 15f37d
			arch:             a,
Packit Service 15f37d
			name:             it.name,
Packit Service 15f37d
			filename:         it.filename,
Packit Service 15f37d
			mimeType:         it.mimeType,
Packit Service 15f37d
			packageSets:      it.packageSets,
Packit Service 15f37d
			enabledServices:  it.enabledServices,
Packit Service 15f37d
			disabledServices: it.disabledServices,
Packit Service 15f37d
			defaultTarget:    it.defaultTarget,
Packit Service 15f37d
			kernelOptions:    it.kernelOptions,
Packit Service 15f37d
			bootable:         it.bootable,
Packit Service 15f37d
			rpmOstree:        it.rpmOstree,
Packit Service 15f37d
			defaultSize:      it.defaultSize,
Packit Service 15f37d
			bootISO:          it.bootISO,
Packit Service 15f37d
		}
Packit Service 15f37d
	}
Packit Service 15f37d
}
Packit Service 15f37d
Packit Service 509fd4
func (t *imageType) Name() string {
Packit Service 509fd4
	return t.name
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (t *imageType) Filename() string {
Packit Service 509fd4
	return t.filename
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (t *imageType) MIMEType() string {
Packit Service 509fd4
	return t.mimeType
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service bcdfb1
func (t *imageType) OSTreeRef() string {
Packit Service bcdfb1
	if t.rpmOstree {
Packit Service bcdfb1
		return fmt.Sprintf(ostreeRef, t.arch.name)
Packit Service bcdfb1
	}
Packit Service bcdfb1
	return ""
Packit Service bcdfb1
}
Packit Service bcdfb1
Packit Service 509fd4
func (t *imageType) Size(size uint64) uint64 {
Packit Service 509fd4
	const MegaByte = 1024 * 1024
Packit Service 509fd4
	// Microsoft Azure requires vhd images to be rounded up to the nearest MB
Packit Service 509fd4
	if t.name == "vhd" && size%MegaByte != 0 {
Packit Service 509fd4
		size = (size/MegaByte + 1) * MegaByte
Packit Service 509fd4
	}
Packit Service 509fd4
	if size == 0 {
Packit Service 509fd4
		size = t.defaultSize
Packit Service 509fd4
	}
Packit Service 509fd4
	return size
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (t *imageType) Packages(bp blueprint.Blueprint) ([]string, []string) {
Packit Service 509fd4
	packages := append(t.packages, bp.GetPackages()...)
Packit Service 509fd4
	timezone, _ := bp.Customizations.GetTimezoneSettings()
Packit Service 509fd4
	if timezone != nil {
Packit Service 509fd4
		packages = append(packages, "chrony")
Packit Service 509fd4
	}
Packit Service 509fd4
	if t.bootable {
Packit Service 509fd4
		packages = append(packages, t.arch.bootloaderPackages...)
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service bcdfb1
	if t.arch.distro.isCentos {
Packit Service bcdfb1
		// drop insights from centos, it's not available there
Packit Service bcdfb1
		packages = removePackage(packages, "insights-client")
Packit Service bcdfb1
	}
Packit Service bcdfb1
Packit Service 509fd4
	return packages, t.excludedPackages
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (t *imageType) BuildPackages() []string {
Packit Service 509fd4
	packages := append(t.arch.distro.buildPackages, t.arch.buildPackages...)
Packit Service 509fd4
	if t.rpmOstree {
Packit Service 509fd4
		packages = append(packages, "rpm-ostree")
Packit Service 509fd4
	}
Packit Service 509fd4
	return packages
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 15f37d
func (t *imageType) PackageSets(bp blueprint.Blueprint) map[string]rpmmd.PackageSet {
Packit Service 15f37d
	includePackages, excludePackages := t.Packages(bp)
Packit Service 15f37d
	return map[string]rpmmd.PackageSet{
Packit Service 15f37d
		"packages": {
Packit Service 15f37d
			Include: includePackages,
Packit Service 15f37d
			Exclude: excludePackages,
Packit Service 15f37d
		},
Packit Service 15f37d
		"build-packages": {
Packit Service 15f37d
			Include: t.BuildPackages(),
Packit Service 15f37d
		},
Packit Service 15f37d
	}
Packit Service 15f37d
}
Packit Service 15f37d
Packit Service 15f37d
func (t *imageType) Exports() []string {
Packit Service 15f37d
	return []string{"assembler"}
Packit Service 15f37d
}
Packit Service 15f37d
Packit Service 509fd4
func (t *imageType) Manifest(c *blueprint.Customizations,
Packit Service 509fd4
	options distro.ImageOptions,
Packit Service 509fd4
	repos []rpmmd.RepoConfig,
Packit Service 15f37d
	packageSpecSets map[string][]rpmmd.PackageSpec,
Packit Service 509fd4
	seed int64) (distro.Manifest, error) {
Packit Service 509fd4
	source := rand.NewSource(seed)
Packit Service 509fd4
	rng := rand.New(source)
Packit Service 15f37d
	pipeline, err := t.pipeline(c, options, repos, packageSpecSets["packages"], packageSpecSets["build-packages"], rng)
Packit Service 509fd4
	if err != nil {
Packit Service 509fd4
		return distro.Manifest{}, err
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	return json.Marshal(
Packit Service 509fd4
		osbuild.Manifest{
Packit Service 15f37d
			Sources:  *sources(append(packageSpecSets["packages"], packageSpecSets["build-packages"]...)),
Packit Service 509fd4
			Pipeline: *pipeline,
Packit Service 509fd4
		},
Packit Service 509fd4
	)
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (d *distribution) Name() string {
Packit Service bcdfb1
	if d.isCentos {
Packit Service bcdfb1
		return centosName
Packit Service bcdfb1
	}
Packit Service 509fd4
	return name
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (d *distribution) ModulePlatformID() string {
Packit Service 509fd4
	return modulePlatformID
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func sources(packages []rpmmd.PackageSpec) *osbuild.Sources {
Packit Service 509fd4
	files := &osbuild.FilesSource{
Packit Service 509fd4
		URLs: make(map[string]osbuild.FileSource),
Packit Service 509fd4
	}
Packit Service 509fd4
	for _, pkg := range packages {
Packit Service 509fd4
		fileSource := osbuild.FileSource{
Packit Service 509fd4
			URL: pkg.RemoteLocation,
Packit Service 509fd4
		}
Packit Service 509fd4
		if pkg.Secrets == "org.osbuild.rhsm" {
Packit Service 509fd4
			fileSource.Secrets = &osbuild.Secret{
Packit Service 509fd4
				Name: "org.osbuild.rhsm",
Packit Service 509fd4
			}
Packit Service 509fd4
		}
Packit Service 509fd4
		files.URLs[pkg.Checksum] = fileSource
Packit Service 509fd4
	}
Packit Service 509fd4
	return &osbuild.Sources{
Packit Service 509fd4
		"org.osbuild.files": files,
Packit Service 509fd4
	}
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (t *imageType) pipeline(c *blueprint.Customizations, options distro.ImageOptions, repos []rpmmd.RepoConfig, packageSpecs, buildPackageSpecs []rpmmd.PackageSpec, rng *rand.Rand) (*osbuild.Pipeline, error) {
Packit Service bcdfb1
Packit Service bcdfb1
	if kernelOpts := c.GetKernel(); kernelOpts != nil && kernelOpts.Append != "" && t.rpmOstree {
Packit Service bcdfb1
		return nil, fmt.Errorf("kernel boot parameter customizations are not supported for ostree types")
Packit Service bcdfb1
	}
Packit Service bcdfb1
Packit Service 509fd4
	var pt *disk.PartitionTable
Packit Service 509fd4
	if t.partitionTableGenerator != nil {
Packit Service 509fd4
		table := t.partitionTableGenerator(options, t.arch, rng)
Packit Service 509fd4
		pt = &table
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	p := &osbuild.Pipeline{}
Packit Service bcdfb1
	if t.arch.distro.isCentos {
Packit Service bcdfb1
		p.SetBuild(t.buildPipeline(repos, *t.arch, buildPackageSpecs), "org.osbuild.centos8")
Packit Service bcdfb1
	} else {
Packit Service bcdfb1
		p.SetBuild(t.buildPipeline(repos, *t.arch, buildPackageSpecs), "org.osbuild.rhel84")
Packit Service bcdfb1
	}
Packit Service 509fd4
Packit Service 509fd4
	if t.arch.Name() == "s390x" {
Packit Service 509fd4
		if pt == nil {
Packit Service 509fd4
			panic("s390x image must have a partition table, this is a programming error")
Packit Service 509fd4
		}
Packit Service 509fd4
Packit Service 509fd4
		rootPartition := pt.RootPartition()
Packit Service 509fd4
		if rootPartition == nil {
Packit Service 509fd4
			panic("s390x image must have a root partition, this is a programming error")
Packit Service 509fd4
		}
Packit Service 509fd4
Packit Service 509fd4
		p.AddStage(osbuild.NewKernelCmdlineStage(&osbuild.KernelCmdlineStageOptions{
Packit Service 3a6627
			RootFsUUID: rootPartition.Filesystem.UUID,
Packit Service 3a6627
			KernelOpts: t.kernelOptions,
Packit Service 509fd4
		}))
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	p.AddStage(osbuild.NewRPMStage(t.rpmStageOptions(*t.arch, repos, packageSpecs)))
Packit Service 509fd4
	p.AddStage(osbuild.NewFixBLSStage())
Packit Service 509fd4
Packit Service 509fd4
	if pt != nil {
Packit Service 509fd4
		p.AddStage(osbuild.NewFSTabStage(pt.FSTabStageOptions()))
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	if t.bootable {
Packit Service 509fd4
		if t.arch.Name() != "s390x" {
Packit Service 15f37d
			p.AddStage(osbuild.NewGRUB2Stage(t.grub2StageOptions(pt, t.kernelOptions, c.GetKernel(), packageSpecs, t.arch.uefi, t.arch.legacy)))
Packit Service 509fd4
		}
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	// TODO support setting all languages and install corresponding langpack-* package
Packit Service 509fd4
	language, keyboard := c.GetPrimaryLocale()
Packit Service 509fd4
Packit Service 509fd4
	if language != nil {
Packit Service 509fd4
		p.AddStage(osbuild.NewLocaleStage(&osbuild.LocaleStageOptions{Language: *language}))
Packit Service 509fd4
	} else {
Packit Service 15f37d
		p.AddStage(osbuild.NewLocaleStage(&osbuild.LocaleStageOptions{Language: "en_US.UTF-8"}))
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	if keyboard != nil {
Packit Service 509fd4
		p.AddStage(osbuild.NewKeymapStage(&osbuild.KeymapStageOptions{Keymap: *keyboard}))
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	if hostname := c.GetHostname(); hostname != nil {
Packit Service 509fd4
		p.AddStage(osbuild.NewHostnameStage(&osbuild.HostnameStageOptions{Hostname: *hostname}))
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	timezone, ntpServers := c.GetTimezoneSettings()
Packit Service 509fd4
Packit Service 509fd4
	if timezone != nil {
Packit Service 509fd4
		p.AddStage(osbuild.NewTimezoneStage(&osbuild.TimezoneStageOptions{Zone: *timezone}))
Packit Service 3a6627
	} else {
Packit Service 3a6627
		p.AddStage(osbuild.NewTimezoneStage(&osbuild.TimezoneStageOptions{Zone: "America/New_York"}))
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	if len(ntpServers) > 0 {
Packit Service 509fd4
		p.AddStage(osbuild.NewChronyStage(&osbuild.ChronyStageOptions{Timeservers: ntpServers}))
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	if groups := c.GetGroups(); len(groups) > 0 {
Packit Service 509fd4
		p.AddStage(osbuild.NewGroupsStage(t.groupStageOptions(groups)))
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	if users := c.GetUsers(); len(users) > 0 {
Packit Service 509fd4
		options, err := t.userStageOptions(users)
Packit Service 509fd4
		if err != nil {
Packit Service 509fd4
			return nil, err
Packit Service 509fd4
		}
Packit Service 509fd4
		p.AddStage(osbuild.NewUsersStage(options))
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 3a6627
	if services := c.GetServices(); services != nil || t.enabledServices != nil || t.disabledServices != nil || t.defaultTarget != "" {
Packit Service 509fd4
		p.AddStage(osbuild.NewSystemdStage(t.systemdStageOptions(t.enabledServices, t.disabledServices, services, t.defaultTarget)))
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	if firewall := c.GetFirewall(); firewall != nil {
Packit Service 509fd4
		p.AddStage(osbuild.NewFirewallStage(t.firewallStageOptions(firewall)))
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	if t.arch.Name() == "s390x" {
Packit Service 509fd4
		p.AddStage(osbuild.NewZiplStage(&osbuild.ZiplStageOptions{}))
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	p.AddStage(osbuild.NewSELinuxStage(t.selinuxStageOptions()))
Packit Service 509fd4
Packit Service bcdfb1
	// These are the current defaults for the sysconfig stage. This can be changed to be image type exclusive if different configs are needed.
Packit Service bcdfb1
	p.AddStage(osbuild.NewSysconfigStage(&osbuild.SysconfigStageOptions{
Packit Service bcdfb1
		Kernel: osbuild.SysconfigKernelOptions{
Packit Service bcdfb1
			UpdateDefault: true,
Packit Service bcdfb1
			DefaultKernel: "kernel",
Packit Service bcdfb1
		},
Packit Service bcdfb1
		Network: osbuild.SysconfigNetworkOptions{
Packit Service bcdfb1
			Networking: true,
Packit Service bcdfb1
			NoZeroConf: true,
Packit Service bcdfb1
		},
Packit Service bcdfb1
	}))
Packit Service bcdfb1
Packit Service 509fd4
	if t.rpmOstree {
Packit Service 509fd4
		p.AddStage(osbuild.NewRPMOSTreeStage(&osbuild.RPMOSTreeStageOptions{
Packit Service 509fd4
			EtcGroupMembers: []string{
Packit Service 509fd4
				// NOTE: We may want to make this configurable.
Packit Service 509fd4
				"wheel", "docker",
Packit Service 509fd4
			},
Packit Service 509fd4
		}))
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	if options.Subscription != nil {
Packit Service 509fd4
		commands := []string{
Packit Service 509fd4
			fmt.Sprintf("/usr/sbin/subscription-manager register --org=%d --activationkey=%s --serverurl %s --baseurl %s", options.Subscription.Organization, options.Subscription.ActivationKey, options.Subscription.ServerUrl, options.Subscription.BaseUrl),
Packit Service 509fd4
		}
Packit Service 509fd4
		if options.Subscription.Insights {
Packit Service 509fd4
			commands = append(commands, "/usr/bin/insights-client --register")
Packit Service 509fd4
		}
Packit Service 509fd4
Packit Service 509fd4
		p.AddStage(osbuild.NewFirstBootStage(&osbuild.FirstBootStageOptions{
Packit Service 509fd4
			Commands:       commands,
Packit Service 509fd4
			WaitForNetwork: true,
Packit Service 509fd4
		},
Packit Service 509fd4
		))
Packit Service bcdfb1
	} else {
Packit Service bcdfb1
		// RHSM DNF plugins should be by default disabled on RHEL Guest KVM images
Packit Service bcdfb1
		if t.Name() == "qcow2" {
Packit Service bcdfb1
			p.AddStage(osbuild.NewRHSMStage(&osbuild.RHSMStageOptions{
Packit Service bcdfb1
				DnfPlugins: &osbuild.RHSMStageOptionsDnfPlugins{
Packit Service bcdfb1
					ProductID: &osbuild.RHSMStageOptionsDnfPlugin{
Packit Service bcdfb1
						Enabled: false,
Packit Service bcdfb1
					},
Packit Service bcdfb1
					SubscriptionManager: &osbuild.RHSMStageOptionsDnfPlugin{
Packit Service bcdfb1
						Enabled: false,
Packit Service bcdfb1
					},
Packit Service bcdfb1
				},
Packit Service bcdfb1
			}))
Packit Service bcdfb1
		}
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	p.Assembler = t.assembler(pt, options, t.arch)
Packit Service 509fd4
Packit Service 509fd4
	return p, nil
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (t *imageType) buildPipeline(repos []rpmmd.RepoConfig, arch architecture, buildPackageSpecs []rpmmd.PackageSpec) *osbuild.Pipeline {
Packit Service 509fd4
	p := &osbuild.Pipeline{}
Packit Service 509fd4
	p.AddStage(osbuild.NewRPMStage(t.rpmStageOptions(arch, repos, buildPackageSpecs)))
Packit Service 509fd4
	p.AddStage(osbuild.NewSELinuxStage(t.selinuxStageOptions()))
Packit Service 509fd4
	return p
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (t *imageType) rpmStageOptions(arch architecture, repos []rpmmd.RepoConfig, specs []rpmmd.PackageSpec) *osbuild.RPMStageOptions {
Packit Service 509fd4
	var gpgKeys []string
Packit Service 509fd4
	for _, repo := range repos {
Packit Service 509fd4
		if repo.GPGKey == "" {
Packit Service 509fd4
			continue
Packit Service 509fd4
		}
Packit Service 509fd4
		gpgKeys = append(gpgKeys, repo.GPGKey)
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	var packages []osbuild.RPMPackage
Packit Service 509fd4
	for _, spec := range specs {
Packit Service 509fd4
		pkg := osbuild.RPMPackage{
Packit Service 509fd4
			Checksum: spec.Checksum,
Packit Service 509fd4
			CheckGPG: spec.CheckGPG,
Packit Service 509fd4
		}
Packit Service 509fd4
		packages = append(packages, pkg)
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	return &osbuild.RPMStageOptions{
Packit Service 509fd4
		GPGKeys:  gpgKeys,
Packit Service 509fd4
		Packages: packages,
Packit Service 509fd4
	}
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (t *imageType) userStageOptions(users []blueprint.UserCustomization) (*osbuild.UsersStageOptions, error) {
Packit Service 509fd4
	options := osbuild.UsersStageOptions{
Packit Service 509fd4
		Users: make(map[string]osbuild.UsersStageOptionsUser),
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	for _, c := range users {
Packit Service 509fd4
		if c.Password != nil && !crypt.PasswordIsCrypted(*c.Password) {
Packit Service 509fd4
			cryptedPassword, err := crypt.CryptSHA512(*c.Password)
Packit Service 509fd4
			if err != nil {
Packit Service 509fd4
				return nil, err
Packit Service 509fd4
			}
Packit Service 509fd4
Packit Service 509fd4
			c.Password = &cryptedPassword
Packit Service 509fd4
		}
Packit Service 509fd4
Packit Service 509fd4
		user := osbuild.UsersStageOptionsUser{
Packit Service 509fd4
			Groups:      c.Groups,
Packit Service 509fd4
			Description: c.Description,
Packit Service 509fd4
			Home:        c.Home,
Packit Service 509fd4
			Shell:       c.Shell,
Packit Service 509fd4
			Password:    c.Password,
Packit Service 509fd4
			Key:         c.Key,
Packit Service 509fd4
		}
Packit Service 509fd4
Packit Service 509fd4
		user.UID = c.UID
Packit Service 509fd4
		user.GID = c.GID
Packit Service 509fd4
Packit Service 509fd4
		options.Users[c.Name] = user
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	return &options, nil
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (t *imageType) groupStageOptions(groups []blueprint.GroupCustomization) *osbuild.GroupsStageOptions {
Packit Service 509fd4
	options := osbuild.GroupsStageOptions{
Packit Service 509fd4
		Groups: map[string]osbuild.GroupsStageOptionsGroup{},
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	for _, group := range groups {
Packit Service 509fd4
		groupData := osbuild.GroupsStageOptionsGroup{
Packit Service 509fd4
			Name: group.Name,
Packit Service 509fd4
		}
Packit Service 509fd4
		groupData.GID = group.GID
Packit Service 509fd4
Packit Service 509fd4
		options.Groups[group.Name] = groupData
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	return &options
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (t *imageType) firewallStageOptions(firewall *blueprint.FirewallCustomization) *osbuild.FirewallStageOptions {
Packit Service 509fd4
	options := osbuild.FirewallStageOptions{
Packit Service 509fd4
		Ports: firewall.Ports,
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	if firewall.Services != nil {
Packit Service 509fd4
		options.EnabledServices = firewall.Services.Enabled
Packit Service 509fd4
		options.DisabledServices = firewall.Services.Disabled
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	return &options
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (t *imageType) systemdStageOptions(enabledServices, disabledServices []string, s *blueprint.ServicesCustomization, target string) *osbuild.SystemdStageOptions {
Packit Service 509fd4
	if s != nil {
Packit Service 509fd4
		enabledServices = append(enabledServices, s.Enabled...)
Packit Service 509fd4
		disabledServices = append(disabledServices, s.Disabled...)
Packit Service 509fd4
	}
Packit Service 509fd4
	return &osbuild.SystemdStageOptions{
Packit Service 509fd4
		EnabledServices:  enabledServices,
Packit Service 509fd4
		DisabledServices: disabledServices,
Packit Service 509fd4
		DefaultTarget:    target,
Packit Service 509fd4
	}
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 15f37d
func (t *imageType) grub2StageOptions(pt *disk.PartitionTable, kernelOptions string, kernel *blueprint.KernelCustomization, packages []rpmmd.PackageSpec, uefi bool, legacy string) *osbuild.GRUB2StageOptions {
Packit Service 509fd4
	if pt == nil {
Packit Service 509fd4
		panic("partition table must be defined for grub2 stage, this is a programming error")
Packit Service 509fd4
	}
Packit Service 509fd4
	rootPartition := pt.RootPartition()
Packit Service 509fd4
	if rootPartition == nil {
Packit Service 509fd4
		panic("root partition must be defined for grub2 stage, this is a programming error")
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 15f37d
	stageOptions := osbuild.GRUB2StageOptions{
Packit Service 15f37d
		RootFilesystemUUID: uuid.MustParse(rootPartition.Filesystem.UUID),
Packit Service 15f37d
		KernelOptions:      kernelOptions,
Packit Service 15f37d
		Legacy:             legacy,
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	if uefi {
Packit Service bcdfb1
		var vendor string
Packit Service bcdfb1
		if t.arch.distro.isCentos {
Packit Service bcdfb1
			vendor = "centos"
Packit Service bcdfb1
		} else {
Packit Service bcdfb1
			vendor = "redhat"
Packit Service bcdfb1
		}
Packit Service 15f37d
		stageOptions.UEFI = &osbuild.GRUB2UEFI{
Packit Service bcdfb1
			Vendor: vendor,
Packit Service 509fd4
		}
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	if !uefi {
Packit Service 15f37d
		stageOptions.Legacy = t.arch.legacy
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 15f37d
	if kernel != nil {
Packit Service 15f37d
		if kernel.Append != "" {
Packit Service 15f37d
			stageOptions.KernelOptions += " " + kernel.Append
Packit Service 15f37d
		}
Packit Service 15f37d
		for _, pkg := range packages {
Packit Service 15f37d
			if pkg.Name == kernel.Name {
Packit Service 15f37d
				stageOptions.SavedEntry = "ffffffffffffffffffffffffffffffff-" + pkg.Version + "-" + pkg.Release + "." + pkg.Arch
Packit Service 15f37d
				break
Packit Service 15f37d
			}
Packit Service 15f37d
		}
Packit Service 509fd4
	}
Packit Service 15f37d
Packit Service 15f37d
	return &stageOptions
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func (t *imageType) selinuxStageOptions() *osbuild.SELinuxStageOptions {
Packit Service 509fd4
	return &osbuild.SELinuxStageOptions{
Packit Service 509fd4
		FileContexts: "etc/selinux/targeted/contexts/files/file_contexts",
Packit Service 509fd4
	}
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func defaultPartitionTable(imageOptions distro.ImageOptions, arch distro.Arch, rng *rand.Rand) disk.PartitionTable {
Packit Service 509fd4
	if arch.Name() == "x86_64" {
Packit Service 509fd4
		return disk.PartitionTable{
Packit Service 509fd4
			Size: imageOptions.Size,
Packit Service 509fd4
			UUID: "D209C89E-EA5E-4FBD-B161-B461CCE297E0",
Packit Service 509fd4
			Type: "gpt",
Packit Service 509fd4
			Partitions: []disk.Partition{
Packit Service 509fd4
				{
Packit Service 509fd4
					Bootable: true,
Packit Service 509fd4
					Size:     2048,
Packit Service 509fd4
					Start:    2048,
Packit Service 509fd4
					Type:     "21686148-6449-6E6F-744E-656564454649",
Packit Service 509fd4
					UUID:     "FAC7F1FB-3E8D-4137-A512-961DE09A5549",
Packit Service 509fd4
				},
Packit Service 509fd4
				{
Packit Service 509fd4
					Start: 4096,
Packit Service 509fd4
					Size:  204800,
Packit Service 509fd4
					Type:  "C12A7328-F81F-11D2-BA4B-00A0C93EC93B",
Packit Service 509fd4
					UUID:  "68B2905B-DF3E-4FB3-80FA-49D1E773AA33",
Packit Service 509fd4
					Filesystem: &disk.Filesystem{
Packit Service 509fd4
						Type:         "vfat",
Packit Service 509fd4
						UUID:         "7B77-95E7",
Packit Service 509fd4
						Mountpoint:   "/boot/efi",
Packit Service 509fd4
						FSTabOptions: "defaults,uid=0,gid=0,umask=077,shortname=winnt",
Packit Service 509fd4
						FSTabFreq:    0,
Packit Service 509fd4
						FSTabPassNo:  2,
Packit Service 509fd4
					},
Packit Service 509fd4
				},
Packit Service 509fd4
				{
Packit Service 509fd4
					Start: 208896,
Packit Service 509fd4
					Type:  "0FC63DAF-8483-4772-8E79-3D69D8477DE4",
Packit Service 509fd4
					UUID:  "6264D520-3FB9-423F-8AB8-7A0A8E3D3562",
Packit Service 509fd4
					Filesystem: &disk.Filesystem{
Packit Service 509fd4
						Type:         "xfs",
Packit Service 509fd4
						UUID:         uuid.Must(newRandomUUIDFromReader(rng)).String(),
Packit Service 509fd4
						Label:        "root",
Packit Service 509fd4
						Mountpoint:   "/",
Packit Service 509fd4
						FSTabOptions: "defaults",
Packit Service 509fd4
						FSTabFreq:    0,
Packit Service 509fd4
						FSTabPassNo:  0,
Packit Service 509fd4
					},
Packit Service 509fd4
				},
Packit Service 509fd4
			},
Packit Service 509fd4
		}
Packit Service 509fd4
	} else if arch.Name() == "aarch64" {
Packit Service 509fd4
		return disk.PartitionTable{
Packit Service 509fd4
			Size: imageOptions.Size,
Packit Service 509fd4
			UUID: "D209C89E-EA5E-4FBD-B161-B461CCE297E0",
Packit Service 509fd4
			Type: "gpt",
Packit Service 509fd4
			Partitions: []disk.Partition{
Packit Service 509fd4
				{
Packit Service 509fd4
					Start: 2048,
Packit Service 509fd4
					Size:  204800,
Packit Service 509fd4
					Type:  "C12A7328-F81F-11D2-BA4B-00A0C93EC93B",
Packit Service 509fd4
					UUID:  "68B2905B-DF3E-4FB3-80FA-49D1E773AA33",
Packit Service 509fd4
					Filesystem: &disk.Filesystem{
Packit Service 509fd4
						Type:         "vfat",
Packit Service 509fd4
						UUID:         "7B77-95E7",
Packit Service 509fd4
						Mountpoint:   "/boot/efi",
Packit Service 509fd4
						FSTabOptions: "defaults,uid=0,gid=0,umask=077,shortname=winnt",
Packit Service 509fd4
						FSTabFreq:    0,
Packit Service 509fd4
						FSTabPassNo:  2,
Packit Service 509fd4
					},
Packit Service 509fd4
				},
Packit Service 509fd4
				{
Packit Service 509fd4
					Start: 206848,
Packit Service 509fd4
					Type:  "0FC63DAF-8483-4772-8E79-3D69D8477DE4",
Packit Service 509fd4
					UUID:  "6264D520-3FB9-423F-8AB8-7A0A8E3D3562",
Packit Service 509fd4
					Filesystem: &disk.Filesystem{
Packit Service 509fd4
						Type:         "xfs",
Packit Service 509fd4
						UUID:         uuid.Must(newRandomUUIDFromReader(rng)).String(),
Packit Service 509fd4
						Label:        "root",
Packit Service 509fd4
						Mountpoint:   "/",
Packit Service 509fd4
						FSTabOptions: "defaults",
Packit Service 509fd4
						FSTabFreq:    0,
Packit Service 509fd4
						FSTabPassNo:  0,
Packit Service 509fd4
					},
Packit Service 509fd4
				},
Packit Service 509fd4
			},
Packit Service 509fd4
		}
Packit Service 509fd4
	} else if arch.Name() == "ppc64le" {
Packit Service 509fd4
		return disk.PartitionTable{
Packit Service 509fd4
			Size: imageOptions.Size,
Packit Service 509fd4
			UUID: "0x14fc63d2",
Packit Service 509fd4
			Type: "dos",
Packit Service 509fd4
			Partitions: []disk.Partition{
Packit Service 509fd4
				{
Packit Service 509fd4
					Size:     8192,
Packit Service 509fd4
					Type:     "41",
Packit Service 509fd4
					Bootable: true,
Packit Service 509fd4
				},
Packit Service 509fd4
				{
Packit Service 509fd4
					Start: 10240,
Packit Service 509fd4
					Filesystem: &disk.Filesystem{
Packit Service 509fd4
						Type:         "xfs",
Packit Service 509fd4
						UUID:         uuid.Must(newRandomUUIDFromReader(rng)).String(),
Packit Service 509fd4
						Mountpoint:   "/",
Packit Service 509fd4
						FSTabOptions: "defaults",
Packit Service 509fd4
						FSTabFreq:    0,
Packit Service 509fd4
						FSTabPassNo:  0,
Packit Service 509fd4
					},
Packit Service 509fd4
				},
Packit Service 509fd4
			},
Packit Service 509fd4
		}
Packit Service 509fd4
	} else if arch.Name() == "s390x" {
Packit Service 509fd4
		return disk.PartitionTable{
Packit Service 509fd4
			Size: imageOptions.Size,
Packit Service 509fd4
			UUID: "0x14fc63d2",
Packit Service 509fd4
			Type: "dos",
Packit Service 509fd4
			Partitions: []disk.Partition{
Packit Service 509fd4
				{
Packit Service 509fd4
					Start:    2048,
Packit Service 509fd4
					Bootable: true,
Packit Service 509fd4
					Filesystem: &disk.Filesystem{
Packit Service 509fd4
						Type:         "xfs",
Packit Service 509fd4
						UUID:         uuid.Must(newRandomUUIDFromReader(rng)).String(),
Packit Service 509fd4
						Mountpoint:   "/",
Packit Service 509fd4
						FSTabOptions: "defaults",
Packit Service 509fd4
						FSTabFreq:    0,
Packit Service 509fd4
						FSTabPassNo:  0,
Packit Service 509fd4
					},
Packit Service 509fd4
				},
Packit Service 509fd4
			},
Packit Service 509fd4
		}
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	panic("unknown arch: " + arch.Name())
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func qemuAssembler(pt *disk.PartitionTable, format string, filename string, imageOptions distro.ImageOptions, arch distro.Arch) *osbuild.Assembler {
Packit Service 509fd4
	options := pt.QEMUAssemblerOptions()
Packit Service 509fd4
Packit Service 509fd4
	options.Format = format
Packit Service 509fd4
	options.Filename = filename
Packit Service 509fd4
Packit Service 509fd4
	if arch.Name() == "x86_64" {
Packit Service 509fd4
		options.Bootloader = &osbuild.QEMUBootloader{
Packit Service 509fd4
			Type: "grub2",
Packit Service 509fd4
		}
Packit Service 509fd4
	} else if arch.Name() == "ppc64le" {
Packit Service 509fd4
		options.Bootloader = &osbuild.QEMUBootloader{
Packit Service 509fd4
			Type:     "grub2",
Packit Service 509fd4
			Platform: "powerpc-ieee1275",
Packit Service 509fd4
		}
Packit Service 509fd4
	} else if arch.Name() == "s390x" {
Packit Service 509fd4
		options.Bootloader = &osbuild.QEMUBootloader{
Packit Service 509fd4
			Type: "zipl",
Packit Service 509fd4
		}
Packit Service 509fd4
	}
Packit Service 509fd4
	return osbuild.NewQEMUAssembler(&options)
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func tarAssembler(filename, compression string) *osbuild.Assembler {
Packit Service 509fd4
	return osbuild.NewTarAssembler(
Packit Service 509fd4
		&osbuild.TarAssemblerOptions{
Packit Service 509fd4
			Filename:    filename,
Packit Service 509fd4
			Compression: compression,
Packit Service 509fd4
		})
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func ostreeCommitAssembler(options distro.ImageOptions, arch distro.Arch) *osbuild.Assembler {
Packit Service 509fd4
	return osbuild.NewOSTreeCommitAssembler(
Packit Service 509fd4
		&osbuild.OSTreeCommitAssemblerOptions{
Packit Service bcdfb1
			Ref:    options.OSTree.Ref,
Packit Service 509fd4
			Parent: options.OSTree.Parent,
Packit Service 509fd4
			Tar: osbuild.OSTreeCommitAssemblerTarOptions{
Packit Service 509fd4
				Filename: "commit.tar",
Packit Service 509fd4
			},
Packit Service 509fd4
		},
Packit Service 509fd4
	)
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service 509fd4
func newRandomUUIDFromReader(r io.Reader) (uuid.UUID, error) {
Packit Service 509fd4
	var id uuid.UUID
Packit Service 509fd4
	_, err := io.ReadFull(r, id[:])
Packit Service 509fd4
	if err != nil {
Packit Service 509fd4
		return uuid.Nil, err
Packit Service 509fd4
	}
Packit Service 509fd4
	id[6] = (id[6] & 0x0f) | 0x40 // Version 4
Packit Service 509fd4
	id[8] = (id[8] & 0x3f) | 0x80 // Variant is 10
Packit Service 509fd4
	return id, nil
Packit Service 509fd4
}
Packit Service 509fd4
Packit Service bcdfb1
func removePackage(packages []string, packageToRemove string) []string {
Packit Service bcdfb1
	for i, pkg := range packages {
Packit Service bcdfb1
		if pkg == packageToRemove {
Packit Service bcdfb1
			// override the package with the last one from the list
Packit Service bcdfb1
			packages[i] = packages[len(packages)-1]
Packit Service bcdfb1
Packit Service bcdfb1
			// drop the last package from the slice
Packit Service bcdfb1
			return packages[:len(packages)-1]
Packit Service bcdfb1
		}
Packit Service bcdfb1
	}
Packit Service bcdfb1
	return packages
Packit Service bcdfb1
}
Packit Service bcdfb1
Packit Service 509fd4
// New creates a new distro object, defining the supported architectures and image types
Packit Service 509fd4
func New() distro.Distro {
Packit Service bcdfb1
	return newDistro(false)
Packit Service bcdfb1
}
Packit Service bcdfb1
Packit Service bcdfb1
func NewCentos() distro.Distro {
Packit Service bcdfb1
	return newDistro(true)
Packit Service bcdfb1
}
Packit Service bcdfb1
Packit Service bcdfb1
func newDistro(isCentos bool) distro.Distro {
Packit Service 509fd4
	const GigaByte = 1024 * 1024 * 1024
Packit Service 509fd4
Packit Service 509fd4
	edgeImgTypeX86_64 := imageType{
Packit Service 509fd4
		name:     "rhel-edge-commit",
Packit Service 509fd4
		filename: "commit.tar",
Packit Service 509fd4
		mimeType: "application/x-tar",
Packit Service 509fd4
		packages: []string{
Packit Service 509fd4
			"redhat-release", // TODO: is this correct for Edge?
Packit Service 509fd4
			"glibc", "glibc-minimal-langpack", "nss-altfiles",
Packit Service 509fd4
			"dracut-config-generic", "dracut-network",
Packit Service 509fd4
			"basesystem", "bash", "platform-python",
Packit Service 509fd4
			"shadow-utils", "chrony", "setup", "shadow-utils",
Packit Service 509fd4
			"sudo", "systemd", "coreutils", "util-linux",
Packit Service 509fd4
			"curl", "vim-minimal",
Packit Service 509fd4
			"rpm", "rpm-ostree", "polkit",
Packit Service 509fd4
			"lvm2", "cryptsetup", "pinentry",
Packit Service 509fd4
			"e2fsprogs", "dosfstools",
Packit Service 509fd4
			"keyutils", "gnupg2",
Packit Service 509fd4
			"attr", "xz", "gzip",
Packit Service 509fd4
			"firewalld", "iptables",
Packit Service 509fd4
			"NetworkManager", "NetworkManager-wifi", "NetworkManager-wwan",
Packit Service 509fd4
			"wpa_supplicant",
Packit Service 509fd4
			"dnsmasq", "traceroute",
Packit Service 509fd4
			"hostname", "iproute", "iputils",
Packit Service 509fd4
			"openssh-clients", "procps-ng", "rootfiles",
Packit Service 509fd4
			"openssh-server", "passwd",
Packit Service 509fd4
			"policycoreutils", "policycoreutils-python-utils",
Packit Service 509fd4
			"selinux-policy-targeted", "setools-console",
Packit Service 509fd4
			"less", "tar", "rsync",
Packit Service 509fd4
			"fwupd", "usbguard",
Packit Service 509fd4
			"bash-completion", "tmux",
Packit Service 509fd4
			"ima-evm-utils",
Packit Service 509fd4
			"audit",
Packit Service 509fd4
			"podman", "container-selinux", "skopeo", "criu",
Packit Service 509fd4
			"slirp4netns", "fuse-overlayfs",
Packit Service 509fd4
			"clevis", "clevis-dracut", "clevis-luks",
Packit Service 509fd4
			"greenboot", "greenboot-grub2", "greenboot-rpm-ostree-grub2", "greenboot-reboot", "greenboot-status",
Packit Service 509fd4
			// x86 specific
Packit Service 509fd4
			"grub2", "grub2-efi-x64", "efibootmgr", "shim-x64", "microcode_ctl",
Packit Service 509fd4
			"iwl1000-firmware", "iwl100-firmware", "iwl105-firmware", "iwl135-firmware",
Packit Service 509fd4
			"iwl2000-firmware", "iwl2030-firmware", "iwl3160-firmware", "iwl5000-firmware",
Packit Service 509fd4
			"iwl5150-firmware", "iwl6000-firmware", "iwl6050-firmware", "iwl7260-firmware",
Packit Service 509fd4
		},
Packit Service 509fd4
		excludedPackages: []string{
Packit Service 509fd4
			"rng-tools",
Packit Service 509fd4
		},
Packit Service 509fd4
		enabledServices: []string{
Packit Service 509fd4
			"NetworkManager.service", "firewalld.service", "sshd.service",
Packit Service 509fd4
			"greenboot-grub2-set-counter", "greenboot-grub2-set-success", "greenboot-healthcheck",
Packit Service 509fd4
			"greenboot-rpm-ostree-grub2-check-fallback", "greenboot-status", "greenboot-task-runner",
Packit Service 509fd4
			"redboot-auto-reboot", "redboot-task-runner",
Packit Service 509fd4
		},
Packit Service 509fd4
		rpmOstree: true,
Packit Service 509fd4
		assembler: func(pt *disk.PartitionTable, options distro.ImageOptions, arch distro.Arch) *osbuild.Assembler {
Packit Service 509fd4
			return ostreeCommitAssembler(options, arch)
Packit Service 509fd4
		},
Packit Service 509fd4
	}
Packit Service 509fd4
	edgeImgTypeAarch64 := imageType{
Packit Service 509fd4
		name:     "rhel-edge-commit",
Packit Service 509fd4
		filename: "commit.tar",
Packit Service 509fd4
		mimeType: "application/x-tar",
Packit Service 509fd4
		packages: []string{
Packit Service 509fd4
			"redhat-release", // TODO: is this correct for Edge?
Packit Service 509fd4
			"glibc", "glibc-minimal-langpack", "nss-altfiles",
Packit Service 509fd4
			"dracut-config-generic", "dracut-network",
Packit Service 509fd4
			"basesystem", "bash", "platform-python",
Packit Service 509fd4
			"shadow-utils", "chrony", "setup", "shadow-utils",
Packit Service 509fd4
			"sudo", "systemd", "coreutils", "util-linux",
Packit Service 509fd4
			"curl", "vim-minimal",
Packit Service 509fd4
			"rpm", "rpm-ostree", "polkit",
Packit Service 509fd4
			"lvm2", "cryptsetup", "pinentry",
Packit Service 509fd4
			"e2fsprogs", "dosfstools",
Packit Service 509fd4
			"keyutils", "gnupg2",
Packit Service 509fd4
			"attr", "xz", "gzip",
Packit Service 509fd4
			"firewalld", "iptables",
Packit Service 509fd4
			"NetworkManager", "NetworkManager-wifi", "NetworkManager-wwan",
Packit Service 509fd4
			"wpa_supplicant",
Packit Service 509fd4
			"dnsmasq", "traceroute",
Packit Service 509fd4
			"hostname", "iproute", "iputils",
Packit Service 509fd4
			"openssh-clients", "procps-ng", "rootfiles",
Packit Service 509fd4
			"openssh-server", "passwd",
Packit Service 509fd4
			"policycoreutils", "policycoreutils-python-utils",
Packit Service 509fd4
			"selinux-policy-targeted", "setools-console",
Packit Service 509fd4
			"less", "tar", "rsync",
Packit Service 509fd4
			"fwupd", "usbguard",
Packit Service 509fd4
			"bash-completion", "tmux",
Packit Service 509fd4
			"ima-evm-utils",
Packit Service 509fd4
			"audit",
Packit Service 509fd4
			"podman", "container-selinux", "skopeo", "criu",
Packit Service 509fd4
			"slirp4netns", "fuse-overlayfs",
Packit Service 509fd4
			"clevis", "clevis-dracut", "clevis-luks",
Packit Service 509fd4
			"greenboot", "greenboot-grub2", "greenboot-rpm-ostree-grub2", "greenboot-reboot", "greenboot-status",
Packit Service 509fd4
			// aarch64 specific
Packit Service 509fd4
			"grub2-efi-aa64", "efibootmgr", "shim-aa64",
Packit Service 509fd4
			"iwl7260-firmware",
Packit Service 509fd4
		},
Packit Service 509fd4
		excludedPackages: []string{
Packit Service 509fd4
			"rng-tools",
Packit Service 509fd4
		},
Packit Service 509fd4
		enabledServices: []string{
Packit Service 509fd4
			"NetworkManager.service", "firewalld.service", "sshd.service",
Packit Service 509fd4
			"greenboot-grub2-set-counter", "greenboot-grub2-set-success", "greenboot-healthcheck",
Packit Service 509fd4
			"greenboot-rpm-ostree-grub2-check-fallback", "greenboot-status", "greenboot-task-runner",
Packit Service 509fd4
			"redboot-auto-reboot", "redboot-task-runner",
Packit Service 509fd4
		},
Packit Service 509fd4
		rpmOstree: true,
Packit Service 509fd4
		assembler: func(pt *disk.PartitionTable, options distro.ImageOptions, arch distro.Arch) *osbuild.Assembler {
Packit Service 509fd4
			return ostreeCommitAssembler(options, arch)
Packit Service 509fd4
		},
Packit Service 509fd4
	}
Packit Service 509fd4
	amiImgType := imageType{
Packit Service 509fd4
		name:     "ami",
Packit Service 509fd4
		filename: "image.raw",
Packit Service 509fd4
		mimeType: "application/octet-stream",
Packit Service 509fd4
		packages: []string{
Packit Service 509fd4
			"checkpolicy",
Packit Service 509fd4
			"chrony",
Packit Service 509fd4
			"cloud-init",
Packit Service 509fd4
			"cloud-init",
Packit Service 509fd4
			"cloud-utils-growpart",
Packit Service 509fd4
			"@core",
Packit Service 509fd4
			"dhcp-client",
Packit Service 509fd4
			"gdisk",
Packit Service 509fd4
			"insights-client",
Packit Service 509fd4
			"langpacks-en",
Packit Service 509fd4
			"net-tools",
Packit Service 509fd4
			"NetworkManager",
Packit Service 509fd4
			"redhat-release",
Packit Service 509fd4
			"redhat-release-eula",
Packit Service 509fd4
			"rsync",
Packit Service 509fd4
			"selinux-policy-targeted",
Packit Service 509fd4
			"tar",
Packit Service 509fd4
			"yum-utils",
Packit Service 509fd4
Packit Service 509fd4
			// TODO this doesn't exist in BaseOS or AppStream
Packit Service 509fd4
			// "rh-amazon-rhui-client",
Packit Service 509fd4
		},
Packit Service 509fd4
		excludedPackages: []string{
Packit Service 509fd4
			"aic94xx-firmware",
Packit Service 509fd4
			"alsa-firmware",
Packit Service 509fd4
			"alsa-lib",
Packit Service 509fd4
			"alsa-tools-firmware",
Packit Service 509fd4
			"biosdevname",
Packit Service 509fd4
			"dracut-config-rescue",
Packit Service 509fd4
			"firewalld",
Packit Service 509fd4
			"iprutils",
Packit Service 509fd4
			"ivtv-firmware",
Packit Service 509fd4
			"iwl1000-firmware",
Packit Service 509fd4
			"iwl100-firmware",
Packit Service 509fd4
			"iwl105-firmware",
Packit Service 509fd4
			"iwl135-firmware",
Packit Service 509fd4
			"iwl2000-firmware",
Packit Service 509fd4
			"iwl2030-firmware",
Packit Service 509fd4
			"iwl3160-firmware",
Packit Service 509fd4
			"iwl3945-firmware",
Packit Service 509fd4
			"iwl4965-firmware",
Packit Service 509fd4
			"iwl5000-firmware",
Packit Service 509fd4
			"iwl5150-firmware",
Packit Service 509fd4
			"iwl6000-firmware",
Packit Service 509fd4
			"iwl6000g2a-firmware",
Packit Service 509fd4
			"iwl6000g2b-firmware",
Packit Service 509fd4
			"iwl6050-firmware",
Packit Service 509fd4
			"iwl7260-firmware",
Packit Service 509fd4
			"libertas-sd8686-firmware",
Packit Service 509fd4
			"libertas-sd8787-firmware",
Packit Service 509fd4
			"libertas-usb8388-firmware",
Packit Service 509fd4
			"plymouth",
Packit Service 509fd4
			"rng-tools",
Packit Service 509fd4
Packit Service 509fd4
			// TODO this cannot be removed, because the kernel (?)
Packit Service 509fd4
			// depends on it. The ec2 kickstart force-removes it.
Packit Service 509fd4
			// "linux-firmware",
Packit Service 509fd4
Packit Service 509fd4
			// TODO setfiles failes because of usr/sbin/timedatex. Exlude until
Packit Service 509fd4
			// https://errata.devel.redhat.com/advisory/47339 lands
Packit Service 509fd4
			"timedatex",
Packit Service 509fd4
		},
Packit Service 509fd4
		defaultTarget:           "multi-user.target",
Packit Service 509fd4
		kernelOptions:           "console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto",
Packit Service 509fd4
		bootable:                true,
Packit Service 509fd4
		defaultSize:             6 * GigaByte,
Packit Service 509fd4
		partitionTableGenerator: defaultPartitionTable,
Packit Service 509fd4
		assembler: func(pt *disk.PartitionTable, options distro.ImageOptions, arch distro.Arch) *osbuild.Assembler {
Packit Service 509fd4
			return qemuAssembler(pt, "raw", "image.raw", options, arch)
Packit Service 509fd4
		},
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	qcow2ImageType := imageType{
Packit Service 509fd4
		name:     "qcow2",
Packit Service 509fd4
		filename: "disk.qcow2",
Packit Service 509fd4
		mimeType: "application/x-qemu-disk",
Packit Service 509fd4
		packages: []string{
Packit Service 509fd4
			"@core",
Packit Service 3a6627
			"authselect-compat",
Packit Service 509fd4
			"chrony",
Packit Service 3a6627
			"cloud-init",
Packit Service 3a6627
			"cloud-utils-growpart",
Packit Service 3a6627
			"cockpit-system",
Packit Service 3a6627
			"cockpit-ws",
Packit Service 3a6627
			"dhcp-client",
Packit Service 509fd4
			"dnf",
Packit Service 3a6627
			"dnf-utils",
Packit Service 509fd4
			"dosfstools",
Packit Service 3a6627
			"dracut-norescue",
Packit Service 3a6627
			"insights-client",
Packit Service 3a6627
			"NetworkManager",
Packit Service 509fd4
			"nfs-utils",
Packit Service 3a6627
			"oddjob",
Packit Service 3a6627
			"oddjob-mkhomedir",
Packit Service 3a6627
			"psmisc",
Packit Service 509fd4
			"python3-jsonschema",
Packit Service 509fd4
			"qemu-guest-agent",
Packit Service 509fd4
			"redhat-release",
Packit Service 509fd4
			"redhat-release-eula",
Packit Service 3a6627
			"rsync",
Packit Service 3a6627
			"subscription-manager-cockpit",
Packit Service 3a6627
			"tar",
Packit Service 3a6627
			"tcpdump",
Packit Service 3a6627
			"yum",
Packit Service 509fd4
		},
Packit Service 509fd4
		excludedPackages: []string{
Packit Service 509fd4
			"aic94xx-firmware",
Packit Service 509fd4
			"alsa-firmware",
Packit Service 509fd4
			"alsa-lib",
Packit Service 509fd4
			"alsa-tools-firmware",
Packit Service 3a6627
			"biosdevname",
Packit Service 3a6627
			"dnf-plugin-spacewalk",
Packit Service 3a6627
			"dracut-config-rescue",
Packit Service 3a6627
			"fedora-release",
Packit Service 3a6627
			"fedora-repos",
Packit Service 509fd4
			"firewalld",
Packit Service 3a6627
			"fwupd",
Packit Service 3a6627
			"iprutils",
Packit Service 509fd4
			"ivtv-firmware",
Packit Service 509fd4
			"iwl100-firmware",
Packit Service 3a6627
			"iwl1000-firmware",
Packit Service 509fd4
			"iwl105-firmware",
Packit Service 509fd4
			"iwl135-firmware",
Packit Service 509fd4
			"iwl2000-firmware",
Packit Service 509fd4
			"iwl2030-firmware",
Packit Service 509fd4
			"iwl3160-firmware",
Packit Service 509fd4
			"iwl3945-firmware",
Packit Service 509fd4
			"iwl4965-firmware",
Packit Service 509fd4
			"iwl5000-firmware",
Packit Service 509fd4
			"iwl5150-firmware",
Packit Service 509fd4
			"iwl6000-firmware",
Packit Service 509fd4
			"iwl6000g2a-firmware",
Packit Service 509fd4
			"iwl6000g2b-firmware",
Packit Service 509fd4
			"iwl6050-firmware",
Packit Service 509fd4
			"iwl7260-firmware",
Packit Service 3a6627
			"langpacks-*",
Packit Service 3a6627
			"langpacks-en",
Packit Service 3a6627
			"langpacks-en",
Packit Service 509fd4
			"libertas-sd8686-firmware",
Packit Service 509fd4
			"libertas-sd8787-firmware",
Packit Service 509fd4
			"libertas-usb8388-firmware",
Packit Service 3a6627
			"nss",
Packit Service 509fd4
			"plymouth",
Packit Service 509fd4
			"rng-tools",
Packit Service 3a6627
			"udisks2",
Packit Service 509fd4
		},
Packit Service 3a6627
		defaultTarget:           "multi-user.target",
Packit Service 509fd4
		kernelOptions:           "console=tty0 console=ttyS0,115200n8 no_timer_check net.ifnames=0 crashkernel=auto",
Packit Service 509fd4
		bootable:                true,
Packit Service 509fd4
		defaultSize:             10 * GigaByte,
Packit Service 509fd4
		partitionTableGenerator: defaultPartitionTable,
Packit Service 509fd4
		assembler: func(pt *disk.PartitionTable, options distro.ImageOptions, arch distro.Arch) *osbuild.Assembler {
Packit Service 509fd4
			return qemuAssembler(pt, "qcow2", "disk.qcow2", options, arch)
Packit Service 509fd4
		},
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	openstackImgType := imageType{
Packit Service 509fd4
		name:     "openstack",
Packit Service 509fd4
		filename: "disk.qcow2",
Packit Service 509fd4
		mimeType: "application/x-qemu-disk",
Packit Service 509fd4
		packages: []string{
Packit Service 509fd4
			// Defaults
Packit Service 509fd4
			"@Core",
Packit Service 509fd4
			"langpacks-en",
Packit Service 509fd4
Packit Service 509fd4
			// From the lorax kickstart
Packit Service 509fd4
			"selinux-policy-targeted",
Packit Service 509fd4
			"cloud-init",
Packit Service 509fd4
			"qemu-guest-agent",
Packit Service 509fd4
			"spice-vdagent",
Packit Service 509fd4
		},
Packit Service 509fd4
		excludedPackages: []string{
Packit Service 509fd4
			"dracut-config-rescue",
Packit Service 509fd4
			"rng-tools",
Packit Service 509fd4
		},
Packit Service 509fd4
		kernelOptions:           "ro net.ifnames=0",
Packit Service 509fd4
		bootable:                true,
Packit Service 509fd4
		defaultSize:             4 * GigaByte,
Packit Service 509fd4
		partitionTableGenerator: defaultPartitionTable,
Packit Service 509fd4
		assembler: func(pt *disk.PartitionTable, options distro.ImageOptions, arch distro.Arch) *osbuild.Assembler {
Packit Service 509fd4
			return qemuAssembler(pt, "qcow2", "disk.qcow2", options, arch)
Packit Service 509fd4
		},
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	tarImgType := imageType{
Packit Service 509fd4
		name:     "tar",
Packit Service 509fd4
		filename: "root.tar.xz",
Packit Service 509fd4
		mimeType: "application/x-tar",
Packit Service 509fd4
		packages: []string{
Packit Service 509fd4
			"policycoreutils",
Packit Service 509fd4
			"selinux-policy-targeted",
Packit Service 509fd4
		},
Packit Service 509fd4
		excludedPackages: []string{
Packit Service 509fd4
			"rng-tools",
Packit Service 509fd4
		},
Packit Service 509fd4
		bootable:      false,
Packit Service 509fd4
		kernelOptions: "ro net.ifnames=0",
Packit Service 509fd4
		assembler: func(pt *disk.PartitionTable, options distro.ImageOptions, arch distro.Arch) *osbuild.Assembler {
Packit Service 509fd4
			return tarAssembler("root.tar.xz", "xz")
Packit Service 509fd4
		},
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	vhdImgType := imageType{
Packit Service 509fd4
		name:     "vhd",
Packit Service 509fd4
		filename: "disk.vhd",
Packit Service 509fd4
		mimeType: "application/x-vhd",
Packit Service 509fd4
		packages: []string{
Packit Service 509fd4
			// Defaults
Packit Service 509fd4
			"@Core",
Packit Service 509fd4
			"langpacks-en",
Packit Service 509fd4
Packit Service 509fd4
			// From the lorax kickstart
Packit Service 509fd4
			"selinux-policy-targeted",
Packit Service 509fd4
			"chrony",
Packit Service 509fd4
			"WALinuxAgent",
Packit Service 509fd4
			"python3",
Packit Service 509fd4
			"net-tools",
Packit Service 509fd4
			"cloud-init",
Packit Service 509fd4
			"cloud-utils-growpart",
Packit Service 509fd4
			"gdisk",
Packit Service 509fd4
		},
Packit Service 509fd4
		excludedPackages: []string{
Packit Service 509fd4
			"dracut-config-rescue",
Packit Service 509fd4
			"rng-tools",
Packit Service 509fd4
Packit Service 509fd4
			// TODO setfiles failes because of usr/sbin/timedatex. Exlude until
Packit Service 509fd4
			// https://errata.devel.redhat.com/advisory/47339 lands
Packit Service 509fd4
			"timedatex",
Packit Service 509fd4
		},
Packit Service 509fd4
		enabledServices: []string{
Packit Service 509fd4
			"sshd",
Packit Service 509fd4
			"waagent",
Packit Service 509fd4
		},
Packit Service 509fd4
		defaultTarget:           "multi-user.target",
Packit Service 509fd4
		kernelOptions:           "ro biosdevname=0 rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0",
Packit Service 509fd4
		bootable:                true,
Packit Service 509fd4
		defaultSize:             4 * GigaByte,
Packit Service 509fd4
		partitionTableGenerator: defaultPartitionTable,
Packit Service 509fd4
		assembler: func(pt *disk.PartitionTable, options distro.ImageOptions, arch distro.Arch) *osbuild.Assembler {
Packit Service 509fd4
			return qemuAssembler(pt, "vpc", "disk.vhd", options, arch)
Packit Service 509fd4
		},
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	vmdkImgType := imageType{
Packit Service 509fd4
		name:     "vmdk",
Packit Service 509fd4
		filename: "disk.vmdk",
Packit Service 509fd4
		mimeType: "application/x-vmdk",
Packit Service 509fd4
		packages: []string{
Packit Service 509fd4
			"@core",
Packit Service 509fd4
			"chrony",
Packit Service 509fd4
			"firewalld",
Packit Service 509fd4
			"langpacks-en",
Packit Service 509fd4
			"open-vm-tools",
Packit Service 509fd4
			"selinux-policy-targeted",
Packit Service 509fd4
		},
Packit Service 509fd4
		excludedPackages: []string{
Packit Service 509fd4
			"dracut-config-rescue",
Packit Service 509fd4
			"rng-tools",
Packit Service 509fd4
Packit Service 509fd4
			// TODO setfiles failes because of usr/sbin/timedatex. Exlude until
Packit Service 509fd4
			// https://errata.devel.redhat.com/advisory/47339 lands
Packit Service 509fd4
			"timedatex",
Packit Service 509fd4
		},
Packit Service 509fd4
		kernelOptions:           "ro net.ifnames=0",
Packit Service 509fd4
		bootable:                true,
Packit Service 509fd4
		defaultSize:             4 * GigaByte,
Packit Service 509fd4
		partitionTableGenerator: defaultPartitionTable,
Packit Service 509fd4
		assembler: func(pt *disk.PartitionTable, options distro.ImageOptions, arch distro.Arch) *osbuild.Assembler {
Packit Service 509fd4
			return qemuAssembler(pt, "vmdk", "disk.vmdk", options, arch)
Packit Service 509fd4
		},
Packit Service 509fd4
	}
Packit Service 509fd4
Packit Service 509fd4
	r := distribution{
Packit Service 15f37d
		imageTypes: map[string]distro.ImageType{},
Packit Service 509fd4
		buildPackages: []string{
Packit Service 509fd4
			"dnf",
Packit Service 509fd4
			"dosfstools",
Packit Service 509fd4
			"e2fsprogs",
Packit Service 509fd4
			"glibc",
Packit Service 509fd4
			"policycoreutils",
Packit Service 509fd4
			"python36",
Packit Service bcdfb1
			"python3-iniparse", // dependency of org.osbuild.rhsm stage
Packit Service 509fd4
			"qemu-img",
Packit Service 509fd4
			"selinux-policy-targeted",
Packit Service 509fd4
			"systemd",
Packit Service 509fd4
			"tar",
Packit Service 509fd4
			"xfsprogs",
Packit Service 509fd4
			"xz",
Packit Service 509fd4
		},
Packit Service bcdfb1
		isCentos: isCentos,
Packit Service 509fd4
	}
Packit Service 509fd4
	x8664 := architecture{
Packit Service 509fd4
		distro: &r,
Packit Service 509fd4
		name:   "x86_64",
Packit Service 509fd4
		bootloaderPackages: []string{
Packit Service 509fd4
			"dracut-config-generic",
Packit Service 509fd4
			"grub2-pc",
Packit Service 509fd4
			"grub2-efi-x64",
Packit Service 509fd4
			"shim-x64",
Packit Service 509fd4
		},
Packit Service 509fd4
		buildPackages: []string{
Packit Service 509fd4
			"grub2-pc",
Packit Service 509fd4
		},
Packit Service 509fd4
		legacy: "i386-pc",
Packit Service 509fd4
		uefi:   true,
Packit Service 509fd4
	}
Packit Service 15f37d
Packit Service 15f37d
	edgeOCIImgTypeX86_64 := imageTypeS2{
Packit Service 15f37d
		name:     "rhel-edge-container",
Packit Service 15f37d
		filename: "rhel84-container.tar",
Packit Service 15f37d
		mimeType: "application/x-tar",
Packit Service 15f37d
		packageSets: map[string]rpmmd.PackageSet{
Packit Service 15f37d
			"packages": {
Packit Service 15f37d
				Include: edgeImgTypeX86_64.packages,
Packit Service 15f37d
				Exclude: edgeImgTypeX86_64.excludedPackages,
Packit Service 15f37d
			},
Packit Service 15f37d
			"container": {Include: []string{"httpd"}},
Packit Service 15f37d
		},
Packit Service 15f37d
		enabledServices: edgeImgTypeX86_64.enabledServices,
Packit Service 15f37d
		rpmOstree:       true,
Packit Service 15f37d
		bootISO:         false,
Packit Service 15f37d
	}
Packit Service 15f37d
Packit Service 15f37d
	edgeBuildPkgs := []string{
Packit Service 15f37d
		"dnf",
Packit Service 15f37d
		"dosfstools",
Packit Service 15f37d
		"e2fsprogs",
Packit Service 15f37d
		"grub2-pc",
Packit Service 15f37d
		"policycoreutils",
Packit Service 15f37d
		"python36",
Packit Service 15f37d
		"python3-iniparse",
Packit Service 15f37d
		"qemu-img",
Packit Service 15f37d
		"rpm-ostree",
Packit Service 15f37d
		"systemd",
Packit Service 15f37d
		"tar",
Packit Service 15f37d
		"xfsprogs",
Packit Service 15f37d
		"xz",
Packit Service 15f37d
		"selinux-policy-targeted",
Packit Service 15f37d
		"genisoimage",
Packit Service 15f37d
		"isomd5sum",
Packit Service 15f37d
		"xorriso",
Packit Service 15f37d
		"syslinux",
Packit Service 15f37d
		"lorax-templates-generic",
Packit Service 15f37d
		"lorax-templates-rhel",
Packit Service 15f37d
		"syslinux-nonlinux",
Packit Service 15f37d
		"squashfs-tools",
Packit Service 15f37d
		"grub2-pc-modules",
Packit Service 15f37d
		"grub2-tools",
Packit Service 15f37d
		"grub2-efi-x64",
Packit Service 15f37d
		"shim-x64",
Packit Service 15f37d
		"efibootmgr",
Packit Service 15f37d
		"grub2-tools-minimal",
Packit Service 15f37d
		"grub2-tools-extra",
Packit Service 15f37d
		"grub2-tools-efi",
Packit Service 15f37d
		"grub2-efi-x64",
Packit Service 15f37d
		"grub2-efi-x64-cdboot",
Packit Service 15f37d
		"shim-ia32",
Packit Service 15f37d
		"grub2-efi-ia32-cdboot",
Packit Service 15f37d
	}
Packit Service 15f37d
Packit Service 15f37d
	edgeInstallerPkgs := []string{
Packit Service 15f37d
		"anaconda",
Packit Service 15f37d
		"anaconda-widgets",
Packit Service 15f37d
		"kdump-anaconda-addon",
Packit Service 15f37d
		"anaconda-install-env-deps",
Packit Service 15f37d
		"oscap-anaconda-addon",
Packit Service 15f37d
		"redhat-release-eula",
Packit Service 15f37d
		"dnf",
Packit Service 15f37d
		"rpm-ostree",
Packit Service 15f37d
		"ostree",
Packit Service 15f37d
		"ostree",
Packit Service 15f37d
		"pigz",
Packit Service 15f37d
		"kernel",
Packit Service 15f37d
		"kernel-modules",
Packit Service 15f37d
		"kernel-modules-extra",
Packit Service 15f37d
		"grubby",
Packit Service 15f37d
		"iwl100-firmware",
Packit Service 15f37d
		"iwl1000-firmware",
Packit Service 15f37d
		"iwl105-firmware",
Packit Service 15f37d
		"iwl135-firmware",
Packit Service 15f37d
		"iwl2000-firmware",
Packit Service 15f37d
		"iwl2030-firmware",
Packit Service 15f37d
		"iwl3160-firmware",
Packit Service 15f37d
		"iwl3945-firmware",
Packit Service 15f37d
		"iwl4965-firmware",
Packit Service 15f37d
		"iwl5000-firmware",
Packit Service 15f37d
		"iwl5150-firmware",
Packit Service 15f37d
		"iwl6000-firmware",
Packit Service 15f37d
		"iwl6000g2a-firmware",
Packit Service 15f37d
		"iwl6000g2b-firmware",
Packit Service 15f37d
		"iwl6050-firmware",
Packit Service 15f37d
		"iwl7260-firmware",
Packit Service 15f37d
		"libertas-sd8686-firmware",
Packit Service 15f37d
		"libertas-sd8787-firmware",
Packit Service 15f37d
		"libertas-usb8388-firmware",
Packit Service 15f37d
		"libertas-usb8388-olpc-firmware",
Packit Service 15f37d
		"linux-firmware",
Packit Service 15f37d
		"alsa-firmware",
Packit Service 15f37d
		"alsa-tools-firmware",
Packit Service 15f37d
		"glibc-all-langpacks",
Packit Service 15f37d
		"grub2-tools-efi",
Packit Service 15f37d
		"efibootmgr",
Packit Service 15f37d
		"shim-x64",
Packit Service 15f37d
		"grub2-efi-x64-cdboot",
Packit Service 15f37d
		"shim-ia32",
Packit Service 15f37d
		"grub2-efi-ia32-cdboot",
Packit Service 15f37d
		"biosdevname",
Packit Service 15f37d
		"memtest86+",
Packit Service 15f37d
		"syslinux",
Packit Service 15f37d
		"grub2-tools",
Packit Service 15f37d
		"grub2-tools-minimal",
Packit Service 15f37d
		"grub2-tools-extra",
Packit Service 15f37d
		"plymouth",
Packit Service 15f37d
		"anaconda-dracut",
Packit Service 15f37d
		"dracut-network",
Packit Service 15f37d
		"dracut-config-generic",
Packit Service 15f37d
		"initscripts",
Packit Service 15f37d
		"cryptsetup",
Packit Service 15f37d
		"rpcbind",
Packit Service 15f37d
		"kbd",
Packit Service 15f37d
		"kbd-misc",
Packit Service 15f37d
		"tar",
Packit Service 15f37d
		"xz",
Packit Service 15f37d
		"curl",
Packit Service 15f37d
		"bzip2",
Packit Service 15f37d
		"systemd",
Packit Service 15f37d
		"systemd",
Packit Service 15f37d
		"rsyslog",
Packit Service 15f37d
		"xorg-x11-drivers",
Packit Service 15f37d
		"xorg-x11-server-Xorg",
Packit Service 15f37d
		"xorg-x11-server-utils",
Packit Service 15f37d
		"xorg-x11-xauth",
Packit Service 15f37d
		"dbus-x11",
Packit Service 15f37d
		"metacity",
Packit Service 15f37d
		"metacity",
Packit Service 15f37d
		"gsettings-desktop-schemas",
Packit Service 15f37d
		"gsettings-desktop-schemas",
Packit Service 15f37d
		"nm-connection-editor",
Packit Service 15f37d
		"librsvg2",
Packit Service 15f37d
		"librsvg2",
Packit Service 15f37d
		"xfsprogs",
Packit Service 15f37d
		"xfsprogs",
Packit Service 15f37d
		"gfs2-utils",
Packit Service 15f37d
		"system-storage-manager",
Packit Service 15f37d
		"device-mapper-persistent-data",
Packit Service 15f37d
		"xfsdump",
Packit Service 15f37d
		"udisks2",
Packit Service 15f37d
		"udisks2-iscsi",
Packit Service 15f37d
		"hostname",
Packit Service 15f37d
		"libblockdev-lvm-dbus",
Packit Service 15f37d
		"libblockdev-lvm-dbus",
Packit Service 15f37d
		"volume_key",
Packit Service 15f37d
		"nss-tools",
Packit Service 15f37d
		"selinux-policy-targeted",
Packit Service 15f37d
		"audit",
Packit Service 15f37d
		"ethtool",
Packit Service 15f37d
		"openssh-server",
Packit Service 15f37d
		"nfs-utils",
Packit Service 15f37d
		"openssh-clients",
Packit Service 15f37d
		"tigervnc-server-minimal",
Packit Service 15f37d
		"tigervnc-server-module",
Packit Service 15f37d
		"net-tools",
Packit Service 15f37d
		"nmap-ncat",
Packit Service 15f37d
		"prefixdevname",
Packit Service 15f37d
		"pciutils",
Packit Service 15f37d
		"usbutils",
Packit Service 15f37d
		"ipmitool",
Packit Service 15f37d
		"mt-st",
Packit Service 15f37d
		"smartmontools",
Packit Service 15f37d
		"hdparm",
Packit Service 15f37d
		"libibverbs",
Packit Service 15f37d
		"libibverbs",
Packit Service 15f37d
		"rdma-core",
Packit Service 15f37d
		"rdma-core",
Packit Service 15f37d
		"rng-tools",
Packit Service 15f37d
		"dmidecode",
Packit Service 15f37d
		"bitmap-fangsongti-fonts",
Packit Service 15f37d
		"dejavu-sans-fonts",
Packit Service 15f37d
		"dejavu-sans-mono-fonts",
Packit Service 15f37d
		"kacst-farsi-fonts",
Packit Service 15f37d
		"kacst-qurn-fonts",
Packit Service 15f37d
		"lklug-fonts",
Packit Service 15f37d
		"lohit-assamese-fonts",
Packit Service 15f37d
		"lohit-bengali-fonts",
Packit Service 15f37d
		"lohit-devanagari-fonts",
Packit Service 15f37d
		"lohit-gujarati-fonts",
Packit Service 15f37d
		"lohit-gurmukhi-fonts",
Packit Service 15f37d
		"lohit-kannada-fonts",
Packit Service 15f37d
		"lohit-odia-fonts",
Packit Service 15f37d
		"lohit-tamil-fonts",
Packit Service 15f37d
		"lohit-telugu-fonts",
Packit Service 15f37d
		"madan-fonts",
Packit Service 15f37d
		"smc-meera-fonts",
Packit Service 15f37d
		"thai-scalable-waree-fonts",
Packit Service 15f37d
		"sil-abyssinica-fonts",
Packit Service 15f37d
		"xorg-x11-fonts-misc",
Packit Service 15f37d
		"aajohan-comfortaa-fonts",
Packit Service 15f37d
		"abattis-cantarell-fonts",
Packit Service 15f37d
		"sil-scheherazade-fonts",
Packit Service 15f37d
		"jomolhari-fonts",
Packit Service 15f37d
		"khmeros-base-fonts",
Packit Service 15f37d
		"sil-padauk-fonts",
Packit Service 15f37d
		"google-noto-sans-cjk-ttc-fonts",
Packit Service 15f37d
		"gdb-gdbserver",
Packit Service 15f37d
		"libreport-plugin-bugzilla",
Packit Service 15f37d
		"libreport-plugin-reportuploader",
Packit Service 15f37d
		"libreport-rhel-anaconda-bugzilla",
Packit Service 15f37d
		"python3-pyatspi",
Packit Service 15f37d
		"vim-minimal",
Packit Service 15f37d
		"strace",
Packit Service 15f37d
		"lsof",
Packit Service 15f37d
		"dump",
Packit Service 15f37d
		"xz",
Packit Service 15f37d
		"less",
Packit Service 15f37d
		"rsync",
Packit Service 15f37d
		"bind-utils",
Packit Service 15f37d
		"ftp",
Packit Service 15f37d
		"mtr",
Packit Service 15f37d
		"wget",
Packit Service 15f37d
		"spice-vdagent",
Packit Service 15f37d
		"gdisk",
Packit Service 15f37d
		"hexedit",
Packit Service 15f37d
		"sg3_utils",
Packit Service 15f37d
		"perl-interpreter",
Packit Service 15f37d
	}
Packit Service 15f37d
	edgeInstImgTypeX86_64 := imageTypeS2{
Packit Service 15f37d
		name:     "rhel-edge-installer",
Packit Service 15f37d
		filename: "rhel84-boot.iso",
Packit Service 15f37d
		mimeType: "application/x-iso9660-image",
Packit Service 15f37d
		packageSets: map[string]rpmmd.PackageSet{
Packit Service 15f37d
			"build": {
Packit Service 15f37d
				Include: edgeBuildPkgs,
Packit Service 15f37d
			},
Packit Service 15f37d
			"packages": {
Packit Service 15f37d
				Include: edgeImgTypeX86_64.packages,
Packit Service 15f37d
				Exclude: edgeImgTypeX86_64.excludedPackages,
Packit Service 15f37d
			},
Packit Service 15f37d
			"installer": {Include: edgeInstallerPkgs},
Packit Service 15f37d
		},
Packit Service 15f37d
		enabledServices: edgeImgTypeX86_64.enabledServices,
Packit Service 15f37d
		rpmOstree:       true,
Packit Service 15f37d
		bootISO:         true,
Packit Service 15f37d
	}
Packit Service 15f37d
Packit Service 15f37d
	edgeOCIImgTypeAarch64 := imageTypeS2{
Packit Service 15f37d
		name:     "rhel-edge-container",
Packit Service 15f37d
		filename: "rhel84-container.tar",
Packit Service 15f37d
		mimeType: "application/x-tar",
Packit Service 15f37d
		packageSets: map[string]rpmmd.PackageSet{
Packit Service 15f37d
			"packages": {
Packit Service 15f37d
				Include: edgeImgTypeAarch64.packages,
Packit Service 15f37d
				Exclude: edgeImgTypeAarch64.excludedPackages,
Packit Service 15f37d
			},
Packit Service 15f37d
			"container": {Include: []string{"httpd"}},
Packit Service 15f37d
		},
Packit Service 15f37d
		enabledServices: edgeImgTypeAarch64.enabledServices,
Packit Service 15f37d
		rpmOstree:       true,
Packit Service 15f37d
		bootISO:         false,
Packit Service 15f37d
	}
Packit Service 15f37d
Packit Service bcdfb1
	x8664.addImageTypes(
Packit Service 509fd4
		amiImgType,
Packit Service 509fd4
		qcow2ImageType,
Packit Service 509fd4
		openstackImgType,
Packit Service 509fd4
		tarImgType,
Packit Service 509fd4
		vhdImgType,
Packit Service 509fd4
		vmdkImgType,
Packit Service 509fd4
	)
Packit Service 509fd4
Packit Service bcdfb1
	if !isCentos {
Packit Service bcdfb1
		x8664.addImageTypes(edgeImgTypeX86_64)
Packit Service 15f37d
		x8664.addS2ImageTypes(edgeOCIImgTypeX86_64, edgeInstImgTypeX86_64)
Packit Service bcdfb1
	}
Packit Service bcdfb1
Packit Service 509fd4
	aarch64 := architecture{
Packit Service 509fd4
		distro: &r,
Packit Service 509fd4
		name:   "aarch64",
Packit Service 509fd4
		bootloaderPackages: []string{
Packit Service 509fd4
			"dracut-config-generic",
Packit Service 509fd4
			"efibootmgr",
Packit Service 509fd4
			"grub2-efi-aa64",
Packit Service 509fd4
			"grub2-tools",
Packit Service 509fd4
			"shim-aa64",
Packit Service 509fd4
		},
Packit Service 509fd4
		uefi: true,
Packit Service 509fd4
	}
Packit Service bcdfb1
	aarch64.addImageTypes(
Packit Service 509fd4
		amiImgType,
Packit Service 509fd4
		qcow2ImageType,
Packit Service 509fd4
		openstackImgType,
Packit Service 509fd4
		tarImgType,
Packit Service 509fd4
	)
Packit Service 509fd4
Packit Service bcdfb1
	if !isCentos {
Packit Service bcdfb1
		aarch64.addImageTypes(edgeImgTypeAarch64)
Packit Service 15f37d
		aarch64.addS2ImageTypes(edgeOCIImgTypeAarch64)
Packit Service bcdfb1
	}
Packit Service bcdfb1
Packit Service 509fd4
	ppc64le := architecture{
Packit Service 509fd4
		distro: &r,
Packit Service 509fd4
		name:   "ppc64le",
Packit Service 509fd4
		bootloaderPackages: []string{
Packit Service 509fd4
			"dracut-config-generic",
Packit Service 509fd4
			"powerpc-utils",
Packit Service 509fd4
			"grub2-ppc64le",
Packit Service 509fd4
			"grub2-ppc64le-modules",
Packit Service 509fd4
		},
Packit Service 509fd4
		buildPackages: []string{
Packit Service 509fd4
			"grub2-ppc64le",
Packit Service 509fd4
			"grub2-ppc64le-modules",
Packit Service 509fd4
		},
Packit Service 509fd4
		legacy: "powerpc-ieee1275",
Packit Service 509fd4
		uefi:   false,
Packit Service 509fd4
	}
Packit Service bcdfb1
	ppc64le.addImageTypes(
Packit Service 509fd4
		qcow2ImageType,
Packit Service 509fd4
		tarImgType,
Packit Service 509fd4
	)
Packit Service 509fd4
Packit Service 509fd4
	s390x := architecture{
Packit Service 509fd4
		distro: &r,
Packit Service 509fd4
		name:   "s390x",
Packit Service 509fd4
		bootloaderPackages: []string{
Packit Service 509fd4
			"dracut-config-generic",
Packit Service 509fd4
			"s390utils-base",
Packit Service 509fd4
		},
Packit Service 509fd4
		uefi: false,
Packit Service 509fd4
	}
Packit Service bcdfb1
	s390x.addImageTypes(
Packit Service 509fd4
		tarImgType,
Packit Service 509fd4
		qcow2ImageType,
Packit Service 509fd4
	)
Packit Service 509fd4
Packit Service bcdfb1
	r.addArches(x8664, aarch64, ppc64le)
Packit Service bcdfb1
Packit Service bcdfb1
	if !isCentos {
Packit Service bcdfb1
		r.addArches(s390x)
Packit Service bcdfb1
	}
Packit Service 509fd4
Packit Service 509fd4
	return &r
Packit Service 509fd4
}