Subject: [PATCH] gnu: Add libraft

From: Andrew Miloradovsky <[email-masked]>
Date: Thu, 5 Sep 2019 12:30:44 +0300

* gnu/packages/cluster.scm (libraft): New variable.
---
 gnu/packages/cluster.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/cluster.scm b/gnu/packages/cluster.scm
index 3608d67bed..43fd472dc3 100644
--- a/gnu/packages/cluster.scm
+++ b/gnu/packages/cluster.scm
@@ -22,6 +22,8 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix download)
   #:use-module (guix packages)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages sphinx)
@@ -79,3 +81,34 @@ Server (@dfn{IPVS}) kernel module.  High availability is achieved by the Virtual
 Redundancy Routing Protocol (@dfn{VRRP}).  Each Keepalived framework can be used
 independently or together to provide resilient infrastructures.")
     (license license:gpl2+)))
+
+(define-public libraft
+  (package
+    (name "libraft")
+    (version "0.9.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/canonical/raft/archive/v"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0zd8nnmsszvsrwvybcg783y705z4xik9pi0mb6gb6ii58qq2b3hz"))))
+    (arguments '(#:configure-flags '("--disable-uv")))
+    ;; The uv plugin tests fail, if libuv (or the example) is enabled,
+    ;; because setting up the environment requires too much privileges.
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("gettext" ,gettext-minimal)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)))
+    (build-system gnu-build-system)
+    (home-page "https://github.com/canonical/raft")
+    (synopsis "C implementation of the Raft consensus protocol")
+    (description "The library has modular design: its core part implements only
+the core Raft algorithm logic, in a fully platform independent way.  On top of
+that, a pluggable interface defines the I/O implementation for networking
+(send/receive RPC messages) and disk persistence (store log entries and
+snapshots).")
+    (license license:asl2.0)))
-- 
2.23.0