Table of Contents

libvirt and qemu

If, for some reason, our virtual solutions VirtualBox and Level2 cloud image do not meet your needs, you can use the qemu and/or Libvirt emulator.

Please note that the images used in qemu and/or Libvirt are slightly different from those available for download in the corresponding section. You can get the image by contacting us and specifying the version you need

In this short guide, we assume that you already have qemu installed (qemu-system-x86_64 as well as the related qemu-img), util-linux, kvm_intel/kvm_amd module is loaded and virt-manager (with daemons up and running) if desired. Also, any network related configurations will not be covered here. The example will use a bridge as the easiest way to get the system accessible. Network settings are individual and left to your discretion, all documentation is available online

We'll cover both options, but the commonality between the two is the acquisition and preparation of disk images for data and system. Put this script next to the image file, the script will automatically select the latest version and create two image files for the data and the system. You can also specify the desired size of the data disk by adding the size as an argument to the script ./mkdisks.sh 16G

You will need sudo privileges to execute this script, so use it as superuser or set the appropriate bits to related executables

mkdisks.sh
#!/bin/bash
IMG=$(find . -regextype posix-extended -regex "\./[0-9]+\.[0-9]+\.[0-9]+\.[0-9]{4,5}\.img" | sort -t. -k1,1n -k2,2n -k3,3n -k4,4n | tail -n 1)
TARGET_IMG_DISK="./root.img"
TARGET_DATA_DISK="./data.img"
TARGET_DATA_DISK_SIZE="8G"
 
if [ ! -z $1 ]; then
    TARGET_DATA_DISK_SIZE=$1
fi
 
qemu-img create -f raw $TARGET_DATA_DISK $TARGET_DATA_DISK_SIZE
fdisk $TARGET_DATA_DISK <<EOF
g
n
 
 
 
p
w
EOF
 
LOOP=$(sudo losetup -f)
sudo losetup -fP $TARGET_DATA_DISK
sudo mkfs.ext4 "${LOOP}p1"
sudo losetup -d ${LOOP}
 
qemu-img convert -c -f raw -O qcow2 $TARGET_DATA_DISK ${TARGET_DATA_DISK}.qcow2
rm -rf ${TARGET_DATA_DISK}
mv ${TARGET_DATA_DISK}.qcow2 ${TARGET_DATA_DISK}
cp $IMG $TARGET_IMG_DISK
U=$SUDO_USER
if [ -z $U ]; then
    U=$(whoami)
fi
sudo chown $U:$U $TARGET_IMG_DISK
sudo chown $U:$U $TARGET_DATA_DISK

and we're ready to go

Qemu native

Here is a starting point to run WebHMI in qemu

qemu.sh
#!/bin/bash
BR="virbr0"
if [ ! -z $1 ]; then
    BR=$1
fi
qemu-system-x86_64 -m 128M -smp 1 -enable-kvm \
-device ide-hd,drive=d0,bus=ide.0 \
-device ide-hd,drive=d1,bus=ide.1 \
-drive file=root.img,id=d0,if=none,bus=0,unit=0,format=raw \
-drive file=data.img,id=d1,if=none,bus=1,unit=0,format=qcow2 \
-netdev bridge,id=net0,br="$BR" \
-device virtio-net-pci,netdev=net0 \
-netdev bridge,id=net1,br="$BR" \
-device virtio-net-pci,netdev=net1 \
-nographic

In this example, virbr0 is a bridge that is usually pre configured by virt-manager. You may use your own or pass it as an argument while running. For the first launch, it is recommended to use two interfaces in the WebHMI, since the first one will always be assigned as 192.168.1.1, regardless of the configuration of the dhcp server. But the second interface is configured as a dhcp client and receives the address according to the settings of your server. Make sure that your /etc/qemu/bridge.conf file contains the line allow virbr0 or allow all

We also recommend running WebHMI from terminal emulators like tmux or in the background once you are confident with the address settings

Qemu via libvirt

Virt-manager is a user-friendly graphical shell for managing virtual machines. The process of creating and launching is shown in the video, here are the key points to pay attention to:

Once you have access to the web interface, configure your interfaces properly and remove redundant ones if necessary For reboot persistent you can create a shell script that will run an instance in tmux

#!/bin/bash
tmux new -d -s wh 'cd /path/to/your/folder/ && ./qemu.sh'

and place it to your crontab @reboot sleep 5 && /path/to/your/script.sh or rc.local or create a systemd/sysv service