ceph: fix build and cleanup expression

correct platforms. ceph currently doesn't build on aarch64-linux. So
let's not lie in meta.platforms.

ceph: fix multiple output
We currently just move $out/share/ceph/mgr to
$lib/lib/ceph, and then remove all references to $out with a find
command.

I checked $out, the only reference to $out is in
$lib/lib/ceph/libceph-common.so.0, coming from src/common/options.cc:
https://github.com/ceph/ceph/blob/master/src/common/options.cc#L5050:

>  Option("mgr_module_path", Option::TYPE_STR, Option::LEVEL_ADVANCED)
>  .set_default(CEPH_DATADIR "/mgr")
>  .add_service("mgr")
>  .set_description("Filesystem path to manager modules."),

Just removing the reference might break some behaviour - it should point
to $lib/ceph/mgr instead.

We can fix this in a much more elegant fashion by just passing a custom
CMAKE_INSTALL_DATADIR to the build system.

ceph: fix outdated Boost::python substitutions

Instead of substituting in CMakeLists.txt files, one now needs to set
MGR_PYTHON_VERSION.

ceph: clean up PYTHONPATH wrapping

Set `pythonPath` instead of exporting PYTHONPATH.

Use `toPythonPath` to construct the PYTHONPATH where we need manual
wrapping. There's no ceph-volume, only ceph-mgr.

ceph: set doCheck = false explicitly

and describe why.

ceph: patch more shebangs

ceph: use system-provided gtest and rocksdb
This commit is contained in:
Florian Klink 2019-11-11 00:24:27 +01:00
parent 781d85c69a
commit 05590b3efd

View File

@ -6,9 +6,10 @@
, libxml2, zlib, lz4
, openldap, lttng-ust
, babeltrace, gperf
, gtest
, cunit, snappy
, rocksdb, makeWrapper
, leveldb, oathToolkit, removeReferencesTo
, leveldb, oathToolkit
# Optional Dependencies
, yasm ? null, fcgi ? null, expat ? null
@ -108,14 +109,14 @@ in rec {
nativeBuildInputs = [
cmake
pkgconfig which git python3Packages.wrapPython makeWrapper
python3Packages.python # for the toPythonPath function
(ensureNewerSourcesHook { year = "1980"; })
];
buildInputs = cryptoLibsMap.${cryptoStr} ++ [
boost ceph-python-env libxml2 optYasm optLibatomic_ops optLibs3
malloc zlib openldap lttng-ust babeltrace gperf cunit
malloc zlib openldap lttng-ust babeltrace gperf gtest cunit
snappy rocksdb lz4 oathToolkit leveldb
removeReferencesTo
] ++ optionals stdenv.isLinux [
linuxHeaders utillinux libuuid udev keyutils optLibaio optLibxfs optZfs
# ceph 14
@ -124,54 +125,52 @@ in rec {
optFcgi optExpat optCurl 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"
# Since Boost 1.67 this seems to have changed
substituteInPlace CMakeLists.txt --replace "list(APPEND BOOST_COMPONENTS python)" "list(APPEND BOOST_COMPONENTS python37)"
substituteInPlace src/CMakeLists.txt --replace "Boost::python " "Boost::python37 "
# for pybind/rgw to find internal dep
export LD_LIBRARY_PATH="$PWD/build/lib:$LD_LIBRARY_PATH"
# install target needs to be in PYTHONPATH for "*.pth support" check to succeed
export PYTHONPATH=${ceph-python-env}/lib/python3.7/site-packages:$lib/lib/python3.7/site-packages/:$out/lib/python3.7/site-packages/
patchShebangs src/spdk
patchShebangs src/script src/spdk src/test src/tools
'';
cmakeFlags = [
"-DWITH_PYTHON3=ON"
"-DWITH_SYSTEM_ROCKSDB=OFF"
"-DCMAKE_INSTALL_DATADIR=${placeholder "lib"}/lib"
"-DWITH_SYSTEM_BOOST=ON"
"-DWITH_SYSTEM_ROCKSDB=ON"
"-DWITH_SYSTEM_GTEST=ON"
"-DMGR_PYTHON_VERSION=${ceph-python-env.python.pythonVersion}"
"-DWITH_SYSTEMD=OFF"
"-DWITH_TESTS=OFF"
# TODO breaks with sandbox, tries to download stuff with npm
"-DWITH_MGR_DASHBOARD_FRONTEND=OFF"
];
preFixup = ''
find $lib -type f -exec remove-references-to -t $out '{}' +
mv $out/share/ceph/mgr $lib/lib/ceph/
'';
postFixup = ''
export PYTHONPATH="${ceph-python-env}/lib/python3.7/site-packages:$lib/lib/ceph/mgr:$out/lib/python3.7/site-packages/"
wrapPythonPrograms
wrapProgram $out/bin/ceph-mgr --prefix PYTHONPATH ":" "${ceph-python-env}/lib/python3.7/site-packages:$lib/lib/ceph/mgr:$out/lib/python3.7/site-packages/"
wrapProgram $out/bin/ceph-volume --prefix PYTHONPATH ":" "${ceph-python-env}/lib/python3.7/site-packages:$lib/lib/ceph/mgr:$out/lib/python3.7/site-packages/"
wrapProgram $out/bin/ceph-mgr --prefix PYTHONPATH ":" "$(toPythonPath ${placeholder "out"}):$(toPythonPath ${ceph-python-env})"
'';
enableParallelBuilding = true;
outputs = [ "out" "lib" "dev" "doc" "man" ];
doCheck = false; # uses pip to install things from the internet
meta = {
homepage = https://ceph.com/;
description = "Distributed storage system";
license = with licenses; [ lgpl21 gpl2 bsd3 mit publicDomain ];
maintainers = with maintainers; [ adev ak krav johanot ];
platforms = platforms.unix;
platforms = [ "x86_64-linux" ];
};
passthru.version = version;
@ -183,7 +182,7 @@ in rec {
description = "Tools needed to mount Ceph's RADOS Block Devices";
license = with licenses; [ lgpl21 gpl2 bsd3 mit publicDomain ];
maintainers = with maintainers; [ adev ak johanot krav ];
platforms = platforms.unix;
platforms = [ "x86_64-linux" ];
};
} ''
mkdir -p $out/{bin,etc,lib/python3.7/site-packages}