(define-module (glicid packages storage) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix build-system gnu) #:use-module (guix build-system cmake) ; #:use-module (guix licenses) #:use-module (gnu packages gawk) #:use-module (gnu packages gcc) #:use-module (gnu packages commencement) #:use-module (guix build-system python) #:use-module ((guix licenses) #:prefix license:) #:use-module ((guix utils) #:select (target-64bit?)) #:use-module (gnu packages) #:use-module (gnu packages admin) #:use-module (gnu packages autotools) #:use-module (gnu packages base) #:use-module (gnu packages freeipmi) #:use-module (gnu packages linux) #:use-module (gnu packages mpi) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages parallel) #:use-module (gnu packages storage) #:use-module (gnu packages networking) #:use-module (gnu packages gtk) #:use-module (gnu packages python) #:use-module (gnu packages python-science) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) #:use-module (gnu packages readline) #:use-module (gnu packages tcl) #:use-module (gnu packages tls) #:use-module (gnu packages commencement) #:use-module (gnu packages gcc) #:use-module (gnu packages chemistry) #:use-module (gnu packages sphinx) #:use-module (srfi srfi-1) #:use-module (gnu packages mpi) #:use-module (gnu packages sssd) #:use-module (gnu packages fabric-management) #:use-module (gnu packages benchmark) #:use-module (gnu packages messaging) #:use-module (gnu packages web) #:use-module (gnu packages gnome) #:use-module (gnu packages cluster) #:use-module (gnu packages libevent) #:use-module (gnu packages xorg) #:use-module (gnu packages fontutils) #:use-module (gnu packages flex) #:use-module (gnu packages bison) #:use-module (gnu packages pkg-config) #:use-module (gnu packages autotools) #:use-module (gnu packages fontutils) #:use-module (guix build-system gnu) #:use-module (gnu packages image) #:use-module (gnu packages maths) #:use-module (guix utils) #:use-module (gnu packages cmake) #:use-module (gnu packages pretty-print) #:use-module (gnu packages boost) #:use-module (gnu packages curl) #:use-module (gnu packages cryptsetup) #:use-module (gnu packages xml) #:use-module (gnu packages admin) #:use-module (gnu packages assembly) #:use-module (gnu packages authentication) #:use-module (gnu packages bdw-gc) #:use-module (gnu packages boost) #:use-module (gnu packages compression) #:use-module (gnu packages crypto) #:use-module (gnu packages cryptsetup) #:use-module (gnu packages curl) #:use-module (gnu packages databases) #:use-module (gnu packages disk) #:use-module (gnu packages gperf) #:use-module (gnu packages jemalloc) #:use-module (gnu packages linux) #:use-module (gnu packages lua) #:use-module (gnu packages ncurses) #:use-module (gnu packages networking) #:use-module (gnu packages nss) #:use-module (gnu packages openldap) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages python-xyz) #:use-module (gnu packages sphinx) #:use-module (gnu packages tls) #:use-module (gnu packages web) ;; #:use-module (gnu packages glicid) #:use-module (gnu packages pretty-print) #:use-module (gnu packages virtualization) ) (define-public snappy-1.1.8 (package (name "snappy") (version "1.1.8") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/google/snappy") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 "1j0kslq2dvxgkcxl1gakhvsa731yrcvcaipcp5k8k7ayicvkv9jv")) (patches (search-patches "snappy-add-O2-flag-in-CmakeLists.txt.patch")))) (build-system cmake-build-system) (arguments `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON"))) (home-page "https://github.com/google/snappy") (synopsis "Fast compressor/decompressor") (description "Snappy is a compression/decompression library. It does not aim for maximum compression, or compatibility with any other compression library; instead, it aims for very high speeds and reasonable compression. For instance, compared to the fastest mode of zlib, Snappy is an order of magnitude faster for most inputs, but the resulting compressed files are anywhere from 20% to 100% bigger.") (license license:asl2.0))) (define-public glicid-ceph-15 (package (name "glicid-ceph-15") (version "15.2.14") (source (origin (method url-fetch) (uri (string-append "https://download.ceph.com/tarballs/ceph-" version ".tar.gz")) (sha256 (base32 "12cz10aascr2h7xbxp9ba5207pn9qv6m50xp5f8ns80vj6lzi6d3")) ; (patches ; (search-patches "ceph-disable-cpu-optimizations.patch")) (modules '((guix build utils))) (snippet '(begin (for-each delete-file-recursively '(;; TODO: Unbundle these: ;"src/isa-l" ;"src/lua" ;"src/xxHash" ;"src/zstd" ;"src/civetweb" ;"src/seastar/fmt" ; "src/test/downloads" "src/c-ares" "src/fmt" ;; YD "src/googletest" "src/rapidjson" "src/spdk" "src/rocksdb" "src/boost")) #t)))) (build-system cmake-build-system) (arguments `(#:configure-flags (let* ((out (assoc-ref %outputs "out")) (lib (assoc-ref %outputs "lib")) (libdir (string-append lib "/lib"))) (list (string-append "-DCMAKE_INSTALL_PREFIX=" out) (string-append "-DCMAKE_INSTALL_LIBDIR=" libdir) (string-append "-DCMAKE_INSTALL_INCLUDEDIR=" lib "/include") ;; We need both libdir and libdir/ceph in RUNPATH. (string-append "-DCMAKE_INSTALL_RPATH=" libdir ";" libdir "/ceph") (string-append "-DCMAKE_INSTALL_SYSCONFDIR=" out "/etc") (string-append "-DCMAKE_INSTALL_DATADIR=" lib "/share") (string-append "-DCMAKE_INSTALL_MANDIR=" out "/share/man") (string-append "-DCMAKE_INSTALL_DOCDIR=" out "/share/ceph/doc") (string-append "-DCMAKE_INSTALL_LIBEXECDIR=" out "/libexec") (string-append "-DKEYUTILS_INCLUDE_DIR=" (assoc-ref %build-inputs "keyutils") "/include") (string-append "-DXFS_INCLUDE_DIR=" (assoc-ref %build-inputs "xfsprogs") "/include") "-DCMAKE_INSTALL_LOCALSTATEDIR=/var" "-DBUILD_SHARED_LIBS=ON" "-DWITH_SYSTEM_ROCKSDB=ON" "-DWITH_SYSTEM_BOOST=ON" "-DWITH_PYTHON3=ON" ;; TODO: Enable these when available in Guix. "-DWITH_MGR_DASHBOARD_FRONTEND=OFF" ;requires node + nodeenv "-DWITH_BABELTRACE=OFF" "-DWITH_LTTNG=OFF" "-DWITH_SPDK=OFF" "-DWITH_RADOSGW_AMQP_ENDPOINT=OFF" ;; Use jemalloc instead of tcmalloc. "-DALLOCATOR=jemalloc" ;; Do not bother building the tests; we are not currently running ;; them, and they do not build with system googletest as of 14.2.5. "-DWITH_TESTS=OFF")) ;; FIXME: Some of the tests leak Btrfs subvolumes on Btrfs. See ;; for details. Disable tests until ;; resolved. #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-source (lambda* (#:key outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out")) (lib (assoc-ref outputs "lib"))) (substitute* "cmake/modules/Distutils.cmake" ;; Prevent creation of Python eggs. (("setup.py install") "setup.py install --single-version-externally-managed --root=/")) (substitute* (find-files "src/pybind" "^setup\\.py$") ;; Here we inject an extra line to the `setup.py' of the ;; Python C libraries so RUNPATH gets set up correctly. ; (("^([[:blank:]]+)extra_compile_args=(.*)$" _ indent args) ; (string-append indent "extra_compile_args=" args ; indent "extra_link_args=['-Wl,-rpath=" ; lib "/lib'],\n"))) (("^([[:blank:]]+)extra_link_args=(.*)$" _ indent args) (string-append indent "extra_link_args=(['-Wl,-rpath=" lib "/lib'] + distutils.sysconfig.get_config_var('LDFLAGS').split() + \n"))) ;; Statically link libcrc32 because it does not get installed, ;; yet several libraries end up referring to it. (substitute* "src/common/CMakeLists.txt" (("add_library\\(crc32") "add_library(crc32 STATIC")) (substitute* "udev/50-rbd.rules" (("/usr/bin/ceph-rbdnamer") (string-append out "/bin/ceph-rbdnamer"))) #t))) (add-before 'install 'set-install-environment (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (py3sitedir (string-append out "/lib/python" ,(version-major+minor (package-version python)) "/site-packages"))) ;; The Python install scripts refuses to function if ;; the install directory is not on PYTHONPATH. (setenv "PYTHONPATH" (string-append py3sitedir ":" (getenv "PYTHONPATH"))) #t))) (add-after 'install 'wrap-python-scripts (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (scripts '("ceph" "ceph-mgr" "ceph-volume")) (prettytable (assoc-ref inputs "python-prettytable")) (six (assoc-ref inputs "python-six")) (sitedir (lambda (package) (string-append package "/lib/python" ,(version-major+minor (package-version python)) "/site-packages"))) (PYTHONPATH (string-append (sitedir out) ":" (sitedir six) ":" (sitedir prettytable)))) (for-each (lambda (executable) (wrap-program (string-append out "/bin/" executable) `("PYTHONPATH" ":" prefix (,PYTHONPATH)))) scripts) #t)))))) (outputs '("out" "lib")) (native-inputs `(("gperf" ,gperf) ("pkg-config" ,pkg-config) ("python-cython" ,python-cython) ("python-sphinx" ,python-sphinx) ("yasm" ,yasm))) (inputs `(("boost" ,boost) ("curl" ,curl) ("cryptsetup" ,cryptsetup) ("expat" ,expat) ("fcgi" ,fcgi) ("fmt",fmt) ;; maybe need v5 ? ("fuse" ,fuse) ("jemalloc" ,jemalloc) ("keyutils" ,keyutils) ("leveldb" ,leveldb) ("libaio" ,libaio) ("libatomic-ops" ,libatomic-ops) ("libcap-ng" ,libcap-ng) ("libnl" ,libnl) ("librdkafka" ,librdkafka) ("lua" ,lua) ("lz4" ,lz4) ("oath-toolkit" ,oath-toolkit) ("openldap" ,openldap) ("openssl" ,openssl) ("ncurses" ,ncurses) ("nss" ,nss) ("python-prettytable" ,python-prettytable) ;used by ceph_daemon.py ("python-six" ,python-six) ;for ceph-mgr + plugins ("python" ,python-wrapper) ("rapidjson" ,rapidjson) ("rdma-core" ,rdma-core) ("rocksdb" ,rocksdb) ("snappy" ,snappy-1.1.8) ("udev" ,eudev) ("util-linux" ,util-linux) ("util-linux:lib" ,util-linux "lib") ("xfsprogs" ,xfsprogs) ("zlib" ,zlib))) (home-page "https://ceph.com/") (synopsis "Distributed object store and file system") (description "Ceph is a distributed storage system designed for reliability and performance. It provides network-based block devices (RBD), a POSIX compliant file system (CephFS), and offers compatibility with various storage protocols (S3, NFS, and others) through the RADOS gateway.") ;; The Ceph libraries are LGPL2.1 and most of the utilities fall under ;; GPL2. The installed erasure code plugins are BSD-3 licensed and do ;; not use the GPL code. The source archive includes a number of files ;; carrying other licenses; consult COPYING for more information. Note ;; that COPYING does not cover third-party bundled software. (license (list license:lgpl2.1 license:gpl2 ;some files are 'or later' license:cc-by-sa3.0 ;documentation license:bsd-3 ;isa-l,jerasure,++ license:expat))) ;civetweb,java bindings ) (define-public glicid-ceph-15b (package (inherit ceph) (name "glicid-ceph-15b") (version "15.2.14") (source (origin (method url-fetch) (uri (string-append "https://download.ceph.com/tarballs/ceph-" version ".tar.gz")) (sha256 (base32 "12cz10aascr2h7xbxp9ba5207pn9qv6m50xp5f8ns80vj6lzi6d3")) ; (patches ; (search-patches "ceph-disable-cpu-optimizations.patch")) (modules '((guix build utils))) (snippet '(begin (for-each delete-file-recursively '(;; TODO: Unbundle these: ;"src/isa-l" ;"src/lua" ;"src/xxHash" ;"src/zstd" ;"src/civetweb" ;"src/seastar/fmt" ; "src/test/downloads" "src/c-ares" "src/fmt" ;; YD "src/googletest" "src/rapidjson" "src/spdk" "src/rocksdb" "src/boost")) #t)))) (build-system cmake-build-system) (arguments `(#:configure-flags (let* ((out (assoc-ref %outputs "out")) (lib (assoc-ref %outputs "lib")) (libdir (string-append lib "/lib"))) (list (string-append "-DCMAKE_INSTALL_PREFIX=" out) (string-append "-DCMAKE_INSTALL_LIBDIR=" libdir) (string-append "-DCMAKE_INSTALL_INCLUDEDIR=" lib "/include") ;; We need both libdir and libdir/ceph in RUNPATH. (string-append "-DCMAKE_INSTALL_RPATH=" libdir ";" libdir "/ceph") (string-append "-DCMAKE_INSTALL_SYSCONFDIR=" out "/etc") (string-append "-DCMAKE_INSTALL_DATADIR=" lib "/share") (string-append "-DCMAKE_INSTALL_MANDIR=" out "/share/man") (string-append "-DCMAKE_INSTALL_DOCDIR=" out "/share/ceph/doc") (string-append "-DCMAKE_INSTALL_LIBEXECDIR=" out "/libexec") (string-append "-DKEYUTILS_INCLUDE_DIR=" (assoc-ref %build-inputs "keyutils") "/include") (string-append "-DXFS_INCLUDE_DIR=" (assoc-ref %build-inputs "xfsprogs") "/include") "-DCMAKE_INSTALL_LOCALSTATEDIR=/var" "-DBUILD_SHARED_LIBS=ON" "-DWITH_SYSTEM_ROCKSDB=ON" "-DWITH_SYSTEM_BOOST=ON" "-DWITH_PYTHON3=ON" ;; TODO: Enable these when available in Guix. "-DWITH_MGR_DASHBOARD_FRONTEND=OFF" ;requires node + nodeenv "-DWITH_BABELTRACE=OFF" "-DWITH_LTTNG=OFF" "-DWITH_SPDK=OFF" "-DWITH_RADOSGW_AMQP_ENDPOINT=OFF" ;; Use jemalloc instead of tcmalloc. "-DALLOCATOR=jemalloc" ;; Do not bother building the tests; we are not currently running ;; them, and they do not build with system googletest as of 14.2.5. "-DWITH_TESTS=OFF")) ;; FIXME: Some of the tests leak Btrfs subvolumes on Btrfs. See ;; for details. Disable tests until ;; resolved. #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-source (lambda* (#:key outputs #:allow-other-keys) (let ((out (assoc-ref outputs "out")) (lib (assoc-ref outputs "lib"))) (substitute* "cmake/modules/Distutils.cmake" ;; Prevent creation of Python eggs. (("setup.py install") "setup.py install --single-version-externally-managed --root=/")) (substitute* (find-files "src/pybind" "^setup\\.py$") ;; Here we inject an extra line to the `setup.py' of the ;; Python C libraries so RUNPATH gets set up correctly. ; (("^([[:blank:]]+)extra_compile_args=(.*)$" _ indent args) ; (string-append indent "extra_compile_args=" args ; indent "extra_link_args=['-Wl,-rpath=" ; lib "/lib'],\n"))) (("^([[:blank:]]+)extra_link_args=(.*)$" _ indent args) (string-append indent "extra_link_args=(['-Wl,-rpath=" lib "/lib'] + distutils.sysconfig.get_config_var('LDFLAGS').split() + \n"))) ;; Statically link libcrc32 because it does not get installed, ;; yet several libraries end up referring to it. (substitute* "src/common/CMakeLists.txt" (("add_library\\(crc32") "add_library(crc32 STATIC")) (substitute* "udev/50-rbd.rules" (("/usr/bin/ceph-rbdnamer") (string-append out "/bin/ceph-rbdnamer"))) #t))) (add-before 'install 'set-install-environment (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (py3sitedir (string-append out "/lib/python" ,(version-major+minor (package-version python)) "/site-packages"))) ;; The Python install scripts refuses to function if ;; the install directory is not on PYTHONPATH. (setenv "PYTHONPATH" (string-append py3sitedir ":" (getenv "PYTHONPATH"))) #t))) (add-after 'install 'wrap-python-scripts (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (scripts '("ceph" "ceph-mgr" "ceph-volume")) (prettytable (assoc-ref inputs "python-prettytable")) (six (assoc-ref inputs "python-six")) (sitedir (lambda (package) (string-append package "/lib/python" ,(version-major+minor (package-version python)) "/site-packages"))) (PYTHONPATH (string-append (sitedir out) ":" (sitedir six) ":" (sitedir prettytable)))) (for-each (lambda (executable) (wrap-program (string-append out "/bin/" executable) `("PYTHONPATH" ":" prefix (,PYTHONPATH)))) scripts) #t)))))) (outputs '("out" "lib")) (native-inputs `(("gperf" ,gperf) ("pkg-config" ,pkg-config) ("python-cython" ,python-cython) ("python-sphinx" ,python-sphinx) ("yasm" ,yasm))) (inputs `(("boost" ,boost) ("curl" ,curl) ("cryptsetup" ,cryptsetup) ("expat" ,expat) ("fcgi" ,fcgi) ("fmt",fmt) ;; maybe need v5 ? ("fuse" ,fuse) ("jemalloc" ,jemalloc) ("keyutils" ,keyutils) ("leveldb" ,leveldb) ("libaio" ,libaio) ("libatomic-ops" ,libatomic-ops) ("libcap-ng" ,libcap-ng) ("libnl" ,libnl) ("librdkafka" ,librdkafka) ("lua" ,lua) ("lz4" ,lz4) ("oath-toolkit" ,oath-toolkit) ("openldap" ,openldap) ("openssl" ,openssl) ("ncurses" ,ncurses) ("nss" ,nss) ("python-prettytable" ,python-prettytable) ;used by ceph_daemon.py ("python-six" ,python-six) ;for ceph-mgr + plugins ("python" ,python-wrapper) ("rapidjson" ,rapidjson) ("rdma-core" ,rdma-core) ("rocksdb" ,rocksdb) ("snappy" ,snappy-1.1.8) ("udev" ,eudev) ("util-linux" ,util-linux) ("util-linux:lib" ,util-linux "lib") ("xfsprogs" ,xfsprogs) ("zlib" ,zlib))) (home-page "https://ceph.com/") (synopsis "Distributed object store and file system") (description "Ceph is a distributed storage system designed for reliability and performance. It provides network-based block devices (RBD), a POSIX compliant file system (CephFS), and offers compatibility with various storage protocols (S3, NFS, and others) through the RADOS gateway.") ;; The Ceph libraries are LGPL2.1 and most of the utilities fall under ;; GPL2. The installed erasure code plugins are BSD-3 licensed and do ;; not use the GPL code. The source archive includes a number of files ;; carrying other licenses; consult COPYING for more information. Note ;; that COPYING does not cover third-party bundled software. (license (list license:lgpl2.1 license:gpl2 ;some files are 'or later' license:cc-by-sa3.0 ;documentation license:bsd-3 ;isa-l,jerasure,++ license:expat))) ;civetweb,java bindings ) (define-public glicid-ceph glicid-ceph-15)