モノノフ日記

普通の日記です

CentOS6にmetacpanのバックエンドAPIをセットアップしてみた

CentOS6にmetacpanのバックエンドAPI (https://github.com/CPAN-API/cpan-api) をセットアップしてみたのでメモ。CentOS6は最小インストールの状態からです。

公式ドキュメント(https://github.com/CPAN-API/cpan-api/wiki/Installation)に沿って解説してます。elasticsearchは使ってみるの初めてでしたが案外簡単に使えるもんですね。日本語周りは確認してないですが。

一般ユーザを追加

useradd -m mitz
passwd
visudo # enable sudo 
su - mitz

必要そうなパッケージをインストール

sudo yum install vim-enhanced git httpd bison byacc cpp csh make automake pg zip gmake gcc openssl-devel openssl-perl libxml2-devel expat-devel wget curl

perlbrewインストール

curl -kL http://install.perlbrew.pl | bash
echo "source ~/perl5/perlbrew/etc/bashrc" >> .bash_profile
source ~/.bash_profile

perlbrewのセットアップ

perlbrew install perl-5.16.2
perlbrew install-cpanm
perlbrew install-ack
perlbrew switch perl-5.16.2
perlbrew use # 確認

elasticsearchのインストール

Javaが必要なのでoracleサイトからダウンロードしてインストール。

sudo yum install wget curl
wget -O jre-7u13-linux-x64.rpm http://javadl.sun.com/webapps/download/AutoDL?BundleId=73849
# jdkはブラウザでDL
sudo rpm -ivh jre-7u13-linux-x64.rpm
sudo rpm -ivh jdk-7u13-linux-x64.rpm

elasticsearchのダウンロード&インストール

mkdir -p ~/work/elasticsearch
cd ~/work/elasticsearch
wget http://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.20.5.tar.gz
tar xzvf elasticsearch-0.20.5.tar.gz
cd elasticsearch-0.20.5
./bin/elasticsearch -f  # 起動確認

cpan-apiのセットアップ

cd ~/work
git clone https://github.com/CPAN-API/cpan-api.git
cd cpan-api
cpanm --installdeps .

cpanパッケージ置き場を作成。ここにauthors/*/**の形式でtar.gzを置く。

mkdir cpan

マニュアル通りに metacpan_server_local.conf を作成

touch metacpan_server_local.conf
echo "cpan /home/mitz/work/cpan-api/cpan" > metacpan_server_local.conf

cpan-apiのテスト実行

~/work/elasticsearch/elasticsearch-0.20.5/bin/elasticsearch -f -Des.http.port=9900 -Des.cluster.name=testing
prove -lv t/

テストがすんなり通らない。。。エラー出てるのは下記の3つ。

t/document/file.t

        not ok 25
        
        #   Failed test at t/document/file.t line 219.
        #          got: 'hot stuff Foo * Bar POD ERRORS Hey! The above document had some coding errors, which a
re explained below: Around line 9: Expected text after =item, not a bullet'
        #     expected: 'hot stuff Foo * Bar'

これはPODフォーマットのエラーですぐ直せるので無視。

t/release/moose.t

        not ok 1 - only one moose is first
        
        #   Failed test 'only one moose is first'
        #   at t/release/moose.t line 17.
        #          got: '2'
        #     expected: '1'

"only one moose is first" なのに 2つ検出されているぽい。MooseやらAny::MooseやらMouseやMooがらみっぽいのでスルー。

t/server/controller/diff.t

       not ok 4 - found one patch for Changes
        
        #   Failed test 'found one patch for Changes'
        #   at t/server/controller/diff.t line 103.
        #          got: '0'
        #     expected: '1'
        ok 5 - GET /diff/Moose/DOY...
        ok 6 - code 200
        ok 7 - valid json
        ok 8 - json matches with previous run
        ok 9 - GET diff Moose.pm
        ok 10 - code 200
        ok 11 - valid json
        not ok 12 - found one patch for lib/Moose.pm
        
        #   Failed test 'found one patch for lib/Moose.pm'
        #   at t/server/controller/diff.t line 103.
        #          got: '0'
        #     expected: '1'
        ok 13 - 200 OK
        ok 14 - valid json
        not ok 15 - found one patch for lib/Encoding/CP1252.pm
        
        #   Failed test 'found one patch for lib/Encoding/CP1252.pm'
        #   at t/server/controller/diff.t line 103.
        #          got: '0'
        #     expected: '1'
        ok 16 - 200 OK
        ok 17 - valid json
        not ok 18 - found one patch for lib/Encoding/UTF8.pm
        
        #   Failed test 'found one patch for lib/Encoding/UTF8.pm'
        #   at t/server/controller/diff.t line 103.
        #          got: '0'
        #     expected: '1'

これもMooseがらみ。下手に手出すと火傷しそうなのでスルー。。。

elasticsearchのインデックス生成

--deleteすると既存のインデックスをクリアして再生成してくれるそうです。

~/work/elasticsearch/elasticsearch-0.20.5/bin/elasticsearch -f
./bin/metacpan mapping --delete
2013/02/19 20:19:32 I mapping: Putting mapping to ElasticSearch server

勝手モジュールをインデックスに追加

マニュアルだとmetacpan_server_local.confcpanオプションの設定書いて置いてね、とありますが置いても読んでくれてなかったので--cpanオプションでCLIから指定してます。 あと、--cpanで指定したディレクトリの下に勝手モジュール展開しておきましょう。

./bin/metacpan release --cpan ./cpan/ ./cpan/authors/id/
2013/02/19 20:22:33 I release: Looking for tarballs in ./cpan/authors/id/
2013/02/19 20:22:35 W release: cpan/modules/06perms.txt could not be found.
2013/02/19 20:22:35 I release: Processing cpan/authors/id/M/MI/MITZ/Foo-Bar-0.01.tar.gz

Authorのインデックス

サンプルファイルはcpan.cpantesters.orgから00whois.xmlからダウンロードしてね、とあるのでその通りに実行。

wget -O ./cpan/authors/00whois.xml cpan.cpantesters.org/authors/00whois.xml
./bin/metacpan author --cpan ./cpan/

APIサーバ起動

Twiggyがインストールされてると使おうとするのでcpanmからインストールしてplackup。

cpanm Twiggy
plackup

ブラウザから確認

http://localhost:5000/ にアクセスして下記のようなJSONが表示されればOKです。http://api.metacpan.org/で表示されるものと同じ形式のやつですね。JSONVIEW入れてると確認には便利です。

f:id:Kiske:20130219113336p:plain