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."))) | ||||
		Reference in a new issue