uboot: (firmwareOdroidC2/C4) don't invoke patch tool, use patches = [] instead

https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/setup.sh#L948
this can do it nicely.

Signed-off-by: Anton Arapov <anton@deadbeef.mx>
This commit is contained in:
Anton Arapov 2021-04-03 12:58:10 +02:00 committed by Alan Daniels
commit 56de2bcd43
30691 changed files with 3076956 additions and 0 deletions

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,348 @@
{ 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
, polkit
, 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"
substituteInPlace src/util/virpolkit.h \
--replace '"/usr/bin/pkttyagent"' '"${polkit.bin}/bin/pkttyagent"'
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 ''
for f in $out/lib/systemd/system/*.service ; do
substituteInPlace $f --replace /bin/kill ${coreutils}/bin/kill
done
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 ];
};
}