OpenSSLのインストール
サーバー構築再開
デスクトップ環境が無事復活したので、サーバーの構築を再開。 OpenSSLのインストールをやり直しです。
すでに、ソースファイルはOpenSSL公式サイトから入手済み。 バージョンは、OpenSSL 1.1.0c です。 ファイルは、ユーザーディレクトリ(/home/wiz/)の openssl-1.1.0c に展開してあります。
前回は、Makefileでインストーラを作成したあとのテストがうまくいかなかった。 ここからもう一度再挑戦。 デスクトップ環境をインストールし直したから、念のためもう一度Makefileを作ります。

端末を開き、root化。 そのあと、OpenSSLのソースを展開したディレクトリに移動してます。
$ su パスワード:(パスワード入力) # cd /home/wiz/openssl-1.1.0c/
OpenSSLをビルド
はじめに、"./config"で実行環境に合わせたMakefileを作成。 このコマンドは、カレントディレクトリ(現在端末で開いているディレクトリ)にある「config」ファイルを実行するもの。

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

両者の違いは1行目を見てすぐに分かった。 「config」はシェルスクリプト、「Configure」はPerlスクリプト。 Unix/Linuxではシェルスクリプトが使えるが、WindowsではPerlスクリプトで実行しなければならない。 そのため、2種類のConfigurationが用意されている、ということでしょう。
「Install」というテキストファイルにも、それぞれのOSに合わせたインストール方法が記載されており、Unixでは「./config」を実行、 Windowsでは「Configure」をPerlスクリプトとして走らせるよう指示されていた。

ということで、configを実行。
# ./config ...(省略)... Configured for linux-x86_64.
Linux(x86_64)に合わせたMakefileが作成された。

続いて、makeコマンドを実行して、インストーラを作成。 makeコマンドは、現在のディレクトリにある「Makefile」を読み込んで実行する。 意図的にMakefileを指定するには「-f」オプションを使用。 今回は、ファイル名が「Makefile」なのでオプション不要。
# make
make終了。 かかった時間は5分くらいかな。 ここまでは、前回もうまくいった。 問題は次のテスト。

# 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で検索。

# yum list | grep perl
結果からするとVersion 5.16がちゃんと入っているように見えるけど…。
検索してたら「perl-core」をインストールしろ、という指摘を発見。 perl-coreなんて、さっきは見つからなかった。 yumで情報検索。

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

# yum install perl-core
perl-coreパッケージのインストール完了。 これで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 ...(省略)... Result: PASS
orz... 通った…。
いや、普通makeはrootでするでしょ…。 という先入観にはまった例か。

兎にも角にも、テスト成功したので、インストールします。 こっちは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の処理を行う。