How to run kvm virtual guests using systemctl so they automatically start on boot and stop during shutdown. These will be quick notes, if anything needs more explanation just leave a comment.
Virtual switch for the virtual machines - vde2 + brctl
apt-get install bridge-utils qemu-system-x86 vde2 uml-utilities socat net-tools
edit /etc/network/interfaces
auto tap9
iface tap9 inet static
address 0.0.0.0
tunctl_user uml-net
auto br0
iface br0 inet dhcp
bridge_ports eth0 tap9
bridge_fd 0
bridge_stp off
create /etc/systemd/system/vde_switch_internal.service
[Unit] Description=vde switch for internal connections After=networking.service Wants=networking.service [Service] Type=forking PIDFile=/run/vde_switch/vde_c.pid Restart=always RestartSec=3s User=uml-net ExecStartPre=+/usr/bin/install -o uml-net -g uml-net -d /run/vde_switch ExecStart=/usr/bin/vde_switch -sock /run/vde_switch/vde_c.ctl -tap tap9 --daemon --pidfile /run/vde_switch/vde_c.pid --mode 0770 [Install] WantedBy=multi-user.target
then systemctl start vde_switch_internal
create /usr/bin/kvm-stop-guest
#!/bin/bash if [ "$1" == "" ]; then echo need one argument - guest name exit 1 fi MON_FILE="/run/qemu-monitor-socket_$1" if [ ! -e $MON_FILE ]; then echo $1 not running? $MON_FILE not present exit 0 fi echo shutting down $1 via $MON_FILE echo "system_powerdown" | socat - unix-connect:$MON_FILE while [ -e $MON_FILE ]; do echo waiting for termination sleep 5 done
lvcreate -L 10G -n HNAME vg0 disk image using LVM or
dd if=/dev/zero of=/srv/HNAME.img bs=1G count=10 disk image using file.
create /etc/systemd/system/kvm-HNAME.service, replace HNAME, in service name and
2x inside service, for name/hostname of the guest machine
[Unit]
Description=kvm machine
After=network-online.target
Wants=network-online.target
[Service]
Environment=SN=HNAME
Environment=DISKFN=/dev/vg0/HNAME
Environment=MACADDR=52:54:00:00:00:01
Environment=SPORT=6900
Environment=SPW=SUPERSECRET
Environment=BOOTCDIMG=/var/tmp/debian-11.2.0-amd64-netinst.iso
Type=simple
Restart=no
User=root
ExecStart=kvm -drive file=${DISKFN},format=raw,index=0,media=disk -m 1024 -smp 2 -cpu host -name ${SN},process=${SN} -machine type=pc,accel=kvm -monitor unix:/run/qemu-monitor-socket_${SN},server,nowait -net nic,macaddr=${MACADDR} -net vde,sock=/run/vde_switch/vde_c.ctl -vga qxl -spice port=${SPORT},password=${SPW} -display none -boot d -cdrom ${BOOTCDIMG}
ExecStop=/usr/bin/kvm-stop-guest ${SN}
TimeoutStopSec=60s
[Install]
WantedBy=multi-user.target
systemctl start kvm-HNAME and connect to the machine using
spicy --uri spice://localhost:6900
once system is installed, remove -boot d -cdrom ${BOOTCDIMG} from service
file, reload systemctl and enable both vde_switch_internal and
kvm-HNAME to start on system start up.