PhantomJSはWebKitを利用したヘッドレスHTTPクライアントです。Webアプリのテストのみでなく、WebページをPDFや画像に変換する為に利用している方も多いと思います。手元のFedora19を載せているマシンでは動作せず、原因と思われる物も分ったのでエントリを作りました。
結論から書くと、どうもNVidiaのドライバを利用しているとハングするようです。
https://github.com/ariya/phantomjs/issues/10845
ここではWindows8の問題が記載されていますが、Linux+NVidiaドライバのFedora19でも同様にハングしてしまいます。PhantomJSのトップページに記載されている
console.log('Loading a web page');
var page = require('webpage').create();
var url = 'http://www.phantomjs.org/';
page.open(url, function (status) {
//Page is loaded!
phantom.exit();
});
でさえハングして終了しません。
同じマシン上のVMwareのScientific Linux 6.4上から
http://phantomjs.org/build.html
に従ってビルドしたところ、あっさり正常に動作しました。
ビルドで多少困った事は依存性の解消とgoldリンカーの問題です。
sudo yum install 'pkgconfig(gstreamer-app-0.10)'
gstreamerのpkgconfigが無いとエラーが出力されます。上記コマンドでインストールできます。
./src/qt/src/3rdparty/webkit/Source/common.pri
このファイルでld.goldを利用するように設定されているのですが、goldだとリンクに失敗します。単純に削除すればビルドできました。
ビルドが終わるとbin/phantomjsバイナリが出来上がります。openでハングする事はなくなりました。
なぜPhantomJSがハングするのか??となってしまった方も居ると思います。役立ったら教えて下さい。
追記:
私のFedora19環境はNVidiaドライバがNGだったので使わなかったのですが、FacebookにSRPMでのビルドをこの前に試しました。この問題が関係ない方ならSRPMの方が楽に導入できると思います。Facebookに書いたダーティーハックを転載します。
PhantomJSをFedora19に入れたくて、srpmを探したらFedoraの中の人がF20とF17用にSRPMを作っていた。これで簡単にコンパイル&インストールと思ったらビルドセクションのスクリプトが
cd 'phantomjs-1.9.0' export CFLAGS="-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic" qmake-qt4 make -j4 1 exit 0
exitの前の”1”でエラーに。SPECがおかしいのかな?と思い見てみても普通。
ln -s /bin/true ~/bin/1
というダーティーハックで逃げました。