diff options
Diffstat (limited to 'src/org/euandre')
| -rw-r--r-- | src/org/euandre/packages.scm | 149 |
1 files changed, 145 insertions, 4 deletions
diff --git a/src/org/euandre/packages.scm b/src/org/euandre/packages.scm index 93da8bb..0f2addf 100644 --- a/src/org/euandre/packages.scm +++ b/src/org/euandre/packages.scm @@ -1,4 +1,5 @@ (define-module (org euandre packages) + #:use-module ((gnu build linux-container) #:prefix container:) #:use-module ((guix licenses) #:prefix licenses:) #:use-module ((guix transformations) #:prefix transformations:) #:use-module ((ice-9 match) #:prefix m:) @@ -19,6 +20,19 @@ syskeep-configuration-package syskeep-configuration-log-file + <transactor-configuration> + transactor-configuration + make-transactor-configuration + transactor-configuration? + transactor-configuration-package + transactor-configuration-user + transactor-configuration-group + transactor-configuration-port + transactor-configuration-log-file + transactor-configuration-data-directory + transactor-configuration-run-in-container? + transactor-configuration-container-name + <git-configuration> git-configuration make-git-configuration @@ -153,8 +167,12 @@ service-type-for)) (use-package-modules admin + base bittorrent + gawk guile + java + sqlite texinfo version-control) (use-service-modules @@ -344,10 +362,26 @@ "084w89v15nmr45nv9av8pz7iq99aw3ggaxr0gzqfjbskb3wvvkml"))) (define-public datomic - (pkg - "datomic" - "f4bba1bc70194e8f5e2f86e90bd30253e1602531" - "00x1knqi6vr55sqm1apjz43xrd8npal0f1zl2xs875n9gjg093mx")) + (let ((p (pkg + "datomic" + "62348b5b8cb55f95b83ffd0dd588da7fa7530816" + "01gbmq9056awq6cv7zhadi64kk52lzgsgv58bjc87q079dsq3hyb"))) + (package + (inherit p) + (arguments + (substitute-keyword-arguments (package-arguments p) + ((#:phases phases) + #~(modify-phases #$phases + (add-after 'install 'wrap-program + (lambda* _ + (wrap-program + (string-append #$output "/bin/transactor") + `("PATH" ":" = + (,(string-append #$coreutils "/bin") + ,(string-append #$gawk "/bin") + ,(string-append #$openjdk23 "/bin") + ,(string-append #$sed "/bin") + ,(string-append #$sqlite-next "/bin"))))))))))))) @@ -814,6 +848,113 @@ root ALL=(ALL) ALL +(define-record-type* <transactor-configuration> + transactor-configuration + make-transactor-configuration + transactor-configuration? + (package transactor-configuration-package (default datomic)) + (user transactor-configuration-user (default "transactor")) + (group transactor-configuration-group (default "peer")) + (port transactor-configuration-port (default 50200)) + (log-file transactor-configuration-log-file (default "/var/log/transactor/transactor.log")) + (data-directory transactor-configuration-data-directory (default "/var/lib/transactor")) + (run-in-container? transactor-configuration-run-in-container? (default #t)) + (container-name transactor-configuration-container-name (default "datomic-container"))) + +(define-public (transactor-command config) + (match-record config <transactor-configuration> + (package user group data-directory run-in-container? container-name) + (let ((bin (file-append package "/bin/transactor"))) + (if (not run-in-container?) + bin + (least-authority-wrapper + bin + #:user user + #:group group + #:directory data-directory + #:name container-name + #:namespaces (s1:fold delq container:%namespaces '(net)) + #:preserved-environment-variables + '() + #:mappings + (list + (file-system-mapping + (source data-directory) + (target source) + (writable? #t)))))))) + +(define-public (transactor-shepherd-services config) + (match-record config <transactor-configuration> + (port user group log-file data-directory) + (list + (shepherd-service + (provision '(transactor)) + (requirement '()) + (start + #~(make-forkexec-constructor + (list #$(transactor-command config) + "-p" (number->string #$port) + (string-append #$data-directory "/storage.db")) + #:user #$user + #:group #$group + #:log-file #$log-file + #:directory #$data-directory)) + (stop #~(make-kill-destructor)) + (documentation "Daemon transactor process."))))) + +(define-public (transactor-activation config) + (match-record config <transactor-configuration> + (user log-file data-directory) + #~(begin + (use-modules + (guix build utils)) + (format + (current-error-port) + "Creating Transactor data directory: \"~a\".~%" + #$data-directory) + (mkdir-p/perms #$data-directory (getpwnam #$user) #o750) + (format + (current-error-port) + "Creating Transactor log directory for \"~a\".~%" + #$log-file) + (mkdir-p (dirname #$log-file)) + (when (not (file-exists? #$log-file)) + (call-with-output-file #$log-file (const #t))) + (chmod #$log-file #o644)))) + +(define-public (transactor-accounts config) + (match-record config <transactor-configuration> + (user group) + (list + (user-account + (name user) + (group group) + (comment "Datomic transactor system user") + (create-home-directory? #f) + (shell + (file-append shadow "/sbin/nologin")) + (system? #t)) + (user-group + (name group) + (system? #t))))) + +(define-public transactor-service-type + (service-type + (name 'transactor) + (extensions + (list + (service-extension shepherd-root-service-type + transactor-shepherd-services) + (service-extension activation-service-type + transactor-activation) + (service-extension account-service-type + transactor-accounts) + (service-extension profile-service-type + (compose list transactor-configuration-package)))) + (default-value (transactor-configuration)) + (description "Transactor service."))) + + (define-record-type* <git-configuration> git-configuration make-git-configuration |
