aboutsummaryrefslogtreecommitdiff
path: root/gnu/services
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/services')
-rw-r--r--gnu/services/databases.scm89
-rw-r--r--gnu/services/networking.scm1
-rw-r--r--gnu/services/version-control.scm119
-rw-r--r--gnu/services/vpn.scm10
4 files changed, 213 insertions, 6 deletions
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index de1f6b8411..6a01cb1ce6 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -44,6 +44,14 @@
memcached-configuration-udp-port
memcached-configuration-additional-options
+ <mongodb-configuration>
+ mongodb-configuration
+ mongodb-configuration?
+ mongodb-configuration-mongodb
+ mongodb-configuration-config-file
+ mongodb-configuration-data-directory
+ mongodb-service-type
+
mysql-service
mysql-service-type
mysql-configuration
@@ -264,6 +272,87 @@ and stores the database cluster in @var{data-directory}."
;;;
+;;; 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))
+ (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))))
+
+
+;;;
;;; MySQL.
;;;
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index 42b96b417e..b0c23aafc7 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -25,7 +25,6 @@
#:use-module (gnu services)
#:use-module (gnu services shepherd)
#:use-module (gnu services dbus)
- #:use-module (gnu services base)
#:use-module (gnu system shadow)
#:use-module (gnu system pam)
#:use-module (gnu packages admin)
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index 107bc8e77a..e39f4411fd 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
;;; Copyright © 2016 Sou Bunnbu <iyzsong@member.fsf.org>
+;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -21,18 +22,40 @@
#:use-module (gnu services)
#:use-module (gnu services base)
#:use-module (gnu services shepherd)
+ #:use-module (gnu services web)
#:use-module (gnu system shadow)
#:use-module (gnu packages version-control)
#:use-module (gnu packages admin)
#:use-module (guix records)
#:use-module (guix gexp)
+ #:use-module (guix store)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (ice-9 match)
#:export (git-daemon-service
git-daemon-service-type
git-daemon-configuration
- git-daemon-configuration?))
+ git-daemon-configuration?
+
+ <cgit-configuration-file>
+ cgit-configuration-file
+ cgit-configuration-file?
+ cgit-configuration-file-css
+ cgit-configuration-file-logo
+ cgit-configuration-file-robots
+ cgit-configuration-file-virtual-root
+ cgit-configuration-file-repository-directory
+
+ <cgit-configuration>
+ cgit-configuration
+ cgit-configuration?
+ cgit-configuration-config-file
+ cgit-configuration-package
+
+ %cgit-configuration-nginx
+ cgit-configuration-nginx-config
+
+ cgit-service-type))
;;; Commentary:
;;;
@@ -139,3 +162,97 @@ The optional @var{config} argument should be a
@code{<git-daemon-configuration>} object, by default it allows read-only
access to exported repositories under @file{/srv/git}."
(service git-daemon-service-type config))
+
+
+;;;
+;;; Cgit
+;;;
+
+(define-record-type* <cgit-configuration-file>
+ cgit-configuration-file
+ make-cgit-configuration-file
+ cgit-configuration-file?
+ (css cgit-configuration-file-css ; string
+ (default "/share/cgit/cgit.css"))
+ (logo cgit-configuration-file-logo ; string
+ (default "/share/cgit/cgit.png"))
+ (robots cgit-configuration-file-robots ; list
+ (default '("noindex" "nofollow")))
+ (virtual-root cgit-configuration-file-virtual-root ; string
+ (default "/"))
+ (repository-directory cgit-configuration-file-repository-directory ; string
+ (default "/srv/git")))
+
+(define (cgit-configuration-robots-string robots)
+ (string-join robots ", "))
+
+(define-gexp-compiler (cgit-configuration-file-compiler
+ (file <cgit-configuration-file>) system target)
+ (match file
+ (($ <cgit-configuration-file> css logo
+ robots virtual-root repository-directory)
+ (apply text-file* "cgitrc"
+ (letrec-syntax ((option (syntax-rules ()
+ ((_ key value)
+ (if value
+ `(,key "=" ,value "\n")
+ '()))))
+ (key/value (syntax-rules ()
+ ((_ (key value) rest ...)
+ (append (option key value)
+ (key/value rest ...)))
+ ((_)
+ '()))))
+ (key/value ("css" css)
+ ("logo" logo)
+ ("robots" (cgit-configuration-robots-string robots))
+ ("virtual-root" virtual-root)
+ ("scan-path" repository-directory)))))))
+
+(define %cgit-configuration-nginx
+ (list
+ (nginx-server-configuration
+ (root cgit)
+ (locations
+ (list
+ (nginx-location-configuration
+ (uri "@cgit")
+ (body '("fastcgi_param SCRIPT_FILENAME $document_root/lib/cgit/cgit.cgi;"
+ "fastcgi_param PATH_INFO $uri;"
+ "fastcgi_param QUERY_STRING $args;"
+ "fastcgi_param HTTP_HOST $server_name;"
+ "fastcgi_pass 127.0.0.1:9000;")))))
+ (try-files (list "$uri" "@cgit"))
+ (https-port #f)
+ (ssl-certificate #f)
+ (ssl-certificate-key #f))))
+
+(define-record-type* <cgit-configuration>
+ cgit-configuration make-cgit-configuration
+ cgit-configuration?
+ (config-file cgit-configuration-config-file
+ (default (cgit-configuration-file)))
+ (package cgit-configuration-package
+ (default cgit))
+ (nginx cgit-configuration-nginx
+ (default %cgit-configuration-nginx)))
+
+(define (cgit-activation config)
+ ;; Cgit compiled with default configuration path
+ #~(begin
+ (use-modules (guix build utils))
+ (mkdir-p "/var/cache/cgit")
+ (copy-file #$(cgit-configuration-config-file config) "/etc/cgitrc")))
+
+(define (cgit-configuration-nginx-config config)
+ (cgit-configuration-nginx config))
+
+(define cgit-service-type
+ (service-type
+ (name 'cgit)
+ (extensions
+ (list (service-extension activation-service-type
+ cgit-activation)
+ (service-extension nginx-service-type
+ cgit-configuration-nginx-config)))
+ (default-value (cgit-configuration))))
diff --git a/gnu/services/vpn.scm b/gnu/services/vpn.scm
index 868a227fc0..cbb4a79a7b 100644
--- a/gnu/services/vpn.scm
+++ b/gnu/services/vpn.scm
@@ -108,10 +108,12 @@
#f))
(define (serialize-tls-auth role location)
- (serialize-field 'tls-auth
- (string-append location " " (match role
- ('server "0")
- ('client "1")))))
+ (if location
+ (serialize-field 'tls-auth
+ (string-append location " " (match role
+ ('server "0")
+ ('client "1"))))
+ #f))
(define (tls-auth? val)
(or (eq? val #f)
(string? val)))