Remove old Ceph package overlay
The Ceph package is now integrated in upstream nixpkgs. Reviewed-by: Aleix Roca Nonell <aleix.rocanonell@bsc.es>
This commit is contained in:
		
							parent
							
								
									4e0fc52927
								
							
						
					
					
						commit
						d557158c3f
					
				
							
								
								
									
										405
									
								
								pkgs/ceph.nix
									
									
									
									
									
								
							
							
						
						
									
										405
									
								
								pkgs/ceph.nix
									
									
									
									
									
								
							| @ -1,405 +0,0 @@ | ||||
| { lib | ||||
| , stdenv | ||||
| , runCommand | ||||
| , fetchurl | ||||
| , fetchFromGitHub | ||||
| , fetchPypi | ||||
| 
 | ||||
| # Build time | ||||
| , cmake | ||||
| , ensureNewerSourcesHook | ||||
| , fmt | ||||
| , git | ||||
| , makeWrapper | ||||
| , nasm | ||||
| , pkg-config | ||||
| , which | ||||
| 
 | ||||
| # Tests | ||||
| , nixosTests | ||||
| 
 | ||||
| # Runtime dependencies | ||||
| , arrow-cpp | ||||
| , babeltrace | ||||
| , boost179 | ||||
| , bzip2 | ||||
| , cryptsetup | ||||
| , cunit | ||||
| , doxygen | ||||
| , gperf | ||||
| , graphviz | ||||
| , gtest | ||||
| , icu | ||||
| , libcap | ||||
| , libcap_ng | ||||
| , libnl | ||||
| , libxml2 | ||||
| , lttng-ust | ||||
| , lua | ||||
| , lz4 | ||||
| , oath-toolkit | ||||
| , openldap | ||||
| , python310 | ||||
| , rdkafka | ||||
| , rocksdb | ||||
| , snappy | ||||
| , sqlite | ||||
| , utf8proc | ||||
| , zlib | ||||
| , zstd | ||||
| 
 | ||||
| # Optional Dependencies | ||||
| , curl ? null | ||||
| , expat ? null | ||||
| , fuse ? null | ||||
| , libatomic_ops ? null | ||||
| , libedit ? null | ||||
| , libs3 ? null | ||||
| , yasm ? null | ||||
| 
 | ||||
| # Mallocs | ||||
| , gperftools ? null | ||||
| , jemalloc ? null | ||||
| 
 | ||||
| # Crypto Dependencies | ||||
| , cryptopp ? null | ||||
| , nspr ? null | ||||
| , nss ? null | ||||
| 
 | ||||
| # Linux Only Dependencies | ||||
| , linuxHeaders | ||||
| , util-linux | ||||
| , libuuid | ||||
| , udev | ||||
| , keyutils | ||||
| , rdma-core | ||||
| , rabbitmq-c | ||||
| , libaio ? null | ||||
| , libxfs ? null | ||||
| , liburing ? null | ||||
| , zfs ? null | ||||
| , ... | ||||
| }: | ||||
| 
 | ||||
| # We must have one crypto library | ||||
| assert cryptopp != null || (nss != null && nspr != null); | ||||
| 
 | ||||
| let | ||||
|   shouldUsePkg = pkg: if pkg != null && pkg.meta.available then pkg else null; | ||||
| 
 | ||||
|   optYasm = shouldUsePkg yasm; | ||||
|   optExpat = shouldUsePkg expat; | ||||
|   optCurl = shouldUsePkg curl; | ||||
|   optFuse = shouldUsePkg fuse; | ||||
|   optLibedit = shouldUsePkg libedit; | ||||
|   optLibatomic_ops = shouldUsePkg libatomic_ops; | ||||
|   optLibs3 = shouldUsePkg libs3; | ||||
| 
 | ||||
|   optJemalloc = shouldUsePkg jemalloc; | ||||
|   optGperftools = shouldUsePkg gperftools; | ||||
| 
 | ||||
|   optCryptopp = shouldUsePkg cryptopp; | ||||
|   optNss = shouldUsePkg nss; | ||||
|   optNspr = shouldUsePkg nspr; | ||||
| 
 | ||||
|   optLibaio = shouldUsePkg libaio; | ||||
|   optLibxfs = shouldUsePkg libxfs; | ||||
|   optZfs = shouldUsePkg zfs; | ||||
| 
 | ||||
