2012年9月4日火曜日

[linux]cicindelaのデモ動かすまで

perlゴリゴリなモジュールとかトライ・アンド・エラーなメモ。
cicindelaのデモを動かすところまででつまったところなど。

■まずはじめに

すべてはここからはじまった。
http://labs.edge.jp/cicindela/

お、簡単そうじゃんと思ったんだけどな。
使うのは簡単かも、環境構築と設定は…どうだろうか。

■環境
AWS(Amazon Linux OS AMI)
apche 2.2
perl 5.10.XX(失念)
mysql 5.X(失念)

yum でインストールできる 2012.09.04時点のバージョンのままでソースからビルドとかレベル高いことはやってません。

■AWSインスタンス作成

とりあえず、AWSでmicro(あとでメモリサイズ600MBではダメなのでsmallに変更するハメになります)インスタンスでサーバセットアップ。

■cicindelaインストール

さあやるぞと公式ドキュメントをみつつ。
http://code.google.com/p/cicindela2/wiki/Install

ここに書かれていることが素直にできればデモまではかんたんです。
私がつまってしまったのは私に問題のノウハウがなかったからです。

svnからソースDLしろってかいてるので
sudo su - して
yum -y install svn

ソースを/home/cicindela へチェックアウト。
パス書き換えるのが面倒なのでとりあえず動きや設定を理解するためにパスはドキュメントに従います。

■MySQLインストール

今度は、mysql がいるのでRDS使わずに1つのサーバでとりあえず全部すませてしまいます。

yum -y install mysql-server

で、my.cnf の設定はシンボリックリンク作らずに手動でマージします。
ここでテーブルヒープメモリのサイズが1GBをこした設定になっていることに気が付かず…。
さきに言っとくとあとで面倒なエラーになるので1GB以上のメモリつんでるサーバにmysqld インスコしないといけないです。
私はあとでmicro→smallにインスタンスタイプを変更しました。

■perlモジュールのインストール

次にperlモジュールのインスコ。

ここハマった。

インストールで依存関係とかよくわかんなにのでCPANでperlモジュールはインストールしたい。

なので下記コマンドでCPAN経由でインストールする。

perl -MCPAN -e shell

まず、AWS環境(Amazon Linux OS AMIだけ?)特有ですが、gcc 入ってません。

なので yum -y install gcc します。

ただ、これでもダメです。

make ができません。

デフォルトでは開発ツールが入っていないようなのでインスコします。
http://memo-off.blogspot.jp/2012/07/make-command-not-found-on-amazon-linux.html

これでいくつかはインスコできるようになりますが、DBD::mysql がエラー。

私の場合は、C/C++からmysql参照するAPIがなく。
http://blogs.yahoo.co.jp/take_low_6/23542159.html


yum -y install mysql-devel

これでDBD::mysql通った。

あと perl --version でたしか5.10.XXだったのでModule::Pluggableはインスコいらなかった。

ためしに perl -e "use Module::Pluggable;" してみてエラーなかったらインスコいらんぽい。

■apache + mod_perl インストール

で、次は apache + mod_perl のインスコ。

これはふつうに yum -y install httpd mod_perl した。

Redhat系OSならIncludeディレクティブはいらない。
http://futuremix.org/2004/05/mod_perl

もし気になるようなら /etc/httpd/conf.d/perl.conf コメントアウトして /etc/httpd/conf/httpd.conf に。

ただどちらにしても次の設定は必要。

Include /home/cicindela/etc/httpd/modperl.conf

この設定によって、http://hostname:80/cicindela/ 以下にアクセスすると perl スクリプトが実行されるようになる。

あと、deamontools はインスコしなかった。

ログは touch と chmod して、ログローテの記述を足した。

これでインスコOK。


■デモの確認

デモを動かしつつほんとにインスコOKなのか確認します。

デモ
http://code.google.com/p/cicindela2/wiki/Demos

デモソースを svn switch で。

cd /home/cicindela/misc
 perl create_init_sql.pl --db_name=cicindela_clip_db | /usr/local/mysql/bin/mysql -uroot

私はmysqlでいつもの調子でパスワードの設定していたので
perl create_init_sql.pl --db_name=cicindele_clip_db | mysql -u root -p

で実行した。

次のデータインポートで問題が。

DBD::mysql::st execute failed: The table 'item_similarities' is full [for Statement "
insert into item_similarities (item_id1, item_id2, score)
...


なにこれ?
ぐぐると先人はおりますもので。

mysqlサーバのメモリ不足。。。
microの600MBサーバにapache + mysql やっちゃってるよってことで、smallにインスタンスタイプ変更。

で、service mysqld start したらエラー。

tail -f /var/log/mysql/error.log 見ると

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes

InnoDB: than specified in the .cnf file 0 268435456 bytes!

こんな感じのエラーがね。
http://teketeke55.hatenablog.com/entry/2011/12/04/125227

おっしゃるとおりにやってみる。

/var/lib/mysql/mysql
ib_logfile0
ib_logfile1

上記をmvする。

mysql起動したら正常に立ち上がった。

もう一度データインポートしたら今度はちゃんとつっこめたみたい。

次に設定の_common.pm で datasouce => ["", "", ""]  の2つ目ユーザ名と3つ目パスワードを自分のサーバ設定に変更。

で、batch.pl を起動。

うおーい!
モジュールたらんぞ!

これCPANからインスコ。
http://isann0330.tumblr.com/post/30788996849/vps-1g-centos6-2-unixbench

で、もっかい。
やったー動いたー!

apache 起動してURL叩いたらなんかそっけいない数字の羅列が。

どうやらこれでOKぽい。

まああとはこのリコメンド結果のIDを自サイトのコンテンツと紐付けてかっこよく表示してやればリコメンドの出来上がり!ってわけで。

設定は大変でした。

おわり。













0 件のコメント:

コメントを投稿