guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 5/6] gnu: Add ceph.


From: Marius Bakke
Subject: [PATCH 5/6] gnu: Add ceph.
Date: Sun, 15 Jan 2017 21:33:37 +0100

* gnu/packages/distributed-filesystems.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
---
 gnu/local.mk                             |   1 +
 gnu/packages/distributed-filesystems.scm | 172 +++++++++++++++++++++++++++++++
 2 files changed, 173 insertions(+)
 create mode 100644 gnu/packages/distributed-filesystems.scm

diff --git a/gnu/local.mk b/gnu/local.mk
index 81d774eb6..417e7a0a5 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -102,6 +102,7 @@ GNU_SYSTEM_MODULES =                                \
   %D%/packages/dillo.scm                       \
   %D%/packages/disk.scm                                \
   %D%/packages/display-managers.scm            \
+  %D%/packages/distributed-filesystems.scm     \
   %D%/packages/django.scm                      \
   %D%/packages/djvu.scm                                \
   %D%/packages/dns.scm                         \
diff --git a/gnu/packages/distributed-filesystems.scm 
b/gnu/packages/distributed-filesystems.scm
new file mode 100644
index 000000000..f215a847e
--- /dev/null
+++ b/gnu/packages/distributed-filesystems.scm
@@ -0,0 +1,172 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 Marius Bakke <address@hidden>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages distributed-filesystems)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #: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 curl)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages gnuzilla)
+  #:use-module (gnu packages jemalloc)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages openldap)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages web)
+  #:use-module (gnu packages xml))
+
+(define-public ceph
+  (package
+    (name "ceph")
+    (version "10.2.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://download.ceph.com/tarballs/ceph-";
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1x6m69il34x4rjhybk5cpw4yiad4a193l9vgy57vidwfy5ql5pc2"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Delete bundled software.
+                  (delete-file-recursively "src/test/downloads") ; python-cram
+                  (delete-file-recursively "src/rocksdb")
+                  ;; TODO: unbundle gtest, civetweb, DPDK, SPDK, xxHash.
+                  #t))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list (string-append "--exec_prefix=" (assoc-ref %outputs "out"))
+             (string-append "--libdir=" (assoc-ref %outputs "lib") "/lib")
+             (string-append "--includedir=" (assoc-ref %outputs "lib") 
"/include")
+             "--localstatedir=/var"
+             "--sysconfdir=/etc"
+             "--enable-static=no" ; TODO: separate output
+             "--with-man-pages"
+             (string-append "--with-systemd-unit-dir="
+                            (assoc-ref %outputs "out") "/etc/systemd/system")
+             "--without-libxfs" ; TODO: enable when xfsprogs is added.
+             ;; Use jemalloc instead of tcmalloc.
+             "--with-jemalloc")
+       #:make-flags
+       ;; Pass sysconfdir here too so that the sample configuration files
+       ;; and directories are installed to the output instead of root level.
+       (list (string-append "sysconfdir=" (assoc-ref %outputs "out") "/etc")
+             (string-append "LDFLAGS=-Wl,-rpath="
+                            (assoc-ref %outputs "lib") "/lib")
+             ;; The python libraries depend on the ceph libraries,
+             ;; so make sure they are in RUNPATH.
+             (string-append "PYTHON_LDFLAGS=-Wl,-rpath="
+                            (assoc-ref %outputs "lib") "/lib"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-source
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (substitute* "src/Makefile.in"
+               ;; By default, the PYTHONPATH is set to "src/pybind".
+               ;; Make sure our libraries are found too.
+               (("export PYTHONPATH=") (string-append "export PYTHONPATH="
+                                                      (getenv "PYTHONPATH")
+                                                      ":"))
+
+               ;; Replace 'rocksdb/librocksdb.a' with the rocksdb store path.
+               (("rocksdb/librocksdb\\.a") (string-append
+                                            (assoc-ref inputs "rocksdb:static")
+                                            "/lib/librocksdb.a"))
+               ;; The above string is used both as a make target and a compile
+               ;; flag. No-op the make target.
+               (("^.*cd rocksdb &&.*$") "\ttrue\n"))
+
+             (substitute* "src/test/run-cli-tests"
+               ;; Use our python-cram instead of the (un)bundled one.
+               (("CRAM_BIN=.*$")
+                (string-append "CRAM_BIN=" (which "cram") "\n")))
+
+             (substitute* "src/Makefile.in"
+               ;; Install python packages to default output.
+               (("\\$\\$root \\$\\$options") (string-append
+                                              "--root=/ --prefix="
+                                              (assoc-ref outputs "out"))))
+             #t)))
+       ;; XXX: Tests need more work. The bundled cram tarball (!) needs
+       ;; patching to work on Guix, and the system version does not support
+       ;; '--error-dir'. TODO: How to run other tests/targets?
+       #:tests? #f
+       ;; Tests uses lots of file descriptors and warns about using
+       ;; -j without raising limits on large systems.
+       #:parallel-tests? #f))
+    (outputs
+     '("out"
+       "lib"))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("rocksdb" ,rocksdb) ; for headers
+       ("python2-cram" ,python2-cram)
+       ("python2-cython" ,python2-cython)
+       ("python2-nose" ,python2-nose)
+       ("python2-pip" ,python2-pip)
+       ("python2-sphinx" ,python2-sphinx)
+       ("python2-tox" ,python2-tox)
+       ("python2-virtualenv" ,python2-virtualenv)))
+    (inputs
+     `(("boost" ,boost)
+       ("curl" ,curl)
+       ("expat" ,expat)
+       ("fcgi" ,fcgi)
+       ("fuse" ,fuse)
+       ("jemalloc" ,jemalloc)
+       ("keyutils" ,keyutils)
+       ("leveldb" ,leveldb)
+       ("libaio" ,libaio)
+       ("libatomic-ops" ,libatomic-ops)
+       ("lz4" ,lz4)
+       ("openldap" ,openldap)
+       ("openssl" ,openssl)
+       ("nss" ,nss)
+       ("python" ,python-2)
+       ("rocksdb:static" ,rocksdb "static")
+       ("snappy" ,snappy)
+       ("udev" ,eudev)
+       ("util-linux" ,util-linux)
+       ("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 filesystem (CephFS), and offers compatibility with various
+storage protocols (S3, NFS, and others) through the RADOS gateway.")
+    ;; Ceph is licensed under LGPL2.1, but includes a number of components
+    ;; covered by other licenses. Consult COPYING for full information.
+    (license (list license:lgpl2.1
+                   license:cc-by-sa3.0    ; documentation
+                   license:bsd-2          ; xxHash
+                   license:bsd-3
+                   license:gpl3
+                   license:gpl2
+                   license:public-domain
+                   license:boost1.0
+                   license:expat))))
-- 
2.11.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]