オフラインでのR環境構築 on RHEL

# はじめに
Rだけではありませんが、最近のオープンソースやフリー・ソフトウェアは基本的にインターネット接続がされている環境で使用することが前提となっていることが多いと思います。
ところが実際のお客様環境で利用する際は、外部のネットワークにはつなげられない閉じた世界のマシンを利用しなければならないケースも多々あります。ダウンロードしたファイルをDVD等に焼いて、持ち込みのための承認プロセスを通して、ウィルスチェック結果のエビデンスを取って...みたいなことをしてようやく目的のサーバーに取り込める訳です。足りないものがあったらその辺に転がってるからダウンロードして使えばいいじゃん、みたいなことが簡単にはできないことも多いんです。
ということで、Rの環境をRedHat Enterprise Linuxに"オフラインで"(インターネットにつながらない前提で)構築した時の手順を記しておきます。
(厳密に検証しきれていない部分もあるので、不要な手順やもっとベターな方法はあるかもしれません。とりあえず動かせる環境を作れた時の作業ログです。)

## 関連記事
[インフラ屋さんのためのR言語: 環境構築編](http://qiita.com/tomotagwork/items/5cd9362f386d330fe96a)
[オフラインでのR環境構築 on RHEL](http://qiita.com/tomotagwork/items/9e86d2fc67a7c7b644d5) <= 当記事
[z/OSにRを導入してみた](http://qiita.com/tomotagwork/items/83791c46421fef8de912) 
[インフラ屋さんのためのR言語: プログラミング編](http://qiita.com/tomotagwork/items/24d1d11a12bb38aa9f35)
[R Markdownによるレポート生成](http://qiita.com/tomotagwork/items/c92fb40a76f56ea16aa4)
[R MarkdownのHTMLレポートをブラッシュアップ](http://qiita.com/tomotagwork/items/3061a74e1d25cf46e891)
[R - ShinyによるWebアプリケーション作成: 基礎編](http://qiita.com/tomotagwork/items/b56071ea2b276ba87476)
[R - ShinyによるWebアプリケーション作成: shinydashboard編](http://qiita.com/tomotagwork/items/0efe3f08ddd1f268c8f8)
[R - ShinyによるWebアプリケーション作成Tips: shinydashboardでの画面遷移制御](https://qiita.com/tomotagwork/items/bc061a363eb36382d2e2#_reference-c7c49926f78c0fc44cc0)
[R - ShinyによるWebアプリケーション作成Tips: UIオブジェクトの動的制御](http://qiita.com/tomotagwork/items/d3c3a0533224e3faea7d)
[R - Shinyアプリ/管理サーバー テンプレート](https://qiita.com/tomotagwork/items/3041efde7ae0b46e4c5f)
[R - ShinyアプリでJリーグの勝点推移グラフを作成してみた](https://qiita.com/tomotagwork/items/3162cfef78c71ef4b977)


# 目標
以下の環境構築ができる手順を確立することが目標です。

* R自体の導入、簡単なサンプル・スクリプトの実行確認
* R パッケージの追加インストール
* RStudio Desktopの導入、起動
* R Markdownで単純なレポート生成

※開発環境はPC使えばいいから、RStudioはいらないんじゃね？ Xの環境とか普通使わないっしょ、みたいに思われるかもしれませんが、これは、最後のR Markdownでのレポート生成を行いたいということに関係しています。R Markdownを使用する場合、内部的にPandocというフォーマット変換のユーティリティーが使用されますが、R StudioをインストールするとそのPandocも一緒に導入されます！ 個別にPandocを導入しようとすると、Pandoc自体がHaskellなる言語で書かれているのでその言語環境やらそれをビルドするためのビルドツールやらの環境を整えなくてはならず、そういうところまでオフライン環境で全部やるのはかなりハードルが高いため、RStudioを導入する、ということにしています。とりあえずRStudio Desktopが使える環境を作りましたが、RStudio Serverを立てた方がよかったかもしれません(その場合はX-Windowいらないのかも)。その辺はまた追々...

# RedHat環境補足
まず、Rを導入するOS周りを補足します。

WindowsマシンのVirtual Box上にゲストOSとしてRHELを導入

OS: RHEL V7.1 (64bit)
インストールコンポーネント
 - ベース： サーバー(GUI使用)
 - FTPサーバー
 - Javaプラットフォーム
 - パフォーマンスツール
 - 開発ツール 

今回のR環境構築とは別の要件で個別に追加済みのOSパッケージ(たぶんRのインストールには不要だと思うが一応書いておく)
 - libstdc++.i686
 - libstdc++-devel.i686
 - zlib-devel
 - zlib-devel.i686 
 - ksh.x86_64
 - ncurses-libs.i686
 - pam.i686
 - glibc-devel.i686

操作はホストOSのWindowsからSSH経由でTeraTermで接続しますが、Windows側にはXmingを入れてXを飛ばせるようにしています。
参考: http://qiita.com/tomotagwork/items/b35aa09c1aa1acb3d554#teraterm%E3%81%A7%E3%81%AE%E8%A8%AD%E5%AE%9A

# R本体
## R導入
基本、以下の手順をベースに進めます。
[R Installation and Administration](https://cran.r-project.org/doc/manuals/r-devel/R-admin.html)

### ファイルの入手/展開

以下からR-3.3.2.tar.gz　をダウンロード
https://cran.ism.ac.jp/

解凍

```
# gunzip R-3.3.2.tar.gz
# tar -xvf R-3.3.2.tar -C /opt/
```

=> /opt/R-3.3.2に展開される

### ビルド用の構成
環境に応じたビルド用の構成を行います。

>memo:
/opt/R-3.3.2/configureを実行して構成を行いますが、ここでかなりトライ&エラーを繰り返すことになりました。
最初に「configure: error: --with-x=yes (default) and X11 headers/libs are not available」というエラーでつまづいて、「http://stackoverflow.com/questions/17473547/error-with-readline-yes-default-and-headers-libs-are-not-available 」この辺参考に、安易に「--with-x=no」オプション付きでconfigure実行したら後々X関連でつまってRStudioからR Markdownがうまく動かせず、オプションはずしてconfigureからやり直しとなりました。
RStudio起動するためにはconfigureで「--enable-R-shlib」オプション指定する必要がありました。
その他、前提となるOSパッケージが色々足りないのでその都度追加していきました。

yumで、以下のOSパッケージを追加でインストールします。
configureやその後のmake等を実行するのに個別にインストールしたOSパッケージ:
- bzip2-devel.x86_64
- xz-devel.x86_64
- pcre-devel.x86_64
- libcurl-devel.x86_64
- cairo-devel.x86_64
- libXt-devel.x86_64
- java-1.7.0-openjdk-devel.x86_64
- java-1.8.0-openjdk.x86_64
- java-1.8.0-openjdk-devel.x86_64
- java-1.8.0-openjdk-headless.x86_64

※java1.7しか使っていないのでjava1.8は不要だったかも。

「--enable-R-shlib」オプション付きでconfigure実行(「--with-x=no」は指定しない)

```
[root@localhost /opt/R-3.3.2]# ./configure --enable-R-shlib

... (略) ...

config.status: creating tools/Makefile
config.status: creating src/include/config.h
config.status: src/include/config.h is unchanged
config.status: executing libtool commands
config.status: executing stamp-h commands

R is now configured for x86_64-pc-linux-gnu

  Source directory:          .
  Installation directory:    /usr/local

  C compiler:                gcc -std=gnu99  -g -O2
  Fortran 77 compiler:       gfortran  -g -O2

  C++ compiler:              g++  -g -O2
  C++11 compiler:            g++  -std=c++11 -g -O2
  Fortran 90/95 compiler:    gfortran -g -O2
  Obj-C compiler:

  Interfaces supported:      X11
  External libraries:        readline, curl
  Additional capabilities:   PNG, NLS, cairo
  Options enabled:           shared R library, shared BLAS, R profiling

  Capabilities skipped:      JPEG, TIFF, ICU
  Options not enabled:       memory profiling

  Recommended packages:      yes

configure: WARNING: you cannot build info or HTML versions of the R manuals
configure: WARNING: you cannot build PDF versions of the R manuals
configure: WARNING: you cannot build PDF versions of vignettes and help pages
```
これで環境に合わせたMakefileやらなんやらが生成されます。

### ビルド
Rの環境をソースからビルドします。

>memo:
トライ&エラーを繰り返すと、makeも何度かやり直す必要がありますが、makeをやり直す場合は前に生成されたモジュールが残っていると再生成してくれないので、一旦「make clean」を実行して前回の状態をクリーンアップしてから、再度「make」を実行するとよいでしょう。

makeコマンド実行(結構時間がかかる)

```
[root@localhost /opt/R-3.3.2]# make

...(略)...

```

makeが完了したらチェックを行います。

```
[root@localhost /opt/R-3.3.2]# make check
make[1]: ディレクトリ `/opt/R-3.3.2/tests' に入ります
make[2]: ディレクトリ `/opt/R-3.3.2/tests' に入ります
make[3]: ディレクトリ `/opt/R-3.3.2/tests/Examples' に入ります
Testing examples for package ‘base’
  comparing ‘base-Ex.Rout’ to ‘base-Ex.Rout.prev’ ...
1569c1569
< DISPLAY                 localhost:11.0
---
> DISPLAY                 localhost:10.0
3714c3714
<       FALSE        TRUE       FALSE       FALSE        TRUE       FALSE
---
>       FALSE        TRUE       FALSE       FALSE       FALSE       FALSE
6501c6501
< 67
---
> 15
7689c7689
< DISPLAY: localhost:11.0
---
> DISPLAY: localhost:10.0
7737c7737
< R_SESSION_TMPDIR: /tmp/Rtmp6SSqMI
---
> R_SESSION_TMPDIR: /tmp/Rtmp1yKUUo
7750c7750
< SSH_CLIENT: 10.0.2.2 52175 22
---
> SSH_CLIENT: 10.0.2.2 51704 22
7751c7751
< SSH_CONNECTION: 10.0.2.2 52175 10.0.2.15 22
---
> SSH_CONNECTION: 10.0.2.2 51704 10.0.2.15 22
7752c7752
< SSH_TTY: /dev/pts/1
---
> SSH_TTY: /dev/pts/0
7758c7758
< XDG_SESSION_ID: 14
---
> XDG_SESSION_ID: 1
Testing examples for package ‘tools’
  comparing ‘tools-Ex.Rout’ to ‘tools-Ex.Rout.save’ ... OK
Testing examples for package ‘utils’
  comparing ‘utils-Ex.Rout’ to ‘utils-Ex.Rout.prev’ ... OK
Testing examples for package ‘grDevices’
  comparing ‘grDevices-Ex.Rout’ to ‘grDevices-Ex.Rout.save’ ... OK
Testing examples for package ‘graphics’
  comparing ‘graphics-Ex.Rout’ to ‘graphics-Ex.Rout.save’ ... OK
Testing examples for package ‘stats’
  comparing ‘stats-Ex.Rout’ to ‘stats-Ex.Rout.save’ ... OK
Testing examples for package ‘datasets’
  comparing ‘datasets-Ex.Rout’ to ‘datasets-Ex.Rout.save’ ... OK
Testing examples for package ‘methods’
  comparing ‘methods-Ex.Rout’ to ‘methods-Ex.Rout.prev’ ... OK
Testing examples for package ‘grid’
  comparing ‘grid-Ex.Rout’ to ‘grid-Ex.Rout.save’ ... OK
Testing examples for package ‘splines’
  comparing ‘splines-Ex.Rout’ to ‘splines-Ex.Rout.save’ ... OK
Testing examples for package ‘stats4’
  comparing ‘stats4-Ex.Rout’ to ‘stats4-Ex.Rout.save’ ... OK
Testing examples for package ‘tcltk’
  comparing ‘tcltk-Ex.Rout’ to ‘tcltk-Ex.Rout.prev’ ... OK
Testing examples for package ‘compiler’
  comparing ‘compiler-Ex.Rout’ to ‘compiler-Ex.Rout.prev’ ... OK
Testing examples for package ‘parallel’
  comparing ‘parallel-Ex.Rout’ to ‘parallel-Ex.Rout.prev’ ... OK
make[3]: ディレクトリ `/opt/R-3.3.2/tests/Examples' から出ます
make[2]: ディレクトリ `/opt/R-3.3.2/tests' から出ます
make[2]: ディレクトリ `/opt/R-3.3.2/tests' に入ります
running strict specific tests
make[3]: ディレクトリ `/opt/R-3.3.2/tests' に入ります
running code in 'eval-etc.R' ... OK
  comparing 'eval-etc.Rout' to './eval-etc.Rout.save' ... OK
running code in 'simple-true.R' ... OK
  comparing 'simple-true.Rout' to './simple-true.Rout.save' ... OK
running code in 'arith-true.R' ... OK
  comparing 'arith-true.Rout' to './arith-true.Rout.save' ... OK
running code in 'arith.R' ... OK
  comparing 'arith.Rout' to './arith.Rout.save' ... OK
running code in 'lm-tests.R' ... OK
  comparing 'lm-tests.Rout' to './lm-tests.Rout.save' ... OK
running code in 'ok-errors.R' ... OK
  comparing 'ok-errors.Rout' to './ok-errors.Rout.save' ... OK
running code in 'method-dispatch.R' ... OK
  comparing 'method-dispatch.Rout' to './method-dispatch.Rout.save' ... OK
running code in 'any-all.R' ... OK
  comparing 'any-all.Rout' to './any-all.Rout.save' ... OK
running code in 'd-p-q-r-tests.R' ... OK
  comparing 'd-p-q-r-tests.Rout' to './d-p-q-r-tests.Rout.save' ... OK
make[3]: ディレクトリ `/opt/R-3.3.2/tests' から出ます
running sloppy specific tests
make[3]: ディレクトリ `/opt/R-3.3.2/tests' に入ります
running code in 'complex.R' ... OK
  comparing 'complex.Rout' to './complex.Rout.save' ... OK
running code in 'print-tests.R' ... OK
  comparing 'print-tests.Rout' to './print-tests.Rout.save' ... OK
running code in 'lapack.R' ... OK
  comparing 'lapack.Rout' to './lapack.Rout.save' ... OK
running code in 'datasets.R' ... OK
  comparing 'datasets.Rout' to './datasets.Rout.save' ... OK
running code in 'datetime.R' ... OK
  comparing 'datetime.Rout' to './datetime.Rout.save' ... OK
running code in 'iec60559.R' ... OK
  comparing 'iec60559.Rout' to './iec60559.Rout.save' ... OK
make[3]: ディレクトリ `/opt/R-3.3.2/tests' から出ます
make[2]: ディレクトリ `/opt/R-3.3.2/tests' から出ます
make[2]: ディレクトリ `/opt/R-3.3.2/tests' に入ります
running regression tests ...
make[3]: ディレクトリ `/opt/R-3.3.2/tests' に入ります
running code in 'array-subset.R' ... OK
running code in 'reg-tests-1a.R' ... OK
running code in 'reg-tests-1b.R' ... OK
running code in 'reg-tests-1c.R' ... OK
running code in 'reg-tests-2.R' ... OK
  comparing 'reg-tests-2.Rout' to './reg-tests-2.Rout.save' ... OK
running code in 'reg-examples1.R' ... OK
running code in 'reg-examples2.R' ... OK
running code in 'reg-packages.R' ... OK
running code in 'p-qbeta-strict-tst.R' ... OK
running code in 'r-strict-tst.R' ... OK
running code in 'reg-IO.R' ... OK
  comparing 'reg-IO.Rout' to './reg-IO.Rout.save' ... OK
running code in 'reg-IO2.R' ... OK
  comparing 'reg-IO2.Rout' to './reg-IO2.Rout.save' ... OK
running code in 'reg-plot.R' ... OK
  comparing 'reg-plot.pdf' to './reg-plot.pdf.save' ... OK
running code in 'reg-S4.R' ... OK
  comparing 'reg-S4.Rout' to './reg-S4.Rout.save' ... OK
running code in 'reg-S4-examples.R' ... OK
running code in 'reg-BLAS.R' ... OK
make[3]: ディレクトリ `/opt/R-3.3.2/tests' から出ます
make[3]: ディレクトリ `/opt/R-3.3.2/tests' に入ります
running code in 'reg-tests-3.R' ... OK
  comparing 'reg-tests-3.Rout' to './reg-tests-3.Rout.save' ... OK
running code in 'reg-examples3.R' ... OK
  comparing 'reg-examples3.Rout' to './reg-examples3.Rout.save' ...520a521,544
> $Depends
> [1] "lattice"
>
> $Installed
> [1] "lattice"
>
> $Found
> list()
>
> $NotFound
> character(0)
>
> $R
> [1] "R (>= 3.0.0)"
>
> attr(,"class")
> [1] "DependsList"
> Warning messages:
> 1: 'getDepList' is deprecated.
> Use 'dependsOnPkgs() or package_dependencies()' instead.
> See help("Deprecated")
> 2: 'package.dependencies' is deprecated.
> Use 'package_dependencies' instead.
> See help("Deprecated")
 OK
running tests of plotting Latin-1
  expect failure or some differences if not in a Latin-1 or UTF-8 locale
running code in 'reg-plot-latin1.R' ... OK
  comparing 'reg-plot-latin1.pdf' to './reg-plot-latin1.pdf.save' ... OK
make[3]: ディレクトリ `/opt/R-3.3.2/tests' から出ます
make[2]: ディレクトリ `/opt/R-3.3.2/tests' から出ます
make[2]: ディレクトリ `/opt/R-3.3.2/tests' に入ります
running tests of Internet functions
  expect some differences
make[3]: ディレクトリ `/opt/R-3.3.2/tests' に入ります
running code in 'internet.R' ... OK
  comparing 'internet.Rout' to './internet.Rout.save' ...11c11
< [1] 10075
---
> [1] 9391
 OK
make[3]: ディレクトリ `/opt/R-3.3.2/tests' から出ます
make[2]: ディレクトリ `/opt/R-3.3.2/tests' から出ます
make[1]: ディレクトリ `/opt/R-3.3.2/tests' から出ます
```

OKぽいです。

### インストール
「make install」コマンドでインストール(?)処理を行います。

```
[root@localhost /opt/R-3.3.2]# make install
make[1]: ディレクトリ `/opt/R-3.3.2/m4' に入ります
make[1]: `install' に対して行うべき事はありません.
make[1]: ディレクトリ `/opt/R-3.3.2/m4' から出ます
make[1]: ディレクトリ `/opt/R-3.3.2/tools' に入ります
make[1]: `install' に対して行うべき事はありません.
make[1]: ディレクトリ `/opt/R-3.3.2/tools' から出ます
make[1]: ディレクトリ `/opt/R-3.3.2/doc' に入ります
installing doc ...
mkdir -p -- /usr/local/lib64/R/doc
/usr/bin/install: `NEWS.pdf' を stat できません: そのようなファイルやディレクトリはありません
/usr/bin/install: `NEWS.pdf' を stat できません: そのようなファイルやディレクトリはありません
make[1]: *** [install-sources2] エラー 1
make[1]: ディレクトリ `/opt/R-3.3.2/doc' から出ます
make: *** [install] エラー 1
```

↑こんなエラーで失敗してしまいました。このエラーを解決する方法が分からなかったのですが、まぁドキュメント関連なのでこれは以下のような方法で無理やり回避することにしました。

/opt/R-3.3.2/doc/Makefileの中身を編集して、NEWS.pdfのビルドの元になりそうな記述を削除しちゃいました。
具体的には、テキストエディターで以下の18,19,39行目の ”NEWS.pdf”という文字列を削除しました。

```
...
     18 INSTFILES2 = NEWS.rds NEWS NEWS.pdf
     19 NON_SVN_INSTFILES = FAQ RESOURCES NEWS NEWS.pdf
...
     39 docs: R.1 NEWS.rds NEWS html/NEWS.html NEWS.pdf
...
```

その後、再度make installを実行し直したらOKでした。

## R基本動作確認

```
$ R --version
R version 3.3.2 (2016-10-31) -- "Sincere Pumpkin Patch"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see
http://www.gnu.org/licenses/.


$ cat hello.R
print("hello world")

$ Rscript hello.R
[1] "hello world"
```

## Rパッケージの追加インストール
インターネットに接続していない環境が前提なので、これもソースをダウンロードしてそのソースからインストールすることになります。依存関係がある場合はそれらをチェックした上で必要なものをそれぞれダウンロードしてインストールする必要があります。

参考:
パッケージをブラウザから個別にダウンロードする場合はこちら。
[Available CRAN Packages By Name](https://cran.r-project.org/web/packages/available_packages_by_name.html)
コマンドでまとめて(依存するものも含めて)ダウンロードもできるらしい。
[miniCRANパッケージを使ってパッケージをオフラインインストールする](http://datasciesotist.hatenablog.jp/entry/2015/03/24/004539)

サンプルとして、rJavaパッケージをインストールしてみます。

以下のページからPackage Source「rJava_0.9-8.tar.gz」をダウンロードします。
https://cran.r-project.org/web/packages/rJava/index.html

Javaの構成が必要そうだったので、以下のコマンドを実行。
(トライ&エラーで色々試していたのでこれ実行しましたが、事前にjavaインストール済みでconfigureがすんなり通っていれば不要だったかもしれない...)

```
[root@localhost /]# R CMD javareconf
Java interpreter : /usr/bin/java
Java version     : 1.7.0_75
Java home path   : /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64/jre
Java compiler    : /usr/bin/javac
Java headers gen.: /usr/bin/javah
Java archive tool: /usr/bin/jar

trying to compile and link a JNI program
detected JNI cpp flags    : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/linux
detected JNI linker flags : -L$(JAVA_HOME)/lib/amd64/server -ljvm
gcc -std=gnu99 -I/usr/local/lib64/R/include -DNDEBUG -I/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64/jre/../include -I/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64/jre/../include/linux -I/usr/local/include    -fpic  -g -O2  -c conftest.c -o conftest.o
gcc -std=gnu99 -shared -L/usr/local/lib64 -o conftest.so conftest.o -L/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64/jre/lib/amd64/server -ljvm


JAVA_HOME        : /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75-2.5.4.2.el7_0.x86_64/jre
Java library path: $(JAVA_HOME)/lib/amd64/server
JNI cpp flags    : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/linux
JNI linker flags : -L$(JAVA_HOME)/lib/amd64/server -ljvm
Updating Java configuration in /usr/local/lib64/R
Done.
```

ダウンロードしたtar.gzファイルを指定して、Rのinstall.package()を実行。(ファイルのあるディレクトリで実行)

```
[root@localhost /Local_Inst_Image/R]# R -e 'install.packages(c("rJava_0.9-8.tar.gz"), repos = NULL, type="source")'

R version 3.3.2 (2016-10-31) -- "Sincere Pumpkin Patch"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R は、自由なソフトウェアであり、「完全に無保証」です。
一定の条件に従えば、自由にこれを再配布することができます。
配布条件の詳細に関しては、'license()' あるいは 'licence()' と入力してください。

R は多くの貢献者による共同プロジェクトです。
詳しくは 'contributors()' と入力してください。
また、R や R のパッケージを出版物で引用する際の形式については
'citation()' と入力してください。

'demo()' と入力すればデモをみることができます。
'help()' とすればオンラインヘルプが出ます。
'help.start()' で HTML ブラウザによるヘルプがみられます。
'q()' と入力すれば R を終了します。

> install.packages(c("rJava_0.9-8.tar.gz"), repos = NULL, type="source")
* installing *source* package ‘rJava’ ...
**  パッケージ ‘rJava’ の解凍および MD5 サムの検証に成功しました
checking for gcc... gcc -std=gnu99
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out

...(略)...

make[1]: ディレクトリ `/tmp/RtmpXX33pT/R.INSTALL31db4726a498/rJava/jri' から出ます
installing via 'install.libs.R' to /usr/local/lib64/R/library/rJava
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (rJava)
```

パッケージのインストールできました。

# RStudio Desktop
## 導入
ここからインストーラーをダウンロードします。
https://www.rstudio.com/products/rstudio/download/

インストーラーは「RStudio 1.0.136 - Fedora 19+/RedHat 7+/openSUSE 13.1+ (64-bit)」　を選択します。
=> rstudio-1.0.136-x86_64.rpm ファイルを入手。

※Intel系のインストーラーしか提供されていないようです(Power系のLinuxのインストーラーは提供されていません)。
参考: https://support.rstudio.com/hc/en-us/articles/236077788-Running-RStudio-Server-on-IBM-Power8

rpmコマンドでインストール

```
[root@localhost /Local_Inst_Image/RStudio]# rpm -ivh rstudio-1.0.136-x86_64.rpm
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:rstudio-1.0.136-1                ################################# [100%]
```

## 稼働確認
「rstudio」コマンドを実行するとRStudioが起動します。(※Xの環境が必要)
![image01.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/fc08a975-a00d-43d4-bc0b-b2b7f37b36e5.jpeg)

無事起動しました。

>memo:
起動時に、「R Not Found - R shared library (/usr/local/lib64/R/lib/libR.so) not found. If this is a custom build of R, was it build with the --enable-R-shlib option?」 というポップアップのエラーが出たら、configure実行時に「--enable-R-shlib」オプションを指定していない可能性があります。その場合オプション付きでconfigureからやり直す必要があります。

# R Markdown
ここまでで、一通りR, RStudioの環境が整いました。
さらに、R markdownを使うための環境整備を進めます。

## 前提パッケージのインストール
単純なサンプルのrmdファイルを作って、knitボタンを押すと、以下のエラーで怒られます。
![image02.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/42ff4215-8f2f-65f0-0371-3507ffe55e10.jpeg)

R markdownを使うには、Rのパッケージが色々と必要なので、ここに表示されているパッケージ + その前提パッケージをインストールする必要があります。基本的には先に示した手順の通り、Package SourceをCRANのサイトからダウンロードしてインストールすればよいのですが、"stringi"というパッケージについては注意が必要です。このパッケージはCRANのサイトで提供されているPackage Sourceファイルだけでは足りず、このインストールプロセスの中で外部のWebサイトを参照してファイルを勝手にダウンロードしようとします。そこでインターネットにアクセスできないとエラーになります。(まったく嫌がらせとしか思えない...)
そのため"stringi"については、CRANのサイトではなく以下のサイトから、tar.gzファイルを入手する必要があります。
https://github.com/gagolews/stringi/releases
ここから入手したものには、必要な全てのファイルが含まれているので外部サイトのアクセスは行われないようです。

R Markdown実行用に追加で入手したパッケージは以下の通りです。
- htmltools
- htmlwidgets
- magrittr
- digest
- Rcpp
- jsonlite
- yaml
- evaluate
- formatR
- highr
- markdown
- stringi
- stringr
- caTools
- bitops
- knitr
- base64enc
- rprojroot
- rmarkdown
- backports
- mime

## 稼働確認

テスト用に単純なrmdファイルを作成 (test01.rmd)

    ---
    title: "R Markdown Test01"
    author: "tag"
    output:
      html_document:
        number_sections: yes
        toc: true
        toc_depth: 3
    ---

    ```{r setup, include=FALSE}
    library(DT)        # Graphic package

    aaa <- "aaa"
    ```

    # Title01

    aaaa

    ## Title01-01

    bbbbb

    ```{r}

    print("hello world")
    ```

上のソースをRStudioで開いてknitボタン(knit to HTML)をポチっと押す
HTMLファイルが生成されて、結果が表示されました！
![image03.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/ea6a1a08-81c5-6572-b270-66fd719fb176.jpeg)

# おわりに
やはりオフラインでのインストールはなかなか大変でした。
Web接続前提はほんとやめてほしい。さくっと使う分には便利でいいんだけど、オフラインインストールの手順ももっと丁寧に記載しておいて欲しい...