パーソナルツール
  • Anonymous User from 209.126.186.88
現在の場所: ホーム Ubuntuな日々 Ubuntuにmozshotのインストール

Ubuntuにmozshotのインストール

作成者 loatbell 最終変更日時 Mar 23, 2009 07:50 AM

Webページのサムネイルを外部サービスに頼るのもいやなのでソースを公開してくれているmozshotをインストールしてみる。 だいぶハマりながらやったけどとりあえず動かすことができた。とりあえず動いたけど結構てこずった。おかげでタプルとかapcheとかいろいろ勉強になったけどね。ruby読んだの6年ぶりだ・・・

1. ソースのダウンロード

まずはsvnを使えるようにする。でもってsvnでmozshotをダウンロード

sudo aptitude install subversion
svn checkout 'http://svn.arege.jp/repos/mozshot/trunk'

これでtrunk以下にダウンロードされる。

2. 実行環境の構築

Xをメモリ上で動かして,rubyからfirefoxを起動したり,画像処理したりとできるようにする。以下をインストールした。

ruby関係
ruby-gnome2, librmagick-ruby, libdrb-ruby,libfcgi-ruby
仮想フレームバッファ とブラウザ
xvfb, libgl1-mesa-dri, firefox

(xvfb にバグがあるので libgl1-mesa-driをインストールしないと無限ループになるので注意,09/03)

apache
apache2
fastcgi(apache) 使わなくてもおけ
libapache2-mod-fastcgi 

wget http://rubyforge.org/frs/download.php/34207/fcgiwrap-0.1.6.tgz

3. 試しに起動してみる

Xの起動と試しどり。

Xvfb :1 -screen 0 1024x1024x24 &

でもって

mozshot.rb http://www.google.com

これでmozshot.pngというファイルが作成されて入ればオッケ。

4. デーモンプロセスの起動

動作はこんな感じだった。まず直下にある ts.rb がdruby://7524にキューを作成している。そしてshot.cgiとかexample以下にあるclient.rbとかがこいつに接続して URLとか画像サイズとかの情報を書き込む。でもって、デーモンモードで起動したmozshot.rbが書き込まれているものをキューから読み出してスク リーンショットをとって画像を返す。いろいろあってよく分からないけど結局起動するのに関係するプロセスはこんな感じ。

ts.rb : 単体起動可能

mozshot.rb : ts.rb,  Xvfb 依存

shot.cgi, shot.fcgi : ts.rb 依存

標準でexample以下にサーバを起動するrun-serverがあるのでこれを利用して起動してもいいかも。なかを見るとわかるけど、

  1. Xvfbの起動
  2. ts.rbの起動(おちたら自動的に再起動)
  3. run-mozshotの起動 (mozshot.rbをサーバーモードで起動)

を行っている.ただこいつだとデフォルトだとプロセスを5つ起動して、run-mozshot中でログファイルをリダイレクトで書き込むのでログ ファイルの作成先のフォルダを作るかrun-mozshot中のリダイレクト先を変更するかしないとエラーになる。個人的には大量にプロセスを起動する必 要がないので行頭のnum_server=1に設定したりする。

でもって変更したら

example/run-server

で起動。logファイルには多少エラーは出るがx11vncとかで接続して画面を見てfirefoxの白い画面が起動していればちゃんと動いてるので大丈夫だった。

5. クライアント?CGIの設定

最後にcgiの設定を行ってweb上から利用可能にする。必要なのはapache2, librmagick-ruby。利用したければfastcgiを設定しても可だけど利用しなくても大丈夫。とりあえずここでは利用しない。そうすると必要なファイルはshot.cgiのみ。このファイルをcgiでアクセス可能なところに設置する。そして、書き込み可能なところにcacheディレクトリ を作成すれば動作する。ただデフォルト設定だと筆者の環境ではうまく動かなかった。動作に関係するファイルはshot.cgi, flush-result.rbの二つのみ。動作は、

  1. shot.cgiがリクエストを受け付ける。キャッシュがあれば画像を表示、なければtp.rbで開いたタプルに要求を書き込み、Now Printing...を表示。
  2. mozshotがタプルから要求を読み出したらスクリーンショットをとり画像をタプルに書き込む。
  3. utils/flush-result.rbを実行するとタプルに書き込まれた画像を読み出しキャッシュファイルに書き出す

