wiz.code

OpenSSLのインストール

サーバー構築再開

デスクトップ環境が無事復活したので、サーバーの構築を再開。 OpenSSLのインストールをやり直しです。

すでに、ソースファイルはOpenSSL公式サイトから入手済み。 バージョンは、OpenSSL 1.1.0c です。 ファイルは、ユーザーディレクトリ(/home/wiz/)の openssl-1.1.0c に展開してあります。

前回は、Makefileでインストーラを作成したあとのテストがうまくいかなかった。 ここからもう一度再挑戦。 デスクトップ環境をインストールし直したから、念のためもう一度Makefileを作ります。

端末 - OpenSSLのディレクトリ

端末を開き、root化。 そのあと、OpenSSLのソースを展開したディレクトリに移動してます。

$ su
パスワード:(パスワード入力)
# cd /home/wiz/openssl-1.1.0c/

OpenSSLをビルド

はじめに、"./config"で実行環境に合わせたMakefileを作成。 このコマンドは、カレントディレクトリ(現在端末で開いているディレクトリ)にある「config」ファイルを実行するもの。

2つのConfigファイル

しかし、よく見ると「Configure」というファイルもある。 この2つの違いは何か。

Configファイルの中身

両者の違いは1行目を見てすぐに分かった。 「config」はシェルスクリプト、「Configure」はPerlスクリプト。 Unix/Linuxではシェルスクリプトが使えるが、WindowsではPerlスクリプトで実行しなければならない。 そのため、2種類のConfigurationが用意されている、ということでしょう。

「Install」というテキストファイルにも、それぞれのOSに合わせたインストール方法が記載されており、Unixでは「./config」を実行、 Windowsでは「Configure」をPerlスクリプトとして走らせるよう指示されていた。

/.config実行結果

ということで、configを実行。

# ./config
...(省略)...
Configured for linux-x86_64.

Linux(x86_64)に合わせたMakefileが作成された。

makeコマンド実行結果

続いて、makeコマンドを実行して、インストーラを作成。 makeコマンドは、現在のディレクトリにある「Makefile」を読み込んで実行する。 意図的にMakefileを指定するには「-f」オプションを使用。 今回は、ファイル名が「Makefile」なのでオプション不要。

# make

make終了。 かかった時間は5分くらいかな。 ここまでは、前回もうまくいった。 問題は次のテスト。

make test 実行結果
# make test
...(省略)...
Result: FAIL
Failed 89/89 test programs. 0/0 subtests failed.
make[1]: *** [_tests] Error 2
make[1]: Leaving directory '/home...
make: *** [tests] エラー 2

ここで2つのエラーが出ている。 さらによく見ると「Failed 89/89」と全部失敗。 そもそも「test programs. 0/0」と、テストプログラムが動いていない様子。

それで、wiz.は古いバージョンのOpenSSLと競合しているのではないか、と疑ったわけです。 結果は悲惨なことになりましたが…。

試験に落ちた理由が、そもそも試験を受けていないから、みたいな状況なので、このままインストールを続行するわけにもいかない。 じゃぁ、どうするか。

「調べなさい」

make testに失敗する理由

make testの結果を遡ってみると「Parse error: No plan found in TAP output」という出力が連続している。 さらにさかのぼると「BEGIN failed--compilation aborted as ../test/testlib/OpenSSL/Test.pm」という出力

拡張子「.pm」はPerlスクリプトのファイルだよね。 Perlスクリプトのコンパイルに失敗しているのか。

Perlは、Linuxには標準でインストールされているんじゃないかと思うけど、違うのかな。 yumで検索。

perlパッケージを検索
# yum list | grep perl

結果からするとVersion 5.16がちゃんと入っているように見えるけど…。

検索してたら「perl-core」をインストールしろ、という指摘を発見。 perl-coreなんて、さっきは見つからなかった。 yumで情報検索。

make-coreパッケージの情報
# yum info perl-core

あれ? インストールされてないっぽい。 インストールされていれば、リポジトリに"installed"って出るもんね…。 じゃぁ、インストールしてみようか。

perl-coreパッケージインストール完了
# yum install perl-core

perl-coreパッケージのインストール完了。 これでmake testの結果が変わるかな?

make test 実行結果
# make test
...(省略)...
Result: FAIL
Failed 1/89 test programs. 1/477 subtests failed.
make[1]: *** [_tests] Error 255
make[1]: Leaving directory '/home...
make: *** [tests] エラー 2

お、今度はちゃんとテストが走ってる。 んが、Failedが1/89。 ひとつだけ失敗したっぽい。

../test/recipes/40-test_rehash.t ........... 1/5
# Failed test 'Testing that we aren't running as a privileged user, such as root'
# at ../test/recipes/40-test_rehash.t line 49.
# Looks like you failed 1 test of 5.
../test/recipes/40-test_rehash.t ........... Dubious, test retuened 1 (wstat 256, 0x100)

rehashのテストで失敗してるね。 情報を探すと、同じところでテストに失敗している報告はあるけど、どれも解決方法まで至っていないような…。

そもそも "Testing that we aren't running as a privileged user, such as root" って、どういう意味? またまた英検4級が翻訳しますよ。

「特権のある(previleged)ユーザー、rootのような(such as)では実行されない(aren't running)テスト?」 む? rootじゃ実行されないテストってこと? じゃぁ、ルートじゃなくて通常ユーザーで…。

通常ユーザーでmake test実行
$ make test
...(省略)...
Result: PASS

orz... 通った…。

いや、普通makeはrootでするでしょ…。 という先入観にはまった例か。

make install 実行

兎にも角にも、テスト成功したので、インストールします。 こっちはrootで。

# make install

インストール完了。

終わってしまえばなんてことない手順なんだけど、想像以上に苦労しました。 でもこれで、XMailのビルドもできるようになっているはずです。

XMailをビルドする前に、テストのつもりでopensslコマンドを実行したら「"libssl.so.1.1"が見つからない」と言われた。 ファイルを検索したら「/usr/local/lib64/」にあったけど、ここじゃ見つけられないのか…。 ライブラリが検索されるディレクトリにシンポリックリンクを張ればいいのだろうけど、どこだろう…。

解決方法を探していたら、共有ライブラリの検索パスについて、CentOSでは /usr/lib は含まれるが /usr/local/lib は含まれない、とあった。 これは、32bit版の場合だろうけど、64bit版でも同じでしょうね。 確かに /usr/lib64 を見るとたくさんのライブラリがある。 ということは、 /usr/lib64 にリンクを置けばいいのではないか。

ライブラリにシンポリックリンクを張る
# ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64

同じ理由で、libcrypto.so.1.1 も見つからないと言われたので、リンクを張る。

# ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64

おっし。 これでOpenSSLのコマンドが通るようになった。

# openssl
OpenSSL>

若干遠回りになってしまったけど、XMailのインストールに戻ろう。

この章のまとめ

  • OpenSSLのテストで動かすPerlスクリプトは「perl-core」パッケージがないと失敗する。
  • OpenSSLのテストをrootで実行すると、rehashで失敗する。
  • CentOS7では /usr/local/lib や /usr/local/lib64 にあるライブラリは標準で読み込まれないので /usr/lib や /usr/lib64 にシンボリックリンクを張る必要がある。
  • lnコマンド:ファイルやディレクトリのリンクを作る。-sオプションでシンボリックリンクとなる。
  • opensslコマンド:OpenSSLの処理を行う。