mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 05:18:07 -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.
|
||||
@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
|
||||
|
||||
|
|
|
@ -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 \
|
||||
|
|
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