aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gn/services/bxd-power-container.scm24
-rw-r--r--gn/services/rshiny.scm62
2 files changed, 86 insertions, 0 deletions
diff --git a/gn/services/bxd-power-container.scm b/gn/services/bxd-power-container.scm
new file mode 100644
index 0000000..5dbef6c
--- /dev/null
+++ b/gn/services/bxd-power-container.scm
@@ -0,0 +1,24 @@
+(define-module (gn services bxd-power-container))
+
+(use-modules (gnu)
+ (gn packages bioinformatics)
+ (gn services rshiny))
+
+(operating-system
+ (host-name "bxd-power")
+ (timezone "Etc/UTC")
+ (locale "en_US.utf8")
+
+ (bootloader (bootloader-configuration
+ (bootloader grub-bootloader)
+ (target "does-not-matter")))
+ (file-systems %base-file-systems)
+ ;; No firmware for VMs.
+ (firmware '())
+ ;; We only need a few packages inside the container.
+ (packages (list coreutils))
+
+ (services (list (service rshiny-service-type
+ (rshiny-configuration
+ (package bxd-power-calculator-app)
+ (binary "bxd-power-calculator-app"))))))
diff --git a/gn/services/rshiny.scm b/gn/services/rshiny.scm
new file mode 100644
index 0000000..0a947cb
--- /dev/null
+++ b/gn/services/rshiny.scm
@@ -0,0 +1,62 @@
+(define-module (gn services rshiny)
+ #:export (<rshiny-configuration>
+ rshiny-configuration
+ rshiny-configuration?
+ rshiny-configuration-package
+ rshiny-configuration-binary
+ rshiny-shepherd-service
+ rshiny-service-type))
+
+(use-modules (gnu)
+ (guix records)
+ (ice-9 match))
+(use-service-modules shepherd)
+(use-package-modules cran)
+
+(define-record-type* <rshiny-configuration>
+ rshiny-configuration
+ make-rshiny-configuration
+ rshiny-configuration?
+ (package rshiny-configuration-package ; package
+ (default r-shiny))
+ (binary rshiny-configuration-binary ; string
+ (default "rshiny")))
+
+(define rshiny-shepherd-service
+ (match-lambda
+ (($ <rshiny-configuration> package binary)
+ (list
+ (shepherd-service
+ (documentation (string-append "R-Shiny service for " binary))
+ (provision (list (symbol-append 'rshiny- (string->symbol
+ (string-take binary 9)))))
+ (requirement '(networking))
+ ;; This one works:
+ (start
+ #~(lambda _
+ (setenv "R_LIBS_USER" "/run/current-system/profile/site-library/")
+ (invoke #$(string-append "/run/current-system/profile/bin/" binary))))
+ ;; Let's try in a container:
+ ;(start #~(make-forkexec-constructor/container
+ ; (list #$(file-append package "/bin/" binary))
+ ; #:environment-variables
+ ; (list "R_LIBS_USER=/run/current-system/profile/site-library/")))
+ (stop #~(make-kill-destructor)))))))
+
+(define rshiny-service-type
+ (service-type
+ (name 'rshiny)
+ (extensions
+ (list
+ (service-extension shepherd-root-service-type
+ rshiny-shepherd-service)
+ (service-extension profile-service-type
+ ;; We want the package installed so that it
+ ;; pulls in the propagated inputs as well.
+ (lambda (config)
+ (list
+ (rshiny-configuration-package config))))))
+ (description
+; (string-append "Run " (rshiny-configuration-package config) ", an R-Shiny
+;webapp, as a Guix Service.")
+ "Run an R-Shiny webapp as a Guix Service.")))