Vineのセキュリティー更新をチェックして関連(拝借)しているパッケージで該当するものを漁っていると、opensslもちょくちょくされています。ずっとLS-GL標準装備のopensslを使っているが大丈夫なんだろうか?と心配になりビルドだけでもやってみようとチャレンジしてみました。
/usr/local/develop/src/rpm/[BUILD|SOURCE|SPECS|RPMS|SRPMS]、/usr/local/rpm/var/tmpディレクトリで行います
例のごとくVineよりSRPMファイルを拝借してビルドします。が、その前にopensslのspecファイル中でrenameコマンドが使われているので先にutil-linuxから、更にutil-linuxが依存するe2fsprogsと遡ってビルドしていきます。
しかし、そのままではコンパイルエラーが発生。e2fsprogsやutil-linuxのコンパイルの際にソース中に"BLKGETSIZE64"が定義されているのですが、これが/sys/ioctl⇒bits/ioctl-types.h⇒asm/ioctl.h⇒asm-generic/ioctl.hとたどり、その中の_IORマクロを使って設定されていす。_IORは_IOCマクロの再定義でそこでは_IOC_TYPECHECKマクロを呼び出しています。どうやらこの辺で引っかかるようでが、_IORマクロの引数に型のサイズをsizeofを使って渡していますが、サイズを渡すのではなく直接型を渡してやらないといけないようです。多分、kernelのversionやアーキテクチャによってマクロの内容が異なっているのでしょう。
e2fsprogsのSRPMに含まれるext2resize-cvs-20040419.patchより下記の場所を修正:
+#ifndef BLKGETSIZE64
+#define BLKGETSIZE64 _IOR(0x12,114,sizeof(unsigned long long))
+#define BLKGETSIZE64 _IOR(0x12,114,unsigned long long)
+#endif
util-linuxのSRPMに含まれるutil-linux-2.11y-skipraid2.patchより下記の場所を修正:
+#include <inttypes.h>
+#ifndef BLKGETSIZE64
+#include <sys/ioctl.h>
+#define BLKGETSIZE64 _IOR(0x12,114,sizeof(uint64_t))
+#define BLKGETSIZE64 _IOR(0x12,114,uint64_t)
+#endif
取りあえず、これでe2fsprogsはビルド成功、util-linuxは上記はパスしたが別の場所で失敗。mount系のコマンドでnfs関連のところで失敗するようですが、renameコマンドのビルドは成功していたので、それだけ頂いてOKとしました(手抜きとも言う・・・)。
Vineよりopenssl-0.9.7l-0vl2.41.src.rpmをダウンし中身をバラします。specファイルはSPECSに、それ以外は全てSOURCEに放り込みます。specファイル中でアーキテクチャを指定するようですがx86とppcしが対応していないVineなのでarmは設定されていません。そこで下記のようにアーキテクチャを追加:
%ifarch armv5tejl
sslarch=linux-elf-arm
sslflags=no-asm
%endif
他にもspecファイルをしこたま書き換えてビルド開始
$ rpmbuild -ba openssl-vl.spec
試行錯誤の上ビルドは出来ましたが、まともに動くんでしょうか?w インストールする勇気なし・・・
安易に入れ替えるとハマりそうなので、また機会を見て試してみよう・・・(弱気