🏠

NixOS

Зміст:
  1. Віртуалізація Devuan на NixOS
    1. Буфер обміну
    2. Спільні теки
  2. Запуск Viber

Віртуалізація Devuan на NixOS

Я пішов шляхом 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 має бути ваша спільна тека.

Запуск Viber

Спочатку встановлюємо пускач:

  environment.systemPackages = [
    pkgs.appimage-run
  ];

Потім запускаємо:

appimage-run viber.appimage


Побудовано за допомогою Eleventy