パーミッションとファイルの位置関係をちゃんと考えないとうまく動かないので注意。

注意点と変更点は以下のとおり

  • shot.cgi中の :retry => 0, 0以上だとmozshot.rb中のタイムアウト後リトライするタイミング(mozshot.rbのq.clear)でフリーズする。retryを0に設定するか mozshot.rb中のq.clearとretryをコメントアウトしてretryしないようにする。。
  • shot.cgi中の shot_background = true, これでキャッシュがない場合はNow Printing...の表示になりバックグラウンドでスクリーンショットをとるようになる。この設定をしないと画像を取り終わるまで応答が帰ってこないので注意。(動作確認時にはいいけど本番はやめたほうがよい)

  • cacheファイルが作成されるディレクトリ(shot.cgi直下にcache)は自分で作成する必要がある。cgiから書き込みできるように(Ubuntuではwww-data)パーミッションを設定する
  • クライアント関係のプロセス(shot.cgi, flush-result.rb)はcgiの動作するユーザ(Ubuntuはwww-data)で実行する事に注意。というのもキャッシュファイルにcgiからもflush-resultからも書き込むため。

筆者は cgi-binへアクセスするとtrunk/web-ui が見えるようにシンボリックリンクを張って動作させた。でもって以下のファイルをcronとかwatchとかで定期的にwww-dataで実行する。

DIR=.../trunk/web-ui     # web-uiへのパスを設定
cd $DIR && nice -19 timeout 60 ruby -r ../timestamp.rb ../utils/flush-result.rb 

ログをとりたければ出力をリダイレクトをするのがいいかも。

おまけ(動作確認用)

x11vnc, tightvncviewer

Xvfb で起動したXは通常見ることができない。このままだと動いてるかどうかすらよく分からないのでVNCを使って接続して見えるようにする。x11vncを利用すると既に起動している画面をリモート操作できるのでこいつをインストールして実行。

サーバ側
aptitude install x11vnc
export DISPLAY=:1.0  (Xvfbを起動したスクリーンを設定)
x11vnc               (セキュリティがヤバいところでは起動する前にパスワードを忘れずに設定)

クライアント側
aptitude install xtightvncviewer
vncviewer サーバアドレス

これでサーバで起動した見えないXの画面が見えるようになる。これで見ているとmozshotの起動と同時にfirefoxが起動してる事が分かる。たまにダイアログが出たりするとフリーズすることがわかる。

 

infoIconG.pngサイトの概要

clowdearth

zopeIconZopeとploneIconPloneを使って筆者が遊ぶために作ったサイトです。バージョンアップが楽になるようになるべくPloneに大幅な変更を加えずに構築するよう心がけてます。

話題はubuntuIcon.pngUbuntuを中心としたtux.pngLinux関係を中心に、趣味のryoriIcon.png料理、goldfishIcon.png熱帯魚、sulf.png温泉等々のをぶろぐっぽく書いてみます。他には筆者のbookmark16ブックマークとrssIcon_mini.gifRSSリーダーがあります。今度はいつまで更新つづけることができることやら・・・ 

infoIconG.png筆者について

sterbay.jpg

名前:loatbell

職業:研究開発職

趣味スキー、水泳、ドライブ、温泉、キーボード、熱帯魚、料理、観葉植物、パソコン

専門分野:ディジタル信号処理全般 自動制御

生息地域栃木、東京、山梨

好きなもの拉麺、甘い物