|
このページは大阪弁化フィルタによって翻訳生成されたんですわ。 |
by Hippo2000(2000/12/19)
CPAN.pmなんやこれがホンマに。
腰が抜けるほど、モジュールのインストールが簡単になるモジュールなんやこれがホンマに。
作者はAndreas Koenigはんや。メールで了解をもろたんですわ。
なお内容等が間ちごとったら修正しまっせ。ご連絡おくんなはれ。
変更履歴:
Kentaro Shirakataはんからの指摘を受けて誤字を修正しましたわ。(2002/2/1)
CPAN - CPANサイトからのperlモジュールの問い合わせ、ダウンロード、構築を行う
対話モード:
perl -MCPAN -e shell;
バッチモード:
use CPAN;
autobundle, clean, install, make, recompile, test
CPANモジュールはperlモジュールのmakeとインストールを自動化するように設計されとりまんねん。そらいくつかの検索機能を持ち、ネットから生のデータを取得するためにNet::FTPまたはLWP(またはlynxや外部のftpクライアント)の使い方を知っとりまんねん。
モジュールは1つまたは複数のミラー化されたCPAN(Comprehensive Perl Archive Network) サイトから取得され、与えられはったディレクトリに解凍されはります。
CPANモジュールはモジュールの名前付きとバージョン付きのbundlesの考えにサポートしまっせ。Bundlesは関連するモジュールのセットの扱いを簡単にしまっせ。下記のBundlesをご覧おくんなはれ。
パッケージにはセッション・マネージャとキャッシュ・マネージャが入っとりまんねん。セッション間で保持されるステータスおまへん。セッション・マネージャは現在のセッションで何が取り出され、構築され、インストールされたかを追跡しまっせ。キャッシュ・マネージャはmakeプロセスにより占有されたディスク・スペースを追跡し、単純なFIFO機能にしたがって過剰なスペースを削除しまっせ。
拡張された検索機能のために、CPANが利用できるプラグイン、CPAN::WAIT.がおます。CPAN::WAITは全文検索エンジンで、CPAN authorsディレクトリで利用できるずぅぇえええぇぇええんぶのドキュメントを索引付けしまっせ。CPAN::WAITがあんさんのシステムにインストールされると、<CPAN.pm>の対話シェルは、インストールで設定されたWAITサーバへ問い合わせを送信するwq、wr、wd、wlほんでwhコマンドが使えるようになるんですわ。
他のみなのメソッドはプログラマ形式と対話シェル形式でアクセスできるように提供されとりまんねん。
対話モードには以下のように実行するっちうことで入るんや:
perl -MCPAN -e shell
こら行読込インターフェースにしまっせ。ヒストリとコマンド完成の両方を楽しむためにTerm::ReadKeyとTerm::ReadLineをインストールするとより楽しめるでっしゃろ。
コマンドラインやったら、'h'を叩いておくんなはれ、ほんで残りはすぐにわかるでっしゃろ。
対話モードでの最も一般的な使用方法は
これらのコマンドに渡す引数は、オブジェクトを識別する文字列に完全にマッチするか、オブジェクトのようけの属性に対して大文字小文字の区別なくマッチする正規表現のいずれかになるんですわ。パーサーは2つのスラッシュで囲んやときだけ、正規表現を解析しまっせ。
原則は見つかったオブジェクトの数が項目の表示のされ方に影響を与えまんねん。もし検索が1つの要素を見つければ、結果はむしろ冗長なメソッドas_stringで表示されはります。せやけどダンさん1つより多ければ、簡潔なメソッドas_glimpseで表示しまっせ。
ずぅぇえええぇぇええんぶのmakeまたはtestは無条件に実行されはります。
install <distribution_file>
も無条件に実行されはります。せやけどダンさん
install <module>
では、CPANは、インストールがホンマにそれに必要なんかをチェックし、ほんでそのディストリビューション・ファイルに更新する必要があらへんモジュールが入っとった場合には、module up to date (最新版)と出力しまっせ。
CPANは現在のセッションで何をしたかを追跡し、ほんでそれが性交...ひひひ,ウソや,成功したかどうかにかかわらへんし、パッケージを2度ビルドしたろおもてはしまへん。forceコマンドは最初の引数を(現在は:make、testまたはinstall)呼出し、ほんではじめからコマンドを実行するように取るんや。
例:
cpan> install OpenGL
OpenGL is up to date.
cpan> force install OpenGL
Running make
OpenGL-0.4/
OpenGL-0.4/COPYRIGHT
[...]
cleanコマンドは結果として ディストリビューション・ファイルの作業ディレクトリでの
make clean
が実行されはります。
CPAN.pmはSIGPIPEをシカトしまっせ。もしユーザが inactivity_timeoutを設定すると、perl Makefile.PLサブプロセス実行中にSIGALRMが使われはります。
シェル・インターフェースで利用できるコマンドはCPAN::Shellパッケージでのメソッドや。もしシェル・コマンドをぶちこむと、入力されたずぅぇえええぇぇええんぶのもんはText::ParseWords::shellwords()ルーチンによって分割されはります。こらほとんどのシェルがするように行われはります。最初の単語は呼び出されるメソッドとして、残りの単語はこのメソッドへの引数として解釈されはります。もし行のケツがバックスラッシュやったら、行の続きがサポートされはります。
autobundle はバンドル・ファイルを$CPAN->Config->{cpan_home}/Bundleディレクトリに書込みまんねん。そのファイルにはCPANからと現在@INCにインストールされとる両方から利用どるずぅぇえええぇぇええんぶのモジュールが入るんや。バンドル・ファイルの名前は現在の日付とカウンタが基本になるんですわ。
recompile()
はどエライ特殊なコマンドで、引数をとらへんし、ずぅぇえええぇぇええんぶのインストールされとる動的にロードできる拡張(なんちうか、ようみなはんいわはるとこのXSモジュール)に対して'force'を有効としてmake/test/installのサイクルを強引に実行しまっせ。このコマンドの基本的な目的は、ネットワーク・インストールを完了させることや。2つの異なるアーキテチャのための共通なソース・ツリーを持っとるとしまっせ。完全に独立した新しいインストールをするっちうことを決意しまっせ。既にあるバンドル(Bundle)ファイルの助けをかりて1つのアークテクチャに対して開始しまっせ。CPANはずぅぇえええぇぇええんぶのバンドルをインストールしまっせ。せやけどダンさん2番目のアーキテクチャでその仕事を繰り返そうとすると、CPANはずぅぇえええぇぇええんぶのモジュールに対して"Foo
up to date"ちう文句を返しまっせ。ほんでCPANのrecompileを2番目のアーキテクチャに呼び出して、行うことができまんねん。
recompileのもう1つのようある利用法は、perlがバイナリ互換性を壊したときや。もしCPANが使うモジュールがバイナリ互換性に依存しとったら(そのためCPANコマンドを実行できなければ)、回復するためにCPAN::Noxモジュールを試してみなければならしまへん。
こら内部のことと考えられはるが、クラス階層はユーザとプログラマの両方に関わりがおます。CPAN.pm上記の4つのクラスを扱い、ほんでそれらのずぅぇえええぇぇええんぶがメソッドを共有しまっせ。事実上、古典的な1つの多態性や。メタクラス・オブジェクトはみなの種類のみなのオブジェクトを登録し、文字列で索引をつけまんねん。オブジェクトを表す文字列は分けられはった名前空間を持ちまんねん(完全には分割されしまへん):
名前空間 クラス
"/"(スラッシュ)が入った単語 Distribution
Bundle::で始まる文字列 Bundle
その他 Module もしくは Author
Modulesはそれに関連するDistribution オブジェクトを知っとりまんねん。それらは常に最も新しい公式のリリースを参照しまっせ。開発者は(目に見えるバージョン番号にアンダーバーをぶちこむことにより)リリースを安定しておらへん開発バージョンと印をつけることができまんねん。そのためホンマに最もホットで新しいディストリビューション・ファイルが常にデフォルトになるわけやおまへん。もしモジュールFooがCPANで1.23と1.23_90が配布されていれば、CPAN.pmは以下のようにするっちうことによって、バージョン1.23をインストールするような手近な方法を提供しまっせ。
. install Foo
こらずぅぇえええぇぇええんぶのもんがついた完全なディストリビューション・ファイル(BAR/Foo-1.23.tar.gz)をインストールしまっせ。せやけどダンさんバージョン 1.23_90をインストールしたければ、authors/id/directoryでの相対でCPANでのどこにディストリビューション・ファイルがあるかを知る必要がおます。もし作者(author)がBARやったらば、こらBAR/Foo-1.23_90.tar.zかもしれしまへん。そないなら以下のようにします
install BAR/Foo-1.23_90.tar.gz
最初の例はCPAN::Moduleクラスのオブジェクトによって行われ、2番目はCPAN::Distributionクラスのオブジェクトによって行われはります。
シェルに入らな、利用可能なシェルコマンドはメソッドとしたかて(CPAN::Shell->install(...))、ほんで呼出しパッケージの中での関数としたかて(install(...))使うことができまんねん。
現在のトコ、たった1つだけ?CPAN::Shellが安定したインターフェースを持っとりまんねん。CPANシェルで利用できるずぅぇえええぇぇええんぶのコマンドはCPAN::Shellのメソッドや。モジュールの一覧を作成するコマンド(r、autobundle、u)のそれぞれも、リストのなかのずぅぇえええぇぇええんぶのモジュールのIDのリストを返しまっせ。
# ディスク上にある古くなりよったずぅぇえええぇぇええんぶのもんをインストールする:
perl -MCPAN -e 'CPAN::Shell->install(CPAN::Shell->r)'
# 必要やったら好きなプログラムをインストールする
for $mod (qw(Net::FTP MD5 Data::Dumper)){
my $obj = CPAN::Shell->expand('Module',$mod);
$obj->install;
}
# ディスク上にあるVERSION番号を持っておらへんずぅぇえええぇぇええんぶのモジュールの一覧を出力
for $mod (CPAN::Shell->expand("Module","/./")){
next unless $mod->inst_file;
# MakeMaker convention for undefined $VERSION:
next unless $mod->inst_version eq "undef";
print "No VERSION in ", $mod->id, "\n";
}
# CPAN上であるモジュールが入っとるディストリビューションを探す:
print CPAN::Shell->expand("Module","Apache::Constants")->cpan_file
またはCPANを見るようなcronジョブを書きたければ、更新する必要があるずぅぇえええぇぇええんぶのモジュールの一覧を出すことができまんねん。最初にはよて汚い方法:
perl -e 'use CPAN; CPAN::Shell->r;'
ずぅぇえええぇぇええんぶのモジュールが最新やったら、なあんも出力を取得したくなければ、上記のコマンドの出力を正規表現//modules are up to date// で解析し、マッチせぇへんかった場合だけ出力をメールするように決めることができまんねん。
もし1つの処理でよりプログラマ的な方法でそれをしたければ、以下のようにするっちうことができまんねん:
# ディスク上からCPAN上により新しいバージョンがあるずぅぇえええぇぇええんぶのモジュールの一覧
for $mod (CPAN::Shell->expand("Module","/./")){
next unless $mod->inst_file;
next if $mod->uptodate;
printf "Module %s is installed as %s, could be updated to %s from CPAN\n",
$mod->id, $mod->inst_version, $mod->cpan_version;
}
もし毎日ごっつうもようけの出力をだすのやったら、3つのモジュールだけにしたいかもしれしまへん。1行目を以下のように書くことができまんねん。
for $mod (CPAN::Shell->expand("Module","/Apache|LWP|CGI/")){
もしくは上記のいくつかの方法を組み合わせることができまんねん:
# 新しいmod_perlモジュールだけを見る
$mod = CPAN::Shell->expand("Module","mod_perl");
exit if $mod->uptodate;
# 新しいmod_perl が届いたら、ずぅぇえええぇぇええんぶの更新のすすめを教えて
CPAN::Shell->r;
現在はキャッシュ・マネージャはbuildディレクトリ($CPAN::Config->{build_dir})だけを追跡しまっせ。そこにあるずぅぇえええぇぇええんぶのディレクトリの大きさが$CPAN::Config->{build_cache} (MB単位)よりも大きくなりよったら、.build_dirの下にあるディレクトリを削除するんは、単純なFIFO機構や。このキャッシュの内容は後から手動で行おうとする再インストールのために使われるかもしれしまへんが、CPANそのもんからはまるっきし信用されしまへん。こらユーザがこれらのディレクトリを異なるアーキテクチャでのモジュールの構築のために使うことができるためや。
元のディストリビューション・ファイルが保管される他のディレクトリ($CPAN::Config->{keep_source_where})がおます。このディレクトリはキャッシュ・マネージャによってカバーされてへんねん。ほんでユーザによって制御されなければならしまへん。もしbuild_dirとkeep_source_whereに同じディレクトリを選択したら、同じFIFO機能でソースも削除されはります。
Bundleはなあんも関数やメソッドを定義せん単なる名前空間Bundle::のperlモジュールや。それには通常ドキュメントだけが入っとりまんねん。
そらperlモジュールのようにpackage宣言と$VERSION変数から始まるんや。その後、podセクションは他のpodと同じように見えまんねん。唯一の違いは、(逐語的に)以下のように始まる1つの特別なpodセクション(one special pod section )があることや:
=head1 CONTENTS
このpodセクションの各行は以下のフォーマットに従おりますわ。
モジュール名 [バージョン文字列] [- オプションのテキスト]
唯一必須の部分は最初のフィールド、モジュール名や(例あげたろか、たとえばやなあ Foo::Bar ゴチャゴチャゆうとる場合やあれへん、要は ディストリビューション・ファイル名ではおまへん)。行の残りはオプションや。コメント部分は、manページ・ヘッダと同じようにダッシュで区切られはります。
bundleのディストリビューションは他のディストリビューションと同じ書き方に従おりますわ。
BundlesはCPANパッケージの中では特別に扱われはります。もし"install Bundle::Tkkit"とすると(そないな風なBundleがあるもんとします)CPANはpodのCONTENTSセクションでのずぅぇえええぇぇええんぶのモジュールをインストールしまっせ。 @INCパスのどこぞに同じ構造のBundleファイルを置くことによりローカルに独自のBundleをインストールするっちうことができまんねん。シェル・インタフェースで利用できるautobundle()コマンドはスナップショット・バンドル・ファイルに現在インストールされとるずぅぇえええぇぇええんぶのモジュールがぶちこむことによりそれをおけぇへんまんねん。
もしローカルなCPANミラーを持ってて、"file:" URLやべてのファイルにアクセスするっちうことができるのやったら、このモジュールを実行するにはperl5.003よりも新しいperlであることやけが必要や。そうやないとNet::FTPがつよ推奨されはります。LWPはUNIXではおまへんシステムせやなかったら最も近いCPANサイトがftp:ではおまへんURLに関連付けられていれば、必要かもしれしまへん。
もしNet::FTPもLWPも持っていなければ、頼みの綱として外部ftpコマンドまたは外部lynxコマンドのための機能が実装されとりまんねん。
このモジュールはCPAN上のずぅぇえええぇぇええんぶのモジュールが以下のようであるもんと考えまんねん
perl -MExtUtils::MakeMaker -le \
'print MM->parse_version(shift)' filename
もしパッケージの作者で、$VERSIONが解析されるか心配やったら上記の方法を試してみておくんなはれ。
このモジュールのデバッグはちーとばかし複雑や。ちうのもCPAN上の索引を作成するプログラム、CPANのミラー化処理、パッケージ化、構成設定、 いっぺん性、ほんでCPAN.pmの中のバグの干渉を受けるさかいや。
対話モードでのデバッグでは、"o debug"を試すことができまんねん。こらコードのさまざまな部分をデバッグするためのオプションの一覧を出しまっせ。"o debug"が組み込の完了サポートを持っとることも知っておくべきや。
データ・デバッグでは、make/test/installと同じ引数をとり、オブジェクトのData::Dumperダンプを出力するdumpコマンドがおます。
CPAN.pmはネットワークなしでもあんじょう動きまんねん。まるっきしネットワークにつながっておらへんマシンを管理してんねんさかいあれば、file: URLで動かすことを考えなければならしまへん。もちろん先にどこぞでモジュールを集めてくる必要がおます。ほんでネットワークにつながったマシーンに必要とするずぅぇえええぇぇええんぶを置くためにCPAN.pmかもしれしまへん。ほんでフロッピーの$CPAN::Config->{keep_source_where} ($CPAN::Config->{build_dir}でななく) にコピーしまっせ。このフロッピーは個人的なCPANの一種や。ネットワークにつながっておらへんマシンでのCPAN.pmは、このフロッピーであんじょう動きまんねん。以下のCD-ROMサポートについてパラグラフもご覧おくんなはれ。
CPANモジュールがインストールされると、サイト全体で利用される構成設定ファイルがCPAN/Config.pmとして作成されはります。ここで定義されとるデフォルト値は他の構成設定ファイル:CPAN/MyConfig.pmで上書きするっちうことができまんねん。そないなければ、このファイルを$HOME/.cpan/CPAN/MyConfig.pmに格納するっちうことができまんねん。ちうのも$HOME/.cpanはuse()またはrequire()ステートメントの前にCPANモジュールの検索パスに追加されるさかいや。
現在、ハッシュ・リファレンス $CPAN::Configでは以下のキーが定義されとります:
build_cache モジュールをビルドするためのディレクトリのためのキャシュの大きさ
build_dir モジュールをビルドするためにローカルにアクセスできるディレクトリ
index_expire 何日後にインデックス・ファイルを再取得するか
cache_metadata メタデーエタをキャシュするためにシリアライザを使う
cpan_home このパッケージのために予約されとるローカルなディレクトリ
dontload_hash 無名ハッシュ: そのキーのモジュールはCPAN::has_inst()ルーチンで
ロードされへん
gzip 外部プログラムgzipの場所
inactivity_timeout 動かいなくなってから何秒後に対話的なMakefile.PLをブレークするか
0にするとブレークせん。
inhibit_startup_message
もしtrueやったら、起動文句を表示せん
keep_source_where ソースが保管されるディレクトリ(もしそうしたら)
make 外部のmakeプログラムの場所
make_arg 'make'に常に渡される引数
make_install_arg 'make install'に渡される引数
makepl_arg 'perl Makefile.PL'に渡される引数
pager 外部プログラムmore(または他のページャー)の場所
prerequisites_policy
モジュールの前提条件を満たしておらへんときにどうするか
('follow' なあんもせんとホッタラかしといても従うか, 'ask' 尋ねる, もしくは 'ignore' シカト)
scan_cache キャッシュの検索を制御('atstart'(開始時点) または 'never')
tar 外部プログラムtarの場所
unzip 外部プログラムunzipの場所
urllist ねきのCPANサイト(または同等の場所)への配列リファレンス
wait_list 試してみるwaitサーバの配列リファレンス(CPAN::WAITをご覧おくんなはれ)
ftp_proxy, } 構成設定のための3つの通常の変数
http_proxy, } プロキシー要求。 CPAN::Config 変数として、ほんで設定可能な
no_proxy } 環境変数として
o conf コマンドで定義されとるコマンド・セットでCPANシェルのなかで対話的にこれらのオプションを設定せやなかったら問い合わせることができまんねん。
urllist パラメータはRFC 1738に従ったURLや。もしURLが準じていなければどないなるかようわからしまへん。せやけどダンさんファイルURLで問題があるんやったら、正しいフォーマットを試してみておくんなはれ:
file://localhost/whatever/ftp/pub/CPAN/
もしくは
file:///home/ftp/pub/CPAN/
構成テーブルでのurllistパラメータにはダウンロードのために使われるURLのリストが入るんや。もしリストにfile URLがあると、CPANは常にまずそこからファイルを取得したろおもてまんねん。こらインデックス・ファイルには使うことがでけしまへん。そのためCPANの内容が入ったCD-ROMを持っとる人に推奨されることは、ローカルの、古くなっとるかもしれへんCD-ROMをurllistのケツにfile URLとしていれることや。例あげたろか、たとえばやなあ以下のように:
o conf urllist push file://localhost/CDROM/CPAN
CPAN.pmはそうしたら、urllistのアタマにあるCPANサイトからインデックス・ファイルを取り出しまっせ。後でそら、最も新しいバージョンがローカルにあるかをチェックしまっせ。
もう1つのurllistの特徴はケツにファイルを正常に取得できたサイトがなあんもせんとホッタラかしといてもヒイキされ、次の要求での最初のサイトとして試されることや。そのため実行時に新しいサイトを追加すると、前にヒイキされたサイトが他のときに最初に試されるかもしれしまへん。次の転送であるサイトを使いたくなければ、urllistから明示的に削除せなならへんことになるんや
CPAN.pmでは強いセキュリティ・レイヤはおまへん。CPAN.pmは外からの、マスクされておらへん、署名されておらへんコードをあんさんのマシンにインストールするんを手助けしまっせ。ネットから攻めて来よったチェックサムとディストリビューション・ファイルそのもんとを比較しまっせ。だれかがディストリビューション・ファイルをうまいこといじったら、CHECKSUMSファイルもいじってしもたかもしれしまへん。将来の開発では強い認証を目指しまっせ。
パッケージCPANの中のほとんどの関数はデフォルトでエクスポートされはります。こら基本的な使用法がcpanシェルまたはワンライナーを指向してんねんさかいや。
わての好きなモジュールを新しくインストールされたperlに移植するっちうことは、プライベートなbundel定義ファイルを保持するっちうことによりどエライ簡単や。便利ええbundl定義ファイルの青写真を取得するために、コマンドautobundleをCPANシェル・コマンド行で使うことができまんねん。このコマンドは現在実行されとるperlインタープリターのためにインストールされとるずぅぇえええぇぇええんぶのモジュールのためのbundle定義ファイルをかき出しまっせ。このコマンドはいっぺんだけ実行し、ほんで後はそのファイルを手動でプライベートな名前 Bundle/my_bundle.pmで保持するっちうことが推奨されはります。上手なbundleファイルでは、単に以下のようにするだけや
cpan> install Bundle::my_bundle
後はちーとばかし質問に答えたら、コーヒーをのみに出かけまひょ。
bundle定義ファイルを保持するっちうことは、2つのことを追跡するっちうことになるんや:依存性と相互関係や。CPAN.pmはときどき依存性を計りかねることがおます。ちうのもずぅぇえええぇぇええんぶのモジュールがずぅぇえええぇぇええんぶのMakeMaker属性を正しく定義するゆうわけやのうて、そのためbunlde定義ファイルができるだけはよ前提条件を指定せなならへんためや。
一方、ようけのディストリビューションはときどき対話的な設定を必要とするんはちーとばかし難儀や。プライベートなbundleファイルでやろうとしてんことは、設定されることを必要とするパッケージを先に、静かいなもんを後にファイルに持ち、そのため2、3分たったら出かけて、CPAN.pmをほっておくようにしたろおもておりますわ。
perlとさまざまなファイヤウォール構成との間の相互作用についての以下のパラグラフを寄稿してもろたGraham Barrに感謝しまっせ。ファイヤ・ウォ?ルについてのさらなる情報はncftpプログラムについてくるドキュメントにあたることをお勧めしまっせ。簡単なperl設定ではファイヤ・ウォールを通せへんのやったら、それがあんさんのファイヤ・ウォールでも機能するようにncftpを設定するようになることになるでっしゃろ。
ファイヤウォールは以下の3つの基本型に分類するっちうことができまんねん。
perlで、これらのタイプのファイヤウォールの外側にあるサーバーにアクセスするためには(ftpのためであっても)LWPを使う必要がおます。
perlで、これらのタイプのファイヤウォールの外側にあるサーバーにアクセスするためにはNet::FTPを使う必要がおます。
例あげたろか、たとえばやなあlynxでワイが思うには以下のようなコマンドでファイヤ・ウォールを通ることができるのやったら、
/usr/local/bin/lynx -pscott:tiger
CPAN.pmを以下のようなコマンドで設定しまっせ。
o conf lynx "/usr/local/bin/lynx -pscott:tiger"
それだけや。ncftpやftpでも同じように、以下のようにします
o conf ncftp "/usr/bin/ncftp -f /home/scott/ncftplogin.cfg"
あんさんの道のりはちゃうかもしれしまへん...
ホンマに古くさいバージョンがインストールされとる可能性が高いや。モジュールを前にインストールしたのとは別の@INCパスにあるディレクトリにインストールした場合におこるんや。こらホンマはCPAN.pmの問題やのうて、手動でそのモジュールをインストールしたかて同じ問題になるかもしれしまへん。この動きを阻止する簡単な方法は、make install呼出しに引数 UNINST=1を追加するっちうことで、ようけの人が設定するっちうことによりこの引数を永続的追加しまっせ。
o conf make_install_arg UNINST=1
だれが@INCパスのどこにインストールしたんか、ほんでだれがどこの@INCを使うておるんかについての完全な予測をしてん人がおるからや。良うチューニングされた環境ではUNIST=1がダメージを与えてまうかもしれしまへん。
古くさいperlでautobundleコマンドを実行し、結果のbundleファイルを適切に名前を変え(例あげたろか、たとえばやなあ Bundle/mybundle.pm)、新しいperlをConfigure にprefixオプションをつけてインストールしまっせ。例あげたろか、たとえばやなあ
./Configure -Dprefix=/usr/local/perl-5.6.78.9
最初の段階で作成したbundleファイルを以下のようにしてインストールします
cpan> install Bundle::mybundle
これで終わりや
以下のように設定するっちうことができまんねん
o conf make_arg "| tee -ai /root/.cpan/logs/make.out" o conf make_install_arg "| tee -ai /root/.cpan/logs/make_install.out"
こうするとSTDOUTは後から見ることができるようにファイルに出力されはる
いっちゃんありそうな方法は以下のようにするっちうことや
o conf makepl_arg "LIB=~/myperl/lib \
INSTALLMAN1DIR=~/myperl/man/man1 \
INSTALLMAN3DIR=~/myperl/man/man3"
install Sybase::Sybperl
この設定をo conf 設定、o conf
commitとするっちうことで永続化させることができまんねん。
~/myperl/man をMANPATH環境変数に追加するようがあるかもしれしまへん。また同様に/myperl/libを見るようにperlプログラムにするために、例あげたろか、たとえばやなあ以下の行を追加する
use lib "$ENV{HOME}/myperl/lib";
もしくはPERL5LIB環境変数を設定する必要があるかもしれしまへん。
もう1つ気をつけなければならへんことは、rootやないとUNINSTパラメータを設定してはならへんことや。
Sybase::Sybperlをご覧おくんなはれ
こら開始時点では、CPANはずぅぇえええぇぇええんぶのモジュールの依存関係を知らんためや。インストールする追加のアイテムについて判断するためには、作成されたMakefileで見つかったデータを使うだけや。いわられへんかった失われたピースは処理を中断しまっせ。せやけどダンさんそらBundleがいくつかの依存する要素の後にその前提条件となるもんをインストールするかもしれへんし、そのため2度目の挑戦ではずぅぇえええぇぇええんぶが解決するっちうことがおます。CPAN.pmは先に依存関係のツリーを知らんちうこと、ほんでトポロジカルに正しい順序でインストールするために物事の順序を並べ直すことはできなちうことに用心しておくんなはれ。ずぅぇえええぇぇええんぶのモジュールが前提条件となるもんをMakeMakerへのPREREQ_PM属性を正しく宣言していれば、正しく解決できまんねん。Bundleについてはもしシッパイし、なんどもインストールする必要があれば、Bundle定義を手で並べ直すことをお勧めしまっせ。CPANでの一般的な依存関係についてのメタデータの条件は改善する予定やけど、そやけどアンタ、それにはまだ時間がかかるんや。
CPAN::Siteモジュールをご覧おくんなはれ
わてに言えることは/etc/inputrcはTerm::ReadLineに何らかの関係がおます。ワイが思うには/etc/inputrcを削除するかまたはINPUTRC環境変数を設定するだけや(readlineドキュメントをご覧おくんなはれ)
ウチらはPAUSE部分だけでなく、CPANのみなをカバーすべきとちゃうでっしゃろか?この議論では、CPANとPAUSEは既に同じになったんやか?せやけどダンさんそうやおまへん。PAUSEはauthors/, modules/ ほんで scripts/や。CPANはPAUSEに加えて、clpa/, doc/, misc/, ports/,ほんで src/や。
将来の開発では、さらに他の部分の統合を目指しまっせ。
もしMakefile.PLがライブラリ、特別な入力のためのプロンプトやらなんやらの特別なカスタマイズを必要としてんと、CPANがそのディストリビューションを構築でけへんことがあるかもしれしまへん。その場合には、シェルからPerlモジュール・パッケージを構築する伝統的な方法を試さなならしまへん。
Andreas Koenig <andreas.koenig@anima.de>
perl(1), CPAN::Nox(3)
ご意見、ご質問はウチの掲示板で受け付けとりまんねん。
またメールは河馬屋(Nifty)にお願いしまっせ。