diff options
author | Paul Holzinger <pholzing@redhat.com> | 2022-03-23 18:22:18 +0100 |
---|---|---|
committer | Paul Holzinger <pholzing@redhat.com> | 2022-03-23 19:10:51 +0100 |
commit | 59dc70bb42725e18782c2791987e58f466326ceb (patch) | |
tree | 2bf3a7ee6a64c27940f8dde75908c466ae28c124 /pkg | |
parent | f049cba47c31d31a4a8ed9a9180f0e847be3411c (diff) | |
download | podman-59dc70bb42725e18782c2791987e58f466326ceb.tar.gz podman-59dc70bb42725e18782c2791987e58f466326ceb.tar.bz2 podman-59dc70bb42725e18782c2791987e58f466326ceb.zip |
podman machine start: lookup qemu path again if not found
We store the full path to qemu in the machine config. When the path
changes on the host the machine can longer be started. To fix it we get
the path again when we fail to start the machine due the missing binary.
We want to store and use the full path first because otherwise existing
machines can break when the qemu version changed.
[NO NEW TESTS NEEDED] We still have no machine tests.
Fixes #13394
Signed-off-by: Paul Holzinger <pholzing@redhat.com>
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/machine/qemu/machine.go | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/pkg/machine/qemu/machine.go b/pkg/machine/qemu/machine.go index 1bd9fb51b..89451cb44 100644 --- a/pkg/machine/qemu/machine.go +++ b/pkg/machine/qemu/machine.go @@ -98,7 +98,7 @@ func (p *Provider) NewMachine(opts machine.InitOptions) (machine.VM, error) { return nil, err } - cmd := append([]string{execPath}) + cmd := []string{execPath} // Add memory cmd = append(cmd, []string{"-m", strconv.Itoa(int(vm.Memory))}...) // Add cpus @@ -436,7 +436,23 @@ func (v *MachineVM) Start(name string, _ machine.StartOptions) error { _, err = os.StartProcess(v.CmdLine[0], cmd, attr) if err != nil { - return err + // check if qemu was not found + if !errors.Is(err, os.ErrNotExist) { + return err + } + // lookup qemu again maybe the path was changed, https://github.com/containers/podman/issues/13394 + cfg, err := config.Default() + if err != nil { + return err + } + cmd[0], err = cfg.FindHelperBinary(QemuCommand, true) + if err != nil { + return err + } + _, err = os.StartProcess(cmd[0], cmd, attr) + if err != nil { + return err + } } fmt.Println("Waiting for VM ...") socketPath, err := getRuntimeDir() |