Cygwin 上で h2load をビルドする。

投稿アップデート情報  追記(2016/1/4) 追記2(2/7) 追記3(6/18)

[2016.6.18 時点の話] 実のところ,最新の Cygwin には libev および nghttp2 が含まれているので, h2load の機能を使うために,自分で nghttp2 をビルドする必要は無くなったのだが,それでも, nghttp2 をビルドするなら, Jansson および spdylay は, Cygwin にパッケージがないので,自分でビルドしなければならない。ただ,昨今の情勢からすると, spdylay はいらないかなとも思う。
—————————————————————————————————————————————————
 以下の 2 ファイルが手元にある。ひとつは H2LOAD_dll_package_x86.zip で,もうひとつは H2LOAD_dll_package_x64.zip である。ダウンロードして展開し,コンソール上で,
> h2load -n100000 -c100 -m10 https://localhost
とでもやれば, Windows 上で h2load テストができる。
 テストをやる場合はローカルにテストサーバを用意すべきだ。 -n -c -m の値によっては,対象サーバへのサイバー攻撃になりかねないからね。気を付けましょう。
 前に,「なんかどう見ても使用前の結果のほうが速いように見えません???ナンデェ!」と書いたのだが,今回のテスト結果は興味深い。 HTTPS with HTTP/2HTTPS without HTTP/2 をご覧あれ。 HTTP/2 をサポートしているサーバは,していないサーバよりも同時ストリー ムをうまく処理している。 HTTP/2 の特長の一つが顕著に表れているわけだ。

 さて,わが苦難の道の記録を書くことにしようかい (^_^;).
