diff options
Diffstat (limited to 'nixos/modules/virtualisation/libvirtd.nix')
-rw-r--r-- | nixos/modules/virtualisation/libvirtd.nix | 54 |
1 files changed, 25 insertions, 29 deletions
diff --git a/nixos/modules/virtualisation/libvirtd.nix b/nixos/modules/virtualisation/libvirtd.nix index 16aedbbb185d..67fbb8263b05 100644 --- a/nixos/modules/virtualisation/libvirtd.nix +++ b/nixos/modules/virtualisation/libvirtd.nix @@ -122,18 +122,14 @@ in chmod 755 /var/lib/libvirt chmod 755 /var/lib/libvirt/dnsmasq - # Libvirt unfortunately writes mutable state (such as - # runtime changes to VM, network or filter configurations) - # to /etc. So we can't use environment.etc to make the - # default network and filter definitions available, since - # libvirt will then modify the originals in the Nix store. - # So here we copy them instead. Ugly. - for i in $(cd ${pkgs.libvirt}/etc && echo \ + # Copy default libvirt network config .xml files to /var/lib + # Files modified by the user will not be overwritten + for i in $(cd ${pkgs.libvirt}/var/lib && echo \ libvirt/qemu/networks/*.xml libvirt/qemu/networks/autostart/*.xml \ libvirt/nwfilter/*.xml ); do - mkdir -p /etc/$(dirname $i) -m 755 - cp -fpd ${pkgs.libvirt}/etc/$i /etc/$i + mkdir -p /var/lib/$(dirname $i) -m 755 + cp -npd ${pkgs.libvirt}/var/lib/$i /var/lib/$i done # libvirtd puts the full path of the emulator binary in the machine @@ -166,33 +162,33 @@ in ''; }; - jobs."libvirt-guests" = - { description = "Libvirt Virtual Machines"; + systemd.services."libvirt-guests" = { + description = "Libvirt Virtual Machines"; - wantedBy = [ "multi-user.target" ]; - wants = [ "libvirtd.service" ]; - after = [ "libvirtd.service" ]; + wantedBy = [ "multi-user.target" ]; + wants = [ "libvirtd.service" ]; + after = [ "libvirtd.service" ]; - restartIfChanged = false; + restartIfChanged = false; - path = [ pkgs.gettext pkgs.libvirt pkgs.gawk ]; + path = with pkgs; [ gettext libvirt gawk ]; - preStart = - '' - mkdir -p /var/lock/subsys -m 755 - ${pkgs.libvirt}/etc/rc.d/init.d/libvirt-guests start || true - ''; + preStart = '' + mkdir -p /var/lock/subsys -m 755 + ${pkgs.libvirt}/etc/rc.d/init.d/libvirt-guests start || true + ''; - postStop = - '' - export PATH=${pkgs.gettext}/bin:$PATH - export ON_SHUTDOWN=${cfg.onShutdown} - ${pkgs.libvirt}/etc/rc.d/init.d/libvirt-guests stop - ''; + postStop = '' + export PATH=${pkgs.gettext}/bin:$PATH + export ON_SHUTDOWN=${cfg.onShutdown} + ${pkgs.libvirt}/etc/rc.d/init.d/libvirt-guests stop + ''; - serviceConfig.Type = "oneshot"; - serviceConfig.RemainAfterExit = true; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; }; + }; users.extraGroups.libvirtd.gid = config.ids.gids.libvirtd; |