|
|
|
@ -5,6 +5,7 @@ |
|
|
|
|
, libtasn1, ebtables, libgcrypt, yajl, pmutils, libcap_ng, libapparmor |
|
|
|
|
, dnsmasq, libnl, libpcap, libxslt, xhtml1, numad, numactl, perlPackages |
|
|
|
|
, curl, libiconv, gmp, zfs, parted, bridge-utils, dmidecode, dbus, libtirpc, rpcsvc-proto, darwin |
|
|
|
|
, meson, ninja, audit, cmake, bash-completion, pkg-config |
|
|
|
|
, enableXen ? false, xen ? null |
|
|
|
|
, enableIscsi ? false, openiscsi |
|
|
|
|
, enableCeph ? false, ceph |
|
|
|
@ -17,26 +18,24 @@ let |
|
|
|
|
buildFromTarball = stdenv.isDarwin; |
|
|
|
|
in stdenv.mkDerivation rec { |
|
|
|
|
pname = "libvirt"; |
|
|
|
|
version = "6.6.0"; |
|
|
|
|
version = "6.8.0"; |
|
|
|
|
|
|
|
|
|
src = |
|
|
|
|
if buildFromTarball then |
|
|
|
|
fetchurl { |
|
|
|
|
url = "https://libvirt.org/sources/${pname}-${version}.tar.xz"; |
|
|
|
|
sha256 = "1y8y13zvh820f4b15287wb77wq7ra7kbfnpblzhm1dki5pfjvrcl"; |
|
|
|
|
sha256 = "0hhk2r0dnm9zmfwmnsnmnacm4pik6z60llp22axx7kcpqxv98nv5"; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
fetchgit { |
|
|
|
|
url = "https://gitlab.com/libvirt/libvirt.git"; |
|
|
|
|
rev = "v${version}"; |
|
|
|
|
sha256 = "09hsbm2qmx0jfmm418rf5lx374g85bwgg0kzlga62x5180jhsssn"; |
|
|
|
|
sha256 = "sha256-BQZPdmDE0g7xWd6QOHMKosP2HgVpIjsfgfohA9VxEHs="; |
|
|
|
|
fetchSubmodules = true; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
nativeBuildInputs = [ |
|
|
|
|
makeWrapper pkgconfig docutils |
|
|
|
|
] ++ optionals (!buildFromTarball) [ |
|
|
|
|
autoreconfHook |
|
|
|
|
ninja meson cmake makeWrapper pkgconfig docutils |
|
|
|
|
] ++ optional (!stdenv.isDarwin) [ |
|
|
|
|
rpcsvc-proto |
|
|
|
|
] ++ optionals stdenv.isDarwin [ |
|
|
|
@ -44,10 +43,11 @@ in stdenv.mkDerivation rec { |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
buildInputs = [ |
|
|
|
|
bash-completion pkg-config |
|
|
|
|
libxml2 gnutls perl python2 readline gettext libtasn1 libgcrypt yajl |
|
|
|
|
libxslt xhtml1 perlPackages.XMLXPath curl libpcap glib dbus |
|
|
|
|
] ++ optionals stdenv.isLinux [ |
|
|
|
|
libpciaccess lvm2 util-linux systemd libnl numad zfs |
|
|
|
|
audit libpciaccess lvm2 utillinux systemd libnl numad zfs |
|
|
|
|
libapparmor libcap_ng numactl attr parted libtirpc |
|
|
|
|
] ++ optionals (enableXen && stdenv.isLinux && stdenv.isx86_64) [ |
|
|
|
|
xen |
|
|
|
@ -59,58 +59,58 @@ in stdenv.mkDerivation rec { |
|
|
|
|
libiconv gmp |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
preConfigure = '' |
|
|
|
|
preConfigure = let |
|
|
|
|
overrides = { |
|
|
|
|
QEMU_BRIDGE_HELPER = "/run/wrappers/bin/qemu-bridge-helper"; |
|
|
|
|
QEMU_PR_HELPER="/run/libvirt/nix-helpers/qemu-pr-helper"; |
|
|
|
|
EBTABLES_PATH ="${ebtables}/bin/ebtables-legacy"; |
|
|
|
|
# "CFLAGS"=-I${libtirpc.dev}/include/tirpc"; |
|
|
|
|
}; |
|
|
|
|
patchBuilder = var: value: '' |
|
|
|
|
sed -i meson.build -e "s|conf.set_quoted('${var}',.*|conf.set_quoted('${var}','${value}')|" |
|
|
|
|
''; |
|
|
|
|
in '' |
|
|
|
|
PATH=${stdenv.lib.makeBinPath ([ dnsmasq ] ++ optionals stdenv.isLinux [ iproute iptables ebtables lvm2 systemd numad ] ++ optionals enableIscsi [ openiscsi ])}:$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",' |
|
|
|
|
patchShebangs . # fixes /usr/bin/python references |
|
|
|
|
mkdir -p build && cd build |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
configureScript = "../configure"; |
|
|
|
|
|
|
|
|
|
dontAddDisableDepTrack = true; |
|
|
|
|
|
|
|
|
|
configureFlags = [ |
|
|
|
|
"--with-runstatedir=/run" # TODO: remove when autoconf 2.70 is released |
|
|
|
|
"--localstatedir=/var" |
|
|
|
|
"--sysconfdir=/var/lib" |
|
|
|
|
"--with-libpcap" |
|
|
|
|
"--with-qemu" |
|
|
|
|
"--with-vmware" |
|
|
|
|
"--with-vbox" |
|
|
|
|
"--with-test" |
|
|
|
|
"--with-esx" |
|
|
|
|
"--with-remote" |
|
|
|
|
"--with-polkit" |
|
|
|
|
'' |
|
|
|
|
#"QEMU_BRIDGE_HELPER" "/run/wrappers/bin/qemu-bridge-helper" |
|
|
|
|
+ (stdenv.lib.concatStringsSep "\n" (stdenv.lib.mapAttrsToList patchBuilder overrides)) |
|
|
|
|
; |
|
|
|
|
mesonAutoFeatures = "auto"; |
|
|
|
|
mesonFlags = let |
|
|
|
|
opt = option: enable: "-D${option}=${if enable then "enabled" else "disabled"}"; |
|
|
|
|
in [ |
|
|
|
|
# "localstatedir=$(TMPDIR)/var" |
|
|
|
|
# "sysconfdir=$(out)/var/lib" |
|
|
|
|
"-Drunstatedir=/run" |
|
|
|
|
# "-Dlocalstatedir=$(TMPDIR)/var" |
|
|
|
|
"-Dsysconfdir=$(out)/var/lib" |
|
|
|
|
"-Dlibpcap=enabled" |
|
|
|
|
"-Ddriver_qemu=enabled" |
|
|
|
|
"-Ddriver_vmware=enabled" |
|
|
|
|
"-Ddriver_vbox=enabled" |
|
|
|
|
"-Ddriver_test=enabled" |
|
|
|
|
"-Ddriver_esx=enabled" |
|
|
|
|
"-Ddriver_remote=enabled" |
|
|
|
|
"-Dpolkit=enabled" |
|
|
|
|
# "-Dbus=enabled" |
|
|
|
|
(opt "storage_iscsi" enableIscsi) |
|
|
|
|
] ++ optionals stdenv.isLinux [ |
|
|
|
|
"QEMU_BRIDGE_HELPER=/run/wrappers/bin/qemu-bridge-helper" |
|
|
|
|
"QEMU_PR_HELPER=/run/libvirt/nix-helpers/qemu-pr-helper" |
|
|
|
|
"EBTABLES_PATH=${ebtables}/bin/ebtables-legacy" |
|
|
|
|
"CFLAGS=-I${libtirpc.dev}/include/tirpc" |
|
|
|
|
"--with-attr" |
|
|
|
|
"--with-apparmor" |
|
|
|
|
"--with-secdriver-apparmor" |
|
|
|
|
"--with-numad" |
|
|
|
|
"--with-macvtap" |
|
|
|
|
"--with-virtualport" |
|
|
|
|
"--with-storage-disk" |
|
|
|
|
] ++ optionals (stdenv.isLinux && zfs != null) [ |
|
|
|
|
"--with-storage-zfs" |
|
|
|
|
] ++ optionals enableIscsi [ |
|
|
|
|
"--with-storage-iscsi" |
|
|
|
|
] ++ optionals enableCeph [ |
|
|
|
|
"--with-storage-rbd" |
|
|
|
|
(opt "storage_zfs" (zfs != null)) |
|
|
|
|
"-Dattr=enabled" |
|
|
|
|
"-Dapparmor=enabled" |
|
|
|
|
"-Dsecdriver_apparmor=enabled" |
|
|
|
|
"-Dnumad=enabled" |
|
|
|
|
"-Dmacvtap=enabled" |
|
|
|
|
"-Dvirtualport=enabled" |
|
|
|
|
"-Dstorage_disk=enabled" |
|
|
|
|
(opt "storage_rbd" enableCeph) |
|
|
|
|
] ++ optionals stdenv.isDarwin [ |
|
|
|
|
"--with-init-script=none" |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
installFlags = [ |
|
|
|
|
"runstatedir=${placeholder "out"}/run" |
|
|
|
|
"localstatedir=$(TMPDIR)/var" |
|
|
|
|
"sysconfdir=$(out)/var/lib" |
|
|
|
|
"-Dinit_script=none" |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
postInstall = let |
|
|
|
|