Fedora のSRPM からOpenSSL をリビルドしてRHL9 に

(2005/01/25 15:00 追記)
※ 以下で説明している作業手順は全て無保証です。重要なコンポーネントを半ば強引に入れ替えていますので、ここに挙げた以外にも、何か致命的な障害を起こす可能性が十分にあります。あくまでひとつの参考事例として考えていただけたら幸いです。

以前OpenSSL のソースファイルからRPM ファイルを作る で作ったものは、最後のところでシンボリックリンクを作って対処したつもりにして放置していたのですが、やはりおかしいようなので入れなおしてみます。
現時点で最新の"openssl-0.9.7e.tar.gz" を拾ってきていつものごとくSPEC ファイルを抜いてビルド...失敗。エラーメッセージで検索して「Re: [openssl.org #970] build error 0.9.7e」 とかのとおりにやってみてもダメ。RHL9 用OpenSSL の最終リリースからSPEC ファイルを抜いてきてごにょごにょやってみてもダメ。今回結構八方塞がりです。
仕方がないのでオフィシャルのtarball からのインストールは諦め。最後の悪あがきでFedora Core 3 用のソースRPM でビルドしてみたところ、依存関係でややてこずりましたが結果的に入れ替えが出来たっぽいのでその手順をメモ。バージョンナンバー的には古いですが、SPEC ファイル内でセキュリティFIX などのパッチはあててますので、これはこれでよいかと。

"openssl-0.9.7a-40.src.rpm" をダウンロード。今回SPEC ファイルも全く触らなかったのでそのままリビルド。


# rpmbuild --rebuild --target i686 openssl-0.9.7a-40.src.rpm

はい、ここでまたしてもエラー。


as: unrecognized option `--noexecstack'

Re: RedHat 9」 には"binutils" を新しいのにしてみよう、とあるので素直に従う。

今まで入っていたのは以下のバージョン。


# rpm -qa |grep binutils
binutils-2.13.90.0.18-9

Fedora Core 3 用では"binutils-2.15.92.0.2-5.i386.rpm" が最新だったので特に工夫もなくそのままアップデート。今にして思えばこれもSRPM から作るべきだったかも。


# rpm -Uvh binutils-2.15.92.0.2-5.i386.rpm

ビルドがちょっと進むようになったけど、やっぱり止まる。


include/openssl/kssl.h:72:18: krb5.h: No such file or directory

どうやら、Kerberos 関連のなにかが引っかかってるみたい。

この時点で入っていたもの。


# rpm -qa |grep krb5
pam_krb5-1.60-1
krb5-server-1.2.7-14
krb5-devel-1.2.7-14
krb5-libs-1.2.7-14
krb5-workstation-1.2.7-14

"krb5-1.3.6-2.src.rpm" をもらってきてビルド。ビルド自体は滞りなく終了。


# rpmbuild --rebuild --target i686 krb5-1.3.6-2.src.rpm

しかし、アップデートの際に


e2fsprogs-devel is needed

依存関係のエラーが出ます。RHL9 標準のではバージョンが低いみたいなので、これもアップデートしてしまいます。芋づる式にやることが増えていますがもう行けるところまで行くだけです。


# rpm -qa |grep e2fsprogs
e2fsprogs-1.32-6
e2fsprogs-devel-1.32-6

"e2fsprogs-1.35-11.2.src.rpm" をもらってきてリビルド。


# rpmbuild --rebuild --target i686 e2fsprogs-1.35-11.2.src.rpm

アップデート。これでようやく、折り返しです。


# rpm -Uvh /usr/src/redhat/RPMS/i686/e2fsprogs-1.35-11.2.i686.rpm /usr/src/redhat/RPMS/i686/e2fsprogs-devel-1.35-11.2.i686.rpm

krb5 のインストール。依存関係のエラーは"--nodeps" 付けて強行。ちなみに、RHL9 の最終リリースである"openssl-0.9.7a-2" に戻してたりしてます。


# rpm -Uvh krb5-libs-1.3.6-2.i686.rpm krb5-devel-1.3.6-2.i686.rpm krb5-server-1.3.6-2.i686.rpm krb5-workstation-1.3.6-2.i686.rpm
: Failed dependencies:
libcom_err.so.3 is needed by (installed) openssh-server-3.8.1p1-2
libcom_err.so.3 is needed by (installed) samba-3.0.6-1
libcom_err.so.3 is needed by (installed) cyrus-sasl-2.1.10-4
libcom_err.so.3 is needed by (installed) wget-1.8.2-9
libcom_err.so.3 is needed by (installed) curl-7.9.8-5
libcom_err.so.3 is needed by (installed) openssh-3.8.1p1-2
libcom_err.so.3 is needed by (installed) cyrus-sasl-devel-2.1.10-4
libcom_err.so.3 is needed by (installed) php-4.3.10-1
libcom_err.so.3 is needed by (installed) pam_krb5-1.60-1
libcom_err.so.3 is needed by (installed) postgresql-server-7.3.4-3.rhl9
libcom_err.so.3 is needed by (installed) openssh-clients-3.8.1p1-2
libcom_err.so.3 is needed by (installed) openssl-0.9.7a-2
# rpm -Uvh --nodeps krb5-libs-1.3.6-2.i686.rpm krb5-devel-1.3.6-2.i686.rpm krb5-server-1.3.6-2.i686.rpm krb5-workstation-1.3.6-2.i686.rpm

いよいよ、今回の目的、OpenSSL です。"--target i686" つけると本体しか作られないので、2回実行。


# rpmbuild --rebuild --target i686 openssl-0.9.7a-40.src.rpm
# rpmbuild --rebuild openssl-0.9.7a-40.src.rpm

インストール。うまくいくときはやけにあっさり。


# rpm -Uvh /usr/src/redhat/RPMS/i686/openssl-0.9.7a-40.i686.rpm /usr/src/redhat/RPMS/i386/openssl-devel-0.9.7a-40.i386.rpm /usr/src/redhat/RPMS/i386/openssl-perl-0.9.7a-40.i386.rpm

RPM パッケージをそのまま、ってのは出来ないですが、SPEC ファイルの更新履歴とか見てると丹念にパッチをあてたりして育てている様子が伺えたりするし、SRPM からリビルドすればなんとか使えるようですね。今回はたまたま、かもしれませんが。
というわけでかなりの長い間悩んでいたことがひとつ解決。たぶん。


(2005/01/25 15:00 追記)
ちょっと状況が落ち着いたので、まとめます。OpenSSL のビルドを通すためにKerberos を入れ替えてしまったことで色々と問題が発生しました。具体的には、Kerberos のコンポーネントである"libcom_err.so.3" を参照している以下のプログラムが動かなくなりました。バージョンが上げたことでファイルの配置が換わってしまったことがトラブルの原因と思われます。他にもどこかに問題があるかもしれません。
以下のパッケージを全てソースからリビルドしなおし、徐々に状況は解決しつつあります。

  • openssh-server-3.8.1p1-2
  • openssh-clients-3.8.1p1-2
  • openssh-3.8.1p1-2
  • samba-3.0.6-1
  • php-4.3.10-1
  • curl-7.9.8-5
  • cyrus-sasl-2.1.10-4
  • cyrus-sasl-devel-2.1.10-4
  • wget-1.8.2-9
  • pam_krb5-1.60-1
  • postgresql-server-7.3.4-3.rhl9

このうち、OpenSSH とSamba、wget については新しいバージョンのソース等からリビルドしました。PHP はどうするか考え中。そのほかについては同じバージョンのSRPM を貰ってきてリビルド、インストールしました。詳細については順次別エントリで書きます。
今回の事例は重要コンポーネントを入れ替えると何が起きるのか、良い勉強になりました。
(2005/01/25 17:44 追記)
OpenSSL を入れ替えたわけなので、当然、PHP やApache もリビルドする必要があります。一応、一通り修復作業完了(たぶん)。