オフライン環境のCentOS6.4にR v3.4.1と各種packageを導入する

## この記事の目的
ゲノム解析を行うためには解析用のパイプラインを構成する多数のソフトを導入する必要があります。しかし、ゲノムという個人情報を扱うサーバーは、通常セキュリティーの関係でインターネットから隔離されています。そのため、一旦解析パイプラインが構築されると当分の間はOSやソフトのアップデートは行なわれません。
諸事情により、Rで書かれた解析をユーザー権限だけでパイプラインに追加する必要が生じましたが、Rのパッケージのインストールはネットワーク環境を前提としており、一筋縄ではいかないものでした。そこで、オフライン環境の古いlinux、古いRのバージョンは更新せずに、必要なパッケージを適切なバージョンで導入する方法を残しておくことにしました。
## 作業環境
オンライン環境：
- ホスト　　MacOS 10.15.7
- 仮想環境　CentOS  6.4 on Parallels Desktop 15 for Mac
オフライン環境：CentOS 6.4, R 3.4.1
## CentOSの仮想環境を作成する
仮想環境を作成できるソフトであればいずれも仕様可能と思いますが、Parallelsを今回は用いています。
まず、http://mirror.nsc.liu.se/centos-store/ にアクセスし、目的のバージョン(6.4)→isos→x86_64とディレクトリ構造をたどります。最小構成のCentOS-6.4-x86_64-minimal.isoではネットワーク環境の設定が面倒ですので、CentOS-6.4-x86_64-bin-DVD1.isoをダウンロードし、Desktopバージョンをインストールします。ダウンロードは300kbpsしか出ず4時間ほど要しました。
ダウンロードしたイメージファイルを使って、標準インストールを選択して進めると、10分ほどでGUIが仕様可能になります。ネットワーク接続が確立すると、自動的にIPアドレスが割り振られます(ex. 10.211.55.XX)。以後はホストからsshでログインしてターミナル上で作業を行います。一旦rootでログインしてsudo権限を付与しておきます。またGUIは不要ですのでCUIで起動するようにします。proxyの設定も適宜行います。
http://mzgkworks.com/post/linux-su-sudo/
https://qiita.com/Esfahan/items/a159753d156d23baf180
http://blog.doli.jp/blog/2012/post526/
https://qiita.com/hirohiro77/items/cdf6d8baa619c0e0e82d
https://kitamix.net/archives/set-proxy-when-rstudio-started/1049
## R 3.4.1を仮想環境に導入する
以下のCRANのwebsiteから、目的のバージョンのtar.gzファイルをダウンロードします。
https://cran.r-project.org/src/base/ 

```
wget https://cran.r-project.org/src/base/R-3/R-3.4.1.tar.gz
```
適当なディレクトリ(~/など)に保存し、ビルドします。bzip2関連でエラーが出ますので、以下を参考に対応します。
https://www.21064.com/2018/11/07/rhel7-r-3-3-1-install/
http://pentan.info/server/linux/zlib.html
https://noknow.info/it/os/install_bzip2_from_source?lang=ja
https://qiita.com/kuchida1981/items/d028940ade41096490de
http://note.kurodigi.com/sudo-path/
https://stats.biopapyrus.jp/r/devel/r-install.html

