diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/libvirt/default.nix')
-rw-r--r-- | nixpkgs/pkgs/development/libraries/libvirt/default.nix | 387 |
1 files changed, 238 insertions, 149 deletions
diff --git a/nixpkgs/pkgs/development/libraries/libvirt/default.nix b/nixpkgs/pkgs/development/libraries/libvirt/default.nix index 03d0e17cb4c3..14e0e478790c 100644 --- a/nixpkgs/pkgs/development/libraries/libvirt/default.nix +++ b/nixpkgs/pkgs/development/libraries/libvirt/default.nix @@ -1,85 +1,122 @@ { lib -, stdenv -, fetchurl -, fetchFromGitLab -, makeWrapper , autoreconfHook -, fetchpatch +, bash-completion +, bridge-utils +, cmake , coreutils -, libxml2 -, gnutls -, perl -, python3 -, attr -, glib +, curl +, darwin +, dbus +, dnsmasq , docutils -, iproute2 -, readline -, lvm2 -, util-linux -, systemd -, libpciaccess +, fetchFromGitLab +, fetchurl , gettext -, libtasn1 +, glib +, gnutls +, iproute2 , iptables , libgcrypt -, yajl -, pmutils -, libcap_ng -, libapparmor -, dnsmasq -, libnl , libpcap +, libtasn1 +, libxml2 , libxslt -, xhtml1 -, numad -, numactl -, perlPackages -, curl -, libiconv -, gmp -, zfs -, parted -, bridge-utils -, dmidecode -, dbus -, libtirpc -, rpcsvc-proto -, darwin +, makeWrapper , meson , ninja -, audit -, cmake -, bash-completion +, perl +, perlPackages , pkg-config -, enableXen ? false -, xen ? null -, enableIscsi ? false -, openiscsi +, 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 +, ceph ? null , enableGlusterfs ? false -, glusterfs -, Carbon -, AppKit +, glusterfs ? null +, enableIscsi ? false +, openiscsi ? null +, libiscsi ? null +, enableXen ? false +, xen ? null +, enableZfs ? stdenv.isLinux +, zfs ? null }: with lib; -# if you update, also bump <nixpkgs/pkgs/development/python-modules/libvirt/default.nix> and SysVirt in <nixpkgs/pkgs/top-level/perl-packages.nix> let - buildFromTarball = stdenv.isDarwin; + 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"; - version = "7.10.0"; + # 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 buildFromTarball then + if isDarwin then fetchurl { url = "https://libvirt.org/sources/${pname}-${version}.tar.xz"; - sha256 = "sha256-yzGAFK8JcyeSjG49cpIuO+AqPmQBJHsqpS2auOC0gPk="; + sha256 = "sha256-PGxDvs/+s0o/OXxhYgaqaaiT/4v16CCDk8hOjnU1KTQ="; } else fetchFromGitLab @@ -87,76 +124,84 @@ stdenv.mkDerivation rec { owner = pname; repo = pname; rev = "v${version}"; - sha256 = "sha256-bB8LsjZFeJbMmmC0YRPyMag2MBhwagUFC7aB1KhZEkA="; + sha256 = "sha256-nk8pBlss+g4EMy+RnAOyz6YlGGvlBvl5aBpcytsK1wY="; fetchSubmodules = true; }; patches = [ ./0001-meson-patch-in-an-install-prefix-for-building-on-nix.patch - ./0002-meson-patch-ch-install-prefix.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 = [ - ninja meson + cmake + docutils makeWrapper + ninja pkg-config - docutils - ] ++ optional (!stdenv.isDarwin) [ - rpcsvc-proto - ] ++ optionals stdenv.isDarwin [ - darwin.developer_cmds # needed for rpcgen - ]; + ] + ++ optional (!isDarwin) rpcsvc-proto + # NOTE: needed for rpcgen + ++ optional isDarwin darwin.developer_cmds; buildInputs = [ bash-completion - pkg-config - libxml2 + curl + dbus + gettext + glib gnutls + libgcrypt + libpcap + libtasn1 + libxml2 + libxslt perl + perlPackages.XMLXPath + pkg-config python3 readline - gettext - libtasn1 - libgcrypt - yajl - libxslt xhtml1 - perlPackages.XMLXPath - curl - libpcap - glib - dbus - ] ++ optionals stdenv.isLinux [ + yajl + ] ++ optionals isLinux [ + acl + attr audit - libpciaccess - lvm2 - util-linux - systemd - libnl - numad - zfs + fuse libapparmor libcap_ng + libnl + libpciaccess + libtirpc + lvm2 numactl - attr + numad parted - libtirpc - ] ++ optionals (enableXen && stdenv.isLinux && stdenv.isx86_64) [ - xen - ] ++ optionals enableIscsi [ - openiscsi - ] ++ optionals enableCeph [ - ceph - ] ++ optionals enableGlusterfs [ - glusterfs - ] ++ optionals stdenv.isDarwin [ - libiconv - gmp - Carbon + 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 @@ -164,80 +209,124 @@ stdenv.mkDerivation rec { 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=${lib.makeBinPath ([ dnsmasq ] ++ optionals stdenv.isLinux [ iproute2 iptables lvm2 systemd numad ] ++ optionals enableIscsi [ openiscsi ])}:$PATH + 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 = "auto"; + mesonAutoFeatures = "disabled"; mesonFlags = let - opt = option: enable: "-D${option}=${if enable then "enabled" else "disabled"}"; + 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" - "-Dinstall_prefix=${placeholder "out"}" - "-Dlocalstatedir=/var" - "-Drunstatedir=/run" - "-Dlibpcap=enabled" - "-Ddriver_qemu=enabled" - "-Ddriver_vmware=enabled" - "-Ddriver_vbox=enabled" - "-Ddriver_test=enabled" - "-Ddriver_esx=enabled" - "-Ddriver_remote=enabled" - "-Dpolkit=enabled" - (opt "storage_iscsi" enableIscsi) - ] ++ optionals stdenv.isLinux [ - (opt "storage_zfs" (zfs != null)) - "-Dattr=enabled" - "-Dapparmor=enabled" - "-Dsecdriver_apparmor=enabled" - "-Dnumad=enabled" - "-Dstorage_disk=enabled" - (opt "glusterfs" enableGlusterfs) - (opt "storage_rbd" enableCeph) - ] ++ optionals stdenv.isDarwin [ - "-Dinit_script=none" + (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) ]; - postInstall = - let - binPath = [ iptables iproute2 pmutils numad numactl bridge-utils dmidecode dnsmasq ] ++ optionals enableIscsi [ openiscsi ]; - in - '' - 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 stdenv.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:${makeBinPath binPath} - ''; + 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/"; @@ -248,6 +337,6 @@ stdenv.mkDerivation rec { ''; license = licenses.lgpl2Plus; platforms = platforms.unix; - maintainers = with maintainers; [ fpletz globin ]; + maintainers = with maintainers; [ fpletz globin lovesegfault ]; }; } |