Я пішов шляхом libvirt/QEMU:
virtualisation.libvirtd.enable = true;
virtualisation.libvirtd.qemu = {
swtpm.enable = true;
vhostUserPackages = [ pkgs.virtiofsd ];
};
virtualisation.spiceUSBRedirection.enable = true;
users.groups.libvirtd.members = [ "michael" ];
users.groups.kvm.members = [ "michael" ];
environment.systemPackages = with pkgs; [
qemu
libvirt
virt-viewer
virtiofsd
];
programs.virt-manager = {
enable = true;
};
Після switch перевіряємо статус:
sudo systemctl status libvirtd
та чи додано користувача до груп kvm та libvirtd:
groups
Запускаємо virt-manager.
На стороні гостя:
apt install spice-vdagent
Переконаємося, що обидва агенти запущені: як для root, так і для користувача:
ps aux | grep vdagent
Має бути щось на кшталт:
$ ps aux | grep vdagent
root 1590 0.0 0.0 92600 3484 ? Ssl 15:41 0:00 /usr/sbin/spice-vdagentd
root 1685 0.0 0.0 2436 1500 ? Ss 15:41 0:00 runsv spice-vdagentd
root 2039 0.0 0.0 92600 6520 ? Sl 15:41 0:00 /usr/sbin/spice-vdagentd -x
michael 2882 0.0 0.2 343620 21012 ? Ssl 15:42 0:00 /usr/bin/spice-vdagent
michael 22270 0.0 0.0 6556 2420 pts/0 S+ 20:16 0:00 grep vdagent
У мене runsv, бо я чомусь вирішив, що краще на Devuan-і вживати runit, а не sysvinit.
Тому довелося окремо прописувати і вмикати run-файл для runit:
mkdir -p /etc/sv/spice-vdagentd
cat > /etc/sv/spice-vdagentd/run << 'EOF'
#!/bin/sh
exec /usr/sbin/spice-vdagentd -x
EOF
chmod +x /etc/sv/spice-vdagentd/run
ln -s /etc/sv/spice-vdagentd /etc/runit/runsvdir/default/
Вимикаємо віртуалку та редагуємо її конфіг:
virsh -c qemu:///system shutdown 'Devuan Excalibur'
virsh -c qemu:///system edit 'Devuan Excalibur'
Розміщуємо поряд з <devices>:
<memoryBacking>
<source type='memfd'/>
<access mode='shared'/>
</memoryBacking>
Всередині <devices> (я роблю спільною теку /d на хості, d-share тут просто позначка):
<filesystem type='mount' accessmode='passthrough'>
<driver type='virtiofs'/>
<source dir='/d'/>
<target dir='d-share'/>
</filesystem>
Стартуємо:
virsh -c qemu:///system start 'Devuan Excalibur'
На стороні гостя:
mkdir -p /mnt/d
mount -t virtiofs d-share /mnt/d
За шляхом /mnt/d має бути ваша спільна тека.
Спочатку встановлюємо пускач:
environment.systemPackages = [
pkgs.appimage-run
];
Потім запускаємо:
appimage-run viber.appimage