0

I have an Debian VM which is not connected to internet. Yet, I can still scp any file from my local machine which does have internet connection. To provide a little bit context, I am trying to host an shiny app on the VM.

I can still install an old version of R 3.1.1 with the "apt-get" command:

sudo apt-get update
sudo apt-get install r-base
sudo apt-get install r-base-dev

Yet, still can't find the "shiny" package when check the list:

sudo apt-cache search "^r-.*" | sort

So, I am thinking whether I could just scp the "shiny.tar.gz" to the VM and install the package locally? How could I install any R package offline?

I have tried somethings like:

install.packages('/home/mli/R/dir_pkg/shiny/shiny_0.13.2.tar.gz', repos = NULL, type = "source")

Yet, it didn't go through and error message as below:

Installing package into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)
Error in type == "both" : 
comparison (1) is possible only for atomic and list types
Calls: install.packages
Execution halted

Then, I tried it with another "R CMD":

R CMD INSTALL /home/mli/R/dir_pkg/shiny/shiny_0.13.2.tar.gz

I got error message telling me that dependencies is missing:

* installing to library ‘/home/mli/R/x86_64-pc-linux-gnu-library/3.1’
ERROR: dependencies ‘httpuv’, ‘mime’, ‘jsonlite’, ‘xtable’, ‘digest’, ‘htmltools’, ‘R6’ are not available for package ‘shiny’
* removing ‘/home/mli/R/x86_64-pc-linux-gnu-library/3.1/shiny’

How can I successfully install shiny package from source? Should I go ahead to install all dependencies and dependencies of dependencies first?

Mark Li
  • 429
  • 1
  • 7
  • 21
  • The "R CMD INSTALL" command won't automatically find and install dependencies, and it will refuse to install a package when dependencies are not met. There may be an easier way, but I just go through the dependencies as they come up (httpuv is one you've more been told is required) and R CMD INSTALL them one by one. They're easy to find, just navigate to the r project page as per the link you downloaded the shiny package from (just remove the shiny part at the end) in a browser, and search for the package you're looking for. It usually takes 3 mins or so to find all the dependencies you need. – rosscova Apr 29 '16 at 03:00

5 Answers5

0

Shiny has a few package dependencies, and "R CMD INSTALL" won't find them for you, so you need to get them manually. According to the description of shiny, it's dependencies are: 'Rcpp’, ‘httpuv’, ‘mime’, ‘jsonlite’, ‘xtable’, ‘digest’, ‘htmltools’, ‘R6’. So first, get the packages from cran (below are current versions, but they do change over time. Note below is for the computer connected to the internet, you'll need to scp these to the offline computer before continuing):

wget https://cran.r-project.org/src/contrib/Rcpp_0.12.4.tar.gz 
wget https://cran.r-project.org/src/contrib/httpuv_1.3.3.tar.gz 
wget https://cran.r-project.org/src/contrib/mime_0.4.tar.gz 
wget https://cran.r-project.org/src/contrib/jsonlite_0.9.19.tar.gz 
wget https://cran.r-project.org/src/contrib/digest_0.6.9.tar.gz 
wget https://cran.r-project.org/src/contrib/htmltools_0.3.5.tar.gz 
wget https://cran.r-project.org/src/contrib/R6_2.1.2.tar.gz 
wget https://cran.r-project.org/src/contrib/shiny_0.13.2.tar.gz

Then go through them in that same order with R CMD INSTALL. eg:

R CMD INSTALL Rcpp_0.12.4.tar.gz

Once all the dependencies are there, R CMD INSTALL should let you install shiny.

rosscova
  • 5,430
  • 1
  • 22
  • 35
0

To install some package-offline on Debian you can use apt-offline :

apt-offline can fully update and upgrade an APT based distribution without connecting to the network, all of it transparent to APT.

apt-offline can be used to generate a signature on a machine (with no network). This signature contains all download information required for the APT database system. This signature file can be used on another machine connected to the internet (which need not be a Debian box and can even be running windows) to download the updates. The downloaded data will contain all updates in a format understood by APT and this data can be used by apt-offline to update the non-networked machine.

Install apt-offline on the offline os (Debian) then type the following command (to import missing keys) :

sudo apt-key exportall | sudo gpg --no-default-keyring --import --keyring /etc/apt/trusted.gpg

Then you need to get the signature of your_package_name:

apt-offline set debian-install.sig --install-packages your_package_name

Next step ,Upload debian-install.sig to the on-line system and download required files.

apt-offline get debian-install.sig --bundle debian-install.zip 

