perlのLWPを大量に利用するプログラムを開発して、常時動かしていました。
最初は問題なかったのですが突然止まります。ログを見ると、httpsにアクセスしたときに止まるようです。
むむむ。
前はうまくいっていたような気がして、なんとなく再起動してみます。
まったく同じことをしてみると今度は動きました。再びデーモンモードにセットして、実行開始。でもまた落ちます。
むむむ。
さらに調べてみると、一度 Segmentation Faultで止まった後は、wget、w3mでもhttpsにアクセスできません。
さらにさらに調べてみると、恐ろしいことにsshdも死んでいます。
うへぇ。
gdbで見てみると、opensslでお亡くなりになる模様。
調べたら、LWPが依存しているCrypt::SSLeayと、opensslの特定のバージョンとの相性問題があるようです。
さて、どうしたものでしょう。一瞬debianに移行しようかと思う気持ちをぐっとこらえ、状況を整理します。
現在利用しているCrypt::SSLeayは、yumでインストールしたものです。まず、CPANからコンパイルしてインストールすることにします。
念のため、opensslもFC7標準の0.9.8bから現時点の最新版である0.9.8hに変更します。ただし、FC7の多くのパッケージが標準の0.9.8bに依存しているので、0.9.8bから0.9.8hへの入れ替えは新たな恐怖の始まりです。
そこで、opensslは0.9.8hは/usr/local/opensslに入れて、つまりFC7標準の0.9.8bは維持しておいて、Crypt::SSLeayがリンクするopensslを/usr/local/openssl (0.9.8h) にすることにします。
手順は、
wget http://www.openssl.org/source/openssl-0.9.8g.tar.gz
tar zxvf openssl-0.9.8g.tar.gz
cd openssl-0.9.8g
./config --prefix=/usr/local --openssldir=/usr/local/openssl
make
make test
make install
cd ..
rm -rf openssl-0.9.8g
perl -MCPAN -e shell
install Crypt::SSLeay
途中でopensslはどこ?と聞かれます。そこは/usr/local/opensslを。
さらに念のため、LWPもFC7のものから、CPANの最新版にしましょう。
perl -MCPAN -e 'install Bundle::LWP'
さて、このコマンドを実行するといろいろ質問されます。途中、 GETやPOSTのaliasはいる?と聞かれます。デフォルトがnになっているので、ここだけyにしましょう。あとは全部デフォルト(Enterキー)で。
というかですね。ワタクシEnterキーを連打していましたら、nでインストールしてしまいました。
再インストールしようと したのですが、install Bundle::LWPしても、最新版(up-to-date)だよ、というメッセージが出るばかりで何も起こりません。めげずに調べたり試したりしてみると、↓でいい模様です。
perl -MCPAN -e 'make Bundle::LWP'
ついでに、もしFC7標準のCPANモジュール全部を再コンパイルするなら、
perl -MCPAN -e 'recompile'
実行させると、コンピュータがけなげに頑張っているのを見て癒されます。