| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							| 
									
										
										
										
											2011-02-25 15:07:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | with lib; | 
					
						
							| 
									
										
										
										
											2011-02-25 15:07:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | let | 
					
						
							| 
									
										
										
										
											2011-02-25 15:07:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  |   cfg = config.virtualisation.libvirtd; | 
					
						
							| 
									
										
										
										
											2014-06-12 15:16:38 +02:00
										 |  |  |   vswitch = config.virtualisation.vswitch; | 
					
						
							| 
									
										
										
										
											2013-08-15 21:50:16 +02:00
										 |  |  |   configFile = pkgs.writeText "libvirtd.conf" ''
 | 
					
						
							|  |  |  |     unix_sock_group = "libvirtd" | 
					
						
							|  |  |  |     unix_sock_rw_perms = "0770" | 
					
						
							|  |  |  |     auth_unix_ro = "none" | 
					
						
							|  |  |  |     auth_unix_rw = "none" | 
					
						
							|  |  |  |     ${cfg.extraConfig} | 
					
						
							|  |  |  |   '';
 | 
					
						
							| 
									
										
										
										
											2017-02-21 13:26:23 +01:00
										 |  |  |   qemuConfigFile = pkgs.writeText "qemu.conf" ''
 | 
					
						
							| 
									
										
										
										
											2017-05-01 17:21:26 +02:00
										 |  |  |     ${optionalString cfg.qemuOvmf ''
 | 
					
						
							| 
									
										
										
										
											2017-08-02 01:18:57 +00:00
										 |  |  |       nvram = ["/run/libvirt/nix-ovmf/OVMF_CODE.fd:/run/libvirt/nix-ovmf/OVMF_VARS.fd"] | 
					
						
							| 
									
										
										
										
											2017-05-01 17:21:26 +02:00
										 |  |  |     ''}
 | 
					
						
							| 
									
										
										
										
											2018-03-18 00:22:53 +01:00
										 |  |  |     ${optionalString (!cfg.qemuRunAsRoot) ''
 | 
					
						
							|  |  |  |       user = "qemu-libvirtd" | 
					
						
							|  |  |  |       group = "qemu-libvirtd" | 
					
						
							|  |  |  |     ''}
 | 
					
						
							| 
									
										
										
										
											2017-02-21 13:26:23 +01:00
										 |  |  |     ${cfg.qemuVerbatimConfig} | 
					
						
							|  |  |  |   '';
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |   dirName = "libvirt"; | 
					
						
							|  |  |  |   subDirs = list: [ dirName ] ++ map (e: "${dirName}/${e}") list; | 
					
						
							| 
									
										
										
										
											2011-02-25 15:07:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-27 13:10:05 +02:00
										 |  |  | in { | 
					
						
							| 
									
										
										
										
											2011-02-25 15:07:52 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   ###### interface | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |   options.virtualisation.libvirtd = { | 
					
						
							| 
									
										
										
										
											2011-02-25 15:07:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |     enable = mkOption { | 
					
						
							| 
									
										
										
										
											2016-06-27 13:10:05 +02:00
										 |  |  |       type = types.bool; | 
					
						
							|  |  |  |       default = false; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         This option enables libvirtd, a daemon that manages | 
					
						
							|  |  |  |         virtual machines. Users in the "libvirtd" group can interact with | 
					
						
							|  |  |  |         the daemon (e.g. to start or stop VMs) using the | 
					
						
							|  |  |  |         <command>virsh</command> command line tool, among others. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2011-02-25 15:07:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |     qemuPackage = mkOption { | 
					
						
							| 
									
										
										
										
											2017-12-06 04:33:45 +00:00
										 |  |  |       type = types.package; | 
					
						
							| 
									
										
										
										
											2017-12-06 11:07:41 +00:00
										 |  |  |       default = pkgs.qemu; | 
					
						
							| 
									
										
										
										
											2017-12-06 04:33:45 +00:00
										 |  |  |       description = ''
 | 
					
						
							| 
									
										
										
										
											2017-12-06 11:07:41 +00:00
										 |  |  |         Qemu package to use with libvirt. | 
					
						
							|  |  |  |         `pkgs.qemu` can emulate alien architectures (e.g. aarch64 on x86) | 
					
						
							|  |  |  |         `pkgs.qemu_kvm` saves disk space allowing to emulate only host architectures. | 
					
						
							| 
									
										
										
										
											2016-06-27 13:10:05 +02:00
										 |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2013-08-15 21:50:16 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |     extraConfig = mkOption { | 
					
						
							| 
									
										
										
										
											2016-06-27 13:10:05 +02:00
										 |  |  |       type = types.lines; | 
					
						
							|  |  |  |       default = ""; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Extra contents appended to the libvirtd configuration file, | 
					
						
							|  |  |  |         libvirtd.conf. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2015-05-20 09:51:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |     qemuRunAsRoot = mkOption { | 
					
						
							| 
									
										
										
										
											2018-03-18 00:22:53 +01:00
										 |  |  |       type = types.bool; | 
					
						
							|  |  |  |       default = true; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         If true,  libvirtd runs qemu as root. | 
					
						
							|  |  |  |         If false, libvirtd runs qemu as unprivileged user qemu-libvirtd. | 
					
						
							|  |  |  |         Changing this option to false may cause file permission issues | 
					
						
							|  |  |  |         for existing guests. To fix these, manually change ownership | 
					
						
							|  |  |  |         of affected files in /var/lib/libvirt/qemu to qemu-libvirtd. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |     qemuVerbatimConfig = mkOption { | 
					
						
							| 
									
										
										
										
											2017-02-21 13:26:23 +01:00
										 |  |  |       type = types.lines; | 
					
						
							|  |  |  |       default = ''
 | 
					
						
							|  |  |  |         namespaces = [] | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Contents written to the qemu configuration file, qemu.conf. | 
					
						
							|  |  |  |         Make sure to include a proper namespace configuration when | 
					
						
							|  |  |  |         supplying custom configuration. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |     qemuOvmf = mkOption { | 
					
						
							| 
									
										
										
										
											2017-05-01 17:21:26 +02:00
										 |  |  |       type = types.bool; | 
					
						
							|  |  |  |       default = true; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Allows libvirtd to take advantage of OVMF when creating new | 
					
						
							|  |  |  |         QEMU VMs with UEFI boot. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |     extraOptions = mkOption { | 
					
						
							| 
									
										
										
										
											2016-06-27 13:10:05 +02:00
										 |  |  |       type = types.listOf types.str; | 
					
						
							|  |  |  |       default = [ ]; | 
					
						
							|  |  |  |       example = [ "--verbose" ]; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Extra command line arguments passed to libvirtd on startup. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2014-06-16 16:45:08 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-23 17:47:09 +02:00
										 |  |  |     onBoot = mkOption { | 
					
						
							|  |  |  |       type = types.enum ["start" "ignore" ]; | 
					
						
							|  |  |  |       default = "start"; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Specifies the action to be done to / on the guests when the host boots. | 
					
						
							|  |  |  |         The "start" option starts all guests that were running prior to shutdown | 
					
						
							|  |  |  |         regardless of their autostart settings. The "ignore" option will not | 
					
						
							|  |  |  |         start the formally running guest on boot. However, any guest marked as | 
					
						
							|  |  |  |         autostart will still be automatically started by libvirtd. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |     onShutdown = mkOption { | 
					
						
							| 
									
										
										
										
											2016-06-27 13:10:05 +02:00
										 |  |  |       type = types.enum ["shutdown" "suspend" ]; | 
					
						
							|  |  |  |       default = "suspend"; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         When shutting down / restarting the host what method should | 
					
						
							|  |  |  |         be used to gracefully halt the guests. Setting to "shutdown" | 
					
						
							|  |  |  |         will cause an ACPI shutdown of each guest. "suspend" will | 
					
						
							|  |  |  |         attempt to save the state of the guests ready to restore on boot. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2014-06-16 16:45:08 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |     allowedBridges = mkOption { | 
					
						
							|  |  |  |       type = types.listOf types.str; | 
					
						
							|  |  |  |       default = [ "virbr0" ]; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         List of bridge devices that can be used by qemu:///session | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-25 15:07:52 +00:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ###### implementation | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf cfg.enable { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |     environment = { | 
					
						
							|  |  |  |       # this file is expected in /etc/qemu and not sysconfdir (/var/lib) | 
					
						
							|  |  |  |       etc."qemu/bridge.conf".text = lib.concatMapStringsSep "\n" (e: | 
					
						
							|  |  |  |         "allow ${e}") cfg.allowedBridges; | 
					
						
							|  |  |  |       systemPackages = with pkgs; [ libvirt libressl.nc cfg.qemuPackage ]; | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2011-02-25 15:07:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-15 10:52:44 +00:00
										 |  |  |     boot.kernelModules = [ "tun" ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-30 01:58:35 +02:00
										 |  |  |     users.groups.libvirtd.gid = config.ids.gids.libvirtd; | 
					
						
							| 
									
										
										
										
											2016-06-27 13:10:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-18 00:22:53 +01:00
										 |  |  |     # libvirtd runs qemu as this user and group by default | 
					
						
							|  |  |  |     users.extraGroups.qemu-libvirtd.gid = config.ids.gids.qemu-libvirtd; | 
					
						
							|  |  |  |     users.extraUsers.qemu-libvirtd = { | 
					
						
							|  |  |  |       uid = config.ids.uids.qemu-libvirtd; | 
					
						
							|  |  |  |       isNormalUser = false; | 
					
						
							|  |  |  |       group = "qemu-libvirtd"; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |     security.wrappers.qemu-bridge-helper = { | 
					
						
							|  |  |  |       source = "/run/${dirName}/nix-helpers/qemu-bridge-helper"; | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2016-06-27 13:10:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |     systemd.packages = [ pkgs.libvirt ]; | 
					
						
							| 
									
										
										
										
											2016-06-27 13:10:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |     systemd.services.libvirtd-config = { | 
					
						
							|  |  |  |       description = "Libvirt Virtual Machine Management Daemon - configuration"; | 
					
						
							|  |  |  |       script = ''
 | 
					
						
							| 
									
										
										
										
											2016-06-27 13:10:05 +02:00
										 |  |  |         # 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 /var/lib/$(dirname $i) -m 755 | 
					
						
							|  |  |  |             cp -npd ${pkgs.libvirt}/var/lib/$i /var/lib/$i | 
					
						
							|  |  |  |         done | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 13:26:23 +01:00
										 |  |  |         # Copy generated qemu config to libvirt directory | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |         cp -f ${qemuConfigFile} /var/lib/${dirName}/qemu.conf | 
					
						
							| 
									
										
										
										
											2017-02-21 13:26:23 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-02 01:18:57 +00:00
										 |  |  |         # stable (not GC'able as in /nix/store) paths for using in <emulator> section of xml configs | 
					
						
							| 
									
										
										
										
											2017-12-06 04:33:45 +00:00
										 |  |  |         for emulator in ${pkgs.libvirt}/libexec/libvirt_lxc ${cfg.qemuPackage}/bin/qemu-kvm ${cfg.qemuPackage}/bin/qemu-system-*; do | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |           ln -s --force "$emulator" /run/${dirName}/nix-emulators/ | 
					
						
							|  |  |  |         done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for helper in libexec/qemu-bridge-helper bin/qemu-pr-helper; do | 
					
						
							|  |  |  |           ln -s --force ${cfg.qemuPackage}/$helper /run/${dirName}/nix-helpers/ | 
					
						
							| 
									
										
										
										
											2017-12-06 04:33:45 +00:00
										 |  |  |         done | 
					
						
							| 
									
										
										
										
											2017-08-02 01:18:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         ${optionalString cfg.qemuOvmf ''
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |           ln -s --force ${pkgs.OVMF.fd}/FV/OVMF_CODE.fd /run/${dirName}/nix-ovmf/ | 
					
						
							|  |  |  |           ln -s --force ${pkgs.OVMF.fd}/FV/OVMF_VARS.fd /run/${dirName}/nix-ovmf/ | 
					
						
							| 
									
										
										
										
											2017-08-02 01:18:57 +00:00
										 |  |  |         ''}
 | 
					
						
							|  |  |  |       '';
 | 
					
						
							| 
									
										
										
										
											2016-06-27 13:10:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |       serviceConfig = { | 
					
						
							|  |  |  |         Type = "oneshot"; | 
					
						
							|  |  |  |         RuntimeDirectoryPreserve = "yes"; | 
					
						
							|  |  |  |         LogsDirectory = subDirs [ "qemu" ]; | 
					
						
							|  |  |  |         RuntimeDirectory = subDirs [ "nix-emulators" "nix-helpers" "nix-ovmf" ]; | 
					
						
							|  |  |  |         StateDirectory = subDirs [ "dnsmasq" ]; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     systemd.services.libvirtd = { | 
					
						
							|  |  |  |       description = "Libvirt Virtual Machine Management Daemon"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       wantedBy = [ "multi-user.target" ]; | 
					
						
							|  |  |  |       requires = [ "libvirtd-config.service" ]; | 
					
						
							|  |  |  |       after = [ "systemd-udev-settle.service" "libvirtd-config.service" ] | 
					
						
							|  |  |  |               ++ optional vswitch.enable "vswitchd.service"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       environment.LIBVIRTD_ARGS = ''--config "${configFile}" ${concatStringsSep " " cfg.extraOptions}''; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       path = [ cfg.qemuPackage ] # libvirtd requires qemu-img to manage disk images | 
					
						
							|  |  |  |              ++ optional vswitch.enable vswitch.package; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-27 13:10:05 +02:00
										 |  |  |       serviceConfig = { | 
					
						
							|  |  |  |         Type = "notify"; | 
					
						
							|  |  |  |         KillMode = "process"; # when stopping, leave the VMs alone | 
					
						
							| 
									
										
										
										
											2017-08-10 11:34:32 +00:00
										 |  |  |         Restart = "no"; | 
					
						
							| 
									
										
										
										
											2011-02-25 15:07:52 +00:00
										 |  |  |       }; | 
					
						
							| 
									
										
										
										
											2017-08-10 11:34:32 +00:00
										 |  |  |       restartIfChanged = false; | 
					
						
							| 
									
										
										
										
											2016-06-27 13:10:05 +02:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2011-02-25 15:07:52 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-25 14:59:01 +01:00
										 |  |  |     systemd.services.libvirt-guests = { | 
					
						
							|  |  |  |       wantedBy = [ "multi-user.target" ]; | 
					
						
							|  |  |  |       path = with pkgs; [ coreutils libvirt gawk ]; | 
					
						
							| 
									
										
										
										
											2017-05-29 18:03:07 +02:00
										 |  |  |       restartIfChanged = false; | 
					
						
							| 
									
										
										
										
											2018-10-31 00:01:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-23 17:47:09 +02:00
										 |  |  |       environment.ON_BOOT = "${cfg.onBoot}"; | 
					
						
							| 
									
										
										
										
											2018-10-31 00:01:00 +01:00
										 |  |  |       environment.ON_SHUTDOWN = "${cfg.onShutdown}"; | 
					
						
							| 
									
										
										
										
											2017-03-25 14:59:01 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-27 13:02:47 +02:00
										 |  |  |     systemd.sockets.virtlogd = { | 
					
						
							|  |  |  |       description = "Virtual machine log manager socket"; | 
					
						
							|  |  |  |       wantedBy = [ "sockets.target" ]; | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |       listenStreams = [ "/run/${dirName}/virtlogd-sock" ]; | 
					
						
							| 
									
										
										
										
											2016-06-27 13:02:47 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     systemd.services.virtlogd = { | 
					
						
							|  |  |  |       description = "Virtual machine log manager"; | 
					
						
							|  |  |  |       serviceConfig.ExecStart = "@${pkgs.libvirt}/sbin/virtlogd virtlogd"; | 
					
						
							| 
									
										
										
										
											2017-08-10 11:34:32 +00:00
										 |  |  |       restartIfChanged = false; | 
					
						
							| 
									
										
										
										
											2016-06-27 13:02:47 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     systemd.sockets.virtlockd = { | 
					
						
							|  |  |  |       description = "Virtual machine lock manager socket"; | 
					
						
							|  |  |  |       wantedBy = [ "sockets.target" ]; | 
					
						
							| 
									
										
										
										
											2019-01-02 21:35:58 +08:00
										 |  |  |       listenStreams = [ "/run/${dirName}/virtlockd-sock" ]; | 
					
						
							| 
									
										
										
										
											2016-06-27 13:02:47 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     systemd.services.virtlockd = { | 
					
						
							|  |  |  |       description = "Virtual machine lock manager"; | 
					
						
							|  |  |  |       serviceConfig.ExecStart = "@${pkgs.libvirt}/sbin/virtlockd virtlockd"; | 
					
						
							| 
									
										
										
										
											2017-08-10 11:34:32 +00:00
										 |  |  |       restartIfChanged = false; | 
					
						
							| 
									
										
										
										
											2016-06-27 13:02:47 +02:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2011-02-25 15:07:52 +00:00
										 |  |  |   }; | 
					
						
							|  |  |  | } |