blob: aa90f200f15affeef81c659fd0d166778b6456e5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
;;; Databases service definitions for PantherX
;;; Author: Reza Alizadeh Majd (r.majd@pantherx.org)
(define-module (px services databases)
#:use-module (gnu services)
#:use-module (gnu services shepherd)
#:use-module (gnu system shadow)
#:use-module (gnu packages admin)
#:use-module (guix modules)
#:use-module (guix records)
#:use-module (guix gexp)
#:use-module (px packages databases)
#:use-module (srfi srfi-1)
#:use-module (ice-9 match)
#:export (mongodb-configuration
mongodb-configuration?
mongodb-configuration-mongodb
mongodb-configuration-config-file
mongodb-configuration-data-directory
mongodb-service-type))
;;;
;;; MongoDB
;;;
;;; @subsubheading MongoDB
;;; @defvr {Scheme Variable} mongodb-service-type
;;; This is the service type for @uref{https://www.mongodb.com/, MongoDB}.
;;; The value for the service type is a @code{mongodb-configuration} object.
;;; @end defvr
;;; @lisp
;;; (service mongodb-service-type)
;;; @end lisp
;;; @deftp {Data Type} mongodb-configuration
;;; Data type representing the configuration of mongodb.
;;; @table @asis
;;; @item @code{mongodb} (default: @code{mongodb})
;;; The MongoDB package to use.
;;; @item @code{config-file} (default: @code{%default-mongodb-configuration-file})
;;; The configuration file for MongoDB.
;;; @item @code{data-directory} (default: @code{"/var/lib/mongodb"})
;;; This value is used to create the directory, so that it exists and is
;;; owned by the mongodb user. It should match the data-directory which
;;; MongoDB is configured to use through the configuration file.
;;; @end table
;;; @end deftp
(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))
(config-file mongodb-configuration-config-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 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 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)
(description "Run the MongoDB document database server.")
(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))))
(use-modules (gnu system)
(gnu bootloader)
(gnu bootloader grub)
(gnu system file-systems)
(px system config))
|