[注意]:以下の手順を踏むと, H2LOAD_dll_package_x64.zip のファイル群ができる。 H2LOAD_dll_package_x86.zip のファイルを手に入れるには, Windows x86 のパソコン上で setup-x86.exe を使って同じことをやらないといけない。

    [1. Cygwin のインストール]

  1. Cygwin から setup-x86_64.exe (か setup-x86.exe) をダウンロードする。私は, setup-x86_64.exe を落とした。
  2. pubring.asc と setup-x86_64.exe.sig (か setup-x86.exe.sig) を Installing and Updating Cygwin Packages からダウンロードする。
    コマンドプロンプトを管理者として実行し signature を確認する。 signatures の確認て, Linux だとルーチンになっているが,日ごろ書かないだけで, Windows でも結構やっている。 Apache, MariaDB, なんかね。 GnuPG modern は GnuPG binary releases から落とせるから,なんだったらやってみてください。
    > pushd x:\Cygwin
    >gpg --import pubring.asc
    gpg: key 676041BA: public key "Cygwin <cygwin@cygwin.com>" imported
    gpg: Total number processed: 1
    gpg: imported: 1
    >gpg --verify setup-x86_64.exe.sig
    gpg: assuming signed data in 'setup-x86_64.exe'
    gpg: Signature made 10/19/15 04:38:02 東京 (標準時) using DSA key ID 676041BA
    gpg: Good signature from "Cygwin <cygwin@cygwin.com>" [unknown]
    gpg: WARNING: This key is not certified with a trusted signature!
    gpg: There is no indication that the signature belongs to the owner.
    Primary key fingerprint: 1169 DF9F 2273 4F74 3AA5 9232 A9A2 62FF 6760 41BA
    signature の trust 作業を飛ばしているから WARNING が出ているが,見たかったのは Good signaturePrimary key fingerprint だけだから,無問題。
  3. setup-x86_64.exe で Cygwin をインストール。ダウンロード先以外は,「次へ」をクリックしていけばいい。ミラーを選ぶところだけは,近くのを選ぶ。まあ .jp を選ぶってことね。
    wget がいると思うので setup-x86_64.exe をもう 1 回走らせて,インストール。
    setup-x86_64.exe を終了。
  4. デスクトップの Cygwin64 Terminal icon をクリック。 Download と Source ディレクトリを作る。
    $ pwd ☜ 現在位置の確認。
    /home/UserID
    $ mkdir Download☜ ダウンロードファイル用。
    $ mkdir Source☜ ソースファイル用。
  5. 使い勝手のために, apt-cyg をインストールしておく。
    $ pwd
    /home/UserID
    $ cd Download
    $ lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
    $ install apt-cyg /usr/local/bin
    apt-cyg のインストール完了。
    ftp://ftp.jaist.ac.jp をミラーに設定して(-m オプション)からアップデートをかけておく。
    $ apt-cyg -m ftp://ftp.jaist.ac.jp/pub/cygwin/ update
    [2. libev のコンパイルとインストール]

  1. Notes for building on Windows (Mingw/Cygwin) によると, h2load のコンパイルには libev がいるらしい。libev のコンパイルに先立ち,以下のパッケージをインストールした。 Cgwin64 Terminal を起動。
    $ apt-cyg install autoconf automake make libtool gcc-core gcc-g++
  2. libev’s tarball のコンパイル自体はうまくいったんだけどねぇ, exe と DLL ができなかったのだ。 Cygwin に超うといせいか,どうしてもこれが解決できなかった。仕方がないので,ほかに方法がないかネットをうろうろした。 fd00 氏のリポジトリGitHub でめっけたよー。h2load のビルドに必要なのに Cygwin にはないパッケージについて,すべてリポがある。 cygport を使うらしい。ということで,バイナリパッケージができる。自前リポができるジャン。 fd00 様,感謝です m(_”_)m。
      ‘libev’ について ☞ https://github.com/fd00/yacp/tree/master/libev
      ‘Jansson’ について ☞ https://github.com/fd00/yacp/tree/master/jansson
      ‘spdylay’ について ☞ https://github.com/fd00/yacp/tree/master/spdylay
      ‘nghttp2’ について ☞ https://github.com/fd00/yacp/tree/master/nghttp2
    h2load は ‘nghttp2’ パッケージに含まれている。

    1. libev のコンパイル。
      $ apt-cyg install cygport
      $ cd /usr/src
      $ wget http://dist.schmorp.de/libev/libev-4.20.tar.gz
      $ wget https://github.com/fd00/yacp/raw/master/libev/libev-4.20-1bl1.cygport
      $ wget https://github.com/fd00/yacp/raw/master/libev/libev-4.20-1bl1.src.patch
      $ cygport ./libev-4.20-1bl1.cygport all
      どうしてだか, cygport 内の PATCH_URI がうまく働かなかったので,下記のファイルは手動で落とした。
      $ wget https://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/dev-libs/libev/files/libev-pc.patch
      再度,
      $ cygport ./libev-4.20-1bl1.cygport all
    2. libev のインストール。
      libev のバイナリパッケージが生成された。自前リポづくりにトライ。
      $ cd ~Download
      $ wget https://sourceware.org/viewvc/cygwin-apps/genini/genini?revision=1.16&view=co
      $ mv genini@revision=1.16 genini
      $ install genini /usr/local/bin

      $ cd /usr/src/libev-4.20-1bl1.x86_64/dist
      $ cp -R libev /cygdrive/x/Apache24/htdocs/cygwin/x86_64/release
      $ cd /cygdrive/x/Apache24/htdocs/cygwin
      $ genini --recursive x86_64 | bzip2 -c > x86_64/setup.bz2
      ここで出てくる Apache はテストサーバ用のもの。
      setup-x86_64.exe を ‘-X (= --no-verify)’ オプションで起動。どうしても,自前リポに入れなかった。これって ‘Error Installing Cygwin (setup-x86_64.exe & setup-x86) – No setup.ini.sig found.’ と関係あるのかな? Achim Gratz のローカル版も試してみたが,何も変わりなし。

      仕方ないので,マニュアルでインストール。なんてこったい!
      $ install /usr/src/libev-4.20-1bl1.x86_64/inst/usr/bin/cygev-4.dll /usr/bin
      $ mkdir /usr/include/libev
      $ install /usr/src/libev-4.20-1bl1.x86_64/inst/usr/include/libev/ev* /usr/include/libev
         (ev* = ev.h ev++.h event.h)
      $ install /usr/src/libev-4.20-1bl1.x86_64/inst/usr/lib/libev.dll.a /usr/lib
      $ install /usr/src/libev-4.20-1bl1.x86_64/inst/usr/lib/pkgconfig/libev.pc /usr/lib/pkgconfig
      $ install /usr/src/libev-4.20-1bl1.x86_64/inst/usr/share/man/man3/ev.3.gz /usr/share/man/man3

    [3. Jansson のコンパイルとインストール]

  1. Jansson のコンパイル。
    1. $ apt-cyg install cmake
    2. $ cd /usr/src
      $ wget http://www.digip.org/jansson/releases/jansson-2.7.tar.bz2
      $ wget https://github.com/fd00/yacp/raw/master/jansson/jansson-2.7-1bl1.cygport
      $ wget https://github.com/fd00/yacp/raw/master/jansson/jansson-2.7-1bl1.src.patch
    3. $ cygport ./jansson-2.7-1bl1.cygport all
  2. Jansson のインストール。
    1. 上記の体たらくなので,マニュアルでインストール。なんてこったい!
      $ install /usr/src/jansson-2.7-1bl1.x86_64/inst/usr/bin/cygjansson-4.dll /usr/bin
      $ install /usr/src/jansson-2.7-1bl1.x86_64/inst/usr/include/ja* /usr/include
         (ja* = jansson.h jansson_config.h)
      $ install /usr/src/jansson-2.7-1bl1.x86_64/inst/usr/lib/libjansson.dll.a /usr/lib
      $ install /usr/src/jansson-2.7-1bl1.x86_64/inst/usr/lib/pkgconfig/jansson.pc /usr/lib/pkgconfig
    [4. spdylay のコンパイルとインストール]

  1. spdylay のコンパイル。
    1. $ apt-cyg install libxml2-devel CUnit
      なんでだか libevent と libevent-devel が apt-cyg でインストールできなかったので, setup-x86_64.exe から入れた。
      OpenSSL 関連の全パッケージも setup-x86_64.exe で入れた。
    2. $ cd /usr/src
      $ wget https://github.com/tatsuhiro-t/spdylay/releases/download/v1.3.2/spdylay-1.3.2.tar.xz
      $ wget https://github.com/fd00/yacp/raw/master/spdylay/spdylay-1.3.2-1bl1.cygport
      $ wget https://github.com/fd00/yacp/raw/master/spdylay/spdylay-1.3.2-1bl1.src.patch
    3. $ cygport ./spdylay-1.3.2-1bl1.cygport all
      requirements で読んでいたのに, pkg-config を入れ忘れてたもので,エラーが出た。
      ./configure: line xxxxx: syntax error near unexpected token `0.20′
      ./configure: line xxxxx: `PKG_PROG_PKG_CONFIG(0.20)’

           ☞ 参照URL: spdylay/issues/16
      $ apt-cyg install pkg-config
    4. $ cygport ./spdylay-1.3.2-1bl1.cygport all をもっ 1 回。
  2. spdylay のインストール。
    1. 上記の体たらくなので,マニュアルでインストール。なんてこったい!
      $ install /usr/src/spdylay-1.3.2-1bl1.x86_64/inst/usr/bin/*.exe /usr/bin
         (*.exe = shrpx.exe spdycat.exe)
      $ install /usr/src/spdylay-1.3.2-1bl1.x86_64/inst/usr/bin/cygspdylay-7.dll /usr/bin
      $ mkdir /usr/include/spdylay
      $ install /usr/src/spdylay-1.3.2-1bl1.x86_64/inst/usr/include/spdylay/spd* /usr/include/spdylay
         (spd* = spdylay.h spdylayver.h)
      $ install /usr/src/spdylay-1.3.2-1bl1.x86_64/inst/usr/lib/libspdylay.dll.a /usr/lib
      $ install /usr/src/spdylay-1.3.2-1bl1.x86_64/inst/usr/lib/pkgconfig/libspdylay.pc /usr/lib/pkgconfig
    [5. nghttp2 のコンパイルとインストール]

  1. nghttp2 のコンパイル。
    1. $ cd /usr/src
      $ wget https://github.com/tatsuhiro-t/nghttp2/releases/download/v1.4.0/nghttp2-1.4.0.tar.xz
      $ wget https://github.com/fd00/yacp/raw/master/nghttp2/nghttp2-1.4.0-1bl1.cygport
      $ wget https://github.com/fd00/yacp/raw/master/nghttp2/nghttp2-1.4.0-1bl1.src.patch
    2. $ cygport ./nghttp2-1.4.0-1bl1.cygport all
  2. nghttp2 のインストール
    1. 上記の体たらくなので,マニュアルでインストール。なんてこったい!
      $ install /usr/src/nghttp2-1.4.0-1bl1.x86_64/inst/usr/bin/* /usr/bin
         (* =cygnghttp2-14.dll deflatehd.exe h2load.exe inflatehd.exe nghttp.exe nghttpd.exe nghttpx.exe)
      $ mkdir /usr/include/nghttp2
      $ install /usr/src/nghttp2-1.4.0-1bl1.x86_64/inst/usr/include/nghttp2/*.h /usr/include/nghttp2
         (*.h = nghttp2.h nghttp2ver.h)
      $ install /usr/src/nghttp2-1.4.0-1bl1.x86_64/inst/usr/lib/libnghttp2.dll.a /usr/lib
      $ install /usr/src/nghttp2-1.4.0-1bl1.x86_64/inst/usr/lib/pkgconfig/* /usr/lib/pkgconfig

やり残し: setup-x86_64.exe で自前リポを使うこと。

追記(2016/1/4):
 libev-4.22 と nghttp2-1.6.0 が出たので, h2load.exe をリビルドした

「Cygwin 上で h2load をビルドする。」への4件のフィードバック

  1. こんにちは

    これはかなりがんばりましたね。
    準備だけで記事3個くらいかけそうだし、
    大分お腹いっぱいになりそうですな。
    それと数日前にうけたテストと同じgpgコマンドが(w

    https://nghttp2.org/documentation/h2load-howto.html#basic-usage

    これがh2loadコマンドですか、
    これからベンチマークの主流になるかもしれませんね?覚えることがふえそうだけど、apacheとかどうするんだろう。

    1. くりくりさん,こんにちは。

      > 大分お腹いっぱいになりそうですな。
      まさしくその通りで,初めは準備とテストなどは分けて書くつもりだったのですが,だんだん面倒くさくなって, 1 個になってしまいました(汗)。

      > それと数日前にうけたテストと同じgpgコマンドが(w
      考えてみたら, Windows 上での GnuPG の使い方を書いたことがなかったなと思って,この機会に書いておこうかと……まあ,コマンドなんて, LINUX となんら変わりませんが。

      > これからベンチマークの主流になるかもしれませんね?
      > apacheとかどうするんだろう。
      HTTPS が増えて来たらそうなるでしょうね。 ab を https://localhost に対して使おうとしたら, SSL not compiled in; no https support が出ました。ディストリによっては,コンパイル時に SSL が入っている ab もあるんでしょうか?
      Windows 上に限らず,今は自分でビルドしないと h2load を使えないようですが,そのうち, mod_http2 と同じように 各 Web server ソフトのコアに含まれるようになるんじゃないですかね。

  2. おはようございます。

    https://wiki.php.net/todo/php70#timetable
    明日こそはphp7がでるのか?
    期待しています。

    todosの方でも話題にでましたが、
    コアに対応していないプラグインやテーマ以外にもphpのバージョンもありそうなんで簡単にバージョンアップできないでしょうね。
    じっくり検証しませんと

    >mod_http2 と同じように 各 Web
    http/2よりhttpsが広まらない無理でしょうから
    まだまだ先なのかな?

    1. くりくりさん,おはようございます。

      > 明日こそはphp7がでるのか?
      延びちゃったみたいですよ。昨夜つうか今朝っつうか,まりあちゃんを 10.1.9 にし,ついでに, phpMyAdmin を 4.5.2 にしました。そのときに,一応 Apache, ActivePerl, PHP も見たんですが,またもや Anatol のメールで, 12/3 になると書いてありました。相変わらず,何かに手こずっているんでしょうかねぇ?

      > まだまだ先なのかな?
      でしょうか?でも,始まったら雪崩を打つことがあるからなぁ,ネットの世界は。雪崩の兆しに気をつけないといけないですよね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください