ホーム > タグ > CPAN
CPAN
CPANモジュールインストールがコケたときの対策
昨日書いたCPANモジュールのインストールがやたらコケる件ですが。
基本的にmake testでコケてることがほとんど(依存関係で足りないモノがある場合は入れればいいだけですが)。実際に個々のモジュールをmakeした後testせずにmake installしてしまうとアッサリインストール出来ることがほとんどのようです。また、cpanコマンドからinstallしてコケた場合、/作業ユーザのホームディレクトリ/.cpan/build/ 以下に、モジュールを落としてきてビルドしようとしたところまでのファイルが残っています。というワケで、個々のモジュールのディレクトリに入って、大抵は
# perl Makefile.PL
# make
# make install
してしまえば(make testを飛ばせば)、大抵ちゃんとインストールできてしまいます。依存関係にあるモジュールが足りない場合も、そのままcpanコマンドからインストールして通ればよし、コケてもそこにまたモジュールのディレクトリができるので、そのまま先にインストールしてしまうもよし。コレであっさり必要なモジュールが揃ってしまいました。
ま、どのみちCatalystなんかは膨大なモジュール群なので、相互の依存関係でループしまくるし、ログがざーっと流れちゃってどのモジュールが足りていないのかも分かりにくいし、インストールできそうではあるものの、そこまで必要性にも迫られていないのであんまりやろうという気になりません…。それよりもっとコード書いてたほうがタメになるだろうしなぁ。
- Comments: 2
- Trackbacks: 0
Perl(CPAN)、Catalyst…なんであんなにコケるんだ orz
Yahoo! APIで遊んでたときの参考サイト。主にPerl。
Geekなぺーじ:Yahoo!APIでプログラミング
さて、会社はPHPメインなのですが自分はPerl書き、かつプログラマでもないのですが、上司に「やっぱPerlよりPHP書けたほうが何かと便利ですかね?」と聞いたら「Perlでおk」だった。まあ、無理にゼロに戻らんでも得意な方面伸ばして補完してやれということでしょうね。まあ、そもそもサーバー屋なんだからPHPよりはPerl書けたほうがよっぽど役に立つんだケド。
まあでも、ちょっとしたスクリプト書きとかはするのですが、個人で大規模開発なんかするわきゃないので、一度MVCフレームワークとか使っておきたいよねー的好奇心で、自鯖にCatalystを入れようとゴリゴリやってたワケなのですが、マジで勘弁してほしい程エラーが出ます。CPANからなんか入れようとすると結構エラー吐いて失敗することが多いです。今日はなんか無限ループしてたし。(Aが足りないから入れるよ?→失敗した→Bが足りないから入れるよ?失敗した→Aが(略)
上でちょこっと書いたYahoo! APIのXMLをパースするのにXML::Simple入れようとしたらそれだけでエラーて。色々ワケがわからないエラーが多いんだぁなぁ、PerlっていうかCPANモジュール…。較べても意味ないですが、仕事でサーバー環境構築してるときにEthnaとかPEARはサクッと入るだけに、結構凹みます。
とりあえず詰まってんのにあんまり意味ないですが、なんとなくCPANモジュールが古い場合の更新ネタを。ガリガリやってる間に見つけておいたProject MultiBurstさん:古いCPANモジュール(Perlモジュール)のアップデート方法。
インスコされているモジュールの中で、現行リリースより古いものを洗い出すのがこちら。
# perl -MCPAN -e ‘CPAN::Shell->r’
で、これらをアップデートする場合はこちら。
# perl -MCPAN -e ‘CPAN::Shell->install(CPAN::Shell->r)’
凄くラクでいいんだけど案の定すんなりコケてくれやがるとこらへんがもうマジ勘弁してくださいって感じです。あーもうサーバー内のPerl周り環境グダグダになってそうだけど大丈夫だろか…。
- Comments: 0
- Trackbacks: 1
バックアップアーカイブをNASへ転送
tarとDAR、DARのよくあるエラーと対処法でも触れたバックアップの話題ですが、実際にできたアーカイブを外部のストレージなりメディアなりに保存しないと意味がありません。今回はマウントする類の話ではなく、NASやストレージサーバーに転送する話。
よく使われるのがscpやsftpだと思いますので、今回はscpを使います。scpは基本的にSSHベースなので、既にSSHでクライアントから操作している場合は、特に何の設定もなく利用することができるのが利点でしょうか。個人的にはGB単位のデータを転送してみたりしましたが、ローカルネットワークを使うならば特に遅いなどとは感じませんでしたので、余程ファイルサイズが巨大といったことがなければscpを利用するのが良いかと思います。ちなみにscpとはSecure CoPyの略。
んではまずscpをシェルで利用する場合。基本的な使い方をする分にはcpと似たようなもんなのでさほど困ることはないかと思います。
# scp report.tex username@hostname.com:filename
ハイ。scp コピーするファイル コピー先 と、cpと変わりません。これがリモートサーバからローカルへ、という場合は引数の順序が逆になるだけです。ディレクトリをコピーする場合は、scp -r としてやればOK。簡単ですね。
ではスクリプトに埋め込む場合ですが、以前も書いたように、セキュリティの観点からは、シェルスクリプトでexpectを使うのは良い方法とは言えません(ローカルからしか参照できない・しない、とかなら別ですが)。いろいろ方法はあると思いますが(パスワードなし鍵認証にするとか)、自分の場合はPerlモジュールにあるNet::SCPやNet::SCP::Expectを用います。Net::SCPは鍵認証用で対話機能がないので、ユーザー名・パスワードを利用して認証をしている場合の対話処理はNet::SCP::Expectを用います。とりあえずこれらが入っていない場合は
# perl -MCPAN -e shell ←初回起動の場合は設定に入ります。標準的な構成であれば、基本的にEnter(デフォルト)で問題ありません
↓ こうなるので
cpan> install Net::SCP ←install 必要なモジュール名 を。
…とやると、簡単にCPANからモジュールがインストールできます。(※ちなみに先ほどCentOS5.2でやったら、perl -MCPAN -e shellではなくcpanだけでも起動しました…んー?)
サーバーにあわせて必要なモジュールをどっちかまたは両方導入したら、Perlスクリプトで use Net::SCP::Expectなど利用するモジュールを書いときます。んで簡単なスクリプトとしましては
#!/usr/bin/perl
$usr = ‘root’;
$pwd = ‘xxxxxxxx’;use Net::SCP::Expect
my $scpe = Net::SCP::Expect->new(user=>”$usr”,password=>”$pwd”);
$scpe->scp(’192.168.0.2:/dir/filename’,”/dir/filename”);
これがリモートサーバーからローカルサーバーに落とす場合です。詳しい記述法は各モジュールの配布元などをごらんください。
ちなみにファイル単位ではなく、ディレクトリごと落としたい場合はコレだとエラーになるので、上の「my $scpe =…」の行を
my $scpe = Net::SCP::Expect->new(user=>”$usr”,password=>”$pwd”,recursive=>’1′);
とrecursiveオプションを追加して1にします。
- Comments: 0
- Trackbacks: 0
Home > Tags > CPAN
