Merge pull request #27546 from jakecorrenti/libkrun-as-default

machine: change default macOS provider to libkrun
This commit is contained in:
openshift-merge-bot[bot]
2025-11-20 16:00:23 +00:00
committed by GitHub
3 changed files with 11 additions and 30 deletions

View File

@@ -67,7 +67,7 @@ above.
## MacOS ## MacOS
Macs now support two different machine providers: `applehv` and `libkrun`. The Macs now support two different machine providers: `applehv` and `libkrun`. The
`applehv` provider is the default. `libkrun` provider is the default.
Note: On macOS, an error will occur if the path length of `$TMPDIR` is longer Note: On macOS, an error will occur if the path length of `$TMPDIR` is longer
than 22 characters. Please set the appropriate path to `$TMPDIR`. Also, if than 22 characters. Please set the appropriate path to `$TMPDIR`. Also, if
@@ -77,11 +77,11 @@ than 22 characters. Please set the appropriate path to `$TMPDIR`. Also, if
1. `brew install vfkit` 1. `brew install vfkit`
1. `make podman-remote` 1. `make podman-remote`
1. `export CONTAINERS_MACHINE_PROVIDER="applehv"`
1. `make localmachine` 1. `make localmachine`
### [Libkrun](https://github.com/containers/libkrun) ### [Libkrun](https://github.com/containers/libkrun)
1. `brew install krunkit` 1. `brew install krunkit`
1. `make podman-remote` 1. `make podman-remote`
1. `export CONTAINERS_MACHINE_PROVIDER="libkrun"`
1. `make localmachine` 1. `make localmachine`

View File

@@ -2,7 +2,6 @@ package provider
import ( import (
"bytes" "bytes"
"errors"
"fmt" "fmt"
"os" "os"
"os/exec" "os/exec"
@@ -27,7 +26,7 @@ func Get() (vmconfigs.VMProvider, error) {
if providerOverride, found := os.LookupEnv("CONTAINERS_MACHINE_PROVIDER"); found { if providerOverride, found := os.LookupEnv("CONTAINERS_MACHINE_PROVIDER"); found {
provider = providerOverride provider = providerOverride
} }
resolvedVMType, err := define.ParseVMType(provider, define.AppleHvVirt) resolvedVMType, err := define.ParseVMType(provider, define.LibKrun)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -43,9 +42,6 @@ func GetByVMType(resolvedVMType define.VMType) (vmconfigs.VMProvider, error) {
case define.AppleHvVirt: case define.AppleHvVirt:
return new(applehv.AppleHVStubber), nil return new(applehv.AppleHVStubber), nil
case define.LibKrun: case define.LibKrun:
if runtime.GOARCH == "amd64" {
return nil, errors.New("libkrun is not supported on Intel based machines. Please revert to the applehv provider")
}
return new(libkrun.LibKrunStubber), nil return new(libkrun.LibKrunStubber), nil
default: default:
} }
@@ -53,20 +49,12 @@ func GetByVMType(resolvedVMType define.VMType) (vmconfigs.VMProvider, error) {
} }
func GetAll() []vmconfigs.VMProvider { func GetAll() []vmconfigs.VMProvider {
configs := []vmconfigs.VMProvider{new(applehv.AppleHVStubber)} return []vmconfigs.VMProvider{new(libkrun.LibKrunStubber), new(applehv.AppleHVStubber)}
if runtime.GOARCH == "arm64" {
configs = append(configs, new(libkrun.LibKrunStubber))
}
return configs
} }
// SupportedProviders returns the providers that are supported on the host operating system // SupportedProviders returns the providers that are supported on the host operating system
func SupportedProviders() []define.VMType { func SupportedProviders() []define.VMType {
supported := []define.VMType{define.AppleHvVirt} return []define.VMType{define.AppleHvVirt, define.LibKrun}
if runtime.GOARCH == "arm64" {
return append(supported, define.LibKrun)
}
return supported
} }
func IsInstalled(provider define.VMType) (bool, error) { func IsInstalled(provider define.VMType) (bool, error) {

View File

@@ -11,11 +11,7 @@ import (
func TestSupportedProviders(t *testing.T) { func TestSupportedProviders(t *testing.T) {
switch runtime.GOOS { switch runtime.GOOS {
case "darwin": case "darwin":
if runtime.GOARCH == "arm64" { assert.Equal(t, []define.VMType{define.AppleHvVirt, define.LibKrun}, SupportedProviders())
assert.Equal(t, []define.VMType{define.AppleHvVirt, define.LibKrun}, SupportedProviders())
} else {
assert.Equal(t, []define.VMType{define.AppleHvVirt}, SupportedProviders())
}
case "windows": case "windows":
assert.Equal(t, []define.VMType{define.WSLVirt, define.HyperVVirt}, SupportedProviders()) assert.Equal(t, []define.VMType{define.WSLVirt, define.HyperVVirt}, SupportedProviders())
case "linux": case "linux":
@@ -28,8 +24,7 @@ func TestInstalledProviders(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
switch runtime.GOOS { switch runtime.GOOS {
case "darwin": case "darwin":
// TODO: need to verify if an arm64 machine reports {applehv, libkrun} assert.Equal(t, []define.VMType{define.LibKrun, define.AppleHvVirt}, installed)
assert.Equal(t, []define.VMType{define.AppleHvVirt}, installed)
case "windows": case "windows":
provider, err := Get() provider, err := Get()
assert.NoError(t, err) assert.NoError(t, err)
@@ -60,9 +55,8 @@ func TestBadSupportedProviders(t *testing.T) {
switch runtime.GOOS { switch runtime.GOOS {
case "darwin": case "darwin":
assert.NotEqual(t, []define.VMType{define.QemuVirt}, SupportedProviders()) assert.NotEqual(t, []define.VMType{define.QemuVirt}, SupportedProviders())
if runtime.GOARCH != "arm64" { assert.NotEqual(t, []define.VMType{define.WSLVirt, define.HyperVVirt}, SupportedProviders())
assert.NotEqual(t, []define.VMType{define.AppleHvVirt, define.LibKrun}, SupportedProviders()) assert.NotEqual(t, []define.VMType{define.AppleHvVirt}, SupportedProviders())
}
case "windows": case "windows":
assert.NotEqual(t, []define.VMType{define.QemuVirt}, SupportedProviders()) assert.NotEqual(t, []define.VMType{define.QemuVirt}, SupportedProviders())
case "linux": case "linux":
@@ -76,9 +70,8 @@ func TestBadInstalledProviders(t *testing.T) {
switch runtime.GOOS { switch runtime.GOOS {
case "darwin": case "darwin":
assert.NotEqual(t, []define.VMType{define.QemuVirt}, installed) assert.NotEqual(t, []define.VMType{define.QemuVirt}, installed)
if runtime.GOARCH != "arm64" { assert.NotEqual(t, []define.VMType{define.AppleHvVirt}, installed)
assert.NotEqual(t, []define.VMType{define.AppleHvVirt, define.LibKrun}, installed) assert.NotEqual(t, []define.VMType{define.WSLVirt, define.HyperVVirt}, installed)
}
case "windows": case "windows":
assert.NotContains(t, installed, define.QemuVirt) assert.NotContains(t, installed, define.QemuVirt)
case "linux": case "linux":