about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/libvirt
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/libvirt')
-rw-r--r--nixpkgs/pkgs/development/libraries/libvirt/0001-meson-patch-in-an-install-prefix-for-building-on-nix.patch464
-rw-r--r--nixpkgs/pkgs/development/libraries/libvirt/0001-qemu-segmentation-fault-in-virtqemud-executing-qemuD.patch48
-rw-r--r--nixpkgs/pkgs/development/libraries/libvirt/default.nix342
3 files changed, 854 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/libvirt/0001-meson-patch-in-an-install-prefix-for-building-on-nix.patch b/nixpkgs/pkgs/development/libraries/libvirt/0001-meson-patch-in-an-install-prefix-for-building-on-nix.patch
new file mode 100644
index 000000000000..0945f21211dc
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/libvirt/0001-meson-patch-in-an-install-prefix-for-building-on-nix.patch
@@ -0,0 +1,464 @@
+From ad42041cfedcf25716429d2aad16641e0e2a012f Mon Sep 17 00:00:00 2001
+From: Euan Kemp <euank@euank.com>
+Date: Thu, 14 Jan 2021 00:32:00 -0800
+Subject: [PATCH] meson: patch in an install prefix for building on nix
+
+Used in the nixpkgs version of libvirt so that we can install things in
+the nix store, but read them from the root filesystem.
+---
+ meson.build                       |  9 ++++++++
+ meson_options.txt                 |  2 ++
+ src/ch/meson.build                |  6 ++---
+ src/interface/meson.build         |  2 +-
+ src/libxl/meson.build             | 18 +++++++--------
+ src/locking/meson.build           |  8 +++----
+ src/lxc/meson.build               | 10 ++++----
+ src/meson.build                   | 18 +++++++--------
+ src/network/meson.build           | 14 ++++++------
+ src/node_device/meson.build       |  2 +-
+ src/nwfilter/meson.build          |  6 ++---
+ src/nwfilter/xml/meson.build      |  2 +-
+ src/qemu/meson.build              | 38 +++++++++++++++----------------
+ src/remote/meson.build            | 10 ++++----
+ src/secret/meson.build            |  4 ++--
+ src/security/apparmor/meson.build |  8 +++----
+ src/storage/meson.build           |  6 ++---
+ tools/meson.build                 |  2 +-
+ 18 files changed, 88 insertions(+), 77 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 9016c0458a..b26e690194 100644
+--- a/meson.build
++++ b/meson.build
+@@ -39,6 +39,8 @@ if host_machine.system() == 'windows'
+   conf.set('WINVER', '0x0600') # Win Vista / Server 2008
+ endif
+ 
++# patched in for nix
++install_prefix = get_option('install_prefix')
+ 
+ # set various paths
+ 
+@@ -57,6 +59,13 @@ else
+   sysconfdir = prefix / get_option('sysconfdir')
+ endif
+ 
++# nix: don't prefix the localstatedir; some things need to write to it, so it
++# can't be in the nix store, and that's what the prefix is.
++# We'll prefix things ourselves where needed
++localstatedir = get_option('localstatedir')
++# Same for sysconfidr
++sysconfdir = get_option('sysconfdir')
++
+ # if --prefix is /usr, don't use /usr/var for localstatedir or /usr/etc for
+ # sysconfdir as this makes a lot of things break in testing situations
+ if prefix == '/usr'
+diff --git a/meson_options.txt b/meson_options.txt
+index 5b43cdbd6b..e9dff18441 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -1,3 +1,5 @@
++option('install_prefix', type: 'string', value: '', description: 'prefix for nix store installation')
++
+ option('no_git', type: 'boolean', value: false, description: 'Disable git submodule update')
+ option('packager', type: 'string', value: '', description: 'Extra packager name')
+ option('packager_version', type: 'string', value: '', description: 'Extra packager version')
+diff --git a/src/ch/meson.build b/src/ch/meson.build
+index 66b77907b0..6aa9bbc548 100644
+--- a/src/ch/meson.build
++++ b/src/ch/meson.build
+@@ -64,8 +64,8 @@ if conf.has('WITH_CH')
+   }
+ 
+   virt_install_dirs += [
+-    localstatedir / 'lib' / 'libvirt' / 'ch',
+-    localstatedir / 'log' / 'libvirt' / 'ch',
+-    runstatedir / 'libvirt' / 'ch',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'ch',
++    install_prefix + localstatedir / 'log' / 'libvirt' / 'ch',
++    install_prefix + runstatedir / 'libvirt' / 'ch',
+   ]
+ endif
+diff --git a/src/interface/meson.build b/src/interface/meson.build
+index 828f274422..2a6b1f8c5e 100644
+--- a/src/interface/meson.build
++++ b/src/interface/meson.build
+@@ -56,6 +56,6 @@ if conf.has('WITH_INTERFACE')
+   }
+ 
+   virt_install_dirs += [
+-    runstatedir / 'libvirt' / 'interface',
++    install_prefix + runstatedir / 'libvirt' / 'interface',
+   ]
+ endif
+diff --git a/src/libxl/meson.build b/src/libxl/meson.build
+index 0cc277db82..48d8c5b962 100644
+--- a/src/libxl/meson.build
++++ b/src/libxl/meson.build
+@@ -79,14 +79,14 @@ if conf.has('WITH_LIBXL')
+   }
+ 
+   virt_install_dirs += [
+-    confdir / 'libxl',
+-    confdir / 'libxl' / 'autostart',
+-    localstatedir / 'lib' / 'libvirt' / 'libxl',
+-    localstatedir / 'lib' / 'libvirt' / 'libxl' / 'channel',
+-    localstatedir / 'lib' / 'libvirt' / 'libxl' / 'channel' / 'target',
+-    localstatedir / 'lib' / 'libvirt' / 'libxl' / 'dump',
+-    localstatedir / 'lib' / 'libvirt' / 'libxl' / 'save',
+-    localstatedir / 'log' / 'libvirt' / 'libxl',
+-    runstatedir / 'libvirt' / 'libxl',
++    install_prefix + confdir / 'libxl',
++    install_prefix + confdir / 'libxl' / 'autostart',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'libxl',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'libxl' / 'channel',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'libxl' / 'channel' / 'target',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'libxl' / 'dump',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'libxl' / 'save',
++    install_prefix + localstatedir / 'log' / 'libvirt' / 'libxl',
++    install_prefix + runstatedir / 'libvirt' / 'libxl',
+   ]
+ endif
+diff --git a/src/locking/meson.build b/src/locking/meson.build
+index 72f7780438..abe70d20d5 100644
+--- a/src/locking/meson.build
++++ b/src/locking/meson.build
+@@ -238,14 +238,14 @@ if conf.has('WITH_LIBVIRTD')
+   }
+ 
+   virt_install_dirs += [
+-    localstatedir / 'lib' / 'libvirt' / 'lockd',
+-    localstatedir / 'lib' / 'libvirt' / 'lockd' / 'files',
+-    runstatedir / 'libvirt' / 'lockd',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'lockd',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'lockd' / 'files',
++    install_prefix + runstatedir / 'libvirt' / 'lockd',
+   ]
+ 
+   if conf.has('WITH_SANLOCK')
+     virt_install_dirs += [
+-      localstatedir / 'lib' / 'libvirt' / 'sanlock',
++      install_prefix + localstatedir / 'lib' / 'libvirt' / 'sanlock',
+     ]
+   endif
+ endif
+diff --git a/src/lxc/meson.build b/src/lxc/meson.build
+index 99d4a34213..aae477c1ee 100644
+--- a/src/lxc/meson.build
++++ b/src/lxc/meson.build
+@@ -176,10 +176,10 @@ if conf.has('WITH_LXC')
+   }
+ 
+   virt_install_dirs += [
+-    confdir / 'lxc',
+-    confdir / 'lxc' / 'autostart',
+-    localstatedir / 'lib' / 'libvirt' / 'lxc',
+-    localstatedir / 'log' / 'libvirt' / 'lxc',
+-    runstatedir / 'libvirt' / 'lxc',
++    install_prefix + confdir / 'lxc',
++    install_prefix + confdir / 'lxc' / 'autostart',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'lxc',
++    install_prefix + localstatedir / 'log' / 'libvirt' / 'lxc',
++    install_prefix + runstatedir / 'libvirt' / 'lxc',
+   ]
+ endif
+diff --git a/src/meson.build b/src/meson.build
+index b2d951d36c..305716010f 100644
+--- a/src/meson.build
++++ b/src/meson.build
+@@ -210,7 +210,7 @@ openrc_init_files = []
+ 
+ # virt_install_dirs:
+ #   list of directories to create during installation
+-virt_install_dirs = [ confdir ]
++virt_install_dirs = [ install_prefix + confdir ]
+ 
+ # driver_source_files:
+ #   driver source files to check
+@@ -663,7 +663,7 @@ endforeach
+ 
+ virt_conf_files += 'libvirt.conf'
+ 
+-install_data(virt_conf_files, install_dir: confdir)
++install_data(virt_conf_files, install_dir: install_prefix + confdir)
+ install_data(virt_aug_files, install_dir: virt_aug_dir)
+ 
+ # augeas_test_data:
+@@ -723,7 +723,7 @@ foreach data : virt_daemon_confs
+     output: '@0@.conf'.format(data['name']),
+     configuration: daemon_conf,
+     install: true,
+-    install_dir: confdir,
++    install_dir: install_prefix + confdir,
+   )
+ 
+   if data.get('with_ip', false)
+@@ -847,7 +847,7 @@ if conf.has('WITH_LIBVIRTD')
+ 
+       install_data(
+         init_file,
+-        install_dir: sysconfdir / 'init.d',
++        install_dir: install_prefix + sysconfdir / 'init.d',
+         install_mode: 'rwxr-xr-x',
+         rename: [ init['name'] ],
+       )
+@@ -855,7 +855,7 @@ if conf.has('WITH_LIBVIRTD')
+       if init.has_key('confd')
+         install_data(
+           init['confd'],
+-          install_dir: sysconfdir / 'conf.d',
++          install_dir: install_prefix + sysconfdir / 'conf.d',
+           rename: [ init['name'] ],
+         )
+       endif
+@@ -882,10 +882,10 @@ endif
+ # Install empty directories
+ 
+ virt_install_dirs += [
+-  localstatedir / 'cache' / 'libvirt',
+-  localstatedir / 'lib' / 'libvirt' / 'images',
+-  localstatedir / 'lib' / 'libvirt' / 'filesystems',
+-  localstatedir / 'lib' / 'libvirt' / 'boot',
++  install_prefix + localstatedir / 'cache' / 'libvirt',
++  install_prefix + localstatedir / 'lib' / 'libvirt' / 'images',
++  install_prefix + localstatedir / 'lib' / 'libvirt' / 'filesystems',
++  install_prefix + localstatedir / 'lib' / 'libvirt' / 'boot',
+ ]
+ 
+ meson.add_install_script(
+diff --git a/src/network/meson.build b/src/network/meson.build
+index b5eff0c3ab..a0f26d624e 100644
+--- a/src/network/meson.build
++++ b/src/network/meson.build
+@@ -73,11 +73,11 @@ if conf.has('WITH_NETWORK')
+   }
+ 
+   virt_install_dirs += [
+-    confdir / 'qemu' / 'networks',
+-    confdir / 'qemu' / 'networks' / 'autostart',
+-    localstatedir / 'lib' / 'libvirt' / 'network',
+-    localstatedir / 'lib' / 'libvirt' / 'dnsmasq',
+-    runstatedir / 'libvirt' / 'network',
++    install_prefix + confdir / 'qemu' / 'networks',
++    install_prefix + confdir / 'qemu' / 'networks' / 'autostart',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'network',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'dnsmasq',
++    install_prefix + runstatedir / 'libvirt' / 'network',
+   ]
+ 
+   configure_file(
+@@ -85,12 +85,12 @@ if conf.has('WITH_NETWORK')
+     output: '@BASENAME@',
+     copy: true,
+     install: true,
+-    install_dir: confdir / 'qemu' / 'networks',
++    install_dir: install_prefix + confdir / 'qemu' / 'networks',
+   )
+ 
+   meson.add_install_script(
+     meson_python_prog.path(), python3_prog.path(), meson_install_symlink_prog.path(),
+-    confdir / 'qemu' / 'networks' / 'autostart',
++    install_prefix + confdir / 'qemu' / 'networks' / 'autostart',
+     '../default.xml', 'default.xml',
+   )
+ 
+diff --git a/src/node_device/meson.build b/src/node_device/meson.build
+index 1c95975c37..a7831242db 100644
+--- a/src/node_device/meson.build
++++ b/src/node_device/meson.build
+@@ -64,6 +64,6 @@ if conf.has('WITH_NODE_DEVICES')
+   }
+ 
+   virt_install_dirs += [
+-    runstatedir / 'libvirt' / 'nodedev',
++    install_prefix + runstatedir / 'libvirt' / 'nodedev',
+   ]
+ endif
+diff --git a/src/nwfilter/meson.build b/src/nwfilter/meson.build
+index 55cf8fcce4..d331086f2e 100644
+--- a/src/nwfilter/meson.build
++++ b/src/nwfilter/meson.build
+@@ -62,9 +62,9 @@ if conf.has('WITH_NWFILTER')
+   }
+ 
+   virt_install_dirs += [
+-    confdir / 'nwfilter',
+-    runstatedir / 'libvirt' / 'nwfilter-binding',
+-    runstatedir / 'libvirt' / 'nwfilter',
++    install_prefix + confdir / 'nwfilter',
++    install_prefix + runstatedir / 'libvirt' / 'nwfilter-binding',
++    install_prefix + runstatedir / 'libvirt' / 'nwfilter',
+   ]
+ 
+   subdir('xml')
+diff --git a/src/nwfilter/xml/meson.build b/src/nwfilter/xml/meson.build
+index 0d96c54ebe..66c92a1016 100644
+--- a/src/nwfilter/xml/meson.build
++++ b/src/nwfilter/xml/meson.build
+@@ -25,4 +25,4 @@ nwfilter_xml_files = [
+   'qemu-announce-self.xml',
+ ]
+ 
+-install_data(nwfilter_xml_files, install_dir: sysconfdir / 'libvirt' / 'nwfilter')
++install_data(nwfilter_xml_files, install_dir: install_prefix + sysconfdir / 'libvirt' / 'nwfilter')
+diff --git a/src/qemu/meson.build b/src/qemu/meson.build
+index 39f0f615cc..5f6f30f82b 100644
+--- a/src/qemu/meson.build
++++ b/src/qemu/meson.build
+@@ -175,24 +175,24 @@ if conf.has('WITH_QEMU')
+   endif
+ 
+   virt_install_dirs += [
+-    confdir / 'qemu',
+-    confdir / 'qemu' / 'autostart',
+-    localstatedir / 'cache' / 'libvirt' / 'qemu',
+-    localstatedir / 'lib' / 'libvirt' / 'qemu',
+-    localstatedir / 'lib' / 'libvirt' / 'qemu' / 'channel',
+-    localstatedir / 'lib' / 'libvirt' / 'qemu' / 'channel' / 'target',
+-    localstatedir / 'lib' / 'libvirt' / 'qemu' / 'checkpoint',
+-    localstatedir / 'lib' / 'libvirt' / 'qemu' / 'dump',
+-    localstatedir / 'lib' / 'libvirt' / 'qemu' / 'nvram',
+-    localstatedir / 'lib' / 'libvirt' / 'qemu' / 'ram',
+-    localstatedir / 'lib' / 'libvirt' / 'qemu' / 'save',
+-    localstatedir / 'lib' / 'libvirt' / 'qemu' / 'snapshot',
+-    localstatedir / 'lib' / 'libvirt' / 'swtpm',
+-    localstatedir / 'log' / 'libvirt' / 'qemu',
+-    localstatedir / 'log' / 'swtpm' / 'libvirt' / 'qemu',
+-    runstatedir / 'libvirt' / 'qemu',
+-    runstatedir / 'libvirt' / 'qemu' / 'dbus',
+-    runstatedir / 'libvirt' / 'qemu' / 'slirp',
+-    runstatedir / 'libvirt' / 'qemu' / 'swtpm',
++    install_prefix + confdir / 'qemu',
++    install_prefix + confdir / 'qemu' / 'autostart',
++    install_prefix + localstatedir / 'cache' / 'libvirt' / 'qemu',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'channel',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'channel' / 'target',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'checkpoint',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'dump',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'nvram',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'ram',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'save',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu' / 'snapshot',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'swtpm',
++    install_prefix + localstatedir / 'log' / 'libvirt' / 'qemu',
++    install_prefix + localstatedir / 'log' / 'swtpm' / 'libvirt' / 'qemu',
++    install_prefix + runstatedir / 'libvirt' / 'qemu',
++    install_prefix + runstatedir / 'libvirt' / 'qemu' / 'dbus',
++    install_prefix + runstatedir / 'libvirt' / 'qemu' / 'slirp',
++    install_prefix + runstatedir / 'libvirt' / 'qemu' / 'swtpm',
+   ]
+ endif
+diff --git a/src/remote/meson.build b/src/remote/meson.build
+index b2aafe6320..6972d254ca 100644
+--- a/src/remote/meson.build
++++ b/src/remote/meson.build
+@@ -235,9 +235,9 @@ if conf.has('WITH_REMOTE')
+     }
+ 
+     virt_install_dirs += [
+-      localstatedir / 'log' / 'libvirt',
+-      runstatedir / 'libvirt',
+-      runstatedir / 'libvirt' / 'common',
++      install_prefix + localstatedir / 'log' / 'libvirt',
++      install_prefix + runstatedir / 'libvirt',
++      install_prefix + runstatedir / 'libvirt' / 'common',
+     ]
+ 
+     logrotate_conf = configuration_data()
+@@ -251,7 +251,7 @@ if conf.has('WITH_REMOTE')
+       )
+       install_data(
+         log_file,
+-        install_dir: sysconfdir / 'logrotate.d',
++        install_dir: install_prefix + sysconfdir / 'logrotate.d',
+         rename: [ name ],
+       )
+     endforeach
+@@ -301,7 +301,7 @@ endif
+ if conf.has('WITH_SASL')
+   install_data(
+     'libvirtd.sasl',
+-    install_dir: sysconfdir / 'sasl2',
++    install_dir: install_prefix + sysconfdir / 'sasl2',
+     rename: [ 'libvirt.conf' ],
+   )
+ endif
+diff --git a/src/secret/meson.build b/src/secret/meson.build
+index 1bda59849b..392bc2cb2e 100644
+--- a/src/secret/meson.build
++++ b/src/secret/meson.build
+@@ -45,7 +45,7 @@ if conf.has('WITH_SECRETS')
+   }
+ 
+   virt_install_dirs += [
+-    confdir / 'secrets',
+-    runstatedir / 'libvirt' / 'secrets',
++    install_prefix + confdir / 'secrets',
++    install_prefix + runstatedir / 'libvirt' / 'secrets',
+   ]
+ endif
+diff --git a/src/security/apparmor/meson.build b/src/security/apparmor/meson.build
+index 990f00b4f3..e5a7a14e1d 100644
+--- a/src/security/apparmor/meson.build
++++ b/src/security/apparmor/meson.build
+@@ -19,22 +19,22 @@ foreach name : apparmor_gen_profiles
+     output: name,
+     configuration: apparmor_gen_profiles_conf,
+     install: true,
+-    install_dir: apparmor_dir,
++    install_dir: install_prefix + apparmor_dir,
+   )
+ endforeach
+ 
+ install_data(
+   [ 'libvirt-qemu', 'libvirt-lxc' ],
+-  install_dir: apparmor_dir / 'abstractions',
++  install_dir: install_prefix + apparmor_dir / 'abstractions',
+ )
+ 
+ install_data(
+   [ 'TEMPLATE.qemu', 'TEMPLATE.lxc' ],
+-  install_dir: apparmor_dir / 'libvirt',
++  install_dir: install_prefix + apparmor_dir / 'libvirt',
+ )
+ 
+ install_data(
+   'usr.lib.libvirt.virt-aa-helper.local',
+-  install_dir: apparmor_dir / 'local',
++  install_dir: install_prefix + apparmor_dir / 'local',
+   rename: 'usr.lib.libvirt.virt-aa-helper',
+ )
+diff --git a/src/storage/meson.build b/src/storage/meson.build
+index 26e7ff1a1a..ad5c6eddc3 100644
+--- a/src/storage/meson.build
++++ b/src/storage/meson.build
+@@ -127,9 +127,9 @@ if conf.has('WITH_STORAGE')
+   }
+ 
+   virt_install_dirs += [
+-    confdir / 'storage',
+-    confdir / 'storage' / 'autostart',
+-    runstatedir / 'libvirt' / 'storage',
++    install_prefix + confdir / 'storage',
++    install_prefix + confdir / 'storage' / 'autostart',
++    install_prefix + runstatedir / 'libvirt' / 'storage',
+   ]
+ endif
+ 
+diff --git a/tools/meson.build b/tools/meson.build
+index f4b4a16c29..059c73a955 100644
+--- a/tools/meson.build
++++ b/tools/meson.build
+@@ -120,7 +120,7 @@ if conf.has('WITH_LOGIN_SHELL')
+     install_rpath: libvirt_rpath,
+   )
+ 
+-  install_data('virt-login-shell.conf', install_dir: sysconfdir / 'libvirt')
++  install_data('virt-login-shell.conf', install_dir: install_prefix + sysconfdir / 'libvirt')
+ endif
+ 
+ if host_machine.system() == 'windows'
+-- 
+2.35.1
+
diff --git a/nixpkgs/pkgs/development/libraries/libvirt/0001-qemu-segmentation-fault-in-virtqemud-executing-qemuD.patch b/nixpkgs/pkgs/development/libraries/libvirt/0001-qemu-segmentation-fault-in-virtqemud-executing-qemuD.patch
new file mode 100644
index 000000000000..375267dcda79
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/libvirt/0001-qemu-segmentation-fault-in-virtqemud-executing-qemuD.patch
@@ -0,0 +1,48 @@
+From 823a62ec8aac4fb75e6e281164f3eb56ae47597c Mon Sep 17 00:00:00 2001
+From: Boris Fiuczynski <fiuczy@linux.ibm.com>
+Date: Tue, 1 Mar 2022 18:47:59 +0100
+Subject: [PATCH] qemu: segmentation fault in virtqemud executing
+ qemuDomainUndefineFlags
+
+Commit 5adfb3472342741c443ac91dee0abb18b5a3d038 causes a segmentation fault.
+
+Stack trace of thread 664419:
+ #0  0x000003ff62ec553c in qemuDomainUndefineFlags (dom=0x3ff6c002810, flags=<optimized out>) at ../src/qemu/qemu_driver.c:6618
+ #1  0x000003ff876a7e5c in virDomainUndefineFlags (domain=domain@entry=0x3ff6c002810, flags=<optimized out>) at ../src/libvirt-domain.c:6519
+ #2  0x000002aa2b64a808 in remoteDispatchDomainUndefineFlags (server=0x2aa2c3d7880, msg=0x2aa2c3d2770, args=<optimized out>, rerr=0x3ff8287b950, client=<optimized out>)
+        at src/remote/remote_daemon_dispatch_stubs.h:13080
+ #3  remoteDispatchDomainUndefineFlagsHelper (server=0x2aa2c3d7880, client=<optimized out>, msg=0x2aa2c3d2770, rerr=0x3ff8287b950, args=<optimized out>, ret=0x0)
+        at src/remote/remote_daemon_dispatch_stubs.h:13059
+ #4  0x000003ff8758bbf4 in virNetServerProgramDispatchCall (msg=0x2aa2c3d2770, client=0x2aa2c3e3050, server=0x2aa2c3d7880, prog=0x2aa2c3d8010)
+        at ../src/rpc/virnetserverprogram.c:428
+ #5  virNetServerProgramDispatch (prog=0x2aa2c3d8010, server=server@entry=0x2aa2c3d7880, client=0x2aa2c3e3050, msg=0x2aa2c3d2770) at ../src/rpc/virnetserverprogram.c:302
+ #6  0x000003ff8758c260 in virNetServerProcessMsg (msg=<optimized out>, prog=<optimized out>, client=<optimized out>, srv=0x2aa2c3d7880) at ../src/rpc/virnetserver.c:140
+ #7  virNetServerHandleJob (jobOpaque=0x2aa2c3e2d30, opaque=0x2aa2c3d7880) at ../src/rpc/virnetserver.c:160
+ #8  0x000003ff874c49aa in virThreadPoolWorker (opaque=<optimized out>) at ../src/util/virthreadpool.c:164
+ #9  0x000003ff874c3f62 in virThreadHelper (data=<optimized out>) at ../src/util/virthread.c:256
+ #10 0x000003ff86c1cf8c in start_thread () from /lib64/libc.so.6
+ #11 0x000003ff86c9650e in thread_start () from /lib64/libc.so.6
+
+Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
+Reviewed-by: Jim Fehlig <jfehlig@suse.com>
+Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
+---
+ src/qemu/qemu_driver.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
+index bcd9bdb436..8337eed510 100644
+--- a/src/qemu/qemu_driver.c
++++ b/src/qemu/qemu_driver.c
+@@ -6615,7 +6615,7 @@ qemuDomainUndefineFlags(virDomainPtr dom,
+         }
+     }
+ 
+-    if (vm->def->os.loader->nvram) {
++    if (vm->def->os.loader && vm->def->os.loader->nvram) {
+         nvram_path = g_strdup(vm->def->os.loader->nvram);
+     } else if (vm->def->os.firmware == VIR_DOMAIN_OS_DEF_FIRMWARE_EFI) {
+         qemuDomainNVRAMPathFormat(cfg, vm->def, &nvram_path);
+-- 
+2.35.1
+
diff --git a/nixpkgs/pkgs/development/libraries/libvirt/default.nix b/nixpkgs/pkgs/development/libraries/libvirt/default.nix
new file mode 100644
index 000000000000..cda7c091908d
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/libvirt/default.nix
@@ -0,0 +1,342 @@
+{ lib
+, autoreconfHook
+, bash-completion
+, bridge-utils
+, cmake
+, coreutils
+, curl
+, darwin
+, dbus
+, dnsmasq
+, docutils
+, fetchFromGitLab
+, fetchurl
+, gettext
+, glib
+, gnutls
+, iproute2
+, iptables
+, libgcrypt
+, libpcap
+, libtasn1
+, libxml2
+, libxslt
+, makeWrapper
+, meson
+, ninja
+, perl
+, perlPackages
+, pkg-config
+, pmutils
+, python3
+, readline
+, rpcsvc-proto
+, stdenv
+, xhtml1
+, yajl
+
+  # Linux
+, acl ? null
+, attr ? null
+, audit ? null
+, dmidecode ? null
+, fuse ? null
+, kmod ? null
+, libapparmor ? null
+, libcap_ng ? null
+, libnl ? null
+, libpciaccess ? null
+, libtirpc ? null
+, lvm2 ? null
+, numactl ? null
+, numad ? null
+, parted ? null
+, systemd ? null
+, util-linux ? null
+
+  # Darwin
+, gmp ? null
+, libiconv ? null
+, Carbon ? null
+, AppKit ? null
+
+  # Options
+, enableCeph ? false
+, ceph ? null
+, enableGlusterfs ? false
+, glusterfs ? null
+, enableIscsi ? false
+, openiscsi ? null
+, libiscsi ? null
+, enableXen ? false
+, xen ? null
+, enableZfs ? stdenv.isLinux
+, zfs ? null
+}:
+
+with lib;
+
+let
+  inherit (stdenv) isDarwin isLinux isx86_64;
+  binPath = makeBinPath ([
+    dnsmasq
+  ] ++ optionals isLinux [
+    bridge-utils
+    dmidecode
+    dnsmasq
+    iproute2
+    iptables
+    kmod
+    lvm2
+    numactl
+    numad
+    pmutils
+    systemd
+  ] ++ optionals enableIscsi [
+    libiscsi
+    openiscsi
+  ]);
+in
+
+assert enableXen -> isLinux && isx86_64;
+assert enableCeph -> isLinux;
+assert enableGlusterfs -> isLinux;
+assert enableZfs -> isLinux;
+
+# if you update, also bump <nixpkgs/pkgs/development/python-modules/libvirt/default.nix> and SysVirt in <nixpkgs/pkgs/top-level/perl-packages.nix>
+stdenv.mkDerivation rec {
+  pname = "libvirt";
+  # NOTE: You must also bump:
+  # <nixpkgs/pkgs/development/python-modules/libvirt/default.nix>
+  # SysVirt in <nixpkgs/pkgs/top-level/perl-packages.nix>
+  version = "8.1.0";
+
+  src =
+    if isDarwin then
+      fetchurl
+        {
+          url = "https://libvirt.org/sources/${pname}-${version}.tar.xz";
+          sha256 = "sha256-PGxDvs/+s0o/OXxhYgaqaaiT/4v16CCDk8hOjnU1KTQ=";
+        }
+    else
+      fetchFromGitLab
+        {
+          owner = pname;
+          repo = pname;
+          rev = "v${version}";
+          sha256 = "sha256-nk8pBlss+g4EMy+RnAOyz6YlGGvlBvl5aBpcytsK1wY=";
+          fetchSubmodules = true;
+        };
+
+  patches = [
+    ./0001-meson-patch-in-an-install-prefix-for-building-on-nix.patch
+    ./0001-qemu-segmentation-fault-in-virtqemud-executing-qemuD.patch
+  ];
+
+  # remove some broken tests
+  postPatch = ''
+    sed -i '/commandtest/d' tests/meson.build
+    sed -i '/virnetsockettest/d' tests/meson.build
+    # delete only the first occurrence of this
+    sed -i '0,/qemuxml2argvtest/{/qemuxml2argvtest/d;}' tests/meson.build
+  '' + optionalString isDarwin ''
+    sed -i '/qemucapabilitiestest/d' tests/meson.build
+  '';
+
+
+  nativeBuildInputs = [
+    meson
+
+    cmake
+    docutils
+    makeWrapper
+    ninja
+    pkg-config
+  ]
+  ++ optional (!isDarwin) rpcsvc-proto
+  # NOTE: needed for rpcgen
+  ++ optional isDarwin darwin.developer_cmds;
+
+  buildInputs = [
+    bash-completion
+    curl
+    dbus
+    gettext
+    glib
+    gnutls
+    libgcrypt
+    libpcap
+    libtasn1
+    libxml2
+    libxslt
+    perl
+    perlPackages.XMLXPath
+    pkg-config
+    python3
+    readline
+    xhtml1
+    yajl
+  ] ++ optionals isLinux [
+    acl
+    attr
+    audit
+    fuse
+    libapparmor
+    libcap_ng
+    libnl
+    libpciaccess
+    libtirpc
+    lvm2
+    numactl
+    numad
+    parted
+    systemd
+    util-linux
+  ] ++ optionals isDarwin [
+    AppKit
+    Carbon
+    gmp
+    libiconv
+  ]
+  ++ optionals enableCeph [ ceph ]
+  ++ optionals enableGlusterfs [ glusterfs ]
+  ++ optionals enableIscsi [ libiscsi openiscsi ]
+  ++ optionals enableXen [ xen ]
+  ++ optionals enableZfs [ zfs ];
+
+  preConfigure =
+    let
+      overrides = {
+        QEMU_BRIDGE_HELPER = "/run/wrappers/bin/qemu-bridge-helper";
+        QEMU_PR_HELPER = "/run/libvirt/nix-helpers/qemu-pr-helper";
+      };
+
+      patchBuilder = var: value: ''
+        sed -i meson.build -e "s|conf.set_quoted('${var}',.*|conf.set_quoted('${var}','${value}')|"
+      '';
+    in
+    ''
+      PATH="${binPath}:$PATH"
+      # the path to qemu-kvm will be stored in VM's .xml and .save files
+      # do not use "''${qemu_kvm}/bin/qemu-kvm" to avoid bound VMs to particular qemu derivations
+      substituteInPlace src/lxc/lxc_conf.c \
+        --replace 'lxc_path,' '"/run/libvirt/nix-emulators/libvirt_lxc",'
+
+      substituteInPlace build-aux/meson.build \
+        --replace "gsed" "sed" \
+        --replace "gmake" "make" \
+        --replace "ggrep" "grep"
+
+      patchShebangs .
+    ''
+    + (lib.concatStringsSep "\n" (lib.mapAttrsToList patchBuilder overrides));
+
+  mesonAutoFeatures = "disabled";
+
+  mesonFlags =
+    let
+      cfg = option: val: "-D${option}=${val}";
+      feat = option: enable: cfg option (if enable then "enabled" else "disabled");
+      driver = name: feat "driver_${name}";
+      storage = name: feat "storage_${name}";
+    in
+    [
+      "--sysconfdir=/var/lib"
+      (cfg "install_prefix" (placeholder "out"))
+      (cfg "localstatedir" "/var")
+      (cfg "runstatedir" "/run")
+
+      (cfg "init_script" (if isDarwin then "none" else "systemd"))
+
+      (feat "apparmor" isLinux)
+      (feat "attr" isLinux)
+      (feat "audit" isLinux)
+      (feat "bash_completion" true)
+      (feat "blkid" isLinux)
+      (feat "capng" isLinux)
+      (feat "curl" true)
+      (feat "docs" true)
+      (feat "expensive_tests" true)
+      (feat "firewalld" isLinux)
+      (feat "firewalld_zone" isLinux)
+      (feat "fuse" isLinux)
+      (feat "glusterfs" enableGlusterfs)
+      (feat "host_validate" true)
+      (feat "libiscsi" enableIscsi)
+      (feat "libnl" isLinux)
+      (feat "libpcap" true)
+      (feat "libssh2" true)
+      (feat "login_shell" isLinux)
+      (feat "nss" isLinux)
+      (feat "numactl" isLinux)
+      (feat "numad" isLinux)
+      (feat "pciaccess" isLinux)
+      (feat "polkit" true)
+      (feat "readline" true)
+      (feat "secdriver_apparmor" isLinux)
+      (feat "tests" true)
+      (feat "udev" isLinux)
+      (feat "yajl" true)
+
+      (driver "ch" isLinux)
+      (driver "esx" true)
+      (driver "interface" isLinux)
+      (driver "libvirtd" true)
+      (driver "libxl" enableXen)
+      (driver "lxc" isLinux)
+      (driver "network" true)
+      (driver "openvz" isLinux)
+      (driver "qemu" true)
+      (driver "remote" true)
+      (driver "secrets" true)
+      (driver "test" true)
+      (driver "vbox" true)
+      (driver "vmware" true)
+
+      (storage "dir" true)
+      (storage "disk" isLinux)
+      (storage "fs" isLinux)
+      (storage "gluster" enableGlusterfs)
+      (storage "iscsi" enableIscsi)
+      (storage "iscsi_direct" enableIscsi)
+      (storage "lvm" isLinux)
+      (storage "mpath" isLinux)
+      (storage "rbd" enableCeph)
+      (storage "scsi" true)
+      (storage "vstorage" isLinux)
+      (storage "zfs" enableZfs)
+    ];
+
+  doCheck = true;
+
+  postInstall = ''
+    substituteInPlace $out/bin/virt-xml-validate \
+      --replace xmllint ${libxml2}/bin/xmllint
+
+    substituteInPlace $out/libexec/libvirt-guests.sh \
+      --replace 'ON_BOOT="start"'       'ON_BOOT=''${ON_BOOT:-start}' \
+      --replace 'ON_SHUTDOWN="suspend"' 'ON_SHUTDOWN=''${ON_SHUTDOWN:-suspend}' \
+      --replace "$out/bin"              '${gettext}/bin' \
+      --replace 'lock/subsys'           'lock' \
+      --replace 'gettext.sh'            'gettext.sh
+    # Added in nixpkgs:
+    gettext() { "${gettext}/bin/gettext" "$@"; }
+    '
+  '' + optionalString isLinux ''
+    substituteInPlace $out/lib/systemd/system/libvirtd.service --replace /bin/kill ${coreutils}/bin/kill
+    rm $out/lib/systemd/system/{virtlockd,virtlogd}.*
+    wrapProgram $out/sbin/libvirtd \
+      --prefix PATH : /run/libvirt/nix-emulators:${binPath}
+  '';
+
+  meta = {
+    homepage = "https://libvirt.org/";
+    description = ''
+      A toolkit to interact with the virtualization capabilities of recent
+      versions of Linux (and other OSes)
+    '';
+    license = licenses.lgpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ fpletz globin lovesegfault ];
+  };
+}