unofficial mirror of guix-patches@gnu.org 
 help / color / Atom feed
* [bug#41980] [PATCH] rshiny service
@ 2020-06-21 13:31 Efraim Flashner
  2020-06-21 13:34 ` Efraim Flashner
  2020-06-22 22:12 ` Ricardo Wurmus
  0 siblings, 2 replies; 4+ messages in thread
From: Efraim Flashner @ 2020-06-21 13:31 UTC (permalink / raw)
  To: 41980; +Cc: Ricardo Wurmus

[-- Attachment #1: Type: text/plain, Size: 991 bytes --]

I created this for Pjotr but Ricardo said he was interested in a shiny
service too so I figured I'd see about documenting it. Currently we
don't have any packages in Guix which would work with this so I have a
link¹ to one. I'm not sure if this fits well in Guix or if I should keep
it in the guix-bioinformatics channel.

I feel like the documentation as I've written it so far is weak. Also,
I've tried to run it inside a make-forkexec-command/container Guix
Service but I ran into problems, as I documented elsewhere².


¹ http://git.genenetwork.org/guix-bioinformatics/guix-bioinformatics/src/branch/master/gn/packages/bioinformatics.scm#L716
² http://git.genenetwork.org/guix-bioinformatics/guix-bioinformatics/src/branch/master/gn/services/rshiny.scm#L41

-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [bug#41980] [PATCH] rshiny service
  2020-06-21 13:31 [bug#41980] [PATCH] rshiny service Efraim Flashner
@ 2020-06-21 13:34 ` Efraim Flashner
  2020-06-22 22:12 ` Ricardo Wurmus
  1 sibling, 0 replies; 4+ messages in thread
From: Efraim Flashner @ 2020-06-21 13:34 UTC (permalink / raw)
  To: 41980; +Cc: Ricardo Wurmus


[-- Attachment #1.1: Type: text/plain, Size: 1137 bytes --]

On Sun, Jun 21, 2020 at 04:31:12PM +0300, Efraim Flashner wrote:
> I created this for Pjotr but Ricardo said he was interested in a shiny
> service too so I figured I'd see about documenting it. Currently we
> don't have any packages in Guix which would work with this so I have a
> link¹ to one. I'm not sure if this fits well in Guix or if I should keep
> it in the guix-bioinformatics channel.
> 
> I feel like the documentation as I've written it so far is weak. Also,
> I've tried to run it inside a make-forkexec-command/container Guix
> Service but I ran into problems, as I documented elsewhere².
> 
> 
> ¹ http://git.genenetwork.org/guix-bioinformatics/guix-bioinformatics/src/branch/master/gn/packages/bioinformatics.scm#L716
> ² http://git.genenetwork.org/guix-bioinformatics/guix-bioinformatics/src/branch/master/gn/services/rshiny.scm#L41
> 

And of course I forgot to attach the patch ...

-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #1.2: 0001-services-Add-rshiny-service.patch --]
[-- Type: text/plain, Size: 5290 bytes --]

From 88567daa3e9d952e1723078ef13b088ef111b1bd Mon Sep 17 00:00:00 2001
From: Efraim Flashner <efraim@flashner.co.il>
Date: Sun, 21 Jun 2020 16:20:16 +0300
Subject: [PATCH] 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(+)
 create mode 100644 gnu/services/science.scm

diff --git a/doc/guix.texi b/doc/guix.texi
index 5b854ccbd4..996122483d 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 347d4bbb17..6b76500172 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -597,6 +597,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 0000000000..94ff0f36f2
--- /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.")))
-- 
2.26.2


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [bug#41980] [PATCH] rshiny service
  2020-06-21 13:31 [bug#41980] [PATCH] rshiny service Efraim Flashner
  2020-06-21 13:34 ` Efraim Flashner
@ 2020-06-22 22:12 ` Ricardo Wurmus
  2020-06-28 11:05   ` bug#41980: " Efraim Flashner
  1 sibling, 1 reply; 4+ messages in thread
From: Ricardo Wurmus @ 2020-06-22 22:12 UTC (permalink / raw)
  To: Efraim Flashner; +Cc: 41980


Hi Efraim,

> I created this for Pjotr but Ricardo said he was interested in a shiny
> service too so I figured I'd see about documenting it.

Thank you.

> Currently we
> don't have any packages in Guix which would work with this so I have a
> link¹ to one. I'm not sure if this fits well in Guix or if I should keep
> it in the guix-bioinformatics channel.

I think it should be part of Guix.  Shiny applications aren’t often
something that you download and install like normal applications, but
something you primarily write yourself and publish.  So having a service
like that would allow those who want to host their shiny apps to do so
easily.

-- 
Ricardo




^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#41980: [PATCH] rshiny service
  2020-06-22 22:12 ` Ricardo Wurmus
@ 2020-06-28 11:05   ` Efraim Flashner
  0 siblings, 0 replies; 4+ messages in thread
From: Efraim Flashner @ 2020-06-28 11:05 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: 41980-done

[-- Attachment #1: Type: text/plain, Size: 1024 bytes --]

On Tue, Jun 23, 2020 at 12:12:12AM +0200, Ricardo Wurmus wrote:
> 
> Hi Efraim,
> 
> > I created this for Pjotr but Ricardo said he was interested in a shiny
> > service too so I figured I'd see about documenting it.
> 
> Thank you.
> 
> > Currently we
> > don't have any packages in Guix which would work with this so I have a
> > link¹ to one. I'm not sure if this fits well in Guix or if I should keep
> > it in the guix-bioinformatics channel.
> 
> I think it should be part of Guix.  Shiny applications aren’t often
> something that you download and install like normal applications, but
> something you primarily write yourself and publish.  So having a service
> like that would allow those who want to host their shiny apps to do so
> easily.
> 
> -- 
> Ricardo

Patch pushed

-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, back to index

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-21 13:31 [bug#41980] [PATCH] rshiny service Efraim Flashner
2020-06-21 13:34 ` Efraim Flashner
2020-06-22 22:12 ` Ricardo Wurmus
2020-06-28 11:05   ` bug#41980: " Efraim Flashner

unofficial mirror of guix-patches@gnu.org 

Archives are clonable:
	git clone --mirror https://yhetil.org/guix-patches/1 guix-patches/git/1.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 guix-patches guix-patches/ https://yhetil.org/guix-patches \
		guix-patches@gnu.org
	public-inbox-index guix-patches

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://news.yhetil.org/yhetil.gnu.guix.patches


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git