about summary refs log tree commit diff
path: root/gn
diff options
context:
space:
mode:
authorEfraim Flashner2020-06-15 22:11:07 +0300
committerEfraim Flashner2020-06-15 22:11:07 +0300
commit6f3f24b04d2d5d59d466ec74535d2257807c078b (patch)
treed8948cdc1ce69268f7d43a814bc3a41b2dc1b12b /gn
parent4c1a7bd89e146536e9afe62c27ab0bc65538d111 (diff)
downloadguix-bioinformatics-6f3f24b04d2d5d59d466ec74535d2257807c078b.tar.gz
add bxd-power container
Diffstat (limited to 'gn')
-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.")))