- blogs:
- cles::blog

Windows 10 上の Ubuntu 16.04 に Splash をインストールする





HTML 内の JS をレンダリングしてくれるサーバである Splash を WSL(Windows Subsystem for Linux) な Ubuntu 16.04 にマニュアルでインストールしようとしたら、いろいろハマってしまったのでその顛末をメモとして残しておきます。Splash を使うと JavaScript が埋まった HTML をスクレイピングしたいときや、ウェブページのサムネイル生成などが簡単にできます。
† 公式のマニュアルはあるけれど・・・
Ubuntu 16.04 向けのインストールマニュアルは以下にあります。
これですんなりインストールできるのかなと思っていましたが、これを WSL の Ubuntu 16.04 でやると、手順2の「sudo ./provision.sh ・・・」というところで以下のようなエラーを吐いてハングしてしまいます。
ネット上の情報を探してみると、ヘッドレスで Qt5 をインストールしようとするとハングするという情報もあり、これと同じ問題のような気がするので、上記で出ている細かいエラーと共にこちらにも対処することにします。
ヘッドレスな状況では画面が見えず、有効な対策が打てないので今回は xvfb ではなく、VcXsrv を使って画面を見ながら臨機応変に対応することにしました。
以下、具体的なインストール手順。
† 下準備
あらかじめ VcXsrv をインストールし、起動しておきます。
さらに、Ubuntu 16.04 を最新状態にして、エラーが出ているファイル(/etc/mtab, /etc/machine-id)を生成します。
dbus は使っているかどうかイマイチ確信が持てませんが、一応サービスを起動しておきます。
† Splash のインストール
ここからは公式のマニュアルに沿って進行しますが、適宜パッチを当てます。
1.Clone the repo from GitHub:
この部分はオリジナルから変更はありません。単に git のリポジトリをクローンするだけです。
2. Install dependencies:
ここではインストール用のメインスクリプトである provision.sh にパッチを当てています。
パッチの内容は大きく以下の2点です。
- Qt のインストーラーを vxvb ではなく、VcXsrv 経由で起動するように修正
- qmake のパスがうまく解決されていないのを修正
オリジナル版ではヘッドレスなので Qt のインストール画面は出ないようになっていますが、今回はちゃんとした X Server を使うので以下のようなインストーラーの画面が表示(操作自体はスクリプトを指定しているので自動)されます。
この工程のどこかで引っかかるのかと思っていましたが、ハングすることもなくなぜかすんなり完了してしまいました。
詳細はよく分かりませんが、vxfb と Qt のインストーラーの相性が良くないということなのかもしれません。
最後に pip3 で splash をインストールします。dbus はいちおうここで止めておきます。
これでインストールは完了です。
† Splash を起動してみる
きちんとインストールできていれば、以下のコマンドで Splash サーバが起動します。
Splash のデフォルトポートは 8050 なので、ブラウザで http://localhost:8050 にアクセスすれば Splash の画面が表示されるはずです。あとは URL 欄に好きな URL を入力して「Render ! 」をクリックすればサイトのサムネイルが生成されるはずです。
一つ一つは小さなことですが、ここまで来るまでいろいろ試行錯誤があって大変でした。
† 2018/6/22 追記
ld から libQt5Quick.so.5 が見つからないと以下のように怒られる場合があるようなので、/etc/ld.so.conf.d にパスを追加する手順を追加しました。
18.04 に対してインストールを行う場合には以下の手順を使ってください。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/10200
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
python3 -m splash.server
Traceback (most recent call last):
File "/usr/lib/python3.5/runpy.py", line 184, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib/python3.5/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/usr/local/lib/python3.5/dist-packages/splash/server.py", line 11, in <module>
from splash.qtutils import init_qt_app
File "/usr/local/lib/python3.5/dist-packages/splash/qtutils.py", line 15, in <module>
from PyQt5.QtWebKit import QWebSettings
ImportError: No module named 'PyQt5.QtWebKit'
上と全く同じようにしているのですが、
ここでエラーが出る理由を教えていただけると非常に助かります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . リモートデスクトップで Alt + PrtSc と同じことをするには(1352)
3 . RDP のプロトコルを TCP だけに変更する(1119)
4 . Flash Player projector を使って .swf をスタンドアローンで再生する(1001)
5 . リモートデスクトップで Ctrl + Alt + Del キーを送信するには(957)