Macに最新のabコマンドをインストールする
こんにちは、@s_tsukaです。
今回はMacにデフォルトで入っているabコマンドのバージョンを最新化する方法について解説します。
結論から言うとインストールはできたんですが、希望通りのversionは使えませんでした。実行する前に最後まで読んで頂けたらと思います。
発端
先日Amazon API Gatewayを使ったのですが、ここで生成されたURIに対してabコマンドが叩けない現象に陥りました。
実行するとこのようなエラーが出てしまします。
8106:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.8.3/src/ssl/s23_clnt.c:593:
SSL handshake failed (1).
これはabコマンドがTLS1.2に対応できていないため・・・と思ったんですが、どうやら違うようです。abがSNIに対応していないようです。なので最新のabを使ってもだめぽいのですが・・・
とりあえず、abコマンドを最新化します。
abコマンドを最新化
残念ですがソースからビルドするしかありません。
以下のページを参考にやっていきます。
http://adventuresincoding.com/2012/05/how-to-get-apachebenchab-to-work-on-mac-os-x-lion
まずはここから最新のソースを取得します。
http://apache.mirrors.pair.com/httpd/
2015年8月現在2.4.16が最新のようです。なお、abコマンドのTLS1.2サポートは2.4.4からです。
curl -O http://apache.mirrors.pair.com/httpd/httpd-2.4.16.tar.gz
次にbrewで正規表現ライブラリであるpcreを入れておきます。
brew install pcre
ビルドします。configureでエラーが出た人は次節のトラブルシューティングを参考にしてください。
tar xzvf httpd-2.4.16.tar.gz
cd httpd-2.4.16/
./configure
make
最後にabコマンドだけが欲しいのでそれをコピーして、不要な物は消します。
sudo mv /usr/sbin/ab /usr/sbin/ab2.3
sudo cp support/ab /usr/sbin
cd ..
rm -r httpd-2.4.16
rm httpd-2.4.16.tar.gz
トラブルシューティング
指示通りにやってもMacOS X 10.9以上を利用しているとこのようなエラーが出ます。
configure: error: in `/Users/tsukaby/httpd-2.4.16':
configure: error: C preprocessor "/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain/usr/bin/cc -E" fails sanity check
config.logの中を見てみても同様のエラーが出ています。
/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain/usr/bin/cc: No such file or directory
これは以下のページに書いてる通り、AppleがApache moduleのビルドが出来ないように変えてしまったためです・・。
https://code.google.com/p/modwsgi/issues/detail?id=312
なので指示通りlnで対応します。
cd /Applications/Xcode.app/Contents/Developer/Toolchains/
sudo ln -s XcodeDefault.xctoolchain OSX10.9.xctoolchain
結論
最新のhttpdをビルドしたのになぜかabコマンドはversion 2.3のようでTLS1.2対応していないというオチでした。しかもabを叩きたい先、つまりAmazon API Gatewayの問題はTLS1.2が問題ではなくてSNIが問題っぽくて。時間を無駄にしました・・・
けどまあabコマンドを再インストールしたい人は居ると思いますので、とりあえずこの記事を残しておきます。再インストール自体は普通に上記の手順で行けると思います。