unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
From: Christopher Baines <mail@cbaines.net>
To: 28198@debbugs.gnu.org
Subject: [bug#28198] [PATCH 3/4] services: Add MongoDB.
Date: Wed, 23 Aug 2017 10:25:15 +0100	[thread overview]
Message-ID: <20170823092516.6846-3-mail@cbaines.net> (raw)
In-Reply-To: <20170823092516.6846-1-mail@cbaines.net>

* ...
---
 gnu/services/databases.scm | 87 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 87 insertions(+)

diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index de1f6b841..107bb2d09 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -44,6 +44,10 @@
             memcached-configuration-udp-port
             memcached-configuration-additional-options
 
+            mongodb-configuration
+            mongodb-configuration?
+            mongodb-service-type
+
             mysql-service
             mysql-service-type
             mysql-configuration
@@ -263,6 +267,89 @@ and stores the database cluster in @var{data-directory}."
                 (default-value (memcached-configuration))))
 
 \f
+;;;
+;;; MongoDB
+;;;
+
+(define %default-mongodb-configuration-file
+  (plain-file
+   "mongodb.yaml"
+   "# GNU Guix: MongoDB default configuration file
+processManagement:
+  pidFilePath: /var/run/mongodb/pid
+storage:
+  dbPath: /var/lib/mongodb
+"))
+
+
+(define-record-type* <mongodb-configuration>
+  mongodb-configuration make-mongodb-configuration
+  mongodb-configuration?
+  (mongodb             mongodb-configuration-mongodb
+                       (default mongodb))
+  (port                mongodb-congiguration-port
+                       (default 27017))
+  (configuration-file  mongodb-configuration-file
+                       (default %default-mongodb-configuration-file))
+  (data-directory      mongodb-configuration-data-directory
+                       (default "/var/lib/mongodb")))
+
+(define %mongodb-accounts
+  (list (user-group (name "mongodb") (system? #t))
+        (user-account
+         (name "mongodb")
+         (group "mongodb")
+         (system? #t)
+         (comment "Mongodb server user")
+         (home-directory "/var/lib/mongodb")
+         (shell (file-append shadow "/sbin/nologin")))))
+
+(define mongodb-activation
+  (match-lambda
+    (($ <mongodb-configuration> mongodb port config-file data-directory)
+     #~(begin
+         (use-modules (guix build utils))
+         (let ((user (getpwnam "mongodb")))
+           (for-each
+            (lambda (directory)
+              (mkdir-p directory)
+              (chown directory
+                     (passwd:uid user) (passwd:gid user)))
+            '("/var/run/mongodb" #$data-directory)))))))
+
+(define mongodb-shepherd-service
+  (match-lambda
+    (($ <mongodb-configuration> mongodb port config-file data-directory)
+     (shepherd-service
+      (provision '(mongodb))
+      (documentation "Run the Mongodb daemon.")
+      (requirement '(user-processes loopback))
+      (start #~(make-forkexec-constructor
+                `(,(string-append #$mongodb "/bin/mongod")
+                  "--config"
+                  ,#$config-file)
+                #:user "mongodb"
+                #:group "mongodb"
+                #:pid-file "/var/run/mongodb/pid"
+                                        ;#:log-file "/var/log/mongodb.log"
+                ))
+      (stop #~(make-kill-destructor))))))
+
+(define mongodb-service-type
+  (service-type
+   (name 'mongodb)
+   (extensions
+    (list (service-extension shepherd-root-service-type
+                             (compose list
+                                      mongodb-shepherd-service))
+          (service-extension activation-service-type
+                             mongodb-activation)
+          (service-extension account-service-type
+                             (const %mongodb-accounts))))
+   (default-value
+     (mongodb-configuration))))
+
+\f
 ;;;
 ;;; MySQL.
 ;;;
-- 
2.14.1

  parent reply	other threads:[~2017-08-23  9:26 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-23  9:18 [bug#28198] [PATCH] Add MongoDB package and service Christopher Baines
2017-08-23  9:25 ` [bug#28198] [PATCH 1/4] vm: Add disk-image-size to <virtual-machine> Christopher Baines
2017-08-23  9:25   ` [bug#28198] [PATCH 2/4] gnu: Add mongodb Christopher Baines
2017-08-31 12:32     ` Ludovic Courtès
2017-09-30  8:04       ` Christopher Baines
2017-08-23  9:25   ` Christopher Baines [this message]
2017-08-31 12:34     ` [bug#28198] [PATCH 3/4] services: Add MongoDB Ludovic Courtès
2017-09-30  8:05       ` Christopher Baines
2017-08-23  9:25   ` [bug#28198] [PATCH 4/4] tests: databases: Add MongoDB test Christopher Baines
2017-08-31 12:37     ` Ludovic Courtès
2017-09-30  8:09       ` Christopher Baines
2017-08-31 12:29   ` [bug#28198] [PATCH 1/4] vm: Add disk-image-size to <virtual-machine> Ludovic Courtès
2017-09-25 20:36     ` Christopher Baines
2017-09-26  7:14       ` Ludovic Courtès
2017-09-29  6:48         ` [bug#28635] " Christopher Baines
2017-08-26 22:33 ` [bug#28198] [PATCH] Add MongoDB package and service Roel Janssen
2017-08-27 22:30   ` Christopher Baines
2017-09-30  7:59 ` [bug#28198] [PATCH 1/3] vm: Add disk-image-size to <virtual-machine> Christopher Baines
2017-09-30  7:59   ` [bug#28198] [PATCH 2/3] gnu: Add mongodb Christopher Baines
2017-10-04 14:40     ` Ludovic Courtès
2017-09-30  7:59   ` [bug#28198] [PATCH 3/3] services: Add MongoDB Christopher Baines
2017-10-04 14:44     ` Ludovic Courtès
2017-10-06 20:29       ` bug#28198: " Christopher Baines

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170823092516.6846-3-mail@cbaines.net \
    --to=mail@cbaines.net \
    --cc=28198@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).