2006年08月30日

CPAN→Plaggerインストール(レンタルサーバさくら)


日常的に Perl を触る機会がなく、CPAN など利用した事すらないのだが、とりあえず「じゃぁPla」と言ったので調べてインスコするまでしてみた。
もう Plagger インストールの話も飽きただろうけども、めも的に残しておく。

簡単に説明すると、Plagger をインストールするためには、管理者権限がなければ、CPAN経由でインストールが現実的で、その為にはインストールするサーバに Telnet or SSHでログインできて make が使える事が必須である。

意味が分からない人の為に説明してもよいが、今回はそれをすると長くなるので今度にする。
今日の対象は、レンタルサーバで root 権限がない人(とくにさくら)への情報と、自分の為のメモだから。


● CPANをユーザー領域にインストールする

はっきり言えば、以下の二つのサイトを参考にすれば、大体できる。
○tsune's FreeBSD memo :: ユーザー領域にCPANをインストールする方法
一般ユーザ環境におけるCPANモジュールの使い方 - iandeth.

これだけでは味気ないので、少々補足を。
俺は[それPla]の ○tsune さんのほうのサイトを参考にしたのだが
設定ファイルの~/.cpan/CPAN/MyConfig.pmの該当部分を書き換えます。
(mbuildpl_argの項目は存在しないので、追記してください)
'make_install_arg' => qq[SITEPREFIX=$ENV{HOME}/local],
'makepl_arg' => qq[-- INSTALLDIRS=site LIB=$ENV{HOME}/local/lib/perl5 PREFIX=$ENV{HOME}/local],
'mbuildpl_arg' => qq[./Build --install_base $ENV{HOME}/local],
'urllist' => [q[ftp://ftp.cpan.jp/], q[ftp://ftp.kddilabs.jp/CPAN/]],

○tsune's FreeBSD memo :: ユーザー領域にCPANをインストールする方法
とあるところを
'make_arg' => qq[|tee -ai $ENV{HOME}/.cpan/logs/make.out],
'make_install_arg' => qq[SITEPREFIX=$ENV{HOME}/local
    | tee -ai $ENV{HOME}/.cpan/logs/make_install.out],
'makepl_arg' => qq[INSTALLDIRS=site LIB=$ENV{HOME}/local/lib/perl5
    PREFIX=$ENV{HOME}/local
    INSTALLMAN1DIR=$ENV{HOME}/local/man/man1
    INSTALLMAN3DIR=$ENV{HOME}/local/man/man3
    | tee -ai $ENV{HOME}/.cpan/logs/make_pl.out
],
'mbuildpl_arg' => qq[./Build --install_base $ENV{HOME}/local
    | tee -ai $ENV{HOME}/.cpan/logs/build.out
],
'mbuild_install_build_command' => qq[./Build --install_base $ENV{HOME}/local
    | tee -ai $ENV{HOME}/.cpan/logs/build2.out]

'urllist' => [q[ftp://ftp.cpan.jp/], q[ftp://ftp.kddilabs.jp/CPAN/]],
と赤字の部分を追記し、
%mkdir -p ~/.cpan/logs/
を作成しておいて、make に関係するログを残すようにしておいた。

CPAN で test や install したら分かると思うのだが、大量のモジュールテストログが流れ、依存ファイルを次々と持ってくるので、目押しの達人でもない限りエラーや警告が見えないだろう。ターミナルのバッファ増やしておいてもよいのだが、ログに出しておくと後でゆっくり見れるから便利だ。
(ちなみに tee コマンドは標準出力へ出すと同時に、ファイルへ転送してくれるコマンドで -a は ファイルへアペンド。-i は割込みシグナルを無視)
あと、makepl_arg の -- INSTALLDIRS=site だが、 -- がオプションエラーになった気がするので、外しておいた。そもそもこの辺とか見ると、LIB オプション指定してたら、INSTALL* 属性は上書きされるっぽいから、いらないのかもしれん。
INSTALLMAN1DIR と INSTALLMAN3DIR は LIB と PREFIX で自動的に相対位置にインストールされるかもしれないが、念のため。
他のインストールめもサイトを見ると LIB=$ENV{HOME}/perl になっている事が多いのだが、ここは参考にさせてもらってるので ○tsune流の LIB=$ENV{HOME}/local にしておいた。
まぁ実際どこでもいい。
mbuild_install_build_command オプションは、たぶん Module::Build の為のオプションで、mbuildpl_arg だけでよいのかも知れないが、とりあえず入れておく。

ほかのCPANの設定については、下のほうにまとめてあるサイトを参考にしてほしい。
これで、cpan -i Bundle::CPAN まで行えば、CPAN設定終わり。
次はいよいよ Plagger のインストールへ。


● Plaggerをインストールする

嵌りポイントを最初にあげておく。
・ Template が入らない
・ DateTime::TimeZone、DateTime::Format::Mail が入らない
・ Encode::Detect が入らない
これらは、インストール手順で順に説明していく。

まずは
%cpan
cpan> test Plagger
で、以下のようなログがでる。
cpan> test Plagger
Running test for module Plagger
Running make for M/MI/MIYAGAWA/Plagger-0.7.9.tar.gz
… 中略 …
*** Module::AutoInstall version 1.03
*** Checking for Perl dependencies...
[Core Features]
- YAML ...loaded. (0.58)
- Test::More ...loaded. (0.64 >= 0.42)
- Test::Base ...loaded. (0.52 >= 0.52)
- Class::Accessor::Fast ...missing.
- File::Find::Rule ...missing.
- UNIVERSAL::require ...missing. (would need 0.1)
- Template ...missing. (would need 2.13)
- Template::Provider::Encoding ...missing. (would need 0.04)
- YAML ...loaded. (0.58 >= 0.39)
- Text::Tags ...missing.
- DateTime ...missing. (would need 0.29)
- DateTime::Format::Mail ...missing.
- DateTime::Format::W3CDTF ...missing.
- DateTime::Format::Strptime ...missing.
- Digest::MD5 ...loaded. (2.33)
- LWP ...loaded. (5.79)
- HTML::Parser ...missing. (would need 3.51)
- URI::Fetch ...missing. (would need 0.071)
- Cache::Cache ...missing. (would need 1.04)
- Module::Pluggable::Fast ...missing.
- HTML::ResolveLink ...missing.
==> Auto-install the 15 mandatory module(s) from CPAN? [y]
ここで一旦とめておいて、もう一つターミナルを接続し、~/.cpan/logs へ移動する。
すると、さっきの赤字の CPANオプションによっていくつかのログができているから、
%tail -f make.out | grep -inH -E 'warn|error|fail' &
%tail -f make_pl.out | grep -inH -E 'warn|error|fail' &
などとして、エラーがでたところを補足しておくと後でファイルを探さなくていいので便利だ。
それから、 cpan のコンソールで Enter を連打!!!!!
すると、tail したほうのコンソールで
*** DateTime::Format::Mail installation failed.
cp lib/XML/Atom/ErrorHandler.pm blib/lib/XML/Atom/ErrorHandler.pm
…略…
- Class::ErrorHandler ...loaded. (0.01)
*** DateTime::Format::Mail installation failed.
…略…
Failed Test Stat Wstat Total Fail Failed List of Failed
*** Encode::Detect installation failed.
などとでると思う。ErrorHandler.pm とかまで引っかかってるが、無視で。

さて、ここまできたらインストール失敗のログがいくつかでているはず

まずは Template とか Template::Toolkit
これの直し方は簡単で(先駆者が情報を残してくれてるからだが)、~/.cpan/build/Template-Toolkit-2.15/t/fileline.t てファイルができているはずなので、vi エディタとかで開いて、ここ(http://tt2.org/viewcvs/Template2/t/fileline.t.diff?r1=1.5&r2=1.6)の右側の通り修正して保存。んで
cpan> install Template
すればよい。意味も分からず force install するのは危険というか、問題解決の糸口にならないが、この様に原因が分かっていて install に影響しない事がわかっている場合、ファイルを修正するのが面倒ならば force install してもよい。

次は、DateTime::Format::Mail DateTime::TimeZone

これの原因は
はこべにっき# - DateTime::Format::Mailがシグニチャのミスマッチでインストールできない問題の調査
なので、force install でよいと思うのだが、さくら特有なのか DateTime::TimeZone は force install しようとしても
t/38local-subtract......DateTime::TimeZone version 0.38 required--this is only version 0.27 at
こんなエラーがでる。
これの原因は、ここにあるように、DateTime::TimeZone が古いからなのだけれども、
DateTime::TimeZone を install しようとしたら
Sorry, PREFIX is not supported. See the Module::Build
documentation for 'destdir' or 'install_base' instead.
とでてうまくいかない。
これは、Module::Build が古いのが原因でオプションが認識されないようである。
(現在のインストールされているヴァージョンは cpan> i Module::Build か %perl -MModule::Build -e 'print$Module::Build::VERSION' をすれば分かる)
俺の場合は、0.25_01 で 今日の時点での最新は 0.2805。
どこから PREFIXオプションがサポートされているのか分からないが、とりあえず Module::Build の最新をインストールする。
その際、cpan> install Module::Build として cpan> i Module::Build で確かめても最新にならない場合がある。(俺がそうだった)
元々 CPAN は古いバージョンは makepl_arg に UNINST=1 を立てないと上書きしないので、cpan が認識できる位置に古いモジュールがあるからだと思う。
(UNINST フラグは root じゃないと立てないほうがいいかも。まぁ、ちゃんと管理されてれば消えないとは思うが)
そこで、~/.cpan/build/Module-Build-0.2805 に移動し、手動で install する。
perl Build.PL ./Build --install_base /home/USER/local
./Build
./Build test
./Build install
で終了。
(ちなみに、自力インストールの場合 perl Build.PL ならば、cpan の mbuildpl_arg の引数と同じ、perl Makefile.PL ならば makepl_arg と同じコンパイルオプションを渡せばよい。どちらで Make できるかは、READEME や INSTALL など探せば載ってるはず)

これで、Module::Build は最新になったので、Date::TimeZone はインストールできる。
(別のコンソールで make install したら cpan が認識しないので、一旦 q で出て cpan を起動しなおす)
DateTime::Format::Mail も force install したら、cpan> install DateTime で OK なはず。
(注意事項 cpan は一度 test とか install をすると、前回の結果が残るので再ビルドしない。なんかおかしいと思ったら、一回 cpan を起動しなおすか、force test すればよい)


最後に、Encode::Detect
これは、現時点ではほとんどの人が引っかかっているようだ。先に解決策を述べると
・ Module::Build
・ ExtUtils::ParseXS
・ ExtUtils::CBuilder
・ Test::More
・ (Data::Dump)
を最新にすれば解決するらしい。
install Module::Build ExtUtils::ParseXS ExtUtils::CBuilder Test::More Data::Dump
install Encode::Detect
で入るはず。


俺はここまでで
cpan> test Plagger
で OK になり
cpan> install Plagger
でめでたくインストールできた。
cpan> i Plagger
Strange distribution name [Plagger]
Module id = Plagger
CPAN_USERID MIYAGAWA (Tatsuhiko Miyagawa )
CPAN_VERSION 0.007009
CPAN_FILE M/MI/MIYAGAWA/Plagger-0.7.9.tar.gz
UPLOAD_DATE 2006-08-24
DSLIP_STATUS (,,,,)
MANPAGE Plagger - Pluggable RSS/Atom Aggregator
INST_FILE /home/USER/local/lib/perl5/Plagger.pm
INST_VERSION 0.7.9

適当になんか動かしてみるかって事で、mixi2gmail までやって確認したんだが、それは自分で調べて頑張れ!
んじゃ、おつかれさま \(^o^)/


* 参考サイト
○CPANインスコ
○tsune's FreeBSD memo :: ユーザー領域にCPANをインストールする方法
一般ユーザ環境におけるCPANモジュールの使い方 - iandeth.
○Makeの設定、CPAN設定
ExtUtils::MakeMaker - モジュール用 Makefile の生成
モジュールのインストールについてのメモ
CPAN - CPANサイトからのperlモジュールの問い合わせ、ダウンロード、構築を行う
○モジュールインスコ失敗
・ Template
nitoka blog: Template Toolkitのインストール
subtechグループ - otsune's SnakeOil - Bundle::CPANとPlaggerに依存するモジュール(メモ)
・ DateTime::Format::Mail
はこべにっき# - DateTime::Format::Mailがシグニチャのミスマッチでインストールできない問題の調査・ DateTime::TimeZone
mskgcの日記 - レンタルサーバ環境で Plagger は無謀?
・ Encode::Detect
subtechグループ - otsune's SnakeOil - Encode::Detectをroot権限無しでユーザー領域にインストール
SHIMIBOW’S HATENA DIARY - Plagger on さくらインターネット
○その他参考
fukaz55 :: Plagger 入れるのに苦労したモジュールリスト
subtechグループ - otsune's SnakeOil - Bundle::CPANとPlaggerに依存するモジュール(メモ)Make out: Plagger 設定(さくらインターネット)


posted by suVene at 11:29