mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2025-01-11 21:59:08 -05:00
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.
This commit is contained in:
parent
0dfc461272
commit
8f19e63f76
3 changed files with 107 additions and 0 deletions
|
@ -26612,6 +26612,55 @@ setuid-root (@pxref{Setuid Programs}) such that unprivileged users can invoke
|
||||||
@command{singularity run} and similar commands.
|
@command{singularity run} and similar commands.
|
||||||
@end defvr
|
@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
|
@cindex Nix
|
||||||
@subsubheading Nix service
|
@subsubheading Nix service
|
||||||
|
|
||||||
|
|
|
@ -599,6 +599,7 @@ GNU_SYSTEM_MODULES = \
|
||||||
%D%/services/nix.scm \
|
%D%/services/nix.scm \
|
||||||
%D%/services/nfs.scm \
|
%D%/services/nfs.scm \
|
||||||
%D%/services/pam-mount.scm \
|
%D%/services/pam-mount.scm \
|
||||||
|
%D%/services/science.scm \
|
||||||
%D%/services/security-token.scm \
|
%D%/services/security-token.scm \
|
||||||
%D%/services/shepherd.scm \
|
%D%/services/shepherd.scm \
|
||||||
%D%/services/sound.scm \
|
%D%/services/sound.scm \
|
||||||
|
|
57
gnu/services/science.scm
Normal file
57
gnu/services/science.scm
Normal file
|
@ -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.")))
|
Loading…
Reference in a new issue