CentOS4系と5系のcurlの違い


[2009/12/02追記]このエントリには続きがあります。

CentOS4.8とCentOS5.4ではcurlのバージョンが当然違うんだけど、そこでハマったのでメモ。

phpからcurlを使う処理で、CentOS4系で動いていたシステムが5系に移動したとたんに、curlの通信が劇的に重くなった。ひとつの通信で2秒ぐらいかかる。今までは0.1秒前後。最初は仮想化でXenserverを使っているのが原因過渡も思ったが、XenServer以外のサーバでもおかしい。で、curlのバージョンが原因ではないかと思った。

  • CentOS4系(4.8)
    • curl-7.12.1-11.el4
    • curl-devel-7.12.1-11.el4
  • CentOS5系(5.4)
    • curl-7.15.5-2.1.el5_3.4
    • curl-devel-7.15.5-2.1.el5_3.4

マイナーバージョンが上がっている。この違いによるものがなんなのかまでまだ調べていないけど緊急で対応しないといけなかったのでそのメモ。
結論から言うと、バージョンを4系のものにダウングレードすることで直った。

まずCenOS4.8のレポジトリからsrpmをもってきてインストール

# cd /usr/src/redhat/SRPMS/ 
# wget ftp://ftp.riken.jp/Linux/centos/4.8/os/SRPMS/curl-7.12.1-11.1.el4_7.1.src.rpm
# rpm -ivh curl-7.12.1-11.1.el4_7.1.src.rpm

SPECファイルからビルドの前に

--with-ca-bundle=%{_datadir}/ssl/certs/ca-bundle.crt

--with-ca-bundle=/etc/pki/tls/certs/ca-bundle.crt

に変更しておく。CentOS4と5ではca-bundle.crtのパスが違うのでこれをしないとSSL通信でエラーがでる。
変更後、

# cd /usr/src/redhat/SPECS
# rpmbuild -bb --clean curl.spec

rpmができているのでオプションをつけてダウングレードインストール。 今回は32bit環境だが、64bit環境の場合はx86_64ディレクトリにできている。

# cd /usr/src/redhat/RPMS/i386
# rpm -Uvh --oldpackage curl-7.12.1-11.1.1.i386.rpm curl-devel-7.12.1-11.1.1.i386.rpm

これでとりあえず通信速度が元に戻った。
最新バージョンをソースからインストールした方がよかったかもしれないが、ソースからコンパイルするとphpも再コンパイルがいるし、webを一度落とさないといけない。その猶予がなかったのでとりあえずの応急処置かな。

ただ、このままだと何かのタイミングでyum updateがかかったときにまたバージョンが戻されるので除外の処理を追加。
/etc/yum.confに以下を追加。

exclude=curl*

これで

# yum check-update

をして対象一覧にcurlcurl-develがでなければOK。

なぜバージョンが上がって遅くなるのかの原因は別途要検証だ。

[2009/11/25追記]

  • specファイルのconfigureオプション修正手順追加