2016年3月15日火曜日

【備忘録】 nginx + LibreSSLのソースからのコンパイルに挑戦

半日苦戦したのでメモっておきます。

2016年3月15日  Nginx 1.9.12 + LibreSSL 2.3.2 (RedHat EL 6)のお話です。

LibreSSL自体は簡単

./configure
make
sudo make install

です。何も苦労はしません。

Nginx 用に LibreSSLソースのカスタマイズ



まず、libresslのソース Ownerを自分にしておきましょう。 sudo make installによって、root権限になっているかもしれませぬ(それで、nginxのmake時にエラー出たので一応)

chown -R ◯◯ libressl-2.3.2
とか、自分にしておきます。(このケースでは ◯◯ユーザーにしてます)

cd libressl-2.3.2
mkdir -p  .openssl/lib
cd .openssl
ln -s ../include  .
cp ../ssl/.libs/libssl.a  lib/
cp ../crypto/.libs/libcrypto.a lib/

これで、

libressl-2.3.2
┗ .openssl
  ┣ include (シンボリックリンク  ../include)
  ┗ lib
    ┣ libssl.a
    ┗ libcrypto.a

というのがソース・ファイル内に出来たはず。

Nginx のコンパイル1「configure」

nginx-1.9.12
libressl-2.3.2

のソースが、同一ディレクトリ上にある場合、

 --with-http_ssl_module
 --with-openssl=../libressl-2.3.2
 --with-ld-opt="-lrt"

のオプションを付与して、./configure を実行してください。

Nginx のコンパイル2「libresslソースの ssl.hを touchせよ!

これをしないで make すると、
  • make[1]: *** [../libressl-2.3.2/.openssl/include/openssl/ssl.h] Error 2
という素敵なエラーを出して止まります。


に書かれていますが、libresslソースを nginxから再度ビルドするために、これは最終更新日時を更新しないとダメってことかなぁと思います。

touch ../libressl-2.3.2/.openssl/include/openssl/ssl.h

とするだけ。
nginxのconfigureを再度したならば、再度やってください。


Nginx のコンパイル3「objs/Makefile」をチェックせよ!

./configure時に、 --with-ld-opt="-lrt" を入れていたら大丈夫なはずですが、

make時に

  • undefined reference to `clock_gettime'.

という素敵なエラーで止まった場合には、そのオプションがうまく動いていないということになります。

objs/Makefileを次の行に「-lrt」があることを確認してみてください。

-lrt -ldl -lpthread -lcrypt -lpcre ../../libressl/libressl-2.3.\
2/.openssl/lib/libssl.a ../../libressl/libressl-2.3.2/.openssl/lib/libcrypto.a -ldl \
-lz -lgd  \

私はここでなかなかコンパイルが通りませんでした。
というのは、 --with-ld-optを2つ書いちゃっていたという事が発覚して... はーーーーー。


Nginx のコンパイル4「make」してインストールせよ!


make
sudo make install

とまぁエラー無く出来たのでした。
ふー。

なお、再度buildや./configureをした場合には

touch ../libressl-2.3.2/.openssl/include/openssl/ssl.h
make
sudo make install

のように ssl.h を touchをしないといけなかったです。
これは、ssl.h のタイムスタンプが、configure をしたより後の日時になっていないとエラーがでるのかなーと推測。

その後なんとか、Nginx + LibreSSL + PHP 7 は起動できました。
とはいえ、まだまだ Apacheからの移行には準備が必要です。WebDAVやVirtual Hostやリバースプロキシ、SSL設定、その他諸々〜.. 先は長し... Virtual HostやSSL設定、HTTP/2での接続なんかは簡単にできること(SSL自己証明書で)は確認。それまた別の機会に。


2016年3月15日 @kimipooh





0 件のコメント: