Un nouveau monde parfumé

香り立つ備忘録

niiceにRMeCabをインストールしたかった

知的なMT#2に遡ること30分前のことです。 風邪気味の状態で起床した僕は "RMeCabの導入まで" ってことはサーバーも含むんだろうなぁ…という謎解釈のもとniice.slis.tsukuba.ac.jp上でのRMeCabの環境を整えることにしました。 結果として失敗し、妙な状態に陥ったことは皆さんご存知の通りです。

今回は忘れないうちに.bash_historyを見ながら顛末をメモっておこうと思います。

まずは

初期状態の確認から。

[pikatenor@niice ~]$ R

R version 3.1.3 (2015-03-09) -- "Smooth Sidewalk"
Copyright (C) 2015 The R Foundation for Statistical Computing
Platform: x86_64-redhat-linux-gnu (64-bit)

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

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

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

Rはある

 [pikatenor@niice ~]$ mecab
ピカチュウは可愛い
ピカチュウ      名詞,一般,*,*,*,*,*
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
可愛い  形容詞,自立,*,*,形容詞・イ段,基本形,可愛い,カワイイ,カワイイ
EOS
^C
[pikatenor@niice ~]$ mecab --version
mecab of 0.98

MeCabもある

[pikatenor@niice ~]$ R
> library(RMeCab)
 以下にエラー library(RMeCab) : 
   ‘RMeCab’ という名前のパッケージはありません 
>

RMeCabはない

インストール

しましょう。ということで手順を実行。

> install.packages ("RMeCab", repos = "http://rmecab.jp/R")
Installing package into ‘/usr/lib64/R/library’
(as ‘lib’ is unspecified)
 install.packages("RMeCab", repos = "http://rmecab.jp/R") 中で警告がありました: 
 URL 'http://rmecab.jp/R/src/contrib/RMeCab_0.9998.tar.gz' を試しています 
Content type 'application/x-gzip' length 57291 bytes (55 KB)
 開かれた URL 
==================================================
downloaded 55 KB

* installing *source* package ‘RMeCab’ ...
** libs
g++ -m64 -I/usr/include/R -DNDEBUG -I. -I/usr/local/include    -fpic  -O2 -g -pipe -Wall -
Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtun
e=generic  -c RMeCab.cpp -o RMeCab.o
RMeCab.cpp: In function ‘SEXPREC* collocate(SEXPREC*, SEXPREC*, SEXPREC*, SEXPREC*)’:
RMeCab.cpp:2896: 警告: 符合付きと符合無しの整数式同士の比較です
g++ -m64 -shared -L/usr/lib64/R/lib -L/usr/local/lib64 -o RMeCab.so RMeCab.o -L/usr/local/
lib -lmecab -L/usr/lib64/R/lib -lR
installing to /home/pikatenor/R/x86_64-redhat-linux-gnu-library/3.1/RMeCab/libs
** R
** preparing package for lazy loading
** help
*** installing help indices
  converting help for package ‘RMeCab’
    finding HTML links ...  完了 
    Ngram                                   html  
    NgramDF                                 html  
    NgramDF2                                html  
    RMeCabC                                 html  
    RMeCabDF                                html  
    RMeCabDoc                               html  
    RMeCabFreq                              html  
    RMeCabMx                                html  
    RMeCabText                              html  
    coOccurrence                            html  
    collScores                              html  
    collocate                               html  
    docDF                                   html  
    docMatrix                               html  
    docMatrix2                              html  
    docMatrixDF                             html  
    docNgram                                html  
    docNgram2                               html  
    docNgramDF                              html  
    print.docMatrix                         html  
    rmSign                                  html  
    weights                                 html  
** building package indices
** testing if installed package can be loaded
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
   共有ライブラリ '/home/pikatenor/R/x86_64-redhat-linux-gnu-library/3.1/RMeCab/libs/RMeCab.so' を読み込めません: 
  libmecab.so.1: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリは ありません 
 エラー:  ロードに失敗しました 
 実行が停止されました 
ERROR: loading failed
* removing ‘/home/pikatenor/R/x86_64-redhat-linux-gnu-library/3.1/RMeCab’

 ダウンロードされたパッケージは、以下にあります 
        ‘/tmp/Rtmp4IASVL/downloaded_packages’ 
 警告メッセージ: 
In install.packages("RMeCab", repos = "http://rmecab.jp/R") :
   パッケージ ‘RMeCab’ のインストールは、ゼロでない終了値をもちました 
>

MeCabあるのにlibmecab.soが無い訳ねえだろべらんめえ、などと思いながらlibmecab.soを探す旅に出ます。

