diff options
Diffstat (limited to 'gnu/packages/high-availability.scm')
-rw-r--r-- | gnu/packages/high-availability.scm | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/gnu/packages/high-availability.scm b/gnu/packages/high-availability.scm new file mode 100644 index 0000000000..108ea553ef --- /dev/null +++ b/gnu/packages/high-availability.scm @@ -0,0 +1,242 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2022 Sharlatan Hellseher <sharlatanus@gmail.com> +;;; +;;; This file is part of GNU Guix. +;;; +;;; This program 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. +;;; +;;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>. + +;;; Commentary: + +;; This module provides package definitions related for High Availability (HA) +;; software, which come as foundation to create clusterization and load +;; balancing of services. + +;;; Code: + +(define-module (gnu packages high-availability) + #:use-module (gnu packages autotools) + #:use-module (gnu packages check) + #:use-module (gnu packages compression) + #:use-module (gnu packages documentation) + #:use-module (gnu packages gcc) + #:use-module (gnu packages gettext) + #:use-module (gnu packages glib) + #:use-module (gnu packages hardware) + #:use-module (gnu packages linux) + #:use-module (gnu packages networking) + #:use-module (gnu packages nss) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages python) + #:use-module (gnu packages rsync) + #:use-module (gnu packages tls) + #:use-module (gnu packages valgrind) + #:use-module (gnu packages version-control) + #:use-module (gnu packages xml) + #:use-module (gnu packages) + #:use-module (guix build-system gnu) + #:use-module (guix gexp) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix packages) + #:use-module ((guix licenses) + #:prefix license:)) + +(define-public libqb + (package + (name "libqb") + (version "2.0.6") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/ClusterLabs/libqb/releases/download/v" + version "/libqb-" version ".tar.xz")) + (sha256 + (base32 + "071k916vz9ppyb69rpk792fzjs3nf3chakn10i496scgiqh49rzi")))) + (build-system gnu-build-system) + (native-inputs (list autoconf automake libtool libxml2 pkg-config)) + (home-page "https://clusterlabs.github.io/libqb/") + (synopsis + "Library providing high performance logging, tracing, ipc, and poll") + (description + "Libqb is a library with the primary purpose of providing +high-performance, reusable features for client-server architecture, such as +logging, tracing, inter-process communication (IPC), and polling. Libqb is +not intended to be an all-encompassing library, but instead provide focused +APIs that are highly tuned for maximum performance for client-server +applications.") + (license license:lgpl2.1))) + +(define-public kronosnet + (package + (name "kronosnet") + (version "1.24") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/kronosnet/kronosnet") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1b8rz7f2h3scrq0xcqz58ckzsvv08g31j5jgy2v4i6w87r9c75lw")))) + (build-system gnu-build-system) + (arguments + ;; XXX: Multiple tests failed. Tests + ;; require very complex environment and for some of them root privileges to + ;; set network configuration. It has it's own CI based on Jenkis + ;; https://ci.kronosnet.org/. + (list #:tests? #f + #:configure-flags #~'("--disable-static") + #:phases #~(modify-phases %standard-phases + (add-before 'bootstrap 'fix-version-gen + (lambda _ + (call-with-output-file ".tarball-version" + (lambda (port) + (display #$version port)))))))) + (native-inputs (list autoconf + automake + doxygen + libtool + net-tools + pkg-config)) + (inputs (list lksctp-tools + libnl + libqb + libxml2 + lz4 + lzo + nss + nspr + openssl + xz + zlib + `(,zstd "lib"))) + (home-page "https://kronosnet.org/") + (synopsis "Network abstraction layer designed for High Availability") + (description + "Kronosnet, often referred to as @code{knet}, is a network + abstraction layer designed for High Availability use cases, where redundancy, + security, fault tolerance and fast fail-over are the core requirements of + your application. + + Kronosnet is the new underlying network protocol for Linux HA components + (Corosync), that features ability to use multiple links between nodes, + active/active and active/passive link failover policies, automatic link + recovery, FIPS compliant encryption (nss and/or openssl), automatic PMTUd and + in general better performances compared to the old network protocol.") + (license (list license:gpl2+ license:lgpl2.1+)))) + +(define-public corosync + (package + (name "corosync") + (version "3.1.6") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/corosync/corosync") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "03g3qnm5acmk7jry6kspvkssbiv8k39749bic2f0cj3ckkwy2li4")))) + (build-system gnu-build-system) + (arguments + (list #:configure-flags #~'("--disable-static") + #:phases #~(modify-phases %standard-phases + (add-before 'bootstrap 'fix-version-gen + (lambda _ + (call-with-output-file ".tarball-version" + (lambda (port) + (display #$version port)))))))) + (native-inputs (list autoconf automake libtool pkg-config)) + (inputs (list kronosnet libqb)) + (home-page "https://corosync.github.io/corosync/") + (synopsis + "Group communication system for implementing High Availability in applications") + (description + "The Corosync Cluster Engine is a Group Communication System with additional +features for implementing high availability within applications. The project +provides four C Application Programming Interface features: + +@itemize + +@item A closed process group communication model with extended virtual synchrony +guarantees for creating replicated state machines. + +@item A simple availability manager that restarts the application process when +it has failed. + +@item A configuration and statistics in-memory database that provide the ability +to set, retrieve, and receive change notifications of information. + +@item A quorum system that notifies applications when quorum is achieved or +lost. + +@end itemize") + (license (list license:bsd-0 license:gpl3+)))) + +(define-public pacemaker + (package + (name "pacemaker") + (version "2.1.4") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ClusterLabs/pacemaker") + (commit (string-append "Pacemaker-" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "04gfd7i3w0zbzv7vi7728lgbyjq7cbqpr7jsp501piwg3z5j4mvb")))) + (build-system gnu-build-system) + (arguments + (list #:configure-flags #~(list "--with-corosync" "--disable-static" + (string-append "--with-initdir=" + #$output "/etc/init.d") + (string-append "--with-ocfdir=" + #$output "/lib")))) + (native-inputs (list autoconf + automake + cmocka + gettext-minimal + libtool + pkg-config + rsync + util-linux + valgrind)) + (inputs (list dbus + corosync + glib + gnutls + libqb + libxml2 + libxslt + python + `(,util-linux "lib"))) + (home-page "https://www.clusterlabs.org/pacemaker/") + (synopsis "Scalable High-Availability cluster resource manager") + (description + "Pacemaker is a high-availability cluster resource manager. + +It achieves maximum availability for your cluster services (a.k.a. resources) by +detecting and recovering from node- and resource-level failures by making use of +the messaging and membership capabilities provided by Corosync. + +It can do this for clusters of practically any size and comes with a powerful +dependency model that allows the administrator to accurately express the +relationships (both ordering and location) between the cluster resources. + +Virtually anything that can be scripted can be managed as part of a Pacemaker cluster.") + (license (list license:cc-by4.0 license:gpl2+ license:lgpl2.1+)))) |