nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at python-updates 664 lines 20 kB view raw
1{ 2 lib, 3 stdenv, 4 runCommand, 5 fetchurl, 6 fetchFromGitHub, 7 fetchPypi, 8 fetchpatch2, 9 callPackage, 10 11 # Build time 12 autoconf, 13 automake, 14 cmake, 15 ensureNewerSourcesHook, 16 # To see which `fmt` version Ceph upstream recommends, check its `src/fmt` submodule. 17 # 18 # Ceph does not currently build with `fmt_10`; see https://github.com/NixOS/nixpkgs/issues/281027#issuecomment-1899128557 19 # If we want to switch for that before upstream fixes it, use this patch: 20 # https://github.com/NixOS/nixpkgs/pull/281858#issuecomment-1899648638 21 fmt_9, 22 git, 23 libtool, 24 makeWrapper, 25 nasm, 26 pkg-config, 27 which, 28 openssl, 29 30 # Tests 31 nixosTests, 32 33 # Runtime dependencies 34 35 # Remove once Ceph supports arrow-cpp >= 20, see: 36 # * https://tracker.ceph.com/issues/71269 37 # * https://github.com/NixOS/nixpkgs/issues/406306 38 ceph-arrow-cpp ? callPackage ./arrow-cpp-19.nix { }, 39 babeltrace, 40 # Note when trying to upgrade boost: 41 # * When upgrading Ceph, it's recommended to check which boost version Ceph uses on Fedora, 42 # and default to that. 43 # * The version that Ceph downloads if `-DWITH_SYSTEM_BOOST:BOOL=ON` is not given 44 # is declared in `cmake/modules/BuildBoost.cmake` line `set(boost_version ...)`. 45 # 46 # If you want to upgrade to boost >= 1.86, you need a Ceph version that 47 # has this PR in: 48 # https://github.com/ceph/ceph/pull/61312 49 boost183, 50 bzip2, 51 cryptsetup, 52 cunit, 53 e2fsprogs, 54 doxygen, 55 getopt, 56 gperf, 57 graphviz, 58 gnugrep, 59 gtest, 60 icu, 61 kmod, 62 libcap, 63 libcap_ng, 64 libnbd, 65 libnl, 66 libxml2, 67 lmdb, 68 lttng-ust, 69 # Ceph currently requires >= 5.3 70 lua5_4, 71 lvm2, 72 lz4, 73 oath-toolkit, 74 openldap, 75 parted, 76 python311, # to get an idea which Python versions are supported by Ceph, see upstream `do_cmake.sh` (see `PYBUILD=` variable) 77 rdkafka, 78 rocksdb, 79 snappy, 80 openssh, 81 sqlite, 82 utf8proc, 83 xfsprogs, 84 zlib, 85 zstd, 86 87 # Dependencies of overridden Python dependencies, hopefully we can remove these soon. 88 rustPlatform, 89 90 # Optional Dependencies 91 curl ? null, 92 expat ? null, 93 fuse ? null, 94 libatomic_ops ? null, 95 libedit ? null, 96 libs3 ? null, 97 yasm ? null, 98 99 # Mallocs 100 gperftools ? null, 101 jemalloc ? null, 102 103 # Crypto Dependencies 104 cryptopp ? null, 105 nspr ? null, 106 nss ? null, 107 108 # Linux Only Dependencies 109 linuxHeaders, 110 systemd, 111 util-linux, 112 libuuid, 113 udev, 114 keyutils, 115 rdma-core, 116 rabbitmq-c, 117 libaio ? null, 118 libxfs ? null, 119 liburing ? null, 120 zfs ? null, 121 withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd, 122}: 123 124# We must have one crypto library 125assert cryptopp != null || (nss != null && nspr != null); 126 127let 128 shouldUsePkg = 129 pkg: if pkg != null && lib.meta.availableOn stdenv.hostPlatform pkg then pkg else null; 130 131 optYasm = shouldUsePkg yasm; 132 optExpat = shouldUsePkg expat; 133 optCurl = shouldUsePkg curl; 134 optFuse = shouldUsePkg fuse; 135 optLibedit = shouldUsePkg libedit; 136 optLibatomic_ops = shouldUsePkg libatomic_ops; 137 optLibs3 = shouldUsePkg libs3; 138 139 optJemalloc = shouldUsePkg jemalloc; 140 optGperftools = shouldUsePkg gperftools; 141 142 optCryptopp = shouldUsePkg cryptopp; 143 optNss = shouldUsePkg nss; 144 optNspr = shouldUsePkg nspr; 145 146 optLibaio = shouldUsePkg libaio; 147 optLibxfs = shouldUsePkg libxfs; 148 optZfs = shouldUsePkg zfs; 149 150 # Downgrade rocksdb, 7.10 breaks ceph 151 rocksdb' = rocksdb.overrideAttrs { 152 version = "7.9.2"; 153 src = fetchFromGitHub { 154 owner = "facebook"; 155 repo = "rocksdb"; 156 tag = "v7.9.2"; 157 hash = "sha256-5P7IqJ14EZzDkbjaBvbix04ceGGdlWBuVFH/5dpD5VM="; 158 }; 159 }; 160 161 hasRadosgw = optExpat != null && optCurl != null && optLibedit != null; 162 163 # Malloc implementation (can be jemalloc, tcmalloc or null) 164 malloc = if optJemalloc != null then optJemalloc else optGperftools; 165 166 # We prefer nss over cryptopp 167 cryptoStr = 168 if optNss != null && optNspr != null then 169 "nss" 170 else if optCryptopp != null then 171 "cryptopp" 172 else 173 "none"; 174 175 cryptoLibsMap = { 176 nss = [ 177 optNss 178 optNspr 179 ]; 180 cryptopp = [ optCryptopp ]; 181 none = [ ]; 182 }; 183 184 getMeta = description: { 185 homepage = "https://ceph.io/en/"; 186 inherit description; 187 license = with lib.licenses; [ 188 lgpl21 189 gpl2Only 190 bsd3 191 mit 192 publicDomain 193 ]; 194 maintainers = with lib.maintainers; [ 195 adev 196 ak 197 johanot 198 krav 199 nh2 200 benaryorg 201 ]; 202 platforms = [ 203 "x86_64-linux" 204 "aarch64-linux" 205 ]; 206 }; 207 208 ceph-common = 209 with python.pkgs; 210 buildPythonPackage { 211 pname = "ceph-common"; 212 format = "setuptools"; 213 inherit src version; 214 215 sourceRoot = "ceph-${version}/src/python-common"; 216 217 propagatedBuildInputs = [ 218 pyyaml 219 ]; 220 221 nativeCheckInputs = [ 222 pytestCheckHook 223 ]; 224 225 disabledTests = [ 226 # requires network access 227 "test_valid_addr" 228 ]; 229 230 meta = getMeta "Ceph common module for code shared by manager modules"; 231 }; 232 233 # Watch out for python <> boost compatibility 234 python = python311.override { 235 self = python; 236 packageOverrides = 237 self: super: 238 let 239 bcryptOverrideVersion = "4.0.1"; 240 in 241 { 242 # Ceph does not support the following yet: 243 # * `bcrypt` > 4.0 244 # * `cryptography` > 40 245 # See: 246 # * https://github.com/NixOS/nixpkgs/pull/281858#issuecomment-1899358602 247 # * Upstream issue: https://tracker.ceph.com/issues/63529 248 # > Python Sub-Interpreter Model Used by ceph-mgr Incompatible With Python Modules Based on PyO3 249 # * Moved to issue: https://tracker.ceph.com/issues/64213 250 # > MGR modules incompatible with later PyO3 versions - PyO3 modules may only be initialized once per interpreter process 251 252 bcrypt = super.bcrypt.overridePythonAttrs (old: rec { 253 pname = "bcrypt"; 254 version = bcryptOverrideVersion; 255 src = fetchPypi { 256 inherit pname version; 257 hash = "sha256-J9N1kDrIJhz+QEf2cJ0W99GNObHskqr3KvmJVSplDr0="; 258 }; 259 cargoRoot = "src/_bcrypt"; 260 cargoDeps = rustPlatform.fetchCargoVendor { 261 inherit 262 pname 263 version 264 src 265 cargoRoot 266 ; 267 hash = "sha256-8PyCgh/rUO8uynzGdgylAsb5k55dP9fCnf40UOTCR/M="; 268 }; 269 }); 270 271 # We pin the older `cryptography` 40 here; 272 # this also forces us to pin other packages, see below 273 cryptography = self.callPackage ./old-python-packages/cryptography.nix { }; 274 275 # This is the most recent version of `pyopenssl` that's still compatible with `cryptography` 40. 276 # See https://github.com/NixOS/nixpkgs/pull/281858#issuecomment-1899358602 277 # and https://github.com/pyca/pyopenssl/blob/d9752e44127ba36041b045417af8a0bf16ec4f1e/CHANGELOG.rst#2320-2023-05-30 278 pyopenssl = super.pyopenssl.overridePythonAttrs (old: rec { 279 version = "23.1.1"; 280 src = fetchPypi { 281 pname = "pyOpenSSL"; 282 inherit version; 283 hash = "sha256-hBSYub7GFiOxtsR+u8AjZ8B9YODhlfGXkIF/EMyNsLc="; 284 }; 285 disabledTests = old.disabledTests or [ ] ++ [ 286 "test_export_md5_digest" 287 ]; 288 disabledTestPaths = old.disabledTestPaths or [ ] ++ [ 289 "tests/test_ssl.py" 290 ]; 291 propagatedBuildInputs = old.propagatedBuildInputs or [ ] ++ [ 292 self.flaky 293 ]; 294 # hack: avoid building docs due to incompatibility with current sphinx 295 nativeBuildInputs = [ openssl ]; # old.nativeBuildInputs but without sphinx* 296 outputs = lib.filter (o: o != "doc") old.outputs; 297 }); 298 299 # This is the most recent version of `trustme` that's still compatible with `cryptography` 40. 300 # See https://github.com/NixOS/nixpkgs/issues/359723 301 # and https://github.com/python-trio/trustme/commit/586f7759d5c27beb44da60615a71848eb2a5a490 302 trustme = self.callPackage ./old-python-packages/trustme.nix { }; 303 304 fastapi = super.fastapi.overridePythonAttrs (old: { 305 # Flaky test: 306 # ResourceWarning: Unclosed <MemoryObjectSendStream> 307 # Unclear whether it's flaky in general or only in this overridden package set. 308 doCheck = false; 309 }); 310 311 # Ceph does not support `kubernetes` >= 19, see: 312 # https://github.com/NixOS/nixpkgs/pull/281858#issuecomment-1900324090 313 kubernetes = super.kubernetes.overridePythonAttrs (old: rec { 314 version = "18.20.0"; 315 src = fetchFromGitHub { 316 owner = "kubernetes-client"; 317 repo = "python"; 318 rev = "v${version}"; 319 sha256 = "1sawp62j7h0yksmg9jlv4ik9b9i1a1w9syywc9mv8x89wibf5ql1"; 320 fetchSubmodules = true; 321 }; 322 }); 323 324 }; 325 }; 326 327 boost' = boost183.override { 328 enablePython = true; 329 inherit python; 330 }; 331 332 # TODO: split this off in build and runtime environment 333 ceph-python-env = python.withPackages ( 334 ps: with ps; [ 335 ceph-common 336 337 # build time 338 cython_0 339 340 # debian/control 341 bcrypt 342 cherrypy 343 influxdb 344 jinja2 345 kubernetes 346 natsort 347 numpy 348 pecan 349 prettytable 350 pyjwt 351 pyopenssl 352 python-dateutil 353 pyyaml 354 requests 355 routes 356 scikit-learn 357 scipy 358 setuptools 359 sphinx 360 virtualenv 361 werkzeug 362 363 # src/cephadm/zipapp-reqs.txt 364 markupsafe 365 366 # src/pybind/mgr/requirements-required.txt 367 cryptography 368 jsonpatch 369 370 # src/tools/cephfs/shell/setup.py 371 cmd2 372 colorama 373 ] 374 ); 375 inherit (ceph-python-env.python) sitePackages; 376 377 version = "19.2.3"; 378 src = fetchurl { 379 url = "https://download.ceph.com/tarballs/ceph-${version}.tar.gz"; 380 hash = "sha256-zlgp28C81SZbaFJ4yvQk4ZgYz4K/aZqtcISTO8LscSU="; 381 }; 382in 383stdenv.mkDerivation { 384 pname = "ceph"; 385 inherit src version; 386 387 patches = [ 388 ./boost-1.85.patch 389 390 (fetchpatch2 { 391 name = "ceph-boost-1.86-uuid.patch"; 392 url = "https://github.com/ceph/ceph/commit/01306208eac492ee0e67bff143fc32d0551a2a6f.patch?full_index=1"; 393 hash = "sha256-OnDrr72inzGXXYxPFQevsRZImSvI0uuqFHqtFU2dPQE="; 394 }) 395 396 # See: 397 # * <https://github.com/boostorg/python/issues/394> 398 # * <https://aur.archlinux.org/cgit/aur.git/commit/?h=ceph&id=8c5cc7d8deec002f7596b6d0860859a0a718f12b> 399 # * <https://github.com/ceph/ceph/pull/60999> 400 ./boost-1.86-PyModule.patch 401 402 (fetchpatch2 { 403 name = "ceph-cmake-4.patch"; 404 url = "https://gitlab.alpinelinux.org/ashpool/aports/-/raw/d22b70eafe33c3daabe4eea6913c5be87d9463ad/community/ceph19/cpp_redis.patch"; 405 hash = "sha256-wxPIsYt25CjXhJ6kmr/MXwFD58Sl4y4W+r9jAMND+uw="; 406 }) 407 408 # See: 409 # * <https://github.com/ceph/ceph/pull/55560> 410 # * <https://github.com/ceph/ceph/pull/60575> 411 (fetchpatch2 { 412 name = "ceph-systemd-sans-cluster-name.patch"; 413 url = "https://github.com/ceph/ceph/commit/5659920c7c128cb8d9552580dbe23dd167a56c31.patch?full_index=1"; 414 hash = "sha256-Uch8ZghyTowUvSq0p/RxiVpdG1Yqlww9inpVksO6zyk="; 415 }) 416 (fetchpatch2 { 417 name = "ceph-systemd-prefix.patch"; 418 url = "https://github.com/ceph/ceph/commit/9b38df488d7101b02afa834ea518fd52076d582a.patch?full_index=1"; 419 hash = "sha256-VcbJhCGTUdNISBd6P96Mm5M3fFVmZ8r7pMl+srQmnIQ="; 420 }) 421 (fetchpatch2 { 422 name = "ceph-19.2.2-gcc15.patch"; 423 url = "https://github.com/ceph/ceph/commit/830925f0dd196f920893b1947ae74171a202e825.patch"; 424 hash = "sha256-bs+noyjiyAjwqfgSHDxdZJnZ/kptOOcz75KMqAaROpg="; 425 }) 426 ]; 427 428 nativeBuildInputs = [ 429 autoconf # `autoreconf` is called, e.g. for `qatlib_ext` 430 automake # `aclocal` is called, e.g. for `qatlib_ext` 431 cmake 432 fmt_9 433 git 434 makeWrapper 435 libtool # used e.g. for `qatlib_ext` 436 nasm 437 pkg-config 438 python 439 python.pkgs.python # for the toPythonPath function 440 python.pkgs.wrapPython 441 which 442 (ensureNewerSourcesHook { year = "1980"; }) 443 # for building docs/man-pages presumably 444 doxygen 445 graphviz 446 ]; 447 448 buildInputs = 449 cryptoLibsMap.${cryptoStr} 450 ++ [ 451 ceph-arrow-cpp 452 babeltrace 453 boost' 454 bzip2 455 # Adding `ceph-python-env` here adds the env's `site-packages` to `PYTHONPATH` during the build. 456 # This is important, otherwise the build system may not find the Python deps and then 457 # silently skip installing ceph-volume and other Ceph python tools. 458 ceph-python-env 459 cryptsetup 460 cunit 461 e2fsprogs # according to `debian/control` file, `ceph-volume` is supposed to use it 462 gperf 463 gtest 464 icu 465 libcap 466 libnbd 467 libnl 468 libxml2 469 lmdb 470 lttng-ust 471 lua5_4 472 lvm2 # according to `debian/control` file, e.g. `pvs` command used by `src/ceph-volume/ceph_volume/api/lvm.py` 473 lz4 474 malloc 475 oath-toolkit 476 openldap 477 optLibatomic_ops 478 optLibs3 479 optYasm 480 parted # according to `debian/control` file, used by `src/ceph-volume/ceph_volume/util/disk.py` 481 rdkafka 482 rocksdb' 483 snappy 484 openssh # according to `debian/control` file, `ssh` command used by `cephadm` 485 sqlite 486 utf8proc 487 xfsprogs # according to `debian/control` file, `ceph-volume` is supposed to use it 488 zlib 489 zstd 490 ] 491 ++ lib.optionals stdenv.hostPlatform.isLinux [ 492 keyutils 493 libcap_ng 494 liburing 495 libuuid 496 linuxHeaders 497 optLibaio 498 optLibxfs 499 optZfs 500 rabbitmq-c 501 rdma-core 502 udev 503 util-linux 504 ] 505 ++ lib.optionals hasRadosgw [ 506 optCurl 507 optExpat 508 optFuse 509 optLibedit 510 ]; 511 512 # Picked up, amongst others, by `wrapPythonPrograms`. 513 pythonPath = [ 514 ceph-python-env 515 "${placeholder "out"}/${ceph-python-env.sitePackages}" 516 ]; 517 518 # * `unset AS` because otherwise the Ceph CMake build errors with 519 # configure: error: No modern nasm or yasm found as required. Nasm should be v2.11.01 or later (v2.13 for AVX512) and yasm should be 1.2.0 or later. 520 # because the code at 521 # https://github.com/intel/isa-l/blob/633add1b569fe927bace3960d7c84ed9c1b38bb9/configure.ac#L99-L191 522 # doesn't even consider using `nasm` or `yasm` but instead uses `$AS` 523 # from `gcc-wrapper`. 524 # (Ceph's error message is extra confusing, because it says 525 # `No modern nasm or yasm found` when in fact it found e.g. `nasm` 526 # but then uses `$AS` instead. 527 # * replace /sbin and /bin based paths with direct nix store paths 528 # * increase the `command` buffer size since 2 nix store paths cannot fit within 128 characters 529 preConfigure = '' 530 unset AS 531 532 substituteInPlace src/common/module.c \ 533 --replace "char command[128];" "char command[256];" \ 534 --replace "/sbin/modinfo" "${kmod}/bin/modinfo" \ 535 --replace "/sbin/modprobe" "${kmod}/bin/modprobe" \ 536 --replace "/bin/grep" "${gnugrep}/bin/grep" 537 538 # Patch remount to use full path to mount(8), otherwise ceph-fuse fails when run 539 # from a systemd unit for example. 540 substituteInPlace src/client/fuse_ll.cc \ 541 --replace-fail "mount -i -o remount" "${util-linux}/bin/mount -i -o remount" 542 543 substituteInPlace systemd/*.service.in \ 544 --replace-quiet "/bin/kill" "${util-linux}/bin/kill" 545 546 substituteInPlace src/{ceph-osd-prestart.sh,ceph-post-file.in,init-ceph.in} \ 547 --replace-fail "GETOPT=/usr/local/bin/getopt" "GETOPT=${getopt}/bin/getopt" \ 548 --replace-fail "GETOPT=getopt" "GETOPT=${getopt}/bin/getopt" 549 550 # The install target needs to be in PYTHONPATH for "*.pth support" check to succeed 551 export PYTHONPATH=$PYTHONPATH:$lib/${sitePackages}:$out/${sitePackages} 552 patchShebangs src/ 553 ''; 554 555 cmakeFlags = [ 556 "-DCMAKE_INSTALL_DATADIR=${placeholder "lib"}/lib" 557 558 "-DWITH_CEPHFS_SHELL:BOOL=ON" 559 "-DWITH_SYSTEMD:BOOL=${if withSystemd then "ON" else "OFF"}" 560 "-DSYSTEMD_SYSTEM_UNIT_DIR=${placeholder "out"}/lib/systemd/system" 561 # `WITH_JAEGER` requires `thrift` as a depenedncy (fine), but the build fails with: 562 # CMake Error at src/opentelemetry-cpp-stamp/opentelemetry-cpp-build-Release.cmake:49 (message): 563 # Command failed: 2 564 # 565 # 'make' 'opentelemetry_trace' 'opentelemetry_exporter_jaeger_trace' 566 # 567 # See also 568 # 569 # /build/ceph-18.2.0/build/src/opentelemetry-cpp/src/opentelemetry-cpp-stamp/opentelemetry-cpp-build-*.log 570 # and that file contains: 571 # /build/ceph-18.2.0/src/jaegertracing/opentelemetry-cpp/exporters/jaeger/src/TUDPTransport.cc: In member function 'virtual void opentelemetry::v1::exporter::jaeger::TUDPTransport::close()': 572 # /build/ceph-18.2.0/src/jaegertracing/opentelemetry-cpp/exporters/jaeger/src/TUDPTransport.cc:71:7: error: '::close' has not been declared; did you mean 'pclose'? 573 # 71 | ::THRIFT_CLOSESOCKET(socket_); 574 # | ^~~~~~~~~~~~~~~~~~ 575 # Looks like `close()` is somehow not included. 576 # But the relevant code is already removed in `open-telemetry` 1.10: https://github.com/open-telemetry/opentelemetry-cpp/pull/2031 577 # So it's probably not worth trying to fix that for this Ceph version, 578 # and instead just disable Ceph's Jaeger support. 579 "-DWITH_JAEGER:BOOL=OFF" 580 "-DWITH_TESTS:BOOL=OFF" 581 582 # Use our own libraries, where possible 583 "-DWITH_SYSTEM_ARROW:BOOL=ON" # Only used if other options enable Arrow support. 584 "-DWITH_SYSTEM_BOOST:BOOL=ON" 585 "-DWITH_SYSTEM_GTEST:BOOL=ON" 586 "-DWITH_SYSTEM_ROCKSDB:BOOL=ON" 587 "-DWITH_SYSTEM_UTF8PROC:BOOL=ON" 588 "-DWITH_SYSTEM_ZSTD:BOOL=ON" 589 590 # Use our own python libraries too, see: 591 # https://github.com/NixOS/nixpkgs/pull/344993#issuecomment-2391046329 592 "-DCEPHADM_BUNDLED_DEPENDENCIES=none" 593 594 # TODO breaks with sandbox, tries to download stuff with npm 595 "-DWITH_MGR_DASHBOARD_FRONTEND:BOOL=OFF" 596 # WITH_XFS has been set default ON from Ceph 16, keeping it optional in nixpkgs for now 597 "-DWITH_XFS=${if optLibxfs != null then "ON" else "OFF"}" 598 ] 599 ++ lib.optional stdenv.hostPlatform.isLinux "-DWITH_SYSTEM_LIBURING=ON"; 600 601 preBuild = 602 # The legacy-option-headers target is not correctly empbedded in the build graph. 603 # It also contains some internal race conditions that we work around by building with `-j 1`. 604 # Upstream discussion for additional context at https://tracker.ceph.com/issues/63402. 605 '' 606 cmake --build . --target legacy-option-headers -j 1 607 ''; 608 609 postFixup = '' 610 wrapPythonPrograms 611 wrapProgram $out/bin/ceph-mgr --prefix PYTHONPATH ":" "$(toPythonPath ${placeholder "out"}):$(toPythonPath ${ceph-python-env})" 612 613 # Test that ceph-volume exists since the build system has a tendency to 614 # silently drop it with misconfigurations. 615 test -f $out/bin/ceph-volume 616 617 # Assert that getopt patch from preConfigure covered all instances 618 ! grep -F -r 'GETOPT=getopt' $out 619 ! grep -F -r 'GETOPT=/usr/local/bin/getopt' $out 620 621 mkdir -p $client/{bin,etc,${sitePackages},share/bash-completion/completions} 622 cp -r $out/bin/{ceph,.ceph-wrapped,rados,rbd,rbdmap} $client/bin 623 cp -r $out/bin/ceph-{authtool,conf,dencoder,rbdnamer,syn} $client/bin 624 cp -r $out/bin/rbd-replay* $client/bin 625 cp -r $out/sbin/mount.ceph $client/bin 626 cp -r $out/sbin/mount.fuse.ceph $client/bin 627 ln -s bin $client/sbin 628 cp -r $out/${sitePackages}/* $client/${sitePackages} 629 cp -r $out/etc/bash_completion.d $client/share/bash-completion/completions 630 # wrapPythonPrograms modifies .ceph-wrapped, so lets just update its paths 631 substituteInPlace $client/bin/ceph --replace $out $client 632 substituteInPlace $client/bin/.ceph-wrapped --replace $out $client 633 ''; 634 635 outputs = [ 636 "out" 637 "lib" 638 "client" 639 "dev" 640 "doc" 641 "man" 642 ]; 643 644 doCheck = false; # uses pip to install things from the internet 645 646 # Takes 7+h to build with 2 cores. 647 requiredSystemFeatures = [ "big-parallel" ]; 648 649 meta = getMeta "Distributed storage system"; 650 651 passthru = { 652 inherit version; 653 inherit python; # to be able to test our overridden packages above individually with `nix-build -A` 654 arrow-cpp = ceph-arrow-cpp; 655 tests = { 656 inherit (nixosTests) 657 ceph-multi-node 658 ceph-single-node 659 ceph-single-node-bluestore 660 ceph-single-node-bluestore-dmcrypt 661 ; 662 }; 663 }; 664}