From 0df332e7b8bdb0c4a4b252fa1b406cb5039fd26a Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Fri, 17 Sep 2021 23:53:35 +0900 Subject: [PATCH] Update doc --- README.rst | 94 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 83 insertions(+), 11 deletions(-) diff --git a/README.rst b/README.rst index 36e17060..86ca5a6a 100644 --- a/README.rst +++ b/README.rst @@ -163,6 +163,7 @@ required: * libbpf-dev >= 0.4.0 Use ``--with-libbpf`` configure option to build eBPF program. +libelf-dev is needed to build libbpf. For Ubuntu 20.04, you can build libbpf from `the source code `_. nghttpx @@ -331,6 +332,88 @@ The generated documents will not be installed with ``make install``. The online documentation is available at https://nghttp2.org/documentation/ +Build HTTP/3 enabled h2load and nghttpx +--------------------------------------- + +To build h2load and nghttpx with HTTP/3 feature enabled, run the +configure script with ``--enable-http3``. + +For nghttpx to reload configurations and swapping its executable while +gracefully terminating old worker processes, eBPF is required. Run +the configure script with ``--enable-http3 --with-libbpf`` to build +eBPF program. The Connection ID encryption key must be set with +``--frontend-quic-connection-id-encryption-key`` and must not change +in order to keep the existing connections alive during reload. + +The detailed steps to build HTTP/3 enabled h2load and nghttpx follow. + +Build custom OpenSSL: + +.. code-block:: text + + $ git clone --depth 1 -b OpenSSL_1_1_1l+quic https://github.com/quictls/openssl + $ cd openssl + $ ./config --prefix=$PWD/build --openssldir=/etc/ssl + $ make -j$(nproc) + $ make install_sw + $ cd .. + +Build nghttp3: + +.. code-block:: text + + $ git clone --depth 1 https://github.com/ngtcp2/nghttp3 + $ cd nghttp3 + $ autoreconf -i + $ ./configure --prefix=$PWD/build --enable-lib-only + $ make -j$(nproc) + $ make install + $ cd .. + +Build ngtcp2: + +.. code-block:: text + + $ git clone --depth 1 https://github.com/ngtcp2/ngtcp2 + $ cd ngtcp2 + $ autoreconf -i + $ ./configure --prefix=$PWD/build --enable-lib-only \ + PKG_CONFIG_PATH="$PWD/../openssl/build/lib/pkgconfig" + $ make -j$(nproc) + $ make install + $ cd .. + +If your Linux distribution does not have libbpf-dev >= 0.4.0, build +from source: + +.. code-block:: text + + $ git clone --depth 1 -b v0.4.0 https://github.com/libbpf/libbpf + $ cd libbpf + $ PREFIX=$PWD/build make -C src install + $ cd .. + +Build nghttp2: + +.. code-block:: text + + $ git clone https://github.com/nghttp2/nghttp2 + $ cd nghttp2 + $ git submodule update --init + $ autoreconf -i + $ ./configure --with-mruby --with-neverbleed --enable-http3 --with-libbpf \ + --disable-python-bindings \ + CC=clang-12 CXX=clang++-12 \ + PKG_CONFIG_PATH="$PWD/../openssl/build/lib/pkgconfig:$PWD/../nghttp3/build/lib/pkgconfig:$PWD/../ngtcp2/build/lib/pkgconfig:$PWD/../libbpf/build/lib64/pkgconfig" \ + LDFLAGS="$LDFLAGS -Wl,-rpath,$PWD/../openssl/build/lib -Wl,-rpath,$PWD/../libbpf/build/lib64" + $ make -j$(nproc) + +The eBPF program ``reuseport_kern.o`` should be found under bpf +directory. Pass ``--quic-bpf-program-file=bpf/reuseport_kern.o`` +option to nghttpx to load it. See also `HTTP/3 section in nghttpx - +HTTP/2 proxy - HOW-TO +`_. + Unit tests ---------- @@ -907,17 +990,6 @@ like so: $ h2load --npn-list h3 https://127.0.0.1:4433 -HTTP/3 ------- - -To build h2load and nghttpx with HTTP/3 feature enabled, run the -configure script with ``--enable-http3``. - -For nghttpx to reload configurations and swapping its executable while -gracefully terminating old worker processes, eBPF is required. Run -the configure script with ``--enable-http3 --with-libbpf`` to build -eBPF program. - HPACK tools -----------