rocker-versioned2
rocker-versioned2 copied to clipboard
[Singularity] RStudio 1.4 and S6 v2.1.0.2 permissions error
With the update in rstudio:4.0.3 to RStudio 1.4 and S6 v2.1.0.2, I receive a new error when running rstudio-server on our compute cluster, where I have no root or user/jobid modification permissions from within the docker container.
4.0.3: Pulling from rocker/rstudio
Digest: sha256:6587343e957c4f215be7226412c4cb92d5ea31d2048bbd592b7d5cfa32f13eab
Status: Image is up to date for rocker/rstudio:4.0.3
docker.io/rocker/rstudio:4.0.3
koetjen@compute1-exec-211:~$ rstudio-server verify-installation
26 Jan 2021 01:56:52 [rserver] ERROR database error 7 (sqlite3_statement_backend::loadOne: attempt to write a readonly database) [description: Could not delete expired revoked cookies from the database, description: Could not read revoked cookies from the database]; OCCURRED AT virtual rstudio::core::Error rstudio::core::database::Connection::execute(rstudio::core::database::Query&, bool*) src/cpp/core/Database.cpp:480; LOGGED FROM: int main(int, char* const*) src/cpp/server/ServerMain.cpp:729
docker.io/rocker/rstudio:4.0.3
$ /init
[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...s6-chown: fatal: unable to chown /var/run/s6/etc/cont-init.d/userconf: Operation not permitted
s6-chmod: fatal: unable to change mode of /var/run/s6/etc/cont-init.d/userconf: Operation not permitted
s6-chown: fatal: unable to chown /var/run/s6/etc/services.d/rstudio/run: Operation not permitted
s6-chmod: fatal: unable to change mode of /var/run/s6/etc/services.d/rstudio/run: Operation not permitted
s6-chown: fatal: unable to chown /var/run/s6/etc/services.d/rstudio/finish: Operation not permitted
s6-chmod: fatal: unable to change mode of /var/run/s6/etc/services.d/rstudio/finish: Operation not permitted
exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] userconf: executing...
/var/run/s6/etc/cont-init.d/userconf: line 12: /usr/local/lib/R/etc/Renviron: Permission denied
deleting user rstudio
userdel: user 'rstudio' does not exist
R is able to run without difficulty. Also, rocker/rstudio:4.0.2 continues to run successfully. Are additional permissions an absolute requirement of RStudio 1.4, or is there somewhere I should modify the installer scripts to adjust the permissions needed?
Hello, I'm having the same issue. Thanks for the great work!
I'm having the same issue on both 4.0.3 and 4.0.2 when trying to run the container as user shiny
If your containers are running as GID 0, this works:
chown -R root:root /var/lib/rstudio-server
chmod -R g=u /var/lib/rstudio-server
Thanks @mcg1969 . Would you suggest we explore changing these as the default permissions on the rstudio-server
in our Dockerfile, or just documenting this more clearly? Are you seeing this specifically in singularity? Also, are you updating RStudio server in the running container rather than pulling down or rebuilding a new image? Of course that should work, but it does mean the user needs to manage things a bit more carefully -- we generally treat the software environment itself as disposable and use volume mapping to persist data. Of course the way singularity insists on volume mapping by default
makes this more difficult.
@Jake-Gillberg 4.0.2 should be pinned to RStudio 1.3. Please try pulling and re-running the image? If you are producing the error there, please open another issue since I think that should be different from the problem here which I believe is indeed specific to RStudio 1.4
My experience is inside a Docker container where the install is occurring in the Dockerfile build itself, not dynamically. I'm not using Singularity or Rocker, actually, it's more generic.
@mcg1969 thanks for that, yeah that makes sense if the image had a previous version installed. Based on that I think we probably should set these as the default permissions in the install_rstudio.sh
script, https://github.com/rocker-org/rocker-versioned2/blob/master/scripts/install_rstudio.sh
If you agree with that, would you be interested in sending a us a PR to that effect?
I'm afraid I can't do that—as mentioned, I don't use Rocker, and don't really have the means to test any changes. Someone with proper familiarity with that script ought to have little difficulty incorporating my proposed two-line addition however.
Hmm, just tried to test after adding the below to install_rstudio.sh
:
chown -R root:root /var/lib/rstudio-server
chmod -R g=u /var/lib/rstudio-server
I'm still getting the error:
test_shiny | s6-mkdir: warning: unable to mkdir /var/run/s6: Permission denied
test_shiny exited with code 1
I'm running this script on top of rocker/shiny-verse:4.0.3
:
FROM rocker/shiny-verse:4.0.3
RUN /rocker_scripts/install_rstudio.sh
I am trying to start this container with the user shiny
:
version: "3.9"
services:
shiny:
container_name: test_shiny
build: ./
image: test_shiny
user: shiny
environment:
- PASSWORD=${RSTUDIO_PASSWD:?set RSTUDIO_PASSWD in .env}
Yeah, this is why I can't help y'all :-) I'm not using s6
and my fix doesn't contemplate that. I'm specifically looking at the error message shared at the top of this issue.
Thanks @Jake-Gillberg for checking and thanks @mcg1969 for confirming the fix you report is not related to rocker or S6 or singularity. Will try and find some time to poke around
Hi all. Im getting the same error (below), but only when running rstudio in a singularity container from a HPC. No issues with rstudio server from docker container.
[rserver] ERROR database error 7 (sqlite3_statement_backend::loadOne: attempt to write a readonly database) [description: Could not delete expired revoked cookies from the database, description: Could not read revoked cookies from the database]; OCCURRED AT virtual rstudio::core::Error rstudio::core::database::Connection::execute(rstudio::core::database::Query&, bool*) src/cpp/core/Database.cpp:480; LOGGED FROM: int main(int, char* const*) src/cpp/server/ServerMain.cpp:729
Tried changing permissions in my Dockerfile as suggested by @mcg1969 without success
Hi, I have a very similar issue with Singularity too. I pull the latest version of the Rocker Rstudio container on our computational cluster where we use Singularity:
singularity pull docker://rocker/rstudio:latest
When the container is pulled and built, I try to start it up with
singularity exec \
-c \
-B ../..:/home/rstudio \
rstudio-latest.simg \
rserver \
--www-port 8790 \
--www-address 0.0.0.0 \
--auth-none=0 \
--auth-pam-helper-path=pam-helper
but get the following errors:
10 Feb 2021 14:28:25 [rserver] ERROR Could not change permissions for specified 'server-data-dir' - the directory (/var/run/rstudio-server) must be writeable by all users and have the sticky bit set; LOGGED FROM: int main(int, char* const*) src/cpp/server/ServerMain.cpp:640
10 Feb 2021 14:28:25 [rserver] ERROR system error 1 (Operation not permitted) [path: /var/run/rstudio-server]; OCCURRED AT rstudio::core::Error rstudio::core::{anonymous}::changeFileModeImpl(const string&, mode_t) src/cpp/shared_core/FilePath.cpp:308; LOGGED FROM: int main(int, char* const*) src/cpp/server/ServerMain.cpp:641
I use Singularity 2.6.0 but with the much newer version, 3.6.4, I still get very similar errors about permissions:
WARNING: Couldn't enforce permission 0700 on <my/home/dir>.singularity: chmod <my/home/dir>.singularity: operation not permitted
rserver[10327]: ERROR Could not change permissions for specified 'server-data-dir' - the directory (/var/run/rstudio-server) must be writeable by all users and have the sticky bit set; LOGGED FROM: int main(int, char* const*) src/cpp/server/ServerMain.cpp:640
10 Feb 2021 14:36:22 [rserver] ERROR Could not change permissions for specified 'server-data-dir' - the directory (/var/run/rstudio-server) must be writeable by all users and have the sticky bit set; LOGGED FROM: int main(int, char* const*) src/cpp/server/ServerMain.cpp:640
rserver[10327]: ERROR system error 30 (Read-only file system) [path: /var/run/rstudio-server]; OCCURRED AT rstudio::core::Error rstudio::core::{anonymous}::changeFileModeImpl(const string&, mode_t) src/cpp/shared_core/FilePath.cpp:308; LOGGED FROM: int main(int, char* const*) src/cpp/server/ServerMain.cpp:641
10 Feb 2021 14:36:22 [rserver] ERROR system error 30 (Read-only file system) [path: /var/run/rstudio-server]; OCCURRED AT rstudio::core::Error rstudio::core::{anonymous}::changeFileModeImpl(const string&, mode_t) src/cpp/shared_core/FilePath.cpp:308; LOGGED FROM: int main(int, char* const*) src/cpp/server/ServerMain.cpp:641
I would be very grateful, if there are any tips on how to tackle this.
Hi @sidorov-si, I haven't tried the latest images, but there was already an issue with RStudio >= 1.3.x: Check out: https://github.com/rocker-org/website/blob/master/content/use/singularity.md In addition to binding a personal temp-dir you can try binding a personal run-dir, e.g.
--bind=myrun:/run \
--bind=mytmp:/tmp \
This worked for me with RStudio 1.3.1093 and the ml-verse 4.0.3-cuda10.1 image.
For reference, S6 does not need to run as root. The important thing is that all the files in /etc/s6
, in the cont-init.d and services.d folder, as well as the R and RStudio folders are owned by the user. For reference, here is an= dockerfile I created that runs as a normal user (in this case jovyan for legacy support, but it might as well be used rstudio), uses the latest RStudio and S6-overlay, as well as R installed through conda (so that packages can be easily installed from conda as well).
https://github.com/kubeflow/kubeflow/pull/5624
And this is the dockerfile that the above one uses as a base:
https://github.com/kubeflow/kubeflow/pull/5622
thanks @DavidSpek , that's really cool to learn!
The important thing is that all the files in /etc/s6, in the cont-init.d and services.d folder, as well as the R and RStudio folders are owned by the user. I assume group permissions apply too? (e.g. we typically give the rstudio user membership to
staff
group.
will have to explore this a bit further!
@cboettig The RStudio image is still a bit messy at the moment, sorry for that. I did the conda but a bit quick and dirty to test if it worked (I've been able to import packages installed through conda as well as install.packages(), but some more testing should be done). I'll work on cleaning it up soon as the plan is to have it in the next release of Kubeflow which is March 15th. If you have any feedback or questions about the Dockerfile you can always ping me. Also, if anybody can perform any quick tests on that Dockerfile to see if things work it is very much appreciated.
@cboettig I just noticed your question in the last sentence of the quote block. I am using the staff group in the image as well.
Also experienced this issue running on our university HPC cluster with Singularity 3.4.x. I managed to get it working starting from the rocker singularity guidance here, combined with extending the idea at this link to cover not just the /tmp
folder but also /var/lib
and /var/run
rstudio specific subfolders. So, my script looks like so (with some redacting of local server info), where I'm highlighting likely changes someone else would need to make with ##NOTE##:
#!/bin/bash
#SBATCH --time=3-00:00:00
#SBATCH --signal=USR2
#SBATCH --ntasks=1
module purge
module load slurm
module load singularity
export PASSWORD=$(openssl rand -base64 8)
# get unused socket per https://unix.stackexchange.com/a/132524
# tiny race condition between the python & singularity commands
readonly PORT=$(python -c 'import socket; s=socket.socket(); s.bind(("", 0)); print(s.getsockname()[1]); s.close()')
cat 1>&2 <<END
1. SSH tunnel from your workstation using the following command:
ssh -N -L 8787:${HOSTNAME}:${PORT} ${USER}@myhpc.dur.ac.uk
and point your web browser to http://localhost:8787
2. log in to RStudio Server using the following credentials:
user: ${USER}
password: ${PASSWORD}
When done using RStudio Server, terminate the job by:
1. Exit the RStudio Session ("power" button in the top right corner of the RStudio window)
2. Issue the following command on the login node:
scancel -f ${SLURM_JOB_ID}
END
export LANG="en_US.UTF-8"
export LC_COLLATE="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
export LC_MESSAGES="en_US.UTF-8"
export LC_MONETARY="en_US.UTF-8"
export LC_NUMERIC="en_US.UTF-8"
export LC_TIME="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
##NOTE##
# This is a local drive location I can write, you should be able
# to just set to a subfolder of your HPC home/scratch directory
export TMPDIR="/ddn/data/${USER}/rstudio-tmp"
mkdir -p "$TMPDIR/tmp/rstudio-server"
uuidgen > "$TMPDIR/tmp/rstudio-server/secure-cookie-key"
chmod 0600 "$TMPDIR/tmp/rstudio-server/secure-cookie-key"
mkdir -p "$TMPDIR/var/lib"
mkdir -p "$TMPDIR/var/run"
# Also bind data directory on the host into the Singularity container.
# By default the only host file systems mounted within the container are $HOME, /tmp, /proc, /sys, and /dev.
##NOTE##
# You may need here just to replace the fourth bind option, or drop
singularity exec \
--bind="$TMPDIR/var/lib:/var/lib/rstudio-server" \
--bind="$TMPDIR/var/run:/var/run/rstudio-server" \
--bind="$TMPDIR/tmp:/tmp" \
--bind=/ddn/data/${USER} \
data/rstudio.simg \
rserver --www-port ${PORT} --auth-none=0 --auth-pam-helper-path=pam-helper --auth-timeout-minutes=0 --auth-stay-signed-in-days=30
printf 'rserver exited' 1>&2
Note I needed to add all the locale stuff too, to avoid endless locale warnings ... this is also a comparatively new problem which didn't happen with earlier Singularity invocations of the rocker containers, but is easily fixed.
Hope the above might help someone else out there! 😄
Hi. I met this problem after I killed the process cause I can't stop rstudio-server (Warning as blow). Operation not permitted start-stop-daemon: cannot remove pidfile '/var/run/rstudio-server.pid' (Permission denied) Given the first time I can start rstudio-server I removed and reinstalled it. Somehow it worked! LOL Have a good day!
Just wanted to add this as the above script worked decently in the past but fails with more recent versions such as Bioconductor 3.14 and Rocker 4.1.2 images, error like:
2022-01-18T11:46:38.887705Z [rserver] ERROR Attempt to run server as user 'rstudio-server' (uid 999) from account <username> (uid 10036829) without privilege, which is required to run as a different uid; LOGGED FROM: virtual rstudio::core::ProgramStatus rstudio::server::Options::read(int, char* const*, std::ostream&) src/cpp/server/ServerOptions.cpp:322
rserver exited
Solution as indicated in https://github.com/grst/rstudio-server-conda/pull/18 is to simply add --server-user ${USER}
to the rserver command that is passed to singularity exec
like:
rserver --server-user ${USER} --www-port ${PORT} --auth-none=0 --auth-pam-helper-path=pam-helper --auth-timeout-minutes=0 --auth-stay-signed-in-days=30
Works for me, hope it helps others.
When running e.g. Bioc 3.14 on a HPC via Singularity with the command as in my previous comment I now at times get lots of log messages like below. R keeps running and I can continue analysis, just wondering what this is. Any insights?
2022-01-24T10:09:41.439311Z [rsession-a_toen03] ERROR R.getOption: rstudio.errors.suppressed made from non-main thread; LOGGED FROM: SEXPREC* rstudio::r::options::getOption(const string&) src/cpp/r/ROptions.cpp:83
2022-01-24T10:09:41.439411Z [rsession-a_toen03] ERROR evaluateExpression called from thread other than main; LOGGED FROM: rstudio::core::Error rstudio::r::exec::{anonymous}::evaluateExpressionsUnsafe(SEXP, SEXP, SEXPREC**, rstudio::r::sexp::Protect*, rstudio::r::exec::{anonymous}::EvalType) src/cpp/r/RExec.cpp:140
2022-01-24T10:09:41.439475Z [rsession-a_toen03] ERROR r error 5 (R symbol not found) [symbol: .rs.extractRCode]; OCCURRED AT rstudio::core::Error rstudio::r::exec::RFunction::call(SEXP, bool, SEXPREC**, rstudio::r::sexp::Protect*) src/cpp/r/RExec.cpp:475; LOGGED FROM: void rstudio::session::modules::code_search::RSourceIndexes::update(const rstudio_boost::shared_ptr<rstudio::session::source_database::SourceDocument>&) src/cpp/session/modules/SessionCodeSearch.cpp:997
OK [built from source]
Moving DropletUtils [1.14.2] into the cache ...
2022-01-24T10:10:19.913657Z [rsession-a_toen03] ERROR R.getOption: rstudio.errors.suppressed made from non-main thread; LOGGED FROM: SEXPREC* rstudio::r::options::getOption(const string&) src/cpp/r/ROptions.cpp:83
2022-01-24T10:10:19.913716Z [rsession-a_toen03] ERROR evaluateExpression called from thread other than main; LOGGED FROM: rstudio::core::Error rstudio::r::exec::{anonymous}::evaluateExpressionsUnsafe(SEXP, SEXP, SEXPREC**, rstudio::r::sexp::Protect*, rstudio::r::exec::{anonymous}::EvalType) src/cpp/r/RExec.cpp:140
*** recursive gc invocation
2022-01-24T10:10:20.114021Z [rsession-a_toen03] ERROR R.getOption: rstudio.errors.suppressed made from non-main thread; LOGGED FROM: SEXPREC* rstudio::r::options::getOption(const string&) src/cpp/r/ROptions.cpp:83
2022-01-24T10:10:20.114156Z [rsession-a_toen03] ERROR evaluateExpression called from thread other than main; LOGGED FROM: rstudio::core::Error rstudio::r::exec::{anonymous}::evaluateExpressionsUnsafe(SEXP, SEXP, SEXPREC**, rstudio::r::sexp::Protect*, rstudio::r::exec::{anonymous}::EvalType) src/cpp/r/RExec.cpp:140
2022-01-24T10:10:20.314337Z [rsession-a_toen03] ERROR R.getOption: rstudio.errors.suppressed made from non-main thread; LOGGED FROM: SEXPREC* rstudio::r::options::getOption(const string&) src/cpp/r/ROptions.cpp:83
2022-01-24T10:10:20.314451Z [rsession-a_toen03] ERROR evaluateExpression called from thread other than main; LOGGED FROM: rstudio::core::Error rstudio::r::exec::{anonymous}::evaluateExpressionsUnsafe(SEXP, SEXP, SEXPREC**, rstudio::r::sexp::Protect*, rstudio::r::exec::{anonymous}::EvalType) src/cpp/r/RExec.cpp:140
2022-01-24T10:10:20.514629Z [rsession-a_toen03] ERROR R.getOption: rstudio.errors.suppressed made from non-main thread; LOGGED FROM: SEXPREC* rstudio::r::options::getOption(const string&) src/cpp/r/ROptions.cpp:83
2022-01-24T10:10:20.514747Z [rsession-a_toen03] ERROR evaluateExpression called from thread other than main; LOGGED FROM: rstudio::core::Error rstudio::r::exec::{anonymous}::evaluateExpressionsUnsafe(SEXP, SEXP, SEXPREC**, rstudio::r::sexp::Protect*, rstudio::r::exec::{anonymous}::EvalType) src/cpp/r/RExec.cpp:140
2022-01-24T10:10:20.715002Z [rsession-a_toen03] ERROR R.getOption: rstudio.errors.suppressed made from non-main thread; LOGGED FROM: SEXPREC* rstudio::r::options::getOption(const string&) src/cpp/r/ROptions.cpp:83
2022-01-24T10:10:20.715128Z [rsession-a_toen03] ERROR evaluateExpression called from thread other than main; LOGGED FROM: rstudio::core::Error rstudio::r::exec::{anonymous}::evaluateExpressionsUnsafe(SEXP, SEXP, SEXPREC**, rstudio::r::sexp::Protect*, rstudio::r::exec::{anonymous}::EvalType) src/cpp/r/RExec.cpp:140
2022-01-24T10:10:20.915389Z [rsession-a_toen03] ERROR R.getOption: rstudio.errors.suppressed made from non-main thread; LOGGED FROM: SEXPREC* rstudio::r::options::getOption(const string&) src/cpp/r/ROptions.cpp:83
2022-01-24T10:10:20.915491Z [rsession-a_toen03] ERROR evaluateExpression called from thread other than main; LOGGED FROM: rstudio::core::Error rstudio::r::exec::{anonymous}::evaluateExpressionsUnsafe(SEXP, SEXP, SEXPREC**, rstudio::r::sexp::Protect*, rstudio::r::exec::{anonymous}::EvalType) src/cpp/r/RExec.cpp:140
2022-01-24T10:10:21.115677Z [rsession-a_toen03] ERROR R.getOption: rstudio.errors.suppressed made from non-main thread; LOGGED FROM: SEXPREC* rstudio::r::options::getOption(const string&) src/cpp/r/ROptions.cpp:83
2022-01-24T10:10:21.115774Z [rsession-a_toen03] ERROR evaluateExpression called from thread other than main; LOGGED FROM: rstudio::core::Error rstudio::r::exec::{anonymous}::evaluateExpressionsUnsafe(SEXP, SEXP, SEXPREC**, rstudio::r::sexp::Protect*, rstudio::r::exec::{anonymous}::EvalType) src/cpp/r/RExec.cpp:140
2022-01-24T10:10:21.315952Z [rsession-a_toen03] ERROR R.getOption: rstudio.errors.suppressed made from non-main thread; LOGGED FROM: SEXPREC* rstudio::r::options::getOption(const string&) src/cpp/r/ROptions.cpp:83
2022-01-24T10:10:21.316080Z [rsession-a_toen03] ERROR evaluateExpression called from thread other than main; LOGGED FROM: rstudio::core::Error rstudio::r::exec::{anonymous}::evaluateExpressionsUnsafe(SEXP, SEXP, SEXPREC**, rstudio::r::sexp::Protect*, rstudio::r::exec::{anonymous}::EvalType) src/cpp/r/RExec.cpp:140
2022-01-24T10:10:21.516270Z [rsession-a_toen03] ERROR R.getOption: rstudio.errors.suppressed made from non-main thread; LOGGED FROM: SEXPREC* rstudio::r::options::getOption(const string&) src/cpp/r/ROptions.cpp:83
2022-01-24T10:10:21.516372Z [rsession-a_toen03] ERROR evaluateExpression called from thread other than main; LOGGED FROM: rstudio::core::Error rstudio::r::exec::{anonymous}::evaluateExpressionsUnsafe(SEXP, SEXP, SEXPREC**, rstudio::r::sexp::Protect*, rstudio::r::exec::{anonymous}::EvalType) src/cpp/r/RExec.cpp:140
2022-01-24T10:10:21.716564Z [rsession-a_toen03] ERROR R.getOption: rstudio.errors.suppressed made from non-main thread; LOGGED FROM: SEXPREC* rstudio::r::options::getOption(const string&) src/cpp/r/ROptions.cpp:83
2022-01-24T10:10:21.716681Z [rsession-a_toen03] ERROR evaluateExpression called from thread other than main; LOGGED FROM: rstudio::core::Error rstudio::r::exec::{anonymous}::evaluateExpressionsUnsafe(SEXP, SEXP, SEXPREC**, rstudio::r::sexp::Protect*, rstudio::r::exec::{anonymous}::EvalType) src/cpp/r/RExec.cpp:140
2022-01-24T10:10:21.916918Z [rsession-a_toen03] ERROR R.getOption: rstudio.errors.suppressed made from non-main thread; LOGGED FROM: SEXPREC* rstudio::r::options::getOption(const string&) src/cpp/r/ROptions.cpp:83
2022-01-24T10:10:21.917017Z [rsession-a_toen03] ERROR evaluateExpression called from thread other than main; LOGGED FROM: rstudio::core::Error rstudio::r::exec::{anonymous}::evaluateExpressionsUnsafe(SEXP, SEXP, SEXPREC**, rstudio::r::sexp::Protect*, rstudio::r::exec::{anonymous}::EvalType) src/cpp/r/RExec.cpp:140
This should be fixed on the newer images (?) Can you make sure you are pulling the latest image?
RStudio logs are set in /etc/rstudio/logging.conf
. Until recently logger-type
had been set to stderr
instead of syslog
in our RStudio 1.4.x images resulting in all system warnigns being reported to the R console stderr
Hello.
We recently renewed the Rocker Project website and rewrote most of the articles.
However, I don't use Singularity, so the page for Singularity is left as is.
It would be great if someone who uses rocker/rstudio
with singularity could update this article.
https://rocker-project.org/use/singularity.html
Thanks @eitsupi . I believe @nathanweeks contributed the original documentation there https://github.com/rocker-org/website/pull/5 . Thanks everyone for the community effort, PRs welcome!
@eitsupi Is the primary goal to update the article for compatibility with a newer rocker/rstudio
, or is there anything else that should be considered (e.g., new style / formatting conventions)?
@eitsupi Is the primary goal to update the article for compatibility with a newer
rocker/rstudio
, or is there anything else that should be considered (e.g., new style / formatting conventions)?
@nathanweeks Thanks for replying.
The format can be modified by us and we would be happy to update the contents for the new version of RStudio Server (rocker/rstudio
).
Thanks to @frederikziebell, the usage page of the Rocker project site is updated! (rocker-org/website#66) So close this for now.