PhantomJSがURLをopenするとハングする原因

Development 11月 9, 2013 #JavaScript
(Last Updated On: )

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

というダーティーハックで逃げました。

投稿者: yohgaki