Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Default to UEFI (non-SB) on x86_64 #3159

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 1 addition & 11 deletions mantle/cmd/kola/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,17 +202,7 @@ func syncOptionsImpl(useCosa bool) error {

// native 4k requires a UEFI bootloader
if kola.QEMUOptions.Native4k && kola.QEMUOptions.Firmware == "bios" {
return fmt.Errorf("native 4k requires uefi firmware")
}
// default to BIOS, UEFI for aarch64 and x86(only for 4k)
if kola.QEMUOptions.Firmware == "" {
if kola.Options.CosaBuildArch == "aarch64" {
kola.QEMUOptions.Firmware = "uefi"
} else if kola.Options.CosaBuildArch == "x86_64" && kola.QEMUOptions.Native4k {
kola.QEMUOptions.Firmware = "uefi"
} else {
kola.QEMUOptions.Firmware = "bios"
}
kola.QEMUOptions.Firmware = platform.UefiFirmwareDefault
}

if err := validateOption("platform", kolaPlatform, kolaPlatforms); err != nil {
Expand Down
4 changes: 3 additions & 1 deletion mantle/cmd/kola/qemuexec.go
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,9 @@ func runQemuExec(cmd *cobra.Command, args []string) error {
builder.AppendFirstbootKernelArgs = firstbootkargs
}
builder.AppendKernelArgs = strings.Join(kargs, " ")
builder.Firmware = kola.QEMUOptions.Firmware
if kola.QEMUOptions.Firmware != "" {
builder.Firmware = kola.QEMUOptions.Firmware
}
if kola.QEMUOptions.DiskImage != "" {
channel := "virtio"
if kola.QEMUOptions.Nvme {
Expand Down
4 changes: 3 additions & 1 deletion mantle/platform/machine/unprivqemu/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,9 @@ func (qc *Cluster) NewMachineWithQemuOptions(userdata *conf.UserData, options pl
builder.ConfigFile = confPath
defer builder.Close()
builder.UUID = qm.id
builder.Firmware = qc.flight.opts.Firmware
if qc.flight.opts.Firmware != "" {
builder.Firmware = qc.flight.opts.Firmware
}
builder.Swtpm = qc.flight.opts.Swtpm
builder.Hostname = fmt.Sprintf("qemu%d", qc.BaseCluster.AllocateMachineSerial())
builder.ConsoleFile = qm.consolePath
Expand Down
24 changes: 20 additions & 4 deletions mantle/platform/qemu.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ import (
"golang.org/x/sys/unix"
)

// UefiFirmwareDefault is used on x86_64 and aarch64. In the future
// this may change to be e.g. uefi-secure.
const UefiFirmwareDefault = "uefi"

var (
// ErrInitramfsEmergency is the marker error returned upon node blocking in emergency mode in initramfs.
ErrInitramfsEmergency = errors.New("entered emergency.target in initramfs")
Expand Down Expand Up @@ -448,8 +452,16 @@ type QemuBuilder struct {

// NewQemuBuilder creates a new build for QEMU with default settings.
func NewQemuBuilder() *QemuBuilder {
var defaultFirmware string
switch coreosarch.CurrentRpmArch() {
case "x86_64", "aarch64":
// Default to UEFI (but not secure boot for now)
defaultFirmware = UefiFirmwareDefault
default:
defaultFirmware = ""
}
ret := QemuBuilder{
Firmware: "bios",
Firmware: defaultFirmware,
Swtpm: true,
Pdeathsig: true,
Argv: []string{},
Expand Down Expand Up @@ -1395,8 +1407,8 @@ func (builder *QemuBuilder) Exec() (*QemuInstance, error) {
argv = append(argv, "-smp", fmt.Sprintf("%d", builder.Processors))

switch builder.Firmware {
case "bios":
break
case "":
cgwalters marked this conversation as resolved.
Show resolved Hide resolved
// Nothing to do, use qemu default
case "uefi":
if err := builder.setupUefi(false); err != nil {
return nil, err
Expand All @@ -1405,8 +1417,12 @@ func (builder *QemuBuilder) Exec() (*QemuInstance, error) {
if err := builder.setupUefi(true); err != nil {
return nil, err
}
case "bios":
if coreosarch.CurrentRpmArch() != "x86_64" {
return nil, fmt.Errorf("unknown firmware: %s", builder.Firmware)
}
default:
panic(fmt.Sprintf("Unknown firmware: %s", builder.Firmware))
return nil, fmt.Errorf("unknown firmware: %s", builder.Firmware)
}

// We always provide a random source
Expand Down
2 changes: 1 addition & 1 deletion src/cmd-kola
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import sys
# Just test these boot to start with. In the future we should at least
# do ostree upgrades with uefi etc. But we don't really need the *full*
# suite...if podman somehow broke with nvme or uefi I'd be amazed and impressed.
BASIC_SCENARIOS = ["nvme=true", "firmware=uefi"]
BASIC_SCENARIOS = ["nvme=true", "firmware=bios"]
BASIC_SCENARIOS_SECURE_BOOT = ["firmware=uefi-secure"]
arch = platform.machine()

Expand Down