abiosoft / colima

Container runtimes on macOS (and Linux) with minimal setup
MIT License
19.75k stars 397 forks source link

Running Without KVM? #434

Open Alexhuszagh opened 2 years ago

Alexhuszagh commented 2 years ago

I'm attempting to run Colima on WSL2 to debug an issue using for a controlled development environment. However, this produces an error saying Waiting for the essential requirement 1 of 5: "ssh". Diving deeper, we can see this is an issue with KVM not being supported.

Install Info

Colima was installed on Ubuntu 22.04 in WSL2 (Windows) using Homebrew: brew install colima. The version info is:

colima version 0.4.5
git commit: c0743565c722d9af03bbfd8f75910ac876bf3b56

Output and Logs

Attempting to run colima start produces the following terminal output:

$  colima start --very-verbose
TRAC[0000] cmd ["limactl" "info"]
TRAC[0000] cmd ["limactl" "list" "colima" "--json"]
INFO[0000] starting colima
INFO[0000] runtime: docker
TRAC[0000] cmd ["limactl" "list" "colima" "--json"]
INFO[0000] starting ...                                  context=vm
TRAC[0000] cmd ["limactl" "start" "colima"]
> Using the existing instance "colima"
> [hostagent] Starting QEMU (hint: to watch the boot progress, see "/home/ahusz/.lima/colima/serial.log")
> SSH Local Port: 33449
> [hostagent] Waiting for the essential requirement 1 of 5: "ssh"
> [hostagent] QEMU has exited
> exiting, status={Running:false Degraded:false Exiting:true Errors:[] SSHLocalPort:0} (hint: see "/home/ahusz/.lima/colima/ha.stderr.log")
FATA[0000] error starting vm: error at 'starting': exit status 1

serial.log is empty, however, ha.stderr.log contains the necessary information:

{"level":"debug","msg":"Creating iso file /home/ahusz/.lima/colima/cidata.iso","time":"2022-09-26T10:27:48-05:00"}
{"level":"debug","msg":"Using /tmp/diskfs_iso3681316796 as workspace","time":"2022-09-26T10:27:48-05:00"}
{"level":"debug","msg":"firmware candidates = [/home/ahusz/.local/share/qemu/edk2-x86_64-code.fd /home/linuxbrew/.linuxbrew/share/qemu/edk2-x86_64-code.fd /usr/share/OVMF/OVMF_CODE.fd /usr/share/qemu/ovmf-x86_64-code.bin /usr/share/edk2-ovmf/x64/OVMF_CODE.fd]","time":"2022-09-26T10:27:48-05:00"}
{"level":"debug","msg":"OpenSSH version 8.9.1 detected","time":"2022-09-26T10:27:48-05:00"}
{"level":"debug","msg":"AES accelerator seems available, prioritizing aes128-gcm@openssh.com and aes256-gcm@openssh.com","time":"2022-09-26T10:27:48-05:00"}
{"level":"debug","msg":"Start udp server listening on: 127.0.0.1:56819","time":"2022-09-26T10:27:48-05:00"}
{"level":"info","msg":"Starting QEMU (hint: to watch the boot progress, see \"/home/ahusz/.lima/colima/serial.log\")","time":"2022-09-26T10:27:48-05:00"}
{"level":"debug","msg":"Start tcp server listening on: 127.0.0.1:36759","time":"2022-09-26T10:27:48-05:00"}
{"level":"debug","msg":"qCmd.Args: [/home/linuxbrew/.linuxbrew/bin/qemu-system-x86_64 -m 2048 -cpu host -machine q35,accel=kvm -smp 2,sockets=1,cores=2,threads=1 -drive if=pflash,format=raw,readonly=on,file=/home/linuxbrew/.linuxbrew/share/qemu/edk2-x86_64-code.fd -boot order=d,splash-time=0,menu=on -drive file=/home/ahusz/.lima/colima/basedisk,media=cdrom,readonly=on -drive file=/home/ahusz/.lima/colima/diffdisk,if=virtio -cdrom /home/ahusz/.lima/colima/cidata.iso -netdev user,id=net0,net=192.168.5.0/24,dhcpstart=192.168.5.15,hostfwd=tcp:127.0.0.1:33449-:22 -device virtio-net-pci,netdev=net0,mac=52:55:55:dc:a1:cc -device virtio-rng-pci -display none -device virtio-vga -device virtio-keyboard-pci -device virtio-mouse-pci -device qemu-xhci,id=usb-bus -parallel none -chardev socket,id=char-serial,path=/home/ahusz/.lima/colima/serial.sock,server=on,wait=off,logfile=/home/ahusz/.lima/colima/serial.log -serial chardev:char-serial -chardev socket,id=char-qmp,path=/home/ahusz/.lima/colima/qmp.sock,server=on,wait=off -qmp chardev:char-qmp -name lima-colima -pidfile /home/ahusz/.lima/colima/qemu.pid]","time":"2022-09-26T10:27:48-05:00"}
{"level":"info","msg":"Waiting for the essential requirement 1 of 5: \"ssh\"","time":"2022-09-26T10:27:48-05:00"}
{"level":"debug","msg":"executing script \"ssh\"","time":"2022-09-26T10:27:48-05:00"}
{"level":"debug","msg":"executing ssh for script \"ssh\": /usr/bin/ssh [ssh -F /dev/null -o IdentityFile=\"/home/ahusz/.lima/_config/user\" -o IdentityFile=\"/home/ahusz/.ssh/git\" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o NoHostAuthenticationForLocalhost=yes -o GSSAPIAuthentication=no -o PreferredAuthentications=publickey -o Compression=no -o BatchMode=yes -o IdentitiesOnly=yes -o Ciphers=\"^aes128-gcm@openssh.com,aes256-gcm@openssh.com\" -o User=ahusz -o ControlMaster=auto -o ControlPath=\"/home/ahusz/.lima/colima/ssh.sock\" -o ControlPersist=5m -p 33449 127.0.0.1 -- /bin/bash]","time":"2022-09-26T10:27:48-05:00"}
{"level":"debug","msg":"stdout=\"\", stderr=\"ssh: connect to host 127.0.0.1 port 33449: Connection refused\\r\\n\", err=failed to execute script \"ssh\": stdout=\"\", stderr=\"ssh: connect to host 127.0.0.1 port 33449: Connection refused\\r\\n\": exit status 255","time":"2022-09-26T10:27:48-05:00"}
{"level":"debug","msg":"qemu[stderr]: Could not access KVM kernel module: No such file or directory","time":"2022-09-26T10:27:48-05:00"}
{"level":"debug","msg":"qemu[stderr]: qemu-system-x86_64: failed to initialize kvm: No such file or directory","time":"2022-09-26T10:27:48-05:00"}
{"error":"exit status 1","level":"info","msg":"QEMU has exited","time":"2022-09-26T10:27:48-05:00"}

