zlibを最新版(1.2.8)にしたら、ClamXavが動かなくなった
今ごろzlibを最新版にアップデートしているってのもセキュリティ的に×なんですが
先週の土曜日は診療内科の診察日だったのですが、その際、精神安定剤(メイラックス)の量を半分に減らすことになりました。この一週間はメイラックスの離脱(禁断)症状が辛くて辛くて。まず、いつもの就寝時刻になってもなかなか眠れません。寝付いても2〜3時間で目が覚め、そのまま朝まで眠れない状態が続きます。身体の疲れが取れずダルくてしかたがなく、時々理由もなく動悸が激しくなり不安で堪らなくなります。
昨夜も睡眠時間は3〜4時間程度。日中も眠くて堪らないのに、何故か眠れないのです。
気を紛らわす為もあって、自宅サーバ(Mac mini)のシステムを出来る範囲で最新化したりしていました。何せPowerPCのMacOS X 10.4.11 (Tiger) ですから、PowerPCを葬ったアップルからセキュリティアップデートが配布される事は絶対にあり得ません。自力で最新化して行くしかないわけで・・・
その作業で、zlib が Ver.1.2.3 と古かったので最新版のVer.1.2.8に入れ替えてみました。最新版と言っても Ver.1.2.8のリリースは 2013.4.28 ですから、いかにサボっていたかが分かるってもんですね。
ビルドは以下のように行い、インストール後もシステムやアプリの動作に特別問題は無いように思えました。
$ tar xvzf zlib-1.2.8.tar.gz
$ cd zlib-1.2.8
$ ./configure --prefix=/usr
$ make
$ make check
$ sudo make install
$ ls -l /usr/lib/libz*
lrwxr-xr-x 1 root wheel 12 Feb 16 2013 /usr/lib/libz.1.1.3.dylib -> libz.1.dylib
-rwxr-xr-x 1 root wheel 72588 Sep 27 2009 /usr/lib/libz.1.2.3.dylib
-rwxr-xr-x 1 root wheel 97996 Jan 31 10:30 /usr/lib/libz.1.2.8.dylib
lrwxr-xr-x 1 root wheel 16 Jan 31 10:30 /usr/lib/libz.1.dylib -> libz.1.2.8.dylib
-rw-r--r-- 1 root wheel 108776 Jan 31 10:30 /usr/lib/libz.a
lrwxr-xr-x 1 root wheel 16 Jan 31 10:30 /usr/lib/libz.dylib -> libz.1.2.8.dylib
|
ところが、ClamXavというオープンソースのアンチウィルスソフトが正常に動かなくなっている事に気付きました。原因を探って行ったら、ClamXavの中にあるデーモン、コマンド群が zlib Ver.1.2.8 では正常に動作しないのだと言う事が分かりました。ClamXavの中のコマンド、デーモン群が本体でClamAVというオープンソースで作られています。
また、ClamXavの最新版はVer.2.7.3ですが、MacOS X 10.4 (Tiger)で動作するのは Ver.2.2.1です。したがって ClamXavを最新版に入れ替えるわけにも行きません。
ClamXavのデーモン、コマンド群は"/usr/local/clamXav" 配下にインストールされていました。これらのデーモンやコマンド群とライブラリの依存関係を見ると、例えばデーモン "clamd"では、
$ cd /usr/local/clamXav/sbin
$ otool -L ./clamd
./clamd:
/usr/local/clamXav/lib//libclamav.6.dylib (compatibility version 8.0.0, current version 8.10.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.3.10)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
/usr/lib/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.2)
/usr/lib/libiconv.2.dylib (compatibility version 5.0.0, current version 5.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
|
このような具合になっていました。そこで、これらのデーモン、コマンド群だけは zlib Ver.1.2.3を使うようにしてみました。先ず zlib Ver.1.2.3 を ClamXav に取り込みます。
$ su
# cd /usr/local/clamXav/lib
# cp -p /usr/lib/libz.1.2.3.dylib .
# ln -s ./libz.1.2.3.dylib libz.1.dylib
|
次に、zlibをリンクしているデーモン、コマンドが"/usr/lib/libz.1.dylib" ではなく、取り込んだ"/usr/local/clamXav/lib/libz.1.dylib" の方を使用するよう、パスを書き変えてしまいます。例えばデーモン "clamd"では、
# cd /usr/local/clamXav/sbin
# install_name_tool -change "/usr/lib/libz.1.dylib" "/usr/local/clamXav/lib/libz.1.dylib" ./clamd
# otool -L ./clamd
./clamd:
/usr/local/clamXav/lib//libclamav.6.dylib (compatibility version 8.0.0, current version 8.10.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.3.10)
/usr/local/clamXav/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
/usr/lib/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.2)
/usr/lib/libiconv.2.dylib (compatibility version 5.0.0, current version 5.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
|
zlibのパスが書き換えられている事が分かります。"clamd"デーモン以外にも、以下の"/usr/local/clamXav/bin" 配下にある以下のコマンドも同じ方法でzlibのパスを書き換えました。
- clambc
- clamconf
- clamdscan
- clamscan
- freshclam
- sigtool
これで ClamXavは以前と同じように正常動作するようになりました。
因に、本体であるClamAV自体を最新版にしてみようと、ソースをダウンロードしてビルドを試みたところ、configureで gccのバグの有無を検査しており、このチェックに引っ掛かってしまいました。gccを最新版にしなければビルドできないわけで、これは大変な作業になりそう。と言う事で、今回はここまでにしておきました。
|