Cent OS 5.10 にRのforecast パッケージをインストール その2

Cent OS 5.10 にRのforecast パッケージをインストール

ポイントは以下の通り。

(1)Rが古いとだめなので、Rを最新版にアップデート
(2)gccがver4.11 で古いので、gcc44 やg++44を使う。
(3)gcc44では、最新版のRcppArmadillo は使えないので、ver4.5を使う。そして、手動でインストール。
(4)コンパイルのときにgcc44が使われないので、設定ファイルを変えてgcc44が使われるようにする。
(5)/usr/lib64/libstdc++.so.6 が古いので、新しくする。
(6)インストール

以下詳細
(1)Rが古いとだめなので、Rを最新版にアップデート

(i)Rのアップデート
ソースからR3.01等の最新版をいれる。 解凍->./configure -> make -> sudo make install でOK.
(ii)次にforecast パッケージの導入
sudo R とする. sudo をしないとローカルにライブラリがインストールされる.
(iii)install.packages(forecast) とする.

  • > RcppArmadillo のインストールでこける -> 原因linux のバージョンが低いため。

(2)gccがver4.11 で古いので、gcc44 やg++44を使う。

(i)gcc44をインストール
sudo yum install gcc44*
http://serverfault.com/questions/313377/how-to-install-the-latest-g-version-on-centos
(ii) ここで、Rのみているgccのバージョンを確認
> system("gcc -v")
Using built-in specs.
Target: x86_64-redhat-linux
コンフィグオプション: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=x86_64-redhat-linux
スレッドモデル: posix
gcc バージョン 4.1.2 20080704 (Red Hat 4.1.2-55)
4.1なので、このままではだめ。

(3)gcc44では、最新版のRcppArmadillo は使えないので、ver4.5を使う。

(i)そこでRcppArmadilloの旧版ver4.5 をインストール。

これを参考に:http://stackoverflow.com/questions/27296522/rcpparmadillo-failing-to-install-on-centos 
wget --no-check-certificate https://cran.r-project.org/src/contrib/Archive/RcppArmadillo/RcppArmadillo_0.4.500.0.tar.gz

(4)コンパイルのときにgcc44が使われないので、設定ファイルを変えてgcc44が使われるようにする。

(i)ダウンロードしたファイルを展開
 gzip -d RcppArmadillo_0.4.500.0.tar.gz; tar -xvf RcppArmadillo_0.4.500.0.tar.gz
(ii) MakevarsにCC=gcc44を追加。
cd RcppArmadillo/src で移動して、
 MakevarsにCCの行を追加
  PKG_CXXFLAGS=-I../inst/include
  PKG_LIBS= $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
  CC=gcc44 <- これを追加
(iii) 整合性があわなくなるので、チェックサムを削除 cd ..; cd CHEACKSUM
(v) 圧縮する R CMD build RcppArmadillo

(5)/usr/lib64/libstdc++.so.6 が古いので、新しくする。libstdc++.so.6に GLIBCXX_3.4.9に必要だがデフォルトで入っていないので追加しておく。

rpmからとってくる
wget ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/9/Everything/x86_64.newkey/os/Packages/libstdc++-4.3.0-8.x86_64.rpm
libstc++をとりだす。
sudo rpm2cpio ../libstdc++-4.3.0-8.x86_64.rpm | cpio -idv

バックアップをとって、
sudo cp /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.baku
送り込む
sudo cp ./usr/lib64/libstdc++* /usr/lib64

なお不足分は、で調べられる

strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX GLIBCXX_3.4

(6)インストール
R内で

install.packages("RcppArmadillo.tar.gz",lib="/usr/local/lib64/R/library/")
install.packages("forecast")


以下メモ

コンパイラがだめだとでるエラー
error: #error "* Need a newer compiler
http://stackoverflow.com/questions/23921158/rcpparmadillo-compilation-error
http://stackoverflow.com/questions/13673183/cannot-compile-rcpparmadillo-in-r


ライブラリがだめだとでるエラー libstdc++が古いとです。firefoxでも同じ症状があるので、それを経由で間違いに気づく
undefined symbol: _ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l 



競合ファイルがあるとだめなので、同じ名前は消しておく。
ldd で依存関係が調べられる。

sudo rpm -ivh ftp://rpmfind.net/linux/centos/6.RcppArmadillo_0.4.600.0.tar.gz 7/os/x86_64/Packages/libstdc++-4.4.7-16.el6.i686.rpm
glibc >= 2.10.90-7 は libstdc++-4.4.7-16.el6.i686 に必要とされています
rpmlib(FileDigests) <= 4.6.0-1 は libstdc++-4.4.7-16.el6.i686 に必要とされています

sudo rpm -ivh ftp://195.220.108.108/linux/centos/6.7/os/x86_64/Packages/glibc-2.12-1.166.el6.x86_64.rpm
ftp://195.220.108.108/linux/centos/6.7/os/x86_64/Packages/glibc-2.12-1.166.el6.x86_64.rpm を取得中
警告: /var/tmp/rpm-xfer.hdRYQQ: ヘッダ V3 RSA/SHA1 signature: NOKEY, key ID c105b9de
エラー: 依存性の欠如:
glibc-common = 2.12-1.166.el6 は glibc-2.12-1.166.el6.x86_64 に必要とされています
rpmlib(FileDigests) <= 4.6.0-1 は glibc-2.12-1.166.el6.x86_64 に必要とされています
rpmlib(PayloadIsXz) <= 5.2-1 は glibc-2.12-1.166.el6.x86_64 に必要とされています


CentOS - Remiリポジトリを使って最新版のphp等をyumでインストールする by @is0me on @Qiita http://qiita.com/is0me/items/eb7e9dd823a1dee944d3



libstdc++


参照可能な yum リポジトリを確認する yum コマンドとワンライナー
http://tomoyamkung.net/2014/08/10/linux-yum-reference-repository/


Centos5,6,7にEPEL/REMIのyumリポジトリの追加をする。 on @Qiita http://qiita.com/chidakiyo/items/3b81a442dda34d439b42

とりあだす。
https://wiki.centos.org/TipsAndTricks/Firefox4onCentOS5


rpmからとってくる
wget ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/9/Everything/x86_64.newkey/os/Packages/libstdc++-4.3.0-8.x86_64.rpm

libstc++をとりだす。
sudo rpm2cpio ../libstdc++-4.3.0-8.x86_64.rpm | cpio -idv

いまとってきたやつ
strings ./usr/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH


これまでのやつ
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_FORCE_NEW


不足分がある!
バックアップをとって、
sudo cp /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.baku
送り込む
sudo cp ./usr/lib64/libstdc++* /usr/lib64

更新された。
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH


ライブラリが入るかみてみる。


install.packages("RcppArmadillo.tar.gz",lib="/usr/local/lib64/R/library/")