aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/org/euandre/packages.scm149
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