From 11b08da7a53aa685a0fdccf5bc1af965531981dd Mon Sep 17 00:00:00 2001 From: Achilleas Koutsou Date: Mon, 21 Nov 2022 23:49:36 +0100 Subject: [PATCH] distro/rhel9: cleanup: delete unused functions --- internal/distro/rhel9/pipelines.go | 484 ------------------------- internal/distro/rhel9/stage_options.go | 121 ------- 2 files changed, 605 deletions(-) diff --git a/internal/distro/rhel9/pipelines.go b/internal/distro/rhel9/pipelines.go index 7fb6c42be..40b75703d 100644 --- a/internal/distro/rhel9/pipelines.go +++ b/internal/distro/rhel9/pipelines.go @@ -3,11 +3,8 @@ package rhel9 import ( "fmt" "math/rand" - "path" - "strings" "github.com/osbuild/osbuild-composer/internal/blueprint" - "github.com/osbuild/osbuild-composer/internal/common" "github.com/osbuild/osbuild-composer/internal/container" "github.com/osbuild/osbuild-composer/internal/disk" "github.com/osbuild/osbuild-composer/internal/distro" @@ -16,78 +13,6 @@ import ( "github.com/osbuild/osbuild-composer/internal/users" ) -func prependKernelCmdlineStage(pipeline *osbuild.Pipeline, kernelOptions string, pt *disk.PartitionTable) *osbuild.Pipeline { - rootFs := pt.FindMountable("/") - if rootFs == nil { - panic("root filesystem must be defined for kernel-cmdline stage, this is a programming error") - } - rootFsUUID := rootFs.GetFSSpec().UUID - kernelStage := osbuild.NewKernelCmdlineStage(osbuild.NewKernelCmdlineStageOptions(rootFsUUID, kernelOptions)) - pipeline.Stages = append([]*osbuild.Stage{kernelStage}, pipeline.Stages...) - return pipeline -} - -func tarPipelines(t *imageType, customizations *blueprint.Customizations, options distro.ImageOptions, repos []rpmmd.RepoConfig, packageSetSpecs map[string][]rpmmd.PackageSpec, containers []container.Spec, rng *rand.Rand) ([]osbuild.Pipeline, error) { - pipelines := make([]osbuild.Pipeline, 0) - pipelines = append(pipelines, *buildPipeline(repos, packageSetSpecs[buildPkgsKey], t.arch.distro.runner.String())) - - treePipeline, err := osPipeline(t, repos, packageSetSpecs[osPkgsKey], containers, customizations, options, nil) - if err != nil { - return nil, err - } - pipelines = append(pipelines, *treePipeline) - tarPipeline := tarArchivePipeline("root-tar", treePipeline.Name, &osbuild.TarStageOptions{Filename: "root.tar.xz"}) - pipelines = append(pipelines, *tarPipeline) - return pipelines, nil -} - -//makeISORootPath return a path that can be used to address files and folders in -//the root of the iso -func makeISORootPath(p string) string { - fullpath := path.Join("/run/install/repo", p) - return fmt.Sprintf("file://%s", fullpath) -} - -func imageInstallerPipelines(t *imageType, customizations *blueprint.Customizations, options distro.ImageOptions, repos []rpmmd.RepoConfig, packageSetSpecs map[string][]rpmmd.PackageSpec, containers []container.Spec, rng *rand.Rand) ([]osbuild.Pipeline, error) { - pipelines := make([]osbuild.Pipeline, 0) - pipelines = append(pipelines, *buildPipeline(repos, packageSetSpecs[buildPkgsKey], t.arch.distro.runner.String())) - - treePipeline, err := osPipeline(t, repos, packageSetSpecs[osPkgsKey], containers, customizations, options, nil) - if err != nil { - return nil, err - } - pipelines = append(pipelines, *treePipeline) - - var kernelPkg *rpmmd.PackageSpec - installerPackages := packageSetSpecs[installerPkgsKey] - for _, pkg := range installerPackages { - if pkg.Name == "kernel" { - // Implicit memory alasing doesn't couse any bug in this case - /* #nosec G601 */ - kernelPkg = &pkg - break - } - } - if kernelPkg == nil { - return nil, fmt.Errorf("kernel package not found in installer package set") - } - kernelVer := fmt.Sprintf("%s-%s.%s", kernelPkg.Version, kernelPkg.Release, kernelPkg.Arch) - - tarPath := "/liveimg.tar" - tarPayloadStages := []*osbuild.Stage{osbuild.NewTarStage(&osbuild.TarStageOptions{Filename: tarPath}, treePipeline.Name)} - kickstartOptions, err := osbuild.NewKickstartStageOptions(kspath, makeISORootPath(tarPath), users.UsersFromBP(customizations.GetUsers()), users.GroupsFromBP(customizations.GetGroups()), "", "", "rhel") - if err != nil { - return nil, err - } - archName := t.Arch().Name() - d := t.arch.distro - pipelines = append(pipelines, *anacondaTreePipeline(repos, installerPackages, kernelVer, archName, d.product, d.osVersion, "BaseOS", true)) - isolabel := fmt.Sprintf(d.isolabelTmpl, archName) - pipelines = append(pipelines, *bootISOTreePipeline(kernelVer, archName, d.vendor, d.product, d.osVersion, isolabel, kickstartOptions, tarPayloadStages)) - pipelines = append(pipelines, *bootISOPipeline(t.Filename(), d.isolabelTmpl, t.Arch().Name(), t.Arch().Name() == "x86_64")) - return pipelines, nil -} - func edgeImagePipelines(t *imageType, customizations *blueprint.Customizations, filename string, options distro.ImageOptions, rng *rand.Rand) ([]osbuild.Pipeline, string, error) { pipelines := make([]osbuild.Pipeline, 0) ostreeRepoPath := "/ostree/repo" @@ -122,336 +47,6 @@ func buildPipeline(repos []rpmmd.RepoConfig, buildPackageSpecs []rpmmd.PackageSp return p } -func osPipeline(t *imageType, - repos []rpmmd.RepoConfig, - packages []rpmmd.PackageSpec, - containers []container.Spec, - c *blueprint.Customizations, - options distro.ImageOptions, - pt *disk.PartitionTable) (*osbuild.Pipeline, error) { - imageConfig := t.getDefaultImageConfig() - p := new(osbuild.Pipeline) - if t.rpmOstree { - p.Name = "ostree-tree" - } else { - p.Name = "os" - } - p.Build = "name:build" - - if t.rpmOstree && options.OSTree.FetchChecksum != "" && options.OSTree.URL != "" { - p.AddStage(osbuild.NewOSTreePasswdStage("org.osbuild.source", options.OSTree.FetchChecksum)) - } - - rpmOptions := osbuild.NewRPMStageOptions(repos) - rpmOptions.GPGKeysFromTree = imageConfig.GPGKeyFiles - - if imageConfig.ExcludeDocs != nil && *imageConfig.ExcludeDocs { - if rpmOptions.Exclude == nil { - rpmOptions.Exclude = &osbuild.Exclude{} - } - rpmOptions.Exclude.Docs = true - } - p.AddStage(osbuild.NewRPMStage(rpmOptions, osbuild.NewRpmStageSourceFilesInputs(packages))) - - // If the /boot is on a separate partition, the prefix for the BLS stage must be "" - if pt == nil || pt.FindMountable("/boot") == nil { - p.AddStage(osbuild.NewFixBLSStage(&osbuild.FixBLSStageOptions{})) - } else { - p.AddStage(osbuild.NewFixBLSStage(&osbuild.FixBLSStageOptions{Prefix: common.StringToPtr("")})) - } - - if len(containers) > 0 { - images := osbuild.NewContainersInputForSources(containers) - - var storagePath string - - // OSTree commits do not include data in `/var` since that is tied to the - // deployment, rather than the commit. Therefore the containers need to be - // stored in a different location, like `/usr/share`, and the container - // storage engine configured accordingly. - if t.rpmOstree { - storagePath = "/usr/share/containers/storage" - storageConf := "/etc/containers/storage.conf" - - containerStoreOpts := osbuild.NewContainerStorageOptions(storageConf, storagePath) - p.AddStage(osbuild.NewContainersStorageConfStage(containerStoreOpts)) - } - - skopeo := osbuild.NewSkopeoStage(images, storagePath) - p.AddStage(skopeo) - } - - language, keyboard := c.GetPrimaryLocale() - if language != nil { - p.AddStage(osbuild.NewLocaleStage(&osbuild.LocaleStageOptions{Language: *language})) - } else if imageConfig.Locale != nil { - p.AddStage(osbuild.NewLocaleStage(&osbuild.LocaleStageOptions{Language: *imageConfig.Locale})) - } - if keyboard != nil { - p.AddStage(osbuild.NewKeymapStage(&osbuild.KeymapStageOptions{Keymap: *keyboard})) - } else if imageConfig.Keyboard != nil { - p.AddStage(osbuild.NewKeymapStage(imageConfig.Keyboard)) - } - - if hostname := c.GetHostname(); hostname != nil { - p.AddStage(osbuild.NewHostnameStage(&osbuild.HostnameStageOptions{Hostname: *hostname})) - } - - timezone, ntpServers := c.GetTimezoneSettings() - if timezone != nil { - p.AddStage(osbuild.NewTimezoneStage(&osbuild.TimezoneStageOptions{Zone: *timezone})) - } else if imageConfig.Timezone != nil { - p.AddStage(osbuild.NewTimezoneStage(&osbuild.TimezoneStageOptions{Zone: *imageConfig.Timezone})) - } - - if len(ntpServers) > 0 { - servers := make([]osbuild.ChronyConfigServer, len(ntpServers)) - for idx, server := range ntpServers { - servers[idx] = osbuild.ChronyConfigServer{Hostname: server} - } - p.AddStage(osbuild.NewChronyStage(&osbuild.ChronyStageOptions{Servers: servers})) - } else if imageConfig.TimeSynchronization != nil { - p.AddStage(osbuild.NewChronyStage(imageConfig.TimeSynchronization)) - } - - if !t.bootISO { - // don't put users and groups in the payload of an installer - // add them via kickstart instead - if groups := c.GetGroups(); len(groups) > 0 { - p.AddStage(osbuild.NewGroupsStage(osbuild.NewGroupsStageOptions(users.GroupsFromBP(groups)))) - } - - if userOptions, err := osbuild.NewUsersStageOptions(users.UsersFromBP(c.GetUsers()), false); err != nil { - return nil, err - } else if userOptions != nil { - if t.rpmOstree { - // for ostree, writing the key during user creation is - // redundant and can cause issues so create users without keys - // and write them on first boot - userOptionsSansKeys, err := osbuild.NewUsersStageOptions(users.UsersFromBP(c.GetUsers()), true) - if err != nil { - return nil, err - } - p.AddStage(osbuild.NewUsersStage(userOptionsSansKeys)) - p.AddStage(osbuild.NewFirstBootStage(usersFirstBootOptions(userOptions))) - } else { - p.AddStage(osbuild.NewUsersStage(userOptions)) - } - } - } - - if services := c.GetServices(); services != nil || imageConfig.EnabledServices != nil || - imageConfig.DisabledServices != nil || imageConfig.DefaultTarget != nil { - defaultTarget := "" - if imageConfig.DefaultTarget != nil { - defaultTarget = *imageConfig.DefaultTarget - } - p.AddStage(osbuild.NewSystemdStage(systemdStageOptions( - imageConfig.EnabledServices, - imageConfig.DisabledServices, - services, - defaultTarget, - ))) - } - - var fwStageOptions *osbuild.FirewallStageOptions - if firewallCustomization := c.GetFirewall(); firewallCustomization != nil { - fwStageOptions = firewallStageOptions(firewallCustomization) - } - if firewallConfig := imageConfig.Firewall; firewallConfig != nil { - // merge the user-provided firewall config with the default one - if fwStageOptions != nil { - fwStageOptions = &osbuild.FirewallStageOptions{ - // Prefer the firewall ports and services settings provided - // via BP customization. - Ports: fwStageOptions.Ports, - EnabledServices: fwStageOptions.EnabledServices, - DisabledServices: fwStageOptions.DisabledServices, - // Default zone can not be set using BP customizations, therefore - // default to the one provided in the default image configuration. - DefaultZone: firewallConfig.DefaultZone, - } - } else { - fwStageOptions = firewallConfig - } - } - if fwStageOptions != nil { - p.AddStage(osbuild.NewFirewallStage(fwStageOptions)) - } - - for _, sysconfigConfig := range imageConfig.Sysconfig { - p.AddStage(osbuild.NewSysconfigStage(sysconfigConfig)) - } - - if t.arch.distro.isRHEL() { - if options.Subscription != nil { - commands := []string{ - fmt.Sprintf("/usr/sbin/subscription-manager register --org=%s --activationkey=%s --serverurl %s --baseurl %s", options.Subscription.Organization, options.Subscription.ActivationKey, options.Subscription.ServerUrl, options.Subscription.BaseUrl), - } - if options.Subscription.Insights { - commands = append(commands, "/usr/bin/insights-client --register") - } - p.AddStage(osbuild.NewFirstBootStage(&osbuild.FirstBootStageOptions{ - Commands: commands, - WaitForNetwork: true, - })) - - if rhsmConfig, exists := imageConfig.RHSMConfig[distro.RHSMConfigWithSubscription]; exists { - p.AddStage(osbuild.NewRHSMStage(rhsmConfig)) - } - } else { - if rhsmConfig, exists := imageConfig.RHSMConfig[distro.RHSMConfigNoSubscription]; exists { - p.AddStage(osbuild.NewRHSMStage(rhsmConfig)) - } - } - } - - for _, systemdLogindConfig := range imageConfig.SystemdLogind { - p.AddStage(osbuild.NewSystemdLogindStage(systemdLogindConfig)) - } - - for _, cloudInitConfig := range imageConfig.CloudInit { - p.AddStage(osbuild.NewCloudInitStage(cloudInitConfig)) - } - - for _, modprobeConfig := range imageConfig.Modprobe { - p.AddStage(osbuild.NewModprobeStage(modprobeConfig)) - } - - for _, dracutConfConfig := range imageConfig.DracutConf { - p.AddStage(osbuild.NewDracutConfStage(dracutConfConfig)) - } - - for _, systemdUnitConfig := range imageConfig.SystemdUnit { - p.AddStage(osbuild.NewSystemdUnitStage(systemdUnitConfig)) - } - - if authselectConfig := imageConfig.Authselect; authselectConfig != nil { - p.AddStage(osbuild.NewAuthselectStage(authselectConfig)) - } - - if seLinuxConfig := imageConfig.SELinuxConfig; seLinuxConfig != nil { - p.AddStage(osbuild.NewSELinuxConfigStage(seLinuxConfig)) - } - - if tunedConfig := imageConfig.Tuned; tunedConfig != nil { - p.AddStage(osbuild.NewTunedStage(tunedConfig)) - } - - for _, tmpfilesdConfig := range imageConfig.Tmpfilesd { - p.AddStage(osbuild.NewTmpfilesdStage(tmpfilesdConfig)) - } - - for _, pamLimitsConfConfig := range imageConfig.PamLimitsConf { - p.AddStage(osbuild.NewPamLimitsConfStage(pamLimitsConfConfig)) - } - - for _, sysctldConfig := range imageConfig.Sysctld { - p.AddStage(osbuild.NewSysctldStage(sysctldConfig)) - } - - for _, dnfConfig := range imageConfig.DNFConfig { - p.AddStage(osbuild.NewDNFConfigStage(dnfConfig)) - } - - if sshdConfig := imageConfig.SshdConfig; sshdConfig != nil { - p.AddStage((osbuild.NewSshdConfigStage(sshdConfig))) - } - - if authConfig := imageConfig.Authconfig; authConfig != nil { - p.AddStage(osbuild.NewAuthconfigStage(authConfig)) - } - - if pwQuality := imageConfig.PwQuality; pwQuality != nil { - p.AddStage(osbuild.NewPwqualityConfStage(pwQuality)) - } - - if waConfig := imageConfig.WAAgentConfig; waConfig != nil { - p.AddStage(osbuild.NewWAAgentConfStage(waConfig)) - } - - if dnfAutomaticConfig := imageConfig.DNFAutomaticConfig; dnfAutomaticConfig != nil { - p.AddStage(osbuild.NewDNFAutomaticConfigStage(dnfAutomaticConfig)) - } - - for _, yumRepo := range imageConfig.YUMRepos { - p.AddStage(osbuild.NewYumReposStage(yumRepo)) - } - - if gcpGuestAgentConfig := imageConfig.GCPGuestAgentConfig; gcpGuestAgentConfig != nil { - p.AddStage(osbuild.NewGcpGuestAgentConfigStage(gcpGuestAgentConfig)) - } - - if udevRules := imageConfig.UdevRules; udevRules != nil { - p.AddStage(osbuild.NewUdevRulesStage(udevRules)) - } - - if pt != nil { - kernelOptions := osbuild.GenImageKernelOptions(pt) - if t.kernelOptions != "" { - kernelOptions = append(kernelOptions, t.kernelOptions) - } - if bpKernel := c.GetKernel(); bpKernel.Append != "" { - kernelOptions = append(kernelOptions, bpKernel.Append) - } - p = prependKernelCmdlineStage(p, strings.Join(kernelOptions, " "), pt) - p.AddStage(osbuild.NewFSTabStage(osbuild.NewFSTabStageOptions(pt))) - kernelVer := rpmmd.GetVerStrFromPackageSpecListPanic(packages, c.GetKernel().Name) - bootloader := bootloaderConfigStage(t, *pt, kernelVer, false, false) - - if cfg := imageConfig.Grub2Config; cfg != nil { - if grub2, ok := bootloader.Options.(*osbuild.GRUB2StageOptions); ok { - // grub2.Config.Default is owned and set by `NewGrub2StageOptionsUnified` - // and thus we need to preserve it - if grub2.Config != nil { - cfg.Default = grub2.Config.Default - } - - grub2.Config = cfg - } - } - - p.AddStage(bootloader) - } - - if oscapConfig := c.GetOpenSCAP(); oscapConfig != nil { - if t.rpmOstree { - return nil, fmt.Errorf("unexpected oscap options for ostree image type") - } - remediationOptions := osbuild.NewOscapRemediationStageOptions( - osbuild.OscapConfig{ - Datastream: oscapConfig.DataStream, - ProfileID: oscapConfig.ProfileID, - }, - ) - p.AddStage(osbuild.NewOscapRemediationStage(remediationOptions)) - } - - if t.arch.distro.isRHEL() && options.Facts != nil { - p.AddStage(osbuild.NewRHSMFactsStage(&osbuild.RHSMFactsStageOptions{ - Facts: osbuild.RHSMFacts{ - ApiType: options.Facts.ApiType, - }, - })) - } - - // Relabel the tree, unless the `NoSElinux` flag is explicitly set to `true` - if imageConfig.NoSElinux == nil || imageConfig.NoSElinux != nil && !*imageConfig.NoSElinux { - p.AddStage(osbuild.NewSELinuxStage(selinuxStageOptions(false))) - } - - if t.rpmOstree { - p.AddStage(osbuild.NewOSTreePrepTreeStage(&osbuild.OSTreePrepTreeStageOptions{ - EtcGroupMembers: []string{ - // NOTE: We may want to make this configurable. - "wheel", "docker", - }, - })) - } - - return p, nil -} - func edgeSimplifiedInstallerPipelines(t *imageType, customizations *blueprint.Customizations, options distro.ImageOptions, repos []rpmmd.RepoConfig, packageSetSpecs map[string][]rpmmd.PackageSpec, containers []container.Spec, rng *rand.Rand) ([]osbuild.Pipeline, error) { pipelines := make([]osbuild.Pipeline, 0) pipelines = append(pipelines, *buildPipeline(repos, packageSetSpecs[buildPkgsKey], t.arch.distro.runner.String())) @@ -702,77 +297,6 @@ func ostreeDeployPipeline( return p } -func anacondaTreePipeline(repos []rpmmd.RepoConfig, packages []rpmmd.PackageSpec, kernelVer, arch, product, osVersion, variant string, users bool) *osbuild.Pipeline { - p := new(osbuild.Pipeline) - p.Name = "anaconda-tree" - p.Build = "name:build" - p.AddStage(osbuild.NewRPMStage(osbuild.NewRPMStageOptions(repos), osbuild.NewRpmStageSourceFilesInputs(packages))) - p.AddStage(osbuild.NewBuildstampStage(buildStampStageOptions(arch, product, osVersion, variant))) - p.AddStage(osbuild.NewLocaleStage(&osbuild.LocaleStageOptions{Language: "en_US.UTF-8"})) - - rootPassword := "" - rootUser := osbuild.UsersStageOptionsUser{ - Password: &rootPassword, - } - - installUID := 0 - installGID := 0 - installHome := "/root" - installShell := "/usr/libexec/anaconda/run-anaconda" - installPassword := "" - installUser := osbuild.UsersStageOptionsUser{ - UID: &installUID, - GID: &installGID, - Home: &installHome, - Shell: &installShell, - Password: &installPassword, - } - usersStageOptions := &osbuild.UsersStageOptions{ - Users: map[string]osbuild.UsersStageOptionsUser{ - "root": rootUser, - "install": installUser, - }, - } - - p.AddStage(osbuild.NewUsersStage(usersStageOptions)) - p.AddStage(osbuild.NewAnacondaStage(osbuild.NewAnacondaStageOptions(users, []string{}))) - p.AddStage(osbuild.NewLoraxScriptStage(loraxScriptStageOptions(arch))) - dso := dracutStageOptions(kernelVer, arch, []string{ - "anaconda", - "fcoe", - "fcoe-uefi", - "iscsi", - "lunmask", - "multipath", - "nfs", - "nvdimm", // non-volatile DIMM firmware (provides nfit, cuse, and nd_e820) - "rdma", - "rngd", - }) - // drivers / kernel modules to add explicitly for parity with the official - // RHEL 9.0 ISO - dso.AddDrivers = []string{"cuse", "ipmi_devintf", "ipmi_msghandler"} - p.AddStage(osbuild.NewDracutStage(dso)) - p.AddStage(osbuild.NewSELinuxConfigStage(&osbuild.SELinuxConfigStageOptions{State: osbuild.SELinuxStatePermissive})) - - return p -} - -func bootISOTreePipeline(kernelVer, arch, vendor, product, osVersion, isolabel string, ksOptions *osbuild.KickstartStageOptions, payloadStages []*osbuild.Stage) *osbuild.Pipeline { - p := new(osbuild.Pipeline) - p.Name = "bootiso-tree" - p.Build = "name:build" - - p.AddStage(osbuild.NewBootISOMonoStage(bootISOMonoStageOptions(kernelVer, arch, vendor, product, osVersion, isolabel), osbuild.NewBootISOMonoStagePipelineTreeInputs("anaconda-tree"))) - p.AddStage(osbuild.NewKickstartStage(ksOptions)) - p.AddStage(osbuild.NewDiscinfoStage(discinfoStageOptions(arch))) - - for _, stage := range payloadStages { - p.AddStage(stage) - } - - return p -} func bootISOPipeline(filename, isolabel, arch string, isolinux bool) *osbuild.Pipeline { p := new(osbuild.Pipeline) p.Name = "bootiso" @@ -820,14 +344,6 @@ func xzArchivePipeline(inputPipelineName, inputFilename, outputFilename string) return p } -func tarArchivePipeline(name, inputPipelineName string, tarOptions *osbuild.TarStageOptions) *osbuild.Pipeline { - p := new(osbuild.Pipeline) - p.Name = name - p.Build = "name:build" - p.AddStage(osbuild.NewTarStage(tarOptions, inputPipelineName)) - return p -} - func bootloaderConfigStage(t *imageType, partitionTable disk.PartitionTable, kernelVer string, install, greenboot bool) *osbuild.Stage { if t.Arch().Name() == distro.S390xArchName { return osbuild.NewZiplStage(new(osbuild.ZiplStageOptions)) diff --git a/internal/distro/rhel9/stage_options.go b/internal/distro/rhel9/stage_options.go index 6c05283d1..d07327c24 100644 --- a/internal/distro/rhel9/stage_options.go +++ b/internal/distro/rhel9/stage_options.go @@ -3,7 +3,6 @@ package rhel9 import ( "fmt" "os" - "path/filepath" "github.com/osbuild/osbuild-composer/internal/blueprint" "github.com/osbuild/osbuild-composer/internal/common" @@ -11,10 +10,6 @@ import ( "github.com/osbuild/osbuild-composer/internal/osbuild" ) -const ( - kspath = "/osbuild.ks" -) - // selinuxStageOptions returns the options for the org.osbuild.selinux stage. // Setting the argument to 'true' relabels the '/usr/bin/cp' and '/usr/bin/tar' // binaries with 'install_exec_t'. This should be set in the build root. @@ -31,66 +26,6 @@ func selinuxStageOptions(labelcp bool) *osbuild.SELinuxStageOptions { return options } -func usersFirstBootOptions(usersStageOptions *osbuild.UsersStageOptions) *osbuild.FirstBootStageOptions { - cmds := make([]string, 0, 3*len(usersStageOptions.Users)+2) - // workaround for creating authorized_keys file for user - // need to special case the root user, which has its home in a different place - varhome := filepath.Join("/var", "home") - roothome := filepath.Join("/var", "roothome") - - for name, user := range usersStageOptions.Users { - if user.Key != nil { - var home string - - if name == "root" { - home = roothome - } else { - home = filepath.Join(varhome, name) - } - - sshdir := filepath.Join(home, ".ssh") - - cmds = append(cmds, fmt.Sprintf("mkdir -p %s", sshdir)) - cmds = append(cmds, fmt.Sprintf("sh -c 'echo %q >> %q'", *user.Key, filepath.Join(sshdir, "authorized_keys"))) - cmds = append(cmds, fmt.Sprintf("chown %s:%s -Rc %s", name, name, sshdir)) - } - } - cmds = append(cmds, fmt.Sprintf("restorecon -rvF %s", varhome)) - cmds = append(cmds, fmt.Sprintf("restorecon -rvF %s", roothome)) - - options := &osbuild.FirstBootStageOptions{ - Commands: cmds, - WaitForNetwork: false, - } - - return options -} - -func firewallStageOptions(firewall *blueprint.FirewallCustomization) *osbuild.FirewallStageOptions { - options := osbuild.FirewallStageOptions{ - Ports: firewall.Ports, - } - - if firewall.Services != nil { - options.EnabledServices = firewall.Services.Enabled - options.DisabledServices = firewall.Services.Disabled - } - - return &options -} - -func systemdStageOptions(enabledServices, disabledServices []string, s *blueprint.ServicesCustomization, target string) *osbuild.SystemdStageOptions { - if s != nil { - enabledServices = append(enabledServices, s.Enabled...) - disabledServices = append(disabledServices, s.Disabled...) - } - return &osbuild.SystemdStageOptions{ - EnabledServices: enabledServices, - DisabledServices: disabledServices, - DefaultTarget: target, - } -} - func buildStampStageOptions(arch, product, osVersion, variant string) *osbuild.BuildstampStageOptions { return &osbuild.BuildstampStageOptions{ Arch: arch, @@ -101,13 +36,6 @@ func buildStampStageOptions(arch, product, osVersion, variant string) *osbuild.B } } -func loraxScriptStageOptions(arch string) *osbuild.LoraxScriptStageOptions { - return &osbuild.LoraxScriptStageOptions{ - Path: "99-generic/runtime-postinstall.tmpl", - BaseArch: arch, - } -} - func dracutStageOptions(kernelVer, arch string, additionalModules []string) *osbuild.DracutStageOptions { kernel := []string{kernelVer} modules := []string{ @@ -164,48 +92,6 @@ func dracutStageOptions(kernelVer, arch string, additionalModules []string) *osb } } -func bootISOMonoStageOptions(kernelVer, arch, vendor, product, osVersion, isolabel string) *osbuild.BootISOMonoStageOptions { - comprOptions := new(osbuild.FSCompressionOptions) - if bcj := osbuild.BCJOption(arch); bcj != "" { - comprOptions.BCJ = bcj - } - var architectures []string - - if arch == distro.X86_64ArchName { - architectures = []string{"X64"} - } else if arch == distro.Aarch64ArchName { - architectures = []string{"AA64"} - } else { - panic("unsupported architecture") - } - - return &osbuild.BootISOMonoStageOptions{ - Product: osbuild.Product{ - Name: product, - Version: osVersion, - }, - ISOLabel: isolabel, - Kernel: kernelVer, - KernelOpts: fmt.Sprintf("inst.ks=hd:LABEL=%s:%s", isolabel, kspath), - EFI: osbuild.EFI{ - Architectures: architectures, - Vendor: vendor, - }, - ISOLinux: osbuild.ISOLinux{ - Enabled: arch == distro.X86_64ArchName, - Debug: false, - }, - Templates: "80-rhel", - RootFS: osbuild.RootFS{ - Size: 9216, - Compression: osbuild.FSCompression{ - Method: "xz", - Options: comprOptions, - }, - }, - } -} - func grubISOStageOptions(installDevice, kernelVer, arch, vendor, product, osVersion, isolabel string, fdo *blueprint.FDOCustomization) *osbuild.GrubISOStageOptions { var architectures []string @@ -251,13 +137,6 @@ func grubISOStageOptions(installDevice, kernelVer, arch, vendor, product, osVers return grubISOStageOptions } -func discinfoStageOptions(arch string) *osbuild.DiscinfoStageOptions { - return &osbuild.DiscinfoStageOptions{ - BaseArch: arch, - Release: "202010217.n.0", - } -} - func xorrisofsStageOptions(filename, isolabel, arch string, isolinux bool) *osbuild.XorrisofsStageOptions { options := &osbuild.XorrisofsStageOptions{ Filename: filename,