diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/org/euandre/services.scm | 105 |
1 files changed, 75 insertions, 30 deletions
diff --git a/src/org/euandre/services.scm b/src/org/euandre/services.scm index 4980f54..d38110c 100644 --- a/src/org/euandre/services.scm +++ b/src/org/euandre/services.scm @@ -31,6 +31,9 @@ binder-configuration-run-in-container? binder-configuration-container-name binder-configuration-extra-mappings + binder-configuration-options + binder-configuration-listen-socket + binder-configuration-upstream-socket <glaze-configuration> glaze-configuration @@ -46,6 +49,9 @@ glaze-configuration-run-in-container? glaze-configuration-container-name glaze-configuration-extra-mappings + glaze-configuration-options + glaze-configuration-listen-socket + glaze-configuration-upstream-socket <untls-configuration> untls-configuration @@ -61,6 +67,9 @@ untls-configuration-run-in-container? untls-configuration-container-name untls-configuration-extra-mappings + untls-configuration-options + untls-configuration-listen-socket + untls-configuration-upstream-socket <wscat-configuration> wscat-configuration @@ -76,6 +85,9 @@ wscat-configuration-run-in-container? wscat-configuration-container-name wscat-configuration-extra-mappings + wscat-configuration-options + wscat-configuration-listen-socket + wscat-configuration-upstream-socket <papod-configuration> papod-configuration @@ -90,7 +102,10 @@ papod-configuration-run-directory papod-configuration-run-in-container? papod-configuration-container-name - papod-configuration-extra-mappings)) + papod-configuration-extra-mappings + papod-configuration-options + papod-configuration-listen-socket + papod-configuration-upstream-socket)) (use-package-modules admin version-control) @@ -101,6 +116,13 @@ +(define-public (mklist x) + (if (not x) + '() + (if (pair? x) + x + (list x)))) + (define-public (slurp path) (call-with-input-file path @@ -306,7 +328,10 @@ (run-directory binder-configuration-run-directory (default "/var/run/binder")) (run-in-container? binder-configuration-run-in-container? (default #t)) (container-name binder-configuration-container-name (default "binder-container")) - (extra-mappings binder-configuration-extra-mappings (default '()))) + (extra-mappings binder-configuration-extra-mappings (default '())) + (options binder-configuration-options (default '())) + (listen-socket binder-configuration-listen-socket (default "0.0.0.0:4443")) + (upstream-socket binder-configuration-upstream-socket (default "/var/run/untls/untls.socket"))) (define-record-type* <glaze-configuration> glaze-configuration @@ -321,7 +346,10 @@ (run-directory glaze-configuration-run-directory (default "/var/run/glaze")) (run-in-container? glaze-configuration-run-in-container? (default #t)) (container-name glaze-configuration-container-name (default "glaze-container")) - (extra-mappings glaze-configuration-extra-mappings (default '()))) + (extra-mappings glaze-configuration-extra-mappings (default '())) + (options glaze-configuration-options (default '())) + (listen-socket glaze-configuration-listen-socket (default "/var/run/glaze/glaze.socket")) + (upstream-socket glaze-configuration-upstream-socket (default #f))) (define-record-type* <untls-configuration> untls-configuration @@ -336,7 +364,10 @@ (run-directory untls-configuration-run-directory (default "/var/run/untls")) (run-in-container? untls-configuration-run-in-container? (default #t)) (container-name untls-configuration-container-name (default "untls-container")) - (extra-mappings untls-configuration-extra-mappings (default '()))) + (extra-mappings untls-configuration-extra-mappings (default '())) + (options untls-configuration-options (default '())) + (listen-socket untls-configuration-listen-socket (default "/var/run/untls/untls.socket")) + (upstream-socket untls-configuration-upstream-socket (default #f))) (define-record-type* <wscat-configuration> wscat-configuration @@ -351,7 +382,10 @@ (run-directory wscat-configuration-run-directory (default "/var/run/wscat")) (run-in-container? wscat-configuration-run-in-container? (default #t)) (container-name wscat-configuration-container-name (default "wscat-container")) - (extra-mappings wscat-configuration-extra-mappings (default '()))) + (extra-mappings wscat-configuration-extra-mappings (default '())) + (options wscat-configuration-options (default '())) + (listen-socket wscat-configuration-listen-socket (default "/var/run/wscat/wscat.socket")) + (upstream-socket wscat-configuration-upstream-socket (default #f))) (define-record-type* <papod-configuration> papod-configuration @@ -366,8 +400,10 @@ (run-directory papod-configuration-run-directory (default "/var/run/papod")) (run-in-container? papod-configuration-run-in-container? (default #t)) (container-name papod-configuration-container-name (default "papod-container")) - (extra-mappings papod-configuration-extra-mappings (default '()))) - + (extra-mappings papod-configuration-extra-mappings (default '())) + (options papod-configuration-options (default '())) + (listen-socket papod-configuration-listen-socket (default #f)) + (upstream-socket papod-configuration-upstream-socket (default #f))) (define-public (profile-for type) (lambda (config) @@ -429,38 +465,47 @@ (shell (file-append shadow "/sbin/nologin")))))))) +(define-public (cmd-for type config) + (m:match config + (($ type name package user group _log-file data-directory _run-directory + run-in-container? container-name extra-mappings) + (let ((bin (file-append package (string-append "/bin/" name)))) + (if (not run-in-container?) + bin + (least-authority-wrapper + bin + #:user user + #:group group + #:name container-name + #:directory (or data-directory "/") + #:preserved-environment-variables + '() + #:mappings + (append + (mklist + (and data-directory + (file-system-mapping + (source data-directory) + (target source) + (writable? #t)))) + extra-mappings))))))) + (define-public (shepherd-services-for type) (lambda (config) (m:match config - (($ type name package user group log-file data-directory _run-directory run-in-container? container-name extra-mappings) + (($ type name _package user group log-file data-directory _run-directory + _run-in-container? _container-name _extra-mappings options + listen-socket upstream-socket) (list (shepherd-service (provision (list (string->symbol name))) (requirement '()) (start #~(make-forkexec-constructor ;; FIXME: add #:resource-limits - (list - #$(let ((bin (file-append package (string-append "/bin/" name)))) - (if (not run-in-container?) - bin - (least-authority-wrapper - bin - #:user user - #:group group - #:name container-name - #:directory (or data-directory "/") - #:preserved-environment-variables - '() - #:mappings - (append - (if data-directory - (list - (file-system-mapping - (source data-directory) - (target source) - (writable? #t))) - (list)) - extra-mappings))))) + (list #$(cmd-for type config) + #$@options + #$@(mklist listen-socket) + #$@(mklist upstream-socket)) #:user #$user #:group #$group #:log-file #$log-file |