ソフラボの技術ブログ

仕事で使ったプログラミング、サーバー周りで役に立つこと、Webサービス開発に必要な技術情報、モバイル情報を書いてます。わかりやすく見やすくをモットーにしています。

PhantomJSをCentOSでビルドしたらエラーが出てインストールできない

既存のサイトからデータを取得して欲しいという要望があったので、PhantomJSを使ってプログラムからブラウザを操作し、スクレイピングすることを最近行っています。

Macにはすんなりインストールできて、プログラムもある程度出来上がったのでサーバーにもインストールして動作確認をしてみようと、PhantomJSをインストールしてみたけどエラーが出てインストールが完了しませんでした。

その時のエラー内容を記載しておきます。
まだきっちり調べてませんが、他の人も問題に上げているようで解決方法がはっきりしていないように感じます。

環境

CentOS 6.4
PhantomJS 1.9 or 2.0

PhantomJSのインストール方法

Linux用バイナリにはまだ問題があるようで、ソースからのインストールを推奨すると公式サイトには書いてあります。

Binary packages for Linux are still being prepared. There are still issues to be solved until a static build is available (see issue 12948 for more details).

In the mean time, it is recommended to build the Linux version from source.

バイナリの代わりにソースからインストールする方法も書かれているので、それに従ってインストールします。
Build | PhantomJS


まず必要なパッケージをyumでインストールします。

sudo yum -y install gcc gcc-c++ make flex bison gperf ruby \
  openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel \
  libpng-devel libjpeg-devel


その後、PhantomJSのソースをGitから取得しビルドします。

cd /usr/local/src
git clone git://github.com/ariya/phantomjs.git
cd phantomjs
git checkout 2.0
./build.sh

PhantomJS2.0をビルドした結果

2.0でビルドすると次のエラーが発生し、インストールに失敗します。
最終あたりのログを抜粋しています。

Encountered 4 configuration warning(s):

 ! QtQuick module not found, QML APIs will not be built
 ! Missing GStreamer or QtMultimedia, disabling HTML5 media element support
 ! Missing QtTest module, disabling DumpRenderTree, WebKitTestRunner and tests
 ! QtWebKitQml will not be build. It is not supported with static linking

The WebKit build was disabled for the following reasons: 
    * Missing gperf from PATH
    * Missing ruby from PATH 

make: `first' に対して行うべき事はありません.

Building main PhantomJS application...

cd src/ && ( test -e Makefile.phantomjs || /usr/local/src/phantomjs/src/qt/qtbase/bin/qmake /usr/local/src/phantomjs/src/phantomjs.pro -o Makefile.phantomjs ) && make -f Makefile.phantomjs 
Project ERROR: Unknown module(s) in QT: webkitwidgets
make: *** [sub-src-phantomjs-pro-make_first-ordered] エラー 3

PhantomJS1.9をビルドした結果

2.0では失敗するので1.9でやればうまくいくと書かれているものがあったので、やってみたけどこれも失敗します。

# /usr/local/src/phantomjsで
git checkout 1.9
./build.sh


最終あたりのログを抜粋しています。

g++ -m64 -Wl,-O1 -Wl,-rpath,/usr/local/src/phantomjs/src/qt/lib -o ../bin/phantomjs phantom.o callback.o webpage.o webserver.o main.o csconverter.o utils.o networkaccessmanager.o cookiejar.o filesystem.o system.o env.o terminal.o encoding.o config.o childprocess.o repl.o gif_err.o gifalloc.o egif_lib.o gif_hash.o quantize.o gifwriter.o mongoose.o linenoise.o utf8.o qcommandline.o minidump_file_writer.o convert_UTF.o md5.o string_conversion.o crash_generation_client.o exception_handler.o log.o linux_dumper.o linux_ptrace_dumper.o minidump_writer.o file_id.o guid_creator.o memory_mapped_file.o safe_readlink.o moc_phantom.o moc_callback.o moc_webpage.o moc_webserver.o moc_networkaccessmanager.o moc_cookiejar.o moc_filesystem.o moc_system.o moc_env.o moc_config.o moc_childprocess.o moc_repl.o moc_qcommandline.o qrc_phantomjs.o qrc_ghostdriver.o qrc_WebKit.o qrc_InspectorBackendStub.o    -L/usr/local/src/phantomjs/src/qt/lib -L/usr/local/src/phantomjs/src/qt/plugins/codecs -lqcncodecs -L/usr/local/src/phantomjs/src/qt/lib -lqjpcodecs -lqkrcodecs -lqtwcodecs -lQtWebKit -lQtGui -lfreetype -lfontconfig -lQtNetwork -lQtCore -lm -ldl -lrt -lpthread 
/usr/bin/ld: cannot find -lQtWebKit
collect2: ld はステータス 1 で終了しました
make[1]: *** [../bin/phantomjs] エラー 1
make[1]: ディレクトリ `/usr/local/src/phantomjs/src' から出ます
make: *** [sub-src-phantomjs-pro-make_default-ordered] エラー 2

エラーの原因

1.9、2.0とも「QtWebKit」に問題があると出ています。

「QtWebKit」はブラウザのレンダリングエンジンのライブラリなのかなと思います。
少しだけ調べると、「Qt」というライブラリがあるようです。
PhantomJSにWebKitは含まれているらしいのですが、それに問題があるのでしょうか。

もう少し調べてみようと思います。