Upload debian-install.zip file to the off-line system, install it using apt-offline utility to update APT database.

sudo apt-offline install debian-install.zip 

install the specified packages your_package_name :

sudo apt-get install your_package_name

You can download your package using windows machine tuto

Community
  • 1
  • 1
GAD3R
  • 4,317
  • 1
  • 23
  • 34
  • 1
    Thanks @GAD3R ! I have never used "apt-offline" before but it would be great to explore it. Yet, installing dependencies manually might be more straight forward at this point. Thanks for the answer though! – Mark Li Apr 29 '16 at 21:37
  • `apt-offline` can install the programs with all their dependencies – GAD3R Apr 29 '16 at 21:43
  • I see. So, I need to scp "debian-install.sig" to my online system to generate "debian-install.zip" and then upload this zip file back to the offline system to finish the installation? It works with any R packages? apt-offline can figure out all needed dependencies and builds into the zip file? – Mark Li Apr 29 '16 at 22:14
0

You are in a pickle. The R package mechanism expects you to be connected to get dependencies. That said, you can get some help:

R> AP <- available.packages(contrib.url(options("repos")$repos[1]))
R> revs <- tools::package_dependencies("shiny", AP, recursive=TRUE)[[1]]
R> revs
 [1] "methods"   "utils"     "httpuv"    "mime"     
 [5] "jsonlite"  "xtable"    "digest"    "htmltools"
 [9] "R6"        "Rcpp"      "tools"     "stats"    
R> 

You can now look into AP again and feed this into download.packages().

Also, several (all ?) of these are in a newer Debian distro so you could use apt-get in download-mode (maybe using apt-offline as suggested in the other question).

Lastly, we do offer a Docker container for shiny so if you use that on your VM you don't need anything else.

Dirk Eddelbuettel
  • 360,940
  • 56
  • 644
  • 725
0

sudo apt-get update

sudo apt-get install r-cran-digest


I can`t belive that it was so easy. I spent a long time searching and got only bad answers. This commands just solve everything. I used it on trisquel

0

after checking all the answers on stackoverflow, I am not able to find exactly how to to install r-base on Debian/linux system. So, I have tried myself and able to run by below steps:

Run below command on internet working Linux machine in a custom folder.

apt-get download r-base r-base-core r-recommended libmpfr6 libisl19 cpp cpp-8 cpp-4  gcc cpp-8 binutils-common libbinutils binutils-x86-64-linux-gn  gfortran linux-libc-dev g++ g++-8 libstdc make dpkg-dev perl-base perl-modules-5.28 libperl5.28 ibgdbm-compat4 zip  unzip  libpaper-utils xdg-utils libblas3 libblas.so.3 libcairo2 libcurl4 libgfortran5 libglib2.0-0 libice6 libicu63 libjpeg62-turbo liblapack3 liblapack.so.3 libpango-1.0-0 libpangocairo-1.0-0 libpng16-16 libsm6 libtcl8.6 libtiff5 libtk8.6 libx11-6 libxext6 libxss1 libxt6 ucf libfontconfig1 libfreetype6 libpixman-1-0 libxcb-render0 libxcb-shm0 libxcb1 libxrender1 libgssapi-krb5-2 libk5crypto3 libkrb5-3 libldap-2.4-2 libnghttp2-14 libpsl5 librtmp1 libssh2-1 libbsd0  x11-common fontconfig  libfribidi0 libthai0 libcairo2:amd64 libfontconfig1 libfreetype6 libpango-1.0-0:amd64 libpangoft2-1.0-0 fontconfig-config libkeyutils1 libkrb5support0 libkeyutils1 libkrb5support0 libkeyutils1 libkrb5support0 libsasl2-2 libldap-common fontconfig-config libharfbuzz0b libpaper1 libsasl2-modules-db libthai-data libdatrie1 libwebp6 libjbig0 libxft2 libx11-data libxau6 libxdmcp6 fonts-dejavu-core ttf-bitstream-vera fonts-liberation libgraphite2-3 lsb-base sensible-utils  r-cran-boot r-cran-cluster r-cran-foreign r-cran-kernsmooth r-cran-lattice r-cran-mgcv r-cran-nlme r-cran-rpart r-cran-survival r-cran-mass r-cran-class r-cran-nnet r-cran-spatial r-cran-codetools r-cran-matrix

This will create debian files inside the folder.

`Execute tar -zcf folder.tar.gz folder`

Copy this folder.tar.gz in offline computer and execute below command after going inside the folder.

 dpkg -i *

Now check R in your system by typing

R --version