SSLは現在は必ず必要なモジュールでありながらPerlのSSLはインストールの時点ですでに困難な状態のまま、もう過去の言語になっているので更新も止まっていることが多いのです。とりあえずインストールできた、という状態になるまでのメモを残しておきます。
最初に打ってみるコマンド
cpan >install Net::SSLeay
cpanm Net::SSLeay
とりあえずインストール。失敗するのですがエラーを読むために実行すること。
エラーログを読む
SSLeay.oのエラーが出る。
opensslのパスの指定がおかしい。
build.logを読め、と出てきたから読む。
tail /Users/<home>/.cpanm/work/1528971847.25299/build.log
環境によって内容は違う場合があるが12個のエラー。
opensslの場所を調べる
# which openssl
/usr/local/Cellar/openssl/1.0.2o_1/bin/openssl
Macに最初から入っているopensslだと、
/usr/local/opt/openssl
にopensslが入っていて、brewから最新のopensslをインストールしても使うのが古いほうになってしまうのでまずは最新のを使うように変更する。
# echo ~/.bash_profile #内にパスを指定する。
echoの出力結果
export PATH=/usr/local/Cellar/openssl/1.0.2o_1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/Cellar/openssl/1.0.2o_1/lib:$LD_LIBRARY_PATH
export CPATH=/usr/local/Cellar/openssl/1.0.2o_1/include:$CPATH
export LDFLAGS=-L/usr/local/Cellar/openssl/1.0.2o_1/lib
export CPPFLAGS=-I/usr/local/Cellar/openssl/1.0.2o_1/include
export PKG_CONFIG_PATH=/usr/local/Cellar/openssl/1.0.2o_1/pkgconfig:$PKG_CONFIG_PATH
Macのbrewで入れたのならパスは/usr/local/Cellarにある。あるかどうかは自身で確認してからパスの指定をすること。バージョンが上がると微妙に変わってることがあります。
# source ~/.bash_profile
パスを書いたら.bash_profileを再読み込み。
opensslのパスをexport
export LIBRARY_PATH=/usr/local/opt/openssl/lib
export CPATH=/usr/local/opt/openssl/include
正直.bash_profileに入れてるから意味があったかはわからない。
cpanからインストールの場合opensslのパスを指定
# o conf makepl_arg “INSTALLDIRS=site LIBS=’-L/usr/local/opt/openssl/lib -lcrypto -lssl’ INC=-I/usr/local/opt/openssl/include”
# o conf commit
Net-SSLeayをソースからコンパイルしてみる
~/.cpan/build 以下にcpan、cpanmでダウンロードされた.tar.gzファイルがあるので、それを展開してmake installを試してみます。
# sudo perl Makefile.PL –incpath /usr/local/Cellar/openssl/1.0.2o_1/include/openssl –libpath /usr/local/Cellar/openssl/1.0.2o_1/lib
# make
# make test
# sudo make install
Makefile.PLはそのまま実行すると古いほうの/usr/local/opt/opensslを読み込むのでパスを指定してやります。
それでも、sudo perl Makefile.PL をした際に~/.bash_profileに書いたパスを読み込まず古い方のopensslを読み込む場合、Macを再起動してみると~/.bash_profileを読み込む場合があります。
opensslのソースコードからREADMEを読む
配布先はgithubなので
# git clone https://github.com/openssl/openssl
ネット検索でやり方を探してもそれが間違っていることが多々あります。とりあえず配布元が作ったREADMEを読むのがいいことがあります。
NOTES.PERL
NOTES.UNIX
このあたりMacはUnixが元なのでNOTES.UNIXでほぼ問題ないです。
NOTES.PERLの内容
# cpanm Test::More
# cpanm Text::Template
この二つをインストールって書いてあります。とりあえずインストールしておきます。
NOTES.UNIXの内容は./Configureのやり方が載ってました、brewからインストール済みなので、ソースコードからインストールを試みる場合役に立ちそうです。
Net-SSLeayのソースコードからREADMEを読む
~/.cpan/build/Net-SSLeay-1.85 内に README.OSX が入ってる。
それを参考に通常インストールと、opensslでエラーがでた場合のインストール方法が載っていて、どちらもソースコードからのインストールを想定しています。
plenvで使用中のバージョンを確認する
plenvは作業ディレクトリごとにバージョンが指定できます。
~/.cpan/build/Net-SSLeay-1.85内でsystemデフォルトのPerlを使用していても実行した.plファイルがあるディレクトリに移動したらPerl 5.8.6に変わっていてインストール失敗、になっている場合がありました。
# perl -v
でディレクトリごとのバージョンを確認しておく。
# ~/.cpan/build/Net-SSLeay-1.85内でインストールがうまくいった場合、そっちを使う。
# plenv local system
まとめ
Perlのような古い言語だとこうすれば必ず動く、みたいな現代版ものとは違い、環境ごとに吐くエラーも違ったり自力でなんとかする、ネット検索に出てくるやり方はヒントにはなってもそのままうまく行くほうが稀だったりします。
この記事も完全に順番通りやれば動く、というものではなくヒントとしての利用が望ましいと考えて書きました。