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://stackoverflow.com/questions/18076157/why-does-configure-say-no-c-compiler-found-when-gcc-is-installed

まずはここから最新のソースを取得します。

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コマンドを再インストールしたい人は居ると思いますので、とりあえずこの記事を残しておきます。再インストール自体は普通に上記の手順で行けると思います。