```
tar zxvf R-3.4.1.tar.gz
cd R-3.4.1
sudo yum groupinstall "Development Tools"
sudo yum install ncurses-devel zlib-devel texinfo gtk+-devel gtk2-devel qt-devel tcl-devel tk-devel kernel-headers kernel-devel readline-devel
sudo yum install bzip2-devel

wget http://zlib.net/fossils/zlib-1.2.5.1.tar.gz
sudo tar zxvf zlib-1.2.5.1.tar.gz
cd zlib-1.2.5.1
make clean
sudo CFLAGS='-mstackrealign -fPIC -O3' ./configure
sudo make
sudo make install

cd ~

sudo yum install openssl-devel

wget https://sourceware.org/pub/bzip2/bzip2-1.0.6.tar.gz --no-check-certificate
sudo tar xvfz bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
sudo make clean
sudo make
sudo make install
export PATH=$PATH:/usr/local/bin/bzip2
vi ~/.bash_profile # export PATH=$PATH:/usr/local/bin/bzip2を追記
su -
visudo # Defaults    env_keep += "PATH"　追記
       # Defaults    env_reset　コメントアウト
       #Defaults     secure_path= コメントアウト

cd ~

wget https://tukaani.org/xz/xz-5.2.4.tar.gz --no-check-certificate
sudo tar xzvf xz-5.2.4.tar.gz
sudo ./configure --prefix=/home/$USER/local
sudo make
sudo make install PREFIX=/home/$USER/local

cd ~

wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz --no-check-certificate
sudo tar xzvf pcre-8.42.tar.gz
cd pcre-8.42
sudo ./configure --prefix=/home/$USER/local --enable-utf8
sudo make
sudo make install

cd ~
wget https://curl.haxx.se/download/curl-7.61.0.tar.gz --no-check-certificate
sudo tar xzvf curl-7.61.0.tar.gz
cd curl-7.61.0
sudo ./configure  --enable-libcurl-option
sudo make
sudo make install

LIBCURL_LOCAL_DIR="/home/[user name]/local/bin/curl"
export PATH=$LIBCURL_LOCAL_DIR/bin:$PATH
export LD_LIBRARY_PATH=$LIBCURL_LOCAL_DIR/lib:$LD_LIBRARY_PATH
export LIBCURL_CFLAGS=-I$LIBCURL_LOCAL_DIR/include
export LIBCURL_LIBS=-L$LIBCURL_LOCAL_DIR/lib

export CPPFLAGS="-I/home/[user name]/local/include" # ~/.bashrc に追記
export LDFLAGS="-L/home/[user name]/local/lib" # ~/.bashrc に追記

cd ~/R-3.4.1

./configure
sudo make
sudo make install
sudo yum install libxml2-devel
sudo yum install openssl-devel
```

## 必要なパッケージをダウンロードする
今回使用したいpackageは自作のgithub上のpackageで、CRANとBioconductorに登録されているpackageを使用しています。
https://github.com/MANO-B/MicroSEC
まず依存関係にあるpackageをインストールします。

```
if (!requireNamespace("BiocManager", quietly = TRUE)){
    install.packages("BiocManager")
}
install.packages(c('tidyr', 'openxlsx', 'data.table', 'R.utils', 'stringr', 'magrittr', 'dplyr', 'gtools', 'devtools'), dependencies = TRUE)
BiocManager::install(c("Rsamtools", "Biostrings", "GenomicAlignments", "GenomeInfoDb"), update=FALSE)

# install necessary genomes
BiocManager::install("BSgenome.Hsapiens.UCSC.hg38", update=FALSE)
BiocManager::install("BSgenome.Hsapiens.UCSC.hg19", update=FALSE)
BiocManager::install("BSgenome.Mmusculus.UCSC.mm10", update=FALSE)
```
コンパイラのバージョンの関係で上手くインストールできない場合は、githubからインストールします。

```
devtools::install_github(”tidyverse/tidyr", ref="v1.1.0")
```

ようやく目的のパッケージをインストールし、適宜動作確認します。

```
devtools::install_github("MANO-B/MicroSEC", upgrade="never")  
library(MicroSEC)
fun_zero(4, 2)
```

あとは、パッケージをオフライン環境にコピーして終了です。

```
cd ~/R/x86_64-pc-linux-gnu-library
scp -r 3.4 XXX.XXX.XXX.XXX:~/R/x86_64-pc-linux-gnu-library/
```

動作確認します。

```
$ R
> library(MicroSEC)
> fun_zero(4, 2)
```