The key lines seem to be:

{"level":"debug","msg":"stdout=\"\", stderr=\"ssh: connect to host 127.0.0.1 port 33449: Connection refused\\r\\n\", err=failed to execute script \"ssh\": stdout=\"\", stderr=\"ssh: connect to host 127.0.0.1 port 33449: Connection refused\\r\\n\": exit status 255","time":"2022-09-26T10:27:48-05:00"}
{"level":"debug","msg":"qemu[stderr]: Could not access KVM kernel module: No such file or directory","time":"2022-09-26T10:27:48-05:00"}
{"level":"debug","msg":"qemu[stderr]: qemu-system-x86_64: failed to initialize kvm: No such file or directory","time":"2022-09-26T10:27:48-05:00"}

After ensuring the necessary packages for KVM were installed, we can see that KVM cannot be used currently:

$ sudo apt -y install bridge-utils cpu-checker libvirt-clients libvirt-daemon qemu qemu-kvm
$ kvm-ok
INFO: Your CPU does not support KVM extensions
INFO: For more detailed results, you should run this as root
HINT:   sudo /usr/sbin/kvm-ok

Additional Info

I'm running Windows 10 Home, which cannot installed the Hyper-V role, which seems to be necessary for KVM support on WSL2 for nested virtualization, and it seems it's a bit complicated (requiring insider builds and compiling your own kernel), so it's more hassle than it's worth for me with my own Linux laptop.

Summary

It would be nice, however, to be able to disable KVM support if possible so I can run Colima frictionless on WSL2, even at a major performance hit.

abiosoft commented 2 years ago

It is actually a requirement by Qemu which Colima (and Lima) utilises.

Windows support might be possible in the near future https://github.com/lima-vm/lima/issues/909.

You can give https://rancherdesktop.io a try but it also utilises WSL2 on Windows.

Alexhuszagh commented 2 years ago

Thanks for the quick feedback, please close this if you wish (I understand as well if you wish to keep this open and close once the upstream issue is done). I'll use my native Linux machine in the meantime. I've used Rancher but for this specific scenario, I need to use Colima (although once these issues are resolved).

ipfans commented 2 years ago

Another feature that is important to macOS users. lima will support Virtualization.framework to better performance x86_64 env from the next release. Maybe colima could also let the user choose which one to use. The good news is lima released a new beta version that supports Virtualization.framework

abiosoft commented 2 years ago

It's already being implemented in Colima 🤓 and will be part of v0.5.0 release.

That being said, I don't think virtualization.framework support changes anything for this issue.