Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 145 lines 4.6 kB view raw
1{ 2 lib, 3 stdenv, 4 docbook_xml_dtd_44, 5 docbook_xml_dtd_45, 6 docbook_xsl, 7 asciidoctor, 8 fetchurl, 9 flex, 10 kmod, 11 libxslt, 12 nixosTests, 13 perl, 14 perlPackages, 15 systemd, 16 keyutils, 17 udevCheckHook, 18 19 # drbd-utils are compiled twice, once with forOCF = true to extract 20 # its OCF definitions for use in the ocf-resource-agents derivation, 21 # then again with forOCF = false, where the ocf-resource-agents is 22 # provided as the OCF_ROOT. 23 forOCF ? false, 24 ocf-resource-agents, 25}: 26 27stdenv.mkDerivation rec { 28 pname = "drbd"; 29 version = "9.27.0"; 30 31 src = fetchurl { 32 url = "https://pkg.linbit.com/downloads/drbd/utils/${pname}-utils-${version}.tar.gz"; 33 sha256 = "1qwdrjrgas8z8vc6c85xcrqaczjwyqd61yig01n44wa5z0j3v4aq"; 34 }; 35 36 nativeBuildInputs = [ 37 flex 38 libxslt 39 docbook_xsl 40 asciidoctor 41 keyutils 42 udevCheckHook 43 ]; 44 45 buildInputs = [ 46 perl 47 perlPackages.Po4a 48 ]; 49 50 configureFlags = [ 51 "--libdir=${placeholder "out"}/lib" 52 "--sbindir=${placeholder "out"}/bin" 53 "--localstatedir=/var" 54 "--sysconfdir=/etc" 55 "--without-distro" 56 ]; 57 58 makeFlags = [ 59 "SOURCE_DATE_EPOCH=1" 60 "WANT_DRBD_REPRODUCIBLE_BUILD=1" 61 ] 62 ++ lib.optional (!forOCF) "OCF_ROOT=${ocf-resource-agents}/usr/lib/ocf}"; 63 64 installFlags = [ 65 "prefix=" 66 "DESTDIR=${placeholder "out"}" 67 "localstatedir=/var" 68 "DRBD_LIB_DIR=/var/lib" 69 "INITDIR=/etc/init.d" 70 "udevrulesdir=/etc/udev/rules.d" 71 "sysconfdir=/etc" 72 "sbindir=/bin" 73 "datadir=" 74 "LIBDIR=/lib/drbd" 75 "mandir=/share/man" 76 ]; 77 78 postPatch = '' 79 patchShebangs . 80 substituteInPlace user/v84/drbdadm_usage_cnt.c \ 81 --replace '"/lib/drbd");' \ 82 '"${placeholder "out"}/lib/drbd");' 83 substituteInPlace user/v9/drbdsetup_linux.c \ 84 --replace 'ret = system("/sbin/modprobe drbd");' \ 85 'ret = system("${kmod}/bin/modprobe drbd");' 86 substituteInPlace user/v84/drbdsetup.c \ 87 --replace 'system("/sbin/modprobe drbd")' \ 88 'system("${kmod}/bin/modprobe drbd")' 89 substituteInPlace documentation/ra2refentry.xsl \ 90 --replace "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" \ 91 "${docbook_xml_dtd_44}/xml/dtd/docbook/docbookx.dtd" 92 function patch_docbook45() { 93 substituteInPlace $1 \ 94 --replace "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" \ 95 "${docbook_xml_dtd_45}/xml/dtd/docbook/docbookx.dtd" 96 } 97 patch_docbook45 documentation/v9/drbd.conf.xml.in 98 patch_docbook45 documentation/v9/drbdsetup.xml.in 99 patch_docbook45 documentation/v84/drbdsetup.xml 100 patch_docbook45 documentation/v84/drbd.conf.xml 101 # The ja documentation is disabled because: 102 # make[1]: Entering directory '/build/drbd-utils-9.16.0/documentation/ja/v84' 103 # /nix/store/wyx2nn2pjcn50lc95c6qgsgm606rn0x2-perl5.32.1-po4a-0.62/bin/po4a-translate -f docbook -M utf-8 -L utf-8 -keep 0 -m ../../v84/drbdsetup.xml -p drbdsetup.xml.po -l drbdsetup.xml 104 # Use of uninitialized value $args[1] in sprintf at /nix/store/wyx2nn2pjcn50lc95c6qgsgm606rn0x2-perl5.32.1-po4a-0.62/lib/perl5/site_perl/Locale/Po4a/Common.pm line 134. 105 # Invalid po file drbdsetup.xml.po: 106 substituteInPlace Makefile.in \ 107 --replace 'DOC_DIRS := documentation/v9 documentation/ja/v9' \ 108 'DOC_DIRS := documentation/v9' \ 109 --replace 'DOC_DIRS += documentation/v84 documentation/ja/v84' \ 110 'DOC_DIRS += documentation/v84' \ 111 --replace '$(MAKE) -C documentation/ja/v9 doc' \ 112 "" \ 113 --replace '$(MAKE) -C documentation/ja/v84 doc' \ 114 "" 115 substituteInPlace user/v9/drbdtool_common.c \ 116 --replace 'add_component_to_path("/lib/drbd");' \ 117 'add_component_to_path("${placeholder "out"}/lib/drbd");' 118 ''; 119 120 preConfigure = '' 121 export PATH=${systemd}/sbin:$PATH 122 ''; 123 124 enableParallelBuilding = true; 125 126 doInstallCheck = true; 127 128 passthru.tests.drbd = nixosTests.drbd; 129 130 meta = with lib; { 131 homepage = "https://linbit.com/drbd/"; 132 description = "Distributed Replicated Block Device, a distributed storage system for Linux (userspace utilities)"; 133 license = licenses.gpl2Plus; 134 platforms = platforms.linux; 135 maintainers = with maintainers; [ 136 ryantm 137 astro 138 birkb 139 ]; 140 longDescription = '' 141 DRBD is a software-based, shared-nothing, replicated storage solution 142 mirroring the content of block devices (hard disks, partitions, logical volumes, and so on) between hosts. 143 ''; 144 }; 145}