|   # Downgrade rocksdb, 7.10 breaks ceph | ||||
|   rocksdb' = rocksdb.overrideAttrs { | ||||
|     version = "7.9.2"; | ||||
|     src = fetchFromGitHub { | ||||
|       owner = "facebook"; | ||||
|       repo = "rocksdb"; | ||||
|       rev = "refs/tags/v7.9.2"; | ||||
|       hash = "sha256-5P7IqJ14EZzDkbjaBvbix04ceGGdlWBuVFH/5dpD5VM="; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   hasRadosgw = optExpat != null && optCurl != null && optLibedit != null; | ||||
| 
 | ||||
|   # Malloc implementation (can be jemalloc, tcmalloc or null) | ||||
|   malloc = if optJemalloc != null then optJemalloc else optGperftools; | ||||
| 
 | ||||
|   # We prefer nss over cryptopp | ||||
|   cryptoStr = if optNss != null && optNspr != null then "nss" else | ||||
|     if optCryptopp != null then "cryptopp" else "none"; | ||||
| 
 | ||||
|   cryptoLibsMap = { | ||||
|     nss = [ optNss optNspr ]; | ||||
|     cryptopp = [ optCryptopp ]; | ||||
|     none = [ ]; | ||||
|   }; | ||||
| 
 | ||||
|   getMeta = description: with lib; { | ||||
|      homepage = "https://ceph.io/en/"; | ||||
|      inherit description; | ||||
|      license = with licenses; [ lgpl21 gpl2 bsd3 mit publicDomain ]; | ||||
|      maintainers = with maintainers; [ adev ak johanot krav ]; | ||||
|      platforms = [ "x86_64-linux" "aarch64-linux" ]; | ||||
|    }; | ||||
| 
 | ||||
|   ceph-common = with python.pkgs; buildPythonPackage { | ||||
|     pname = "ceph-common"; | ||||
|     inherit src version; | ||||
| 
 | ||||
|     sourceRoot = "ceph-${version}/src/python-common"; | ||||
| 
 | ||||
|     propagatedBuildInputs = [ | ||||
|       pyyaml | ||||
|     ]; | ||||
| 
 | ||||
|     nativeCheckInputs = [ | ||||
|       pytestCheckHook | ||||
|     ]; | ||||
| 
 | ||||
|     disabledTests = [ | ||||
|       # requires network access | ||||
|       "test_valid_addr" | ||||
|     ]; | ||||
| 
 | ||||
|     meta = getMeta "Ceph common module for code shared by manager modules"; | ||||
|   }; | ||||
| 
 | ||||
|   # Watch out for python <> boost compatibility | ||||
|   python = python310.override { | ||||
|     packageOverrides = self: super: { | ||||
|       sqlalchemy = super.sqlalchemy.overridePythonAttrs rec { | ||||
|         version = "1.4.46"; | ||||
|         src = fetchPypi { | ||||
|           pname = "SQLAlchemy"; | ||||
|           inherit version; | ||||
|           hash = "sha256-aRO4JH2KKS74MVFipRkx4rQM6RaB8bbxj2lwRSAMSjA="; | ||||
|         }; | ||||
|         disabledTestPaths = [ | ||||
|           "test/aaa_profiling" | ||||
|           "test/ext/mypy" | ||||
|         ]; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   boost = boost179.override { | ||||
|     enablePython = true; | ||||
|     inherit python; | ||||
|   }; | ||||
| 
 | ||||
|   # TODO: split this off in build and runtime environment | ||||
|   ceph-python-env = python.withPackages (ps: with ps; [ | ||||
|     ceph-common | ||||
| 
 | ||||
|     # build time | ||||
|     cython | ||||
| 
 | ||||
|     # debian/control | ||||
|     bcrypt | ||||
|     cherrypy | ||||
|     influxdb | ||||
|     jinja2 | ||||
|     kubernetes | ||||
|     natsort | ||||
|     numpy | ||||
|     pecan | ||||
|     prettytable | ||||
|     pyjwt | ||||
|     pyopenssl | ||||
|     python-dateutil | ||||
|     pyyaml | ||||
|     requests | ||||
|     routes | ||||
|     scikit-learn | ||||
|     scipy | ||||
|     setuptools | ||||
|     sphinx | ||||
|     virtualenv | ||||
|     werkzeug | ||||
| 
 | ||||
|     # src/pybind/mgr/requirements-required.txt | ||||
|     cryptography | ||||
|     jsonpatch | ||||
| 
 | ||||
|     # src/tools/cephfs/shell/setup.py | ||||
|     cmd2 | ||||
|     colorama | ||||
|   ]); | ||||
|   inherit (ceph-python-env.python) sitePackages; | ||||
| 
 | ||||
|   version = "18.2.0"; | ||||
|   src = fetchurl { | ||||
|     url = "https://download.ceph.com/tarballs/ceph-${version}.tar.gz"; | ||||
|     hash = "sha256:0k9nl6xi5brva51rr14m7ig27mmmd7vrpchcmqc40q3c2khn6ns9"; | ||||
|   }; | ||||
| in rec { | ||||
|   ceph = stdenv.mkDerivation { | ||||
|     pname = "ceph"; | ||||
|     inherit src version; | ||||
| 
 | ||||
|     nativeBuildInputs = [ | ||||
|       cmake | ||||
|       fmt | ||||
|       git | ||||
|       makeWrapper | ||||
|       nasm | ||||
|       pkg-config | ||||
|       python | ||||
|       python.pkgs.python # for the toPythonPath function | ||||
|       python.pkgs.wrapPython | ||||
|       which | ||||
|       (ensureNewerSourcesHook { year = "1980"; }) | ||||
|       # for building docs/man-pages presumably | ||||
|       doxygen | ||||
|       graphviz | ||||
|     ]; | ||||
| 
 | ||||
|     enableParallelBuilding = true; | ||||
| 
 | ||||
|     buildInputs = cryptoLibsMap.${cryptoStr} ++ [ | ||||
|       arrow-cpp | ||||
|       babeltrace | ||||
|       boost | ||||
|       bzip2 | ||||
|       ceph-python-env | ||||
|       cryptsetup | ||||
|       cunit | ||||
|       gperf | ||||
|       gtest | ||||
|       icu | ||||
|       libcap | ||||
|       libnl | ||||
|       libxml2 | ||||
|       lttng-ust | ||||
|       lua | ||||
|       lz4 | ||||
|       malloc | ||||
|       oath-toolkit | ||||
|       openldap | ||||
|       optLibatomic_ops | ||||
|       optLibs3 | ||||
|       optYasm | ||||
|       rdkafka | ||||
|       rocksdb' | ||||
|       snappy | ||||
|       sqlite | ||||
|       utf8proc | ||||
|       zlib | ||||
|       zstd | ||||
|     ] ++ lib.optionals stdenv.isLinux [ | ||||
|       keyutils | ||||
|       libcap_ng | ||||
|       liburing | ||||
|       libuuid | ||||
|       linuxHeaders | ||||
|       optLibaio | ||||
|       optLibxfs | ||||
|       optZfs | ||||
|       rabbitmq-c | ||||
|       rdma-core | ||||
|       udev | ||||
|       util-linux | ||||
|     ] ++ lib.optionals hasRadosgw [ | ||||
|       optCurl | ||||
|       optExpat | ||||
|       optFuse | ||||
|       optLibedit | ||||
|     ]; | ||||
| 
 | ||||
|     pythonPath = [ ceph-python-env "${placeholder "out"}/${ceph-python-env.sitePackages}" ]; | ||||
| 
 | ||||
|     preConfigure ='' | ||||
|       substituteInPlace src/common/module.c --replace "/sbin/modinfo"  "modinfo" | ||||
|       substituteInPlace src/common/module.c --replace "/sbin/modprobe" "modprobe" | ||||
|       substituteInPlace src/common/module.c --replace "/bin/grep" "grep" | ||||
| 
 | ||||
|       # install target needs to be in PYTHONPATH for "*.pth support" check to succeed | ||||
|       # set PYTHONPATH, so the build system doesn't silently skip installing ceph-volume and others | ||||
|       export PYTHONPATH=${ceph-python-env}/${sitePackages}:$lib/${sitePackages}:$out/${sitePackages} | ||||
|       patchShebangs src/ | ||||
|     ''; | ||||
| 
 | ||||
|     cmakeFlags = [ | ||||
|       "-DCMAKE_INSTALL_DATADIR=${placeholder "lib"}/lib" | ||||
| 
 | ||||
|       "-DWITH_CEPHFS_SHELL:BOOL=ON" | ||||
|       "-DWITH_SYSTEMD:BOOL=OFF" | ||||
|       # `WITH_JAEGER` requires `thrift` as a depenedncy (fine), but the build fails with: | ||||
|       #     CMake Error at src/opentelemetry-cpp-stamp/opentelemetry-cpp-build-Release.cmake:49 (message): | ||||
|       #     Command failed: 2 | ||||
|       # | ||||
|       #        'make' 'opentelemetry_trace' 'opentelemetry_exporter_jaeger_trace' | ||||
|       # | ||||
|       #     See also | ||||
|       # | ||||
|       #        /build/ceph-18.2.0/build/src/opentelemetry-cpp/src/opentelemetry-cpp-stamp/opentelemetry-cpp-build-*.log | ||||
|       # and that file contains: | ||||
|       #     /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()': | ||||
|       #     /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'? | ||||
|       #       71 |     ::THRIFT_CLOSESOCKET(socket_); | ||||
|       #          |       ^~~~~~~~~~~~~~~~~~ | ||||
|       # Looks like `close()` is somehow not included. | ||||
|       # But the relevant code is already removed in `open-telemetry` 1.10: https://github.com/open-telemetry/opentelemetry-cpp/pull/2031 | ||||
|       # So it's proably not worth trying to fix that for this Ceph version, | ||||
|       # and instead just disable Ceph's Jaeger support. | ||||
|       "-DWITH_JAEGER:BOOL=OFF" | ||||
|       "-DWITH_TESTS:BOOL=OFF" | ||||
| 
 | ||||
|       # Use our own libraries, where possible | ||||
|       "-DWITH_SYSTEM_ARROW:BOOL=ON" # Only used if other options enable Arrow support. | ||||
|       "-DWITH_SYSTEM_BOOST:BOOL=ON" | ||||
|       "-DWITH_SYSTEM_GTEST:BOOL=ON" | ||||
|       "-DWITH_SYSTEM_ROCKSDB:BOOL=ON" | ||||
|       "-DWITH_SYSTEM_UTF8PROC:BOOL=ON" | ||||
|       "-DWITH_SYSTEM_ZSTD:BOOL=ON" | ||||
| 
 | ||||
|       # TODO breaks with sandbox, tries to download stuff with npm | ||||
|       "-DWITH_MGR_DASHBOARD_FRONTEND:BOOL=OFF" | ||||
|       # WITH_XFS has been set default ON from Ceph 16, keeping it optional in nixpkgs for now | ||||
|       ''-DWITH_XFS=${if optLibxfs != null then "ON" else "OFF"}'' | ||||
|     ] ++ lib.optional stdenv.isLinux "-DWITH_SYSTEM_LIBURING=ON"; | ||||
| 
 | ||||
|     postFixup = '' | ||||
|       wrapPythonPrograms | ||||
|       wrapProgram $out/bin/ceph-mgr --prefix PYTHONPATH ":" "$(toPythonPath ${placeholder "out"}):$(toPythonPath ${ceph-python-env})" | ||||
| 
 | ||||
|       # Test that ceph-volume exists since the build system has a tendency to | ||||
|       # silently drop it with misconfigurations. | ||||
|       test -f $out/bin/ceph-volume | ||||
|     ''; | ||||
| 
 | ||||
|     outputs = [ "out" "lib" "dev" "doc" "man" ]; | ||||
| 
 | ||||
|     doCheck = false; # uses pip to install things from the internet | ||||
| 
 | ||||
|     # Takes 7+h to build with 2 cores. | ||||
|     requiredSystemFeatures = [ "big-parallel" ]; | ||||
| 
 | ||||
|     meta = getMeta "Distributed storage system"; | ||||
| 
 | ||||
|     passthru = { | ||||
|       inherit version; | ||||
|       tests = { | ||||
|         inherit (nixosTests) | ||||
|           ceph-multi-node | ||||
|           ceph-single-node | ||||
|           ceph-single-node-bluestore; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   ceph-client = runCommand "ceph-client-${version}" { | ||||
|       meta = getMeta "Tools needed to mount Ceph's RADOS Block Devices/Cephfs"; | ||||
|     } '' | ||||
|       mkdir -p $out/{bin,etc,${sitePackages},share/bash-completion/completions} | ||||
|       cp -r ${ceph}/bin/{ceph,.ceph-wrapped,rados,rbd,rbdmap} $out/bin | ||||
|       cp -r ${ceph}/bin/ceph-{authtool,conf,dencoder,rbdnamer,syn} $out/bin | ||||
|       cp -r ${ceph}/bin/rbd-replay* $out/bin | ||||
|       cp -r ${ceph}/sbin/mount.ceph $out/bin | ||||
|       cp -r ${ceph}/sbin/mount.fuse.ceph $out/bin | ||||
|       ln -s bin $out/sbin | ||||
|       cp -r ${ceph}/${sitePackages}/* $out/${sitePackages} | ||||
|       cp -r ${ceph}/etc/bash_completion.d $out/share/bash-completion/completions | ||||
|       # wrapPythonPrograms modifies .ceph-wrapped, so lets just update its paths | ||||
|       substituteInPlace $out/bin/ceph          --replace ${ceph} $out | ||||
|       substituteInPlace $out/bin/.ceph-wrapped --replace ${ceph} $out | ||||
|    ''; | ||||
| } | ||||
| @ -24,12 +24,5 @@ final: prev: | ||||
|     ]; | ||||
|   }); | ||||
| 
 | ||||
|   # Update ceph to 18.2.0 until it lands in nixpkgs, see: | ||||
|   # https://github.com/NixOS/nixpkgs/pull/247849 | ||||
|   inherit (prev.callPackage ./ceph.nix { | ||||
|     lua = prev.lua5_4; | ||||
|     fmt = prev.fmt_8; | ||||
|   }) ceph ceph-client; | ||||
| 
 | ||||
|   prometheus-slurm-exporter = prev.callPackage ./slurm-exporter.nix { }; | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user