summaryrefslogtreecommitdiff
path: root/px/services/networking.scm
diff options
context:
space:
mode:
Diffstat (limited to 'px/services/networking.scm')
-rw-r--r--px/services/networking.scm157
1 files changed, 157 insertions, 0 deletions
diff --git a/px/services/networking.scm b/px/services/networking.scm
new file mode 100644
index 0000000..eac9b81
--- /dev/null
+++ b/px/services/networking.scm
@@ -0,0 +1,157 @@
+(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")))