look for firmware based on the path of qemu binary

this allows users to use a qemu installation that is
not in the default /usr/local/bin location

a user can configure engine.helper_binaries_dir key
or update PATH to include the installation location
to find the qemu binary

[NO NEW TESTS NEEDED]

Signed-off-by: Anjan Nath <kaludios@gmail.com>
This commit is contained in:
Anjan Nath
2022-05-18 22:43:56 +05:30
parent 12964c7b93
commit 8fbb933f5a

View File

@ -4,6 +4,8 @@ import (
"os"
"os/exec"
"path/filepath"
"github.com/containers/common/pkg/config"
)
var (
@ -37,6 +39,22 @@ func getOvmfDir(imagePath, vmName string) string {
return filepath.Join(filepath.Dir(imagePath), vmName+"_ovmf_vars.fd")
}
/*
* When QEmu is installed in a non-default location in the system
* we can use the qemu-system-* binary path to figure the install
* location for Qemu and use it to look for edk2-code-fd
*/
func getEdk2CodeFdPathFromQemuBinaryPath() string {
cfg, err := config.Default()
if err == nil {
execPath, err := cfg.FindHelperBinary(QemuCommand, true)
if err == nil {
return filepath.Clean(filepath.Join(filepath.Dir(execPath), "..", "share", "qemu"))
}
}
return ""
}
/*
* QEmu can be installed in multiple locations on MacOS, especially on
* Apple Silicon systems. A build from source will likely install it in
@ -45,6 +63,7 @@ func getOvmfDir(imagePath, vmName string) string {
*/
func getEdk2CodeFd(name string) string {
dirs := []string{
getEdk2CodeFdPathFromQemuBinaryPath(),
"/opt/homebrew/opt/podman/libexec/share/qemu",
"/usr/local/share/qemu",
"/opt/homebrew/share/qemu",