mongolite on FreeBSD
R言語用のMongoDBドライバとして、mongoliteというものがある。比較的新しくて、2018年6月現在アクティブに開発されているらしい。
ただしどうやらLinux/Windows/Macを想定しているようで、FreeBSDだとinstall.packageするとエラーになる。
install.package("mongolite") ... cc -shared -L/usr/local/lib/R/lib -L/usr/local/lib -Wl,-rpath=/usr/local/lib/gcc6 -L/usr/local/lib/gcc6 -B/usr/local/bin -fstack-protector -o mongolite.so bson.o client.o collection.o cursor.o hex.o mongo_log.o reader.o utils.o -Lmongoc -lstatmongoc -Lbson -lstatbson -lsasl2 -L/usr/local/lib -lssl -lcrypto -lresolv -lz -L/usr/local/lib/R/lib -lR /usr/local/bin/ld: -lresolv が見つかりません cc: error: linker command failed with exit code 1 (use -v to see invocation) gmake: *** [/usr/local/lib/R/share/make/shlib.mk:6: mongolite.so] エラー 1 ERROR: compilation failed for package ‘mongolite’ * removing ‘/usr/home/okano/R/amd64-portbld-freebsd12.0-library/3.4/mongolite’ ダウンロードされたパッケージは、以下にあります ‘/tmp/RtmpPqW3nN/downloaded_packages’ 警告メッセージ: install.packages("mongolite") で: パッケージ ‘mongolite’ のインストールは、ゼロでない終了値をもちました >
libresolvが見つからない、となっているが、このライブラリはBSD系には存在しないようで、configureにもそれらしいコードが入っている。
# Linux, MacOS and Solaris use libresolv if [[ "$OSTYPE" != *"bsd"* ]]; then PKG_LIBS="$PKG_LIBS -lresolv" fi
ただ、FreeBSDの場合、OSTYPEが"FreeBSD"となりBSDが大文字なので、ここの条件に引っかからない。とりあえず小文字に揃えて回避してみる。
if [[ "${OSTYPE,,}" != *"bsd"* ]]; then PKG_LIBS="$PKG_LIBS -lresolv" fi
/tmpに残っているディレクトリ内で、再インストール。
[okano@truex220] /tmp/RtmpPqW3nN/downloaded_packages% R CMD INSTALL --build mongolite ... cc -shared -L/usr/local/lib/R/lib -L/usr/local/lib -Wl,-rpath=/usr/local/lib/gcc6 -L/usr/local/lib/gcc6 -B/usr/local/bin -fstack-protector -o mongolite.so bson.o client.o collection.o cursor.o hex.o mongo_log.o reader.o utils.o -Lmongoc -lstatmongoc -Lbson -lstatbson -lsasl2 -L/usr/local/lib -lssl -lcrypto -lz -L/usr/local/lib/R/lib -lR installing to /usr/home/okano/R/amd64-portbld-freebsd12.0-library/3.4/mongolite/libs ** R ** inst ** preparing package for lazy loading ** help *** installing help indices ** building package indices ** testing if installed package can be loaded * creating tarball packaged installation of ‘mongolite’ as ‘mongolite_1.5_R_amd64-portbld-freebsd12.0.tar.gz’ * DONE (mongolite) [okano@truex220]
入ったっぽい。つなげてみる。
> library(mongolite) > con <- mongo("・・・・", url = "mongodb://・・・・")
いけてる模様。