[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
62/295: services: Add rshiny service.
From: |
guix-commits |
Subject: |
62/295: services: Add rshiny service. |
Date: |
Mon, 27 Jul 2020 06:25:22 -0400 (EDT) |
dannym pushed a commit to branch wip-desktop
in repository guix.
commit 8f19e63f760fe02f9969225da2f3f3c36801218f
Author: Efraim Flashner <efraim@flashner.co.il>
AuthorDate: Sun Jun 21 16:20:16 2020 +0300
services: Add rshiny service.
* gnu/services/science.scm: New file.
(<rshiny-configuration>): New record.
(rshiny-shepherd-service-type): New variable.
* doc/guix.texi (Miscellaneous Services): Document it.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
---
doc/guix.texi | 49 +++++++++++++++++++++++++++++++++++++++++
gnu/local.mk | 1 +
gnu/services/science.scm | 57 ++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 107 insertions(+)
diff --git a/doc/guix.texi b/doc/guix.texi
index de34939..ffc77cb 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -26612,6 +26612,55 @@ setuid-root (@pxref{Setuid Programs}) such that
unprivileged users can invoke
@command{singularity run} and similar commands.
@end defvr
+@cindex rshiny
+@subsubheading R-Shiny service
+
+The @code{(gnu services science)} module provides the following service.
+
+@defvr {Scheme Variable} rshiny-service-type
+
+This is a type of service which is used to run a webapp created with
+@code{r-shiny}. This service sets the @code{R_LIBS_USER} environment
+variable and runs the provided script to call @code{runApp}.
+
+@deftp {Data Type} rshiny-configuration
+This is the data type representing the configuration of rshiny.
+
+@table @asis
+
+@item @code{package} (default: @code{r-shiny})
+The package to use.
+
+@item @code{binary} (defaunlt @code{"rshiny"})
+The name of the binary or shell script located at @code{package/bin/} to
+run when the service is run.
+
+The common way to create this file is as follows:
+
+@lisp
+@dots{}
+(let* ((out (assoc-ref %outputs "out"))
+ (targetdir (string-append out "/share/" ,name))
+ (app (string-append out "/bin/" ,name))
+ (Rbin (string-append (assoc-ref %build-inputs "r-min")
+ "/bin/Rscript")))
+@dots{}
+ (mkdir-p (string-append out "/bin"))
+ (call-with-output-file app
+ (lambda (port)
+ (format port
+"#!~a
+library(shiny)
+setwd(\"~a\")
+runApp(launch.browser=0, port=4202)~%\n"
+ Rbin targetdir)))
+@dots{}
+@end lisp
+
+@end table
+@end deftp
+@end defvr
+
@cindex Nix
@subsubheading Nix service
diff --git a/gnu/local.mk b/gnu/local.mk
index fb157c0..8bb5601 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -599,6 +599,7 @@ GNU_SYSTEM_MODULES = \
%D%/services/nix.scm \
%D%/services/nfs.scm \
%D%/services/pam-mount.scm \
+ %D%/services/science.scm \
%D%/services/security-token.scm \
%D%/services/shepherd.scm \
%D%/services/sound.scm \
diff --git a/gnu/services/science.scm b/gnu/services/science.scm
new file mode 100644
index 0000000..94ff0f3
--- /dev/null
+++ b/gnu/services/science.scm
@@ -0,0 +1,57 @@
+(define-module (gnu services science)
+ #: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))
+ (start
+ #~(exec-command
+ (list
+ #$(string-append "/run/current-system/profile/bin/" binary))
+ ;#:log-file #$(string-append "/var/log/" binary ".log") ; kills
shepherd
+ #: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
+ "Run an R-Shiny webapp as a Guix Service.")))
- 42/295: gnu: r-sjlabelled: Update to 1.1.6., (continued)
- 42/295: gnu: r-sjlabelled: Update to 1.1.6., guix-commits, 2020/07/27
- 45/295: gnu: r-rcppparallel: Update to 5.0.2., guix-commits, 2020/07/27
- 47/295: gnu: r-rgdal: Update to 1.5-12., guix-commits, 2020/07/27
- 48/295: gnu: r-directlabels: Update to 2020.6.17., guix-commits, 2020/07/27
- 51/295: gnu: r-fpc: Update to 2.2-7., guix-commits, 2020/07/27
- 53/295: gnu: Add rust-md5-asm-0.4., guix-commits, 2020/07/27
- 54/295: gnu: Add rust-md-5-0.8., guix-commits, 2020/07/27
- 57/295: gnu: Add rust-scrypt-0.2., guix-commits, 2020/07/27
- 58/295: gnu: r-qtl2: Update to 0.22-8., guix-commits, 2020/07/27
- 59/295: gnu: r-qtl2: Update synopsis, description., guix-commits, 2020/07/27
- 62/295: services: Add rshiny service.,
guix-commits <=
- 74/295: gnu: Add rust-digest-0.9., guix-commits, 2020/07/27
- 75/295: gnu: Add rust-block-buffer-0.9., guix-commits, 2020/07/27
- 78/295: gnu: rust-sha1-asm-0.4: Don't skip build., guix-commits, 2020/07/27
- 12/295: gnu: dav1d: Update to 0.7.1., guix-commits, 2020/07/27
- 15/295: gnu: python-gevent: Update to 20.6.2., guix-commits, 2020/07/27
- 13/295: gnu: Add python2-selectors2., guix-commits, 2020/07/27
- 19/295: gnu: ilmbase: Update to 2.5.2., guix-commits, 2020/07/27
- 17/295: gnu: exempi: Delete the static library., guix-commits, 2020/07/27
- 14/295: gnu: python-greenlet: Update to 0.4.16., guix-commits, 2020/07/27
- 21/295: gnu: x265: Update to 3.4., guix-commits, 2020/07/27