h2load可以压测http3,其编译详见https://github.com/nghttp2/nghttp2/tree/quic。官方的编译方法应该在ubuntu上很ok,在centos中编译的有点不顺畅,下面将遇到的一些坑及其解决办法详细描述一下。
1、安装gcc 8等依赖
编译ngtcp2需要gcc >= 8.0,简单的安装方法如下:
yum install centos-release-scl
yum install devtoolset-8-gcc devtoolset-8-gcc-c++
scl enable devtoolset-8 -- bash
编译的依赖非常多,如果yum install不了或者版本不对,找对应的rpm包安装即可。
2、编译ngtcp2, nghttp3 and my patched OpenSSL
参照https://github.com/ngtcp2/ngtcp2#build-from-git
这里需要注意的是编译ngtcp2后要install,执行一下语句:
make install-strip
install后,ngtcp2的库安装到/usr/local/lib/pkgconfig
3、编译h2load
官方的编译步骤如下:
$ git submodule update --init
$ autoreconf -i
$ automake
$ autoconf
$ ./configure
$ make
在centos上,这个步骤可能最后并不会build出h2load。详细的build步骤如下:
$ git submodule update --init
$ autoreconf -i
$ automake
$ autoconf
$ ./configure --enable-app PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PWD/../openssl/build/lib/pkgconfig:$PWD/../nghttp3/build/lib/pkgconfig LDFLAGS="-Wl,-rpath,$PWD/../openssl/build/lib"
$ make
configure加了–enable-app会检查编译依赖是否都ok,不ok会提示错误。
PKG_CONFIG_PATH用来指定ngtcp2、nghttp3编出来的依赖库路径,centos上必须要指定。
如果c-ares版本太低,可以通过rpm包升级:
wget https://rpmfind.net/linux/centos/7.8.2003/os/x86_64/Packages/c-ares-devel-1.10.0-3.el7.x86_64.rpm
rpm -ivh c-ares-devel-1.10.0-3.el7.x86_64.rpm