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 で充分といえば充分ですしねぇ。

*1:RH 系ならその前に yumgmp-devel をインストールしておくこと