Fedora 7 (FC7) のLWPがSegmentation Fault、そんなとき

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'

実行させると、コンピュータがけなげに頑張っているのを見て癒されます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>