Skip to content

Commit

Permalink
NO-ISSUE: Fix grub menu for 4.16
Browse files Browse the repository at this point in the history
  • Loading branch information
danielerez committed May 13, 2024
1 parent d7dfab3 commit 39ddddc
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 16 deletions.
2 changes: 1 addition & 1 deletion pkg/asset/appliance/appliance_diskimage.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ func (a *ApplianceDiskImage) Generate(dependencies asset.Parents) error {
// Render user.cfg
if err := templates.RenderTemplateFile(
consts.UserCfgTemplateFile,
templates.GetUserCfgTemplateData(consts.GrubMenuEntryName, consts.GrubDefault),
templates.GetUserCfgTemplateData(consts.GrubMenuEntryName),
envConfig.TempDir); err != nil {
return log.StopSpinner(spinner, err)
}
Expand Down
26 changes: 18 additions & 8 deletions pkg/asset/ignition/install_ignition.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"os"
"path/filepath"

ignutil "github.com/coreos/ignition/v2/config/util"
igntypes "github.com/coreos/ignition/v2/config/v3_2/types"
"github.com/go-openapi/swag"
"github.com/openshift/appliance/pkg/asset/config"
Expand All @@ -14,6 +15,7 @@ import (
ignasset "github.com/openshift/installer/pkg/asset/ignition"
"github.com/openshift/installer/pkg/asset/ignition/bootstrap"
"github.com/sirupsen/logrus"
"github.com/vincent-petithory/dataurl"
"golang.org/x/crypto/bcrypt"
)

Expand Down Expand Up @@ -126,7 +128,7 @@ func (i *InstallIgnition) Generate(dependencies asset.Parents) error {
func (i *InstallIgnition) addRecoveryGrubMenuItem(tempDir string) error {
if err := templates.RenderTemplateFile(
consts.UserCfgTemplateFile,
templates.GetUserCfgTemplateData(consts.GrubMenuEntryNameRecovery, consts.GrubDefaultRecovery),
templates.GetUserCfgTemplateData(consts.GrubMenuEntryNameRecovery),
tempDir); err != nil {
return err
}
Expand All @@ -135,15 +137,23 @@ func (i *InstallIgnition) addRecoveryGrubMenuItem(tempDir string) error {
if err != nil {
return err
}
cfgFile := ignasset.FileFromBytes(consts.UserCfgFilePath,
"root", 0644, cfgFileBytes)
i.Config.Storage.Files = append(i.Config.Storage.Files, cfgFile)
format := "ext4"
path := bootMountPath

// Append the content of user.cfg to grub.cfg in order to prevent duplicate menu entries.
// For details see:
// * https://github.com/coreos/fedora-coreos-tracker/issues/805
// * https://github.com/coreos/fedora-coreos-config/blob/5c1ac4e7d4a596efac69a3eb78061dc2f59e94fb/overlay.d/40grub/usr/lib/bootupd/grub2-static/configs.d/70_coreos-user.cfg
grubCfgFile := igntypes.File{
Node: igntypes.Node{Path: "/boot/grub2/grub.cfg",
User: igntypes.NodeUser{Name: swag.String("root")}},
FileEmbedded1: igntypes.FileEmbedded1{Mode: swag.Int(0644),
Append: []igntypes.Resource{{Source: ignutil.StrToPtr(dataurl.EncodeBytes(cfgFileBytes))}},
},
}
i.Config.Storage.Files = append(i.Config.Storage.Files, grubCfgFile)
i.Config.Storage.Filesystems = append(i.Config.Storage.Filesystems, igntypes.Filesystem{
Device: bootDevice,
Format: &format,
Path: &path,
Format: swag.String("ext4"),
Path: swag.String(bootMountPath),
})

return nil
Expand Down
4 changes: 1 addition & 3 deletions pkg/consts/consts.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,10 @@ const (
// user.cfg template
UserCfgTemplateFile = "scripts/grub/user.cfg.template"
GrubTimeout = 10
GrubDefault = 0
GrubMenuEntryName = "Agent-Based Installer"
// For installation ignition
GrubMenuEntryNameRecovery = "Recovery: Agent-Based Installer (Reinstall Cluster)"
GrubDefaultRecovery = 1
UserCfgFilePath = "/boot/grub2/user.cfg"
GrubCfgFilePath = "/boot/grub2/grub.cfg"

// guestfish.sh template
GuestfishScriptTemplateFile = "scripts/guestfish/guestfish.sh.template"
Expand Down
5 changes: 2 additions & 3 deletions pkg/templates/data.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,12 @@ import (
"github.com/sirupsen/logrus"
)

func GetUserCfgTemplateData(grubMenuEntryName string, grubDefault int) interface{} {
func GetUserCfgTemplateData(grubMenuEntryName string) interface{} {
return struct {
GrubTimeout, GrubDefault int
GrubTimeout int
GrubMenuEntryName, RecoveryPartitionName string
}{
GrubTimeout: consts.GrubTimeout,
GrubDefault: grubDefault,
GrubMenuEntryName: grubMenuEntryName,
RecoveryPartitionName: consts.RecoveryPartitionName,
}
Expand Down
1 change: 0 additions & 1 deletion pkg/templates/scripts/grub/user.cfg.template
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
set timeout={{.GrubTimeout}}
set default={{.GrubDefault}}
menuentry '{{.GrubMenuEntryName}}' --class gnu-linux --class gnu --class os {
search --set=root --label {{.RecoveryPartitionName}}
linux /images/pxeboot/vmlinuz coreos.liveiso={{.RecoveryPartitionName}} random.trust_cpu=on console=tty0 console=ttyS0,115200n8 ignition.firstboot ignition.platform.id=metal
Expand Down

0 comments on commit 39ddddc

Please sign in to comment.