summary refs log tree commit diff
path: root/pkgs/development/libraries
diff options
context:
space:
mode:
authorBernardo Meurer <bernardo@meurer.org>2022-03-11 15:24:01 -0800
committerBernardo Meurer <bernardo@meurer.org>2022-03-12 09:52:12 -0800
commitf5e999d5a05273cd4a7c47eafdf2f4008f20743a (patch)
treee9607eb0332a951ac89ec6dd47ae374717f84418 /pkgs/development/libraries
parent97829a8bf6fe98e70b7a9f2e0f571a3ba0a128b2 (diff)
downloadnixpkgs-f5e999d5a05273cd4a7c47eafdf2f4008f20743a.tar
nixpkgs-f5e999d5a05273cd4a7c47eafdf2f4008f20743a.tar.gz
nixpkgs-f5e999d5a05273cd4a7c47eafdf2f4008f20743a.tar.bz2
nixpkgs-f5e999d5a05273cd4a7c47eafdf2f4008f20743a.tar.lz
nixpkgs-f5e999d5a05273cd4a7c47eafdf2f4008f20743a.tar.xz
nixpkgs-f5e999d5a05273cd4a7c47eafdf2f4008f20743a.tar.zst
nixpkgs-f5e999d5a05273cd4a7c47eafdf2f4008f20743a.zip
libvirt: cleanup
Diffstat (limited to 'pkgs/development/libraries')
-rw-r--r--pkgs/development/libraries/libvirt/default.nix370
1 files changed, 215 insertions, 155 deletions
diff --git a/pkgs/development/libraries/libvirt/default.nix b/pkgs/development/libraries/libvirt/default.nix
index c12ee9e554f..7d2bc995da6 100644
--- a/pkgs/development/libraries/libvirt/default.nix
+++ b/pkgs/development/libraries/libvirt/default.nix
@@ -1,83 +1,115 @@
 { 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
-, parted
-, bridge-utils
-, dmidecode
-, dbus
-, libtirpc
-, rpcsvc-proto
-, darwin
+, makeWrapper
 , meson
 , ninja
-, audit
-, cmake
-, bash-completion
+, perl
+, perlPackages
 , pkg-config
-, enableCeph ? false, ceph ? null
-, enableGlusterfs ? false, glusterfs ? null
-, enableIscsi ? false, openiscsi ? null
-, enableXen ? false, xen ? null
-, enableZfs ? true, zfs ? null
-# Darwin
-, gmp
-, libiconv
+, 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;
 
-assert enableXen -> stdenv.isLinux && stdenv.isx86_64;
-assert enableCeph -> stdenv.isLinux;
-assert enableGlusterfs -> stdenv.isLinux;
-assert enableZfs -> stdenv.isLinux;
-
-# 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 = "8.1.0";
 
   src =
-    if buildFromTarball then
+    if isDarwin then
       fetchurl
         {
           url = "https://libvirt.org/sources/${pname}-${version}.tar.xz";
@@ -99,67 +131,64 @@ stdenv.mkDerivation rec {
   ];
 
   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
+    fuse
     libapparmor
     libcap_ng
+    libnl
+    libpciaccess
+    libtirpc
+    lvm2
     numactl
-    attr
+    numad
     parted
-    libtirpc
-  ] ++ optionals enableCeph [
-    ceph
-  ] ++ optionals enableGlusterfs [
-    glusterfs
-  ] ++ optionals enableIscsi [
-    openiscsi
-  ] ++ optionals enableXen [
-    xen
-  ] ++ optionals enableZfs [
-    zfs
-  ] ++ 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
@@ -167,87 +196,118 @@ 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"}";
-      enableDrivers = map (name: opt "driver_${name}" true);
+      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
     [
       "--localstatedir=${placeholder "out"}/var/"
-      "-Drunstatedir=${placeholder "out"}/run/"
-      "-Dlibpcap=enabled"
-      "-Dpolkit=enabled"
-      (opt "storage_iscsi" enableIscsi)
-    ] ++ optionals stdenv.isLinux [
-      "-Dattr=enabled"
-      "-Dapparmor=enabled"
-      "-Dsecdriver_apparmor=enabled"
-      "-Dnumad=enabled"
-      "-Dstorage_disk=enabled"
-      (opt "glusterfs" enableGlusterfs)
-      (opt "storage_rbd" enableCeph)
-      (opt "storage_zfs" enableZfs)
-    ] ++ optionals stdenv.isDarwin [
-      "-Dinit_script=none"
-    ] ++ (enableDrivers [
-      "ch"
-      "esx"
-      "interface"
-      "libvirtd"
-      "lxc"
-      "network"
-      "openvz"
-      "qemu"
-      "remote"
-      "secrets"
-      "test"
-      "vbox"
-      "vmware"
-    ] ++ lib.optional enableXen "libxl");
+      (cfg "init_script" (if isDarwin then "none" else "systemd"))
 
-  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
+      (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)
 
-      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}
-    '';
+      (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 = ''
+    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/";
@@ -258,6 +318,6 @@ stdenv.mkDerivation rec {
     '';
     license = licenses.lgpl2Plus;
     platforms = platforms.unix;
-    maintainers = with maintainers; [ fpletz globin ];
+    maintainers = with maintainers; [ fpletz globin lovesegfault ];
   };
 }