CPANPLUS 0.79 が Crypt::OpenPGP を要求する。
んで,Crypt::OpenPGP のインストールが結構困りものなので自分用メモ。
まっさらな Perl-5.8.x な環境があったとして,まずは cpan で(気休めとして)Math::BigInt, Math::BigRat, bignum の最新版をいれておきます。
そして Math::BigInt::GMP をインストール*1。なぜこれをいれとくかというと,次でインストールする Crypt::DSA, Crypt::RSA とかで bigint を利用してるんですがそのテストに時間がかかるからです。
次に Crypt::RIPEMD160 をインストールします。なんでわざわざ独立してこいつをいれるかというと,x86_64 などの 64 bit アーキテクチャだと正しいハッシュを生成してくれないから(⇒【Bug #19138 for Crypt-RIPEMD160: unsigned 32-bit int type is wrong on Linux amd64.】)。
x86_64 の場合,rmd160.h に
--- rmd160.h.orig 1998-04-07 18:32:36.000000000 +0900 +++ rmd160.h 2007-05-02 10:03:33.000000000 +0900 @@ -24,7 +24,8 @@ /* adapt these, if necessary, for your operating system and compiler */ -typedef unsigned char byte; /* unsigned 8-bit integer */ -typedef unsigned short word; /* unsigned 16-bit integer */ -typedef unsigned long dword; /* unsigned 32-bit integer */ +#include <stdint.h> +typedef uint8_t byte; /* unsigned 8-bit integer */ +typedef uint16_t word; /* unsigned 16-bit integer */ +typedef uint32_t dword; /* unsigned 32-bit integer */
こんな感じのパッチをあてればよいです。32 bit アーキテクチャでも無害なパッチですが stdint.h というヘッダに依存してるんで環境によってはうまくないかも(今日日の gcc を採用してる OS なら問題ないでしょう)。
で,次に Crypt::DSA, Crypt::RSA を入れる。いきなり Crypt::OpenPGP を入れてもいいんですが,こいつらのビルド(テスト)に時間がかかるし,ここまでのステップでミスがあるとここでヘクるんで,念のために先にいれているだけです。注意点は,Prerequisites は optional になっているものは全て yes でインストールすること。じゃないとテストがこけることがあるかも。
最後に Crypt::OpenPGP をインストール。先ほどと同様に Prerequisites は全て yes にすることに注意。ここでうまくインストール&テストがうまくいけば,最大難関はクリアしたことになります。
その後(単体の)CPANPLUS をインストール。CPANPLUS と CPANPLUS::Shell::Default が相互依存になっててなんだか怒られますが,うまくいかない場合でも CPANPLUS をもう一度インストールすれば大丈夫です。
で,cpan shell を抜けて,cpanp を立ち上げ,「s reconfigure」で設定をしなおし,Bundle::CPANPLUS::Dependencies をインストールして満足。
CPANPLUS もう流行ってなさげなのが悲しいところ。cpan で充分といえば充分ですしねぇ。