戯言

自社サービスを開発、運営している会社でスクラムマスターをやっている人の戯言です。

Amon2で遊びたい(準備編)

perlの会社に勤めてますが、WAFは自社製なのでいまいち最近の流行に乗れません。
少し時間が空いたのでAmon2で何か作ってみることにした。
参考にした資料やURLなどを備忘録として残しておきます。

サーバ

せっかくなので、AWSを触ってみるためにEC2に仮想マシンを1台確保。
一人でいじくるだけなら無料の範囲なので、とりあえずこれで試してみる。

AWSアカウント作成〜sshログイン〜apache起動まで

アカウント作成は簡単だけどクレカ入力が必要だった。
どこにも公開するつもりはないが、何かイタズラされると課金がはじまってしまう怖さも若干ある。
無料アカウント作成の流れ | アマゾン ウェブ サービス(AWS 日本語)

アカウントが出来てからはこちらの資料の流れでインスタンス立ち上げ。
細かなUIは変わってますが、ほぼ問題無し。
はじめてのアマゾンクラウド②[仮想サーバ(Amazon EC2)を立ち上げる]
今回、イメージは何でも良かったので、おすすめ通りにAMIにした。

資料の通りに進めるだけでapache起動までいける。便利な世の中や・・・

plackまわりはポート5000番を利用することが多いようなので、Custom TCP ruleを作って「5000 0.0.0.0/0」を追加するのを忘れずにやる。

PSGI/Plack

きっとこの辺の知識も必要になるだろうと思われたので、まずはざーっと読み漁る。
第1回 PSGI/Plack―フレームワークとサーバをつなぐエンジン (1):Perl Hackers Hub|gihyo.jp … 技術評論社

cpanは設定がめんどいという印象が染み付いてしまっているので、飛び級でcpanmからインストール

# sudo su -
# cd /bin
# curl -LO http://xrl.us/cpanm --insecure
# chmod +x cpanm

cpanmが使えるようになるので Plackを入れます

# cpanm Task::Plack

こちらのブログ AWS EC2+RDSにPSGI環境のMovable Typeを動かす! | MONSTER DIVE【モンスターダイブ】 でも指摘されているように、何故か入らなかったモジュールがあったのでこちらも個別に入れます

# cpanm CGI::Emulate::PSGI
# cpanm CGI::Compile

plackhello world するところまでは、まんまこちらのコピペで sample.psgi を作ります
Plack入門:Plackでウェブサーバを起動してhello worldするまで - DQNEO起業日記

http://(awsのホスト名):5000/ で接続できればひとまず動作確認としてはOK。

plenv + cpanm + carton環境の構築

ここからAmon2インストールに行ってもいいのだけど、cartonを使うのでせっかくだからperlの環境もしっかり作ろうかと。

plenv

AMIのPerlバージョンは5.10。このままでも困らないことではあるけれど、せっかくなので新しめのPerl5.18.2を使ってみたい。
plenvのインストールはほぼこちらの通り 続・plenvを使ってみた - Masteries
perl-buildが必要なのでお忘れなく。

# git clone git://github.com/tokuhirom/plenv.git ~/.plenv
# git clone git://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/
# echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.bash_profile
# echo 'eval "$(plenv init -)"' >> ~/.bash_profile
# exec $SHELL -l

利用できるPerlバージョン一覧を取得して

# plenv install -l

お好みのPerlを入れよう。結構時間がかかります。

# plenv install 5.18.2

installだけでは利用することにはならないので、バージョンを指定する

# plenv global 5.18.2

globalとか何なの?という疑問も先ほどのブログで説明されている。
大変ありがたい。

cpanm

最初の方で /binにcpanmを入れているが、今回は「「plenvで利用するPerl」で動くcpanm」」をインストールする。

# plenv install-cpanm

Perlバージョンを変えるたびに install-cpanmしないといけないかどうかは判らない(たぶん必要)。

Carton

後で使うので入れておこう。plenvのcpanmで入れる

# plenv exec cpanm Carton

Amon2をインストールする

やっとここまで来た。しかしインストール方法が3通り存在する・・・

cpanfileを記述してcartonで入れる

Cartonが使えるのでcpanfileを作って「requires 'Amon2';」とだけ1行書き、carton installする。
一見シンプルで良さそうだが、よくよく考えると頭がごちゃごちゃしてくる。
そもそもcartonは「プロジェクトをgit cloneしてきてcarton install!」みたいな用途のはず。
Amon2を入れるためだけにcpanfileを利用するのは何か違うんじゃない?という違和感を感じる。
Amon2を入れるだけというプロジェクトならいいのだろうけど。
ということでたぶんパス。

plenvのcpanmでインストールする。

plenv exec cpanm Task::Amon2

上記コマンドを実行すると、plenvで利用しているPerlの配下にインストールされる

# plenv which amon2-setup.pl
/home/ec2-user/.plenv/versions/5.18.2/bin/amon2-setup.pl

環境を汚したくない場合やsu権限が無い場合にはこちらの方法を取るのが良いのだろうと思われる。

/binのcpanmを利用する

最初の方で入れたcpanmを利用する方法。これがいわゆるシステムにインストールという方法でsu権限が必要になる。

# cpanm Task::Amon2

すると/usr/local/binに入る

# which amon2-setup.pl
/usr/local/bin/amon2-setup.pl

本当はplenv配下に納まっている状態が綺麗なのだろうと思う。
今回はシステムに入っていてもおかしくないような気がしているので3番を選択した。
たぶん2できちんとやっていくのが望ましいのだろう。

とりあえず今回は準備なのでここまで。