From f0fe07a65d84c707f38abeef8804a48df12f6335 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Tue, 22 Aug 2017 11:15:39 +0100 Subject: services: Add elasticsearch. --- gnu/services/databases.scm | 107 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm index aff78a0566..a6c0afab8c 100644 --- a/gnu/services/databases.scm +++ b/gnu/services/databases.scm @@ -51,6 +51,18 @@ postgresql-service postgresql-service-type + + elasticsearch-configuration + elasticsearch-configuration? + elasticsearch-configuration-elasticsearch + elasticsearch-configuration-data-path + elasticsearch-configuration-logs-path + elasticsearch-configuration-port + elasticsearch-configuration-transport-port + + elasticsearch-service + elasticsearch-service-type + memcached-service-type memcached-configuration @@ -266,6 +278,101 @@ and stores the database cluster in @var{data-directory}." (config-file config-file) (data-directory data-directory)))) + +;;; +;;; Elasticsearch +;;; + +(define-record-type* + elasticsearch-configuration make-elasticsearch-configuration + elasticsearch-configuration? + (elasticsearch elasticsearch-configuration-elasticsearch + (default elasticsearch)) + (data-path elasticsearch-configuration-data-path + (default "/var/lib/")) + (logs-path elasticsearch-configuration-logs-path + (default "/var/log/elasticsearch")) + (http-port elasticsearch-configuration-port + (default 9200)) + (transport-port elasticsearch-configuration-transport-port + (default 9300))) + +(define (elasticsearch-configuration-directory + data-path logs-path http-port transport-port) + (computed-file + "elasticsearch-config" + #~(begin + (mkdir #$output) + (mkdir (string-append #$output "/scripts")) + (call-with-output-file (string-append #$output "/elasticsearch.yml") + (lambda (port) + (display + (string-append + "path.data: " #$data-path "\n" + "path.logs: " #$logs-path "\n" + "http.port: " #$(number->string http-port) "\n" + "transport.tcp.port: " #$(number->string transport-port) "\n") + port)))))) + +(define %elasticsearch-accounts + (list (user-group (name "elasticsearch") (system? #t)) + (user-account + (name "elasticsearch") + (group "elasticsearch") + (system? #t) + (comment "Elasticsearch server user") + (home-directory "/var/empty") + (shell (file-append shadow "/sbin/nologin"))))) + +(define elasticsearch-activation + (match-lambda + (($ elasticsearch data-path logs-path + http-port transport-port) + #~(begin + (use-modules (guix build utils) + (ice-9 match)) + + (let ((user (getpwnam "elasticsearch"))) + ;; Create db state directory. + (for-each + (lambda (path) + (mkdir-p path) + (chown path (passwd:uid user) (passwd:gid user))) + '(#$data-path #$logs-path "/var/run/elasticsearch"))))))) + +(define elasticsearch-shepherd-service + (match-lambda + (($ elasticsearch data-path logs-path + http-port transport-port) + (list (shepherd-service + (provision '(elasticsearch)) + (documentation "Run the Elasticsearch daemon.") + (requirement '(user-processes syslogd)) + (start #~(make-forkexec-constructor + (list + (string-append #$elasticsearch "/bin/elasticsearch") + "-d" + "-p" "/var/run/elasticsearch/pid" + (string-append + "-Dpath.conf=" + #$(elasticsearch-configuration-directory + data-path logs-path http-port transport-port))) + #:user "elasticsearch" + #:pid-file "/var/run/elasticsearch/pid" + #:log-file "/var/log/elasticsearch.log")) + (stop #~(make-kill-destructor))))))) + +(define elasticsearch-service-type + (service-type (name 'elasticsearch) + (extensions + (list (service-extension shepherd-root-service-type + elasticsearch-shepherd-service) + (service-extension activation-service-type + elasticsearch-activation) + (service-extension account-service-type + (const %elasticsearch-accounts)))) + (default-value (elasticsearch-configuration)))) + ;;; ;;; Memcached -- cgit v1.2.3