From 1e2c0d6284f3198a03ff219aa9172b2a13f66bf1 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 31 Mar 2011 22:10:26 +0000 Subject: [PATCH] * Try to hack around libvirt's stateful use of /etc/libvirt. (Routine operations such as creating VMs modify the contents of /etc/libvirt.) svn path=/nixos/trunk/; revision=26644 --- modules/virtualisation/libvirtd.nix | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/modules/virtualisation/libvirtd.nix b/modules/virtualisation/libvirtd.nix index b9769881059..339d8e1b019 100644 --- a/modules/virtualisation/libvirtd.nix +++ b/modules/virtualisation/libvirtd.nix @@ -63,7 +63,24 @@ in '' mkdir -p /var/log/libvirt/qemu -m 755 rm -f /var/run/libvirtd.pid - ''; + + mkdir -p /var/lib/libvirt -m 700 + mkdir -p /var/lib/libvirt/dnsmasq -m 700 + + # 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 \ + 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 + done + ''; # */ exec = "${pkgs.libvirt}/sbin/libvirtd --daemon --verbose";