[pikatenor@niice ~]$ which mecab
/usr/local/bin/mecab
[pikatenor@niice ~]$ ldd /usr/local/bin/mecab
        linux-vdso.so.1 =>  (0x00007fffb43ff000)
        libmecab.so.1 => /usr/local/lib/libmecab.so.1 (0x00007f95c0093000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00000036d2600000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000036dd600000)
        libm.so.6 => /lib64/libm.so.6 (0x00000036d2200000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000036d8e00000)
        libc.so.6 => /lib64/libc.so.6 (0x00000036d1e00000)
        /lib64/ld-linux-x86-64.so.2 (0x00000036d1a00000)
[pikatenor@niice ~]$

ほーらやっぱあるじゃねえか

/etc/ld.so.conf や /etc/ld.so.conf.d/* などを見て /usr/local/lib を見に行く設定になっていないらしいことを確認して

[pikatenor@niice ~]$ echo $LD_LIBRARY_PATH

[pikatenor@niice ~]$ echo 'export LD_LIBRARY_PATH=/usr/local/lib' >> ~/.profile
[pikatenor@niice ~]$ . ~/.profile

などやって

[pikatenor@niice ~]$ R
>  install.packages ("RMeCab", repos = "http://rmecab.jp/R")
Installing package into ‘/home/pikatenor/R/x86_64-redhat-linux-gnu-library/3.1’
(as ‘lib’ is unspecified)
 URL 'http://rmecab.jp/R/src/contrib/RMeCab_0.9998.tar.gz' を試しています 
Content type 'application/x-gzip' length 57291 bytes (55 KB)
 開かれた URL 
==================================================
downloaded 55 KB

* installing *source* package ‘RMeCab’ ...
** libs
g++ -m64 -I/usr/include/R -DNDEBUG -I. -I/usr/local/include    -fpic  -O2 -g -pipe -Wall -
Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtun
e=generic  -c RMeCab.cpp -o RMeCab.o
RMeCab.cpp: In function ‘SEXPREC* collocate(SEXPREC*, SEXPREC*, SEXPREC*, SEXPREC*)’:
RMeCab.cpp:2896: 警告: 符合付きと符合無しの整数式同士の比較です
g++ -m64 -shared -L/usr/lib64/R/lib -L/usr/local/lib64 -o RMeCab.so RMeCab.o -L/usr/local/
lib -lmecab -L/usr/lib64/R/lib -lR
installing to /home/pikatenor/R/x86_64-redhat-linux-gnu-library/3.1/RMeCab/libs
** R
** preparing package for lazy loading
** help
*** installing help indices
  converting help for package ‘RMeCab’
    finding HTML links ...  完了 
    Ngram                                   html  
    NgramDF                                 html  
    NgramDF2                                html  
    RMeCabC                                 html  
    RMeCabDF                                html  
    RMeCabDoc                               html  
    RMeCabFreq                              html  
    RMeCabMx                                html  
    RMeCabText                              html  
    coOccurrence                            html  
    collScores                              html  
    collocate                               html  
    docDF                                   html  
    docMatrix                               html  
    docMatrix2                              html  
    docMatrixDF                             html  
    docNgram                                html  
    docNgram2                               html  
    docNgramDF                              html  
    print.docMatrix                         html  
    rmSign                                  html  
    weights                                 html  
** building package indices
** testing if installed package can be loaded
* DONE (RMeCab)

 ダウンロードされたパッケージは、以下にあります 
        ‘/tmp/RtmpAN4FeT/downloaded_packages’ 
> library(RMeCab)
>

この時点では正常にインストールできたかのように思えました。

結果と現状

"空っぽのリストが帰ってきたり"
> RMeCabC("すもももももももものうち")
list()
>
"あるいは core dump したり"
> writeLines("ピカチュウはかわいい", "test")
> RMeCabText("test")
file = ./test 
*** buffer overflow detected ***: /usr/lib64/R/bin/exec/R terminated
======= Backtrace: =========
/lib64/libc.so.6(__fortify_fail+0x37)[0x36d1f02527]
/lib64/libc.so.6[0x36d1f00410]
/lib64/libc.so.6(__strncpy_chk+0x17b)[0x36d1eff6db]
/home/pikatenor/R/x86_64-redhat-linux-gnu-library/3.1/RMeCab/libs/RMeCab.so(RMeCabText+0x13c)[0x7f812354e12c]
/usr/lib64/R/lib/libR.so[0x36d5c97cce]
/usr/lib64/R/lib/libR.so(Rf_eval+0x871)[0x36d5cd6a31]
/usr/lib64/R/lib/libR.so[0x36d5cda4fa]
/usr/lib64/R/lib/libR.so(Rf_eval+0x65d)[0x36d5cd681d]
/usr/lib64/R/lib/libR.so(Rf_applyClosure+0x45f)[0x36d5cc886f]
/usr/lib64/R/lib/libR.so(Rf_eval+0x2f5)[0x36d5cd64b5]
/usr/lib64/R/lib/libR.so(Rf_ReplIteration+0x212)[0x36d5cff992]
/usr/lib64/R/lib/libR.so[0x36d5cffd59]
/usr/lib64/R/lib/libR.so(run_Rmainloop+0x44)[0x36d5d00284]
/usr/lib64/R/bin/exec/R(main+0x1b)[0x40084b]
/lib64/libc.so.6(__libc_start_main+0xfd)[0x36d1e1ed5d]
/usr/lib64/R/bin/exec/R[0x400739]
======= Memory map: ========
00400000-00401000 r-xp 00000000 08:03 266601705                          /usr/lib64/R/bin/exec/R
00600000-00603000 rw-p 00000000 08:03 266601705                          /usr/lib64/R/bin/exec/R
00d28000-025db000 rw-p 00000000 00:00 0                                  [heap]
36d1a00000-36d1a20000 r-xp 00000000 08:03 156500214                      /lib64/ld-2.12.so
36d1c1f000-36d1c20000 r--p 0001f000 08:03 156500214                      /lib64/ld-2.12.so
36d1c20000-36d1c21000 rw-p 00020000 08:03 156500214                      /lib64/ld-2.12.so
36d1c21000-36d1c22000 rw-p 00000000 00:00 0 
36d1e00000-36d1f8a000 r-xp 00000000 08:03 156500545                      /lib64/libc-2.12.so
36d1f8a000-36d218a000 ---p 0018a000 08:03 156500545                      /lib64/libc-2.12.so
36d218a000-36d218e000 r--p 0018a000 08:03 156500545                      /lib64/libc-2.12.so
36d218e000-36d218f000 rw-p 0018e000 08:03 156500545                      /lib64/libc-2.12.so
36d218f000-36d2194000 rw-p 00000000 00:00 0 
36d2200000-36d2283000 r-xp 00000000 08:03 156500143                      /lib64/libm-2.12.so
36d2283000-36d2482000 ---p 00083000 08:03 156500143                      /lib64/libm-2.12.so
36d2482000-36d2483000 r--p 00082000 08:03 156500143                      /lib64/libm-2.12.so
36d2483000-36d2484000 rw-p 00083000 08:03 156500143                      /lib64/libm-2.12.so
36d2600000-36d2617000 r-xp 00000000 08:03 156500546                      /lib64/libpthread-2.12.so
36d2617000-36d2817000 ---p 00017000 08:03 156500546                      /lib64/libpthread-2.12.so
36d2817000-36d2818000 r--p 00017000 08:03 156500546                      /lib64/libpthread-2.12.so
36d2818000-36d2819000 rw-p 00018000 08:03 156500546                      /lib64/libpthread-2.12.so
36d2819000-36d281d000 rw-p 00000000 00:00 0 
36d2a00000-36d2a02000 r-xp 00000000 08:03 156500550                      /lib64/libdl-2.12.so
36d2a02000-36d2c02000 ---p 00002000 08:03 156500550                      /lib64/libdl-2.12.so
36d2c02000-36d2c03000 r--p 00002000 08:03 156500550                      /lib64/libdl-2.12.so
36d2c03000-36d2c04000 rw-p 00003000 08:03 156500550                      /lib64/libdl-2.12.so
36d2e00000-36d2e07000 r-xp 00000000 08:03 156500547                      /lib64/librt-2.12.so
36d2e07000-36d3006000 ---p 00007000 08:03 156500547                      /lib64/librt-2.12.so
36d3006000-36d3007000 r--p 00006000 08:03 156500547                      /lib64/librt-2.12.so
36d3007000-36d3008000 rw-p 00007000 08:03 156500547                      /lib64/librt-2.12.so
36d3200000-36d322b000 r-xp 00000000 08:03 266863081                      /usr/lib64/R/lib/libRblas.so
36d322b000-36d342a000 ---p 0002b000 08:03 266863081                      /usr/lib64/R/lib/libRblas.so
36d342a000-36d342b000 rw-p 0002a000 08:03 266863081                      /usr/lib64/R/lib/libRblas.so
36d3600000-36d363a000 r-xp 00000000 08:03 156500574                      /lib64/libreadline.so.6.0
36d363a000-36d383a000 ---p 0003a000 08:03 156500574                      /lib64/libreadline.so.6.0
36d383a000-36d3842000 rw-p 0003a000 08:03 156500574                      /lib64/libreadline.so.6.0
36d3842000-36d3843000 rw-p 00000000 00:00 0 
36d3a00000-36d3a15000 r-xp 00000000 08:03 266212286                      /usr/lib64/libgomp.so.1.0.0
36d3a15000-36d3c14000 ---p 00015000 08:03 266212286                      /usr/lib64/libgomp.so.1.0.0
36d3c14000-36d3c15000 rw-p 00014000 08:03 266212286                      /usr/lib64/libgomp.so.1.0.0
36d3e00000-36d3ef0000 r-xp 00000000 08:03 266214687                      /usr/lib64/libgfortran.so.3.0.0
36d3ef0000-36d40ef000 ---p 000f0000 08:03 266214687                      /usr/lib64/libgfortran.so.3.0.0
36d40ef000-36d40f1000 rw-p 000ef000 08:03 266214687                      /usr/lib64/libgfortran.so.3.0.0
36d40f1000-36d40f2000 rw-p 00000000 00:00 0 
36d4200000-36d433f000 r-xp 00000000 08:03 266220247                      /usr/lib64/libicuuc.so.42.1
36d433f000-36d453f000 ---p 0013f000 08:03 266220247                      /usr/lib64/libicuuc.so.42.1
36d453f000-36d4550000 rw-p 0013f000 08:03 266220247                      /usr/lib64/libicuuc.so.42.1
36d4550000-36d4552000 rw-p 00000000 00:00 0 
36d4600000-36d4788000 r-xp 00000000 08:03 266220128                      /usr/lib64/libicui18n.so.42.1
36d4788000-36d4988000 ---p 00188000 08:03 266220128                      /usr/lib64/libicui18n.so.42.1
36d4988000-36d4995000 rw-p 00188000 08:03 266220128                      /usr/lib64/libicui18n.so.42.1
36d4995000-36d4996000 rw-p 00000000 00:00 0 
36d4a00000-36d5945000 r-xp 00000000 08:03 266219906                      /usr/lib64/libicudata.so.42.1
36d5945000-36d5b44000 ---p 00f45000 08:03 266219906                      /usr/lib64/libicudata.so.42.1
36d5b44000-36d5b45000 rw-p 00f44000 08:03 266219906                      /usr/lib64/libicudata.so.42.1
36d5c00000-36d5ecc000 r-xp 00000000 08:03 266863335                      /usr/lib64/R/lib/libR.so
36d5ecc000-36d60cc000 ---p 002cc000 08:03 266863335                      /usr/lib64/R/lib/libR.so
36d60cc000-36d60dd000 rw-p 002cc000 08:03 266863335                      /usr/lib64/R/lib/libR.so
36d60dd000-36d61c8000 rw-p 00000000 00:00 0 
36d8e00000-36d8e16000 r-xp 00000000 08:03 156500137                      /lib64/libgcc_s-4.4.7-20120601.so.1
36d8e16000-36d9015000 ---p 00016000 08:03 156500137                      /lib64/libgcc_s-4.4.7-20120601.so.1
36d9015000-36d9016000 rw-p 00015000 08:03 156500137                      /lib64/libgcc_s-4.4.7-20120601.so.1
36dd600000-36dd6e8000 r-xp 00000000 08:03 266213005                      /usr/lib64/libstdc++.so.6.0.13
36dd6e8000-36dd8e8000 ---p 000e8000 08:03 266213005                      /usr/lib64/libstdc++.so.6.0.13
36dd8e8000-36dd8ef000 r--p 000e8000 08:03 266213005                      /usr/lib64/libstdc++.so.6.0.13
36dd8ef000-36dd8f1000 rw-p 000ef000 08:03 266213005                      /usr/lib64/libstdc++.so.6.0.13
36dd8f1000-36dd906000 rw-p 00000000 00:00 0 
36dfe00000-36dfe1d000 r-xp 00000000 08:03 156500367                      /lib64/libtinfo.so.5.7
36dfe1d000-36e001d000 ---p 0001d000 08:03 156500367                      /lib64/libtinfo.so.5.7
36e001d000-36e0021000 rw-p 0001d000 08:03 156500367                      /lib64/libtinfo.so.5.7
7f8120084000-7f8120086000 rw-p 00000000 00:00 0 
7f8120086000-7f81203d4000 r--s 00000000 08:03 268699841                  /usr/local/lib/mecab/dic/ipadic/matrix.binアボートしました (コアダンプ)
[pikatenor@niice ~]$

そして

このあたりでMT15分前になったので家を出ました。

たぶんMeCabが古い気がします。 こちらからは以上です。