diff --git a/neonvm-runner/Dockerfile b/neonvm-runner/Dockerfile index 526292cfb..a21c87504 100644 --- a/neonvm-runner/Dockerfile +++ b/neonvm-runner/Dockerfile @@ -25,8 +25,11 @@ RUN apk add --no-cache \ cgroup-tools \ openssh + COPY --from=builder /runner /usr/bin/runner COPY neonvm-kernel/vmlinuz /vm/kernel/vmlinuz COPY neonvm-runner/ssh_config /etc/ssh/ssh_config +# QEMU_EFI used only by runner running on the arm architecture +RUN wget https://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/QEMU_EFI.fd -O /vm/QEMU_EFI.fd ENTRYPOINT ["/sbin/tini", "--", "runner"] diff --git a/neonvm-runner/cmd/main.go b/neonvm-runner/cmd/main.go index b92ed5dea..82cd44639 100644 --- a/neonvm-runner/cmd/main.go +++ b/neonvm-runner/cmd/main.go @@ -862,6 +862,10 @@ func buildQEMUCmd( qemuCmd = append(qemuCmd, "-drive", fmt.Sprintf("id=%s,file=%s,if=virtio,media=disk,%s,discard=unmap", swapName, dPath, cfg.diskCacheSettings)) } + if cfg.architecture == architectureArm64 { + qemuCmd = append(qemuCmd, "-bios", "/vm/QEMU_EFI_ARM.fd") + } + for _, disk := range vmSpec.Disks { switch { case disk.EmptyDisk != nil: @@ -1015,6 +1019,11 @@ func makeKernelCmdline(cfg *Config, vmSpec *vmv1.VirtualMachineSpec, vmStatus *v cmdlineParts = append(cmdlineParts, fmt.Sprintf("maxcpus=%d", vmSpec.Guest.CPUs.Min.RoundedUp())) } + if cfg.architecture == architectureArm64 { + // explicitly enable acpi if we run on arm + cmdlineParts = append(cmdlineParts, "acpi=on") + } + return strings.Join(cmdlineParts, " ") }