Skip to content

QEMU / KVM

Arrow produces a QCOW2 (QEMU Copy-On-Write 2) image for QEMU/KVM environments. This format is compatible with QEMU, KVM, libvirt/virt-manager, and Proxmox VE.


Install QEMU and KVM on your Linux host:

Terminal window
# Debian/Ubuntu
sudo apt install qemu-system-x86 qemu-utils libvirt-daemon-system
# Fedora/RHEL
sudo dnf install qemu-kvm qemu-img libvirt
# Arch
sudo pacman -S qemu-full libvirt

Verify KVM support:

Terminal window
kvm-ok
# or
ls /dev/kvm
Terminal window
qemu-system-x86_64 \
-enable-kvm \
-m 16G \
-smp 4 \
-cpu host \
-bios /usr/share/ovmf/OVMF.fd \
-drive file=kali-arrow-client.qcow2,format=qcow2,if=virtio \
-netdev user,id=net0,hostfwd=tcp::2222-:22 \
-device virtio-net-pci,netdev=net0 \
-device virtio-vga \
-display gtk
FlagPurpose
-enable-kvmUse hardware virtualization (much faster)
-m 16GAllocate 16 GB RAM
-smp 4Allocate 4 CPU cores
-cpu hostPass through host CPU features
-bios OVMF.fdUEFI firmware boot
hostfwd=tcp::2222-:22Forward host port 2222 to VM port 22 (SSH)

For servers without a display:

Terminal window
qemu-system-x86_64 \
-enable-kvm \
-m 16G \
-smp 4 \
-cpu host \
-bios /usr/share/ovmf/OVMF.fd \
-drive file=kali-arrow-client.qcow2,format=qcow2,if=virtio \
-netdev user,id=net0,hostfwd=tcp::2222-:22 \
-device virtio-net-pci,netdev=net0 \
-nographic \
-serial mon:stdio

Then SSH in:

Terminal window
ssh -p 2222 arrow@127.0.0.1

  1. Open virt-manager
  2. Click Create a new virtual machine
  3. Select Import existing disk image
  4. Browse to the .qcow2 file
  5. Set OS type to Linux > Debian 12 (or Generic Linux)
  6. Allocate resources:
    • Memory: 16384 MB
    • CPUs: 4
  7. Configure networking (default NAT or select a bridge)
  8. Check Customize configuration before install
  9. In the configuration window:
    • Overview > Firmware: Select UEFI x86_64: /usr/share/OVMF/OVMF_CODE.fd
  10. Click Begin Installation
SettingMinimumRecommendedHigh Performance
vCPU248
Memory8 GB16 GB32 GB
Disk busvirtiovirtiovirtio
Networkvirtiovirtiovirtio

Upload the QCOW2 image to your Proxmox storage:

Terminal window
# Via SCP to the Proxmox host
scp kali-arrow-client.qcow2 root@proxmox-host:/var/lib/vz/images/
Terminal window
# Create a VM (adjust VMID as needed)
qm create 200 \
--name kali-arrow-client \
--memory 16384 \
--cores 4 \
--bios ovmf \
--machine q35 \
--net0 virtio,bridge=vmbr0 \
--ostype l26 \
--agent enabled=1
# Add EFI disk
qm set 200 --efidisk0 local-lvm:1,format=qcow2
# Import the disk
qm importdisk 200 kali-arrow-client.qcow2 local-lvm
# Attach the imported disk
qm set 200 --scsi0 local-lvm:vm-200-disk-1 \
--scsihw virtio-scsi-single \
--boot order=scsi0
  1. Open the Proxmox Web UI
  2. Select the VM (ID 200)
  3. Click Start
  4. Open the Console to access the VM
Terminal window
qm start 200

IssueSolution
”KVM not available”Enable VT-x/AMD-V in BIOS. Verify with kvm-ok or ls /dev/kvm.
VM boots to UEFI shellEnsure OVMF/UEFI firmware is specified. Install ovmf package if missing.
No network in VMCheck that virtio-net is used and the host bridge/NAT is configured correctly
Slow disk performanceUse if=virtio for the disk and ensure the image is QCOW2 format
Proxmox import failsEnsure the target storage supports QCOW2. Use local-lvm with raw format if needed: qm importdisk 200 image.qcow2 local-lvm --format raw
Password doesn’t workCredentials are generated at build time. Retrieve them from the ARROW Portal under your device’s details page.