blob: 05de25d9bac6fe14aa0b3bbf45e5553158872b65 (
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
(define-module (px services networking)
#:use-module (gnu)
#:use-module (gnu packages admin)
#:use-module (gnu packages base)
#:use-module (gnu packages linux)
#:use-module (gnu packages ntp)
#:use-module (gnu packages screen)
#:use-module (gnu services admin)
#:use-module (gnu services shepherd)
#:use-module (gnu system)
#:use-module (gnu system shadow)
#:use-module (guix gexp)
#:use-module (guix records)
#:use-module (ice-9 match)
#:use-module (ice-9 pretty-print)
#:use-module (px packages networking)
#:use-module (srfi srfi-1)
#:export (chrony-service-configuration
chrony-service-type
nebula-configuration
nebula-configuration-package
nebula-configuration-provision
nebula-configuration-config-path
%default-nebula-configuration
nebula-service-type))
;;
;; Chrony SERVICE
;;
(define-record-type* <chrony-service-configuration>
chrony-service-configuration
make-chrony-service-configuration
chrony-service-configuration?
(package
chrony-service-configuration-package
(default chrony))
(user chrony-service-configuration-user
(default "root"))
(config chrony-service-configuration-config
(default "server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony")))
(define (chrony-service-config-file config)
"Return the chorny configuration file corresponding to CONFIG."
(computed-file "chrony.conf"
(with-imported-modules '((guix build utils))
#~(begin
(use-modules (guix build utils))
(call-with-output-file #$output
(lambda (port)
(format port
#$config)))))))
(define chrony-shepherd-service
(match-lambda
(($ <chrony-service-configuration> package user config)
(list (shepherd-service (provision '(chrony))
(documentation "Run chrony as a daemon")
(requirement '(networking))
(start #~(make-forkexec-constructor (list (string-append #$package
"/sbin/chronyd")
"-n"
"-u"
#$user
"-f"
#$(chrony-service-config-file
config))))
(stop #~(make-kill-destructor)))))))
(define chrony-service-type
(service-type (name "chrony")
(description "Chrony service")
(extensions (list (service-extension
shepherd-root-service-type
chrony-shepherd-service)))
(default-value (chrony-service-configuration))))
;;
;; Nebula SERVICE
;;
(define-record-type* <nebula-configuration> nebula-configuration
make-nebula-configuration
nebula-configuration?
(package
nebula-configuration-package
(default nebula))
(provision nebula-configuration-provision)
(config-path nebula-configuration-config-path))
(define nebula-profile-packages
(lambda (configurations)
(fold (lambda (config prv)
(let ((pkg (nebula-configuration-package config)))
(if (memq pkg prv) prv
(cons pkg prv))))
'() configurations)))
(define (nebula-shepherd-service config)
(match config
(($ <nebula-configuration> package provision config-path)
(let ((log-path (string-append "/var/log/"
(symbol->string (car provision)) ".log")))
(shepherd-service (provision provision)
(documentation
"Run configured instance of nebula on system start")
(requirement '(networking user-processes))
(start #~(make-forkexec-constructor (list (string-append #$package
"/bin/nebula")
"-config"
#$config-path)
#:log-file #$log-path
#:environment-variables
(cons*
"HOME=/root"
"XDG_DATA_HOME=/root/.local/share"
"XDG_CONFIG_HOME=/root/.config"
"SSL_CERT_DIR=/run/current-system/profile/etc/ssl/certs"
"SSL_CERT_FILE=/run/current-system/profile/etc/ssl/certs/ca-certificates.crt"
(default-environment-variables))))
(stop #~(make-kill-destructor)))))))
(define (nebula-shepherd-services configurations)
(map nebula-shepherd-service configurations))
(define %default-nebula-configuration
(nebula-configuration (provision '(nebula))
(config-path "/etc/nebula/config.yml")))
(define %nebula-log-rotations
(list (log-rotation (files (list "/var/log/nebula.log")))))
(define nebula-service-type
(service-type (name 'nebula)
(extensions (list (service-extension
shepherd-root-service-type
nebula-shepherd-services)
(service-extension profile-service-type
nebula-profile-packages)
(service-extension rottlog-service-type
(const
%nebula-log-rotations))))
(default-value (list %default-nebula-configuration))
(description
"Run configured instance of nebula on system start")))
|