OpenSSL 3.2 と HTTP/3 対応の cURL をビルドする
実験のために OpenSSL 3.2 と HTTP/3 対応の cURL をビルドしました。2023年12月にリリースされた OpenSSL 3.2 から QUIC クライアント API がサポートされました。
いろいろな TLS ライブラリごとに cURL をビルドする必要があるので、$HOME/http3
ディレクトリをベースにしました。OS は Chromebook の Linux 環境下の Debian 12 Bookworm です。ビルドツールに関して後述の nghttp2 のビルドのために次のパッケージを導入しました。
sudo apt-get install g++ clang make binutils autoconf automake \
autotools-dev libtool pkg-config
まず OpenSSL v3.2 をバックエンドにしてビルドしました。OpenSSL v3.3 も試しましたがうまくいきませんでした。
ホームディレクトリを $HOME/http3/openssl3.2
とします。まず OpenSSL 3.2 をビルドします。
git clone --depth 1 -b openssl-3.2.0 https://github.com/openssl/openssl
cd openssl
./config --prefix=$PWD/.. --libdir=$PWD/../lib
make
make install
cd ../
./config enable-tls1_3
とビルドオプションを指定することもできますが、最新の OpenSSL では不要です。
$HOME/http3/openssl3.2
のもとに include
と lib
ディレクトリが生成されていることを確認します
ls
ついでに pkg-config の検索対象である *.pc ファイルが lib/pkgconfig
で生成されていることも確認します。このパスを PKG_CONFIG_PATH
変数を設定することで pkg-config
の検索対象として指定することができます。
ls lib/pkgconfig
次に nghttp3 v1.1.0 をビルドします。
git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3
cd nghttp3
git submodule update --init
autoreconf -fi
./configure --prefix=$PWD/.. --enable-lib-only
make
make install
cd ../
最後に curl をビルドします
git clone https://github.com/curl/curl
cd curl
autoreconf -fi
PKG_CONFIG_PATH=$PWD/../lib/pkgconfig \
./configure \
--prefix=$PWD/.. \
--with-openssl \
--with-openssl-quic \
--with-nghttp3
HTTP/3 が有効になっていることを目視で確認します
ビルドしてインストールします
make
make install
cd ../
cURL のバージョンを調べてみましょう
bin/curl --version
HTTP/2 もサポートしたいのであれば nghttp2 をビルドします。
git clone -b v1.61.0 https://github.com/nghttp2/nghttp2
cd nghttp2
autoreconf -fi
PKG_CONFIG_PATH=$PWD/../lib/pkgconfig \
./configure --prefix=$PWD/..
make
make install
cd ../
cURL をビルドし直します。
cd curl
PKG_CONFIG_PATH=$PWD/../lib/pkgconfig \
./configure \
--prefix=$PWD/.. \
--with-openssl \
--with-openssl-quic \
--with-nghttp3
make
make install
cd ../
Discussion