FreeBSDのportsでHTTP/3への道 (挫折1回目)

FreeBSDでNginxのportsがHTTP/3に対応した。2022年2月上旬時点ではwww/nginx, nginx-full, nginx-liteは非対応でwww/nginx-develのみ対応。

nginx-develのビルドオプション
www/nginx-devel をmake configするとビルドオプションが表示されるのでHTTPV3と、HTTPV3_BORINGまたはHTTPV3_QTLSのどちらかをチェックしてNginxをビルドする。HTTP/3ではQUICのTLSに対応したOpenSSLが必要なのでBoringSSL(Google系)またはopenssl-quictlsが必要。(どちらもOpenSSLからのフォーク)

つまり、事前に security/boringssl または security/openssl-quictls のportsをビルド&インストールすることになる。
で、試そうとしたところ、boringsslにしろquictlsにしろFreeBSDのPKG/PortsでインストールしたOpenSSLやLibreSSLとコンフリクトするという嫌がらせ状態、というかBoringSSLやquicsslへの対応がほぼ進んでいない。なにしろこれらは「このQUIC対応のOpenSSLフォークはアルファ段階にあります。本番環境では使用しないでください。」というくらい。

既にPackage/PortsでOpenSSLやLibreSSLを入れている環境ではそれらを除いて代わりにboringsslやopenssl-quictlsをインストールすることになる。 portsのオリジン替えが必要になるので先に/etc/make.confを変更。

/etc/make.conf (変更)
#変更前
DEFAULT_VERSIONS+=ssl=openssl  #現在OpenSSL使用の場合

#変更後
DEFAULT_VERSIONS+=ssl=boringssl
#または
DEFAULT_VERSIONS+=ssl=openssl-quictls

OpenSSLまたはLibreSSLからBoringSSLまたはOpenSSL-QuicTLSほのportsのオリジン替えが必要になる。

portupgrade -o 新ports 旧ports で指定。

#OpenSSLからopenssl-quictlsに変更する例
# portupgrade -o security/openssl-quictls security/openssl

OpenSSLに依存していたportsを含めてビルドし直す。
# portmaster -r openssl #旧ports名を指定
または
# portupgrade -fr openssl-quictls #新ports名を指定

Nginxがインストール済みの環境であれば www/nginx-develでmake configしてHTTP/3対応オプションを指定して保存していればNginxもQUIC TLS対応でビルドし直される。

問題は、2022年2月時点のFreeBSDのportsは security/openssl や security/libressl に依存するように作られているのでsecurity/boringsslやsecurity/quictlsをインストールするとそれらがビルドエラーになることがある。特にboringsslへの対応は全くというほど期待できない。OpenSSL/LibreSSLに依存するportsがビルドエラーで死屍累々という感じ。
openssl-quictlsはMySQL Clientのビルド失敗に繋がった。MySQL-Serverがビルド失敗になるだけならMySQL Serverを別ホストに置けば対処できそうだがMySQL Clientのビルドができないとなるとお手上げ。それ以外はビルド自体は多くが成功したのであと一歩感を感じながら敗北。
つまり、「がとらぼ」の人の、Nginx + MySQL + PHP + WordPressでHTTP/3を実現するという目論見は打ち砕かれた。
portsを使わないまたは自力でportsを作ってBoringSSLまたはopenssl-quictlsを別の場所に作成してHTTP/3対応のNginxを自力でビルドするというのはその後の更新が大変なのと複数鯖でやるのがキツいのでportsで対応を待つしかないのかな?
素のOpenSSLやLibreSSLが素直にQUIC TLS対応になってくれたら一番カンタンなんだろうけど。
2022年中に進展があると嬉しいかも。

現状のportsでもこうすればカンタンにできるよという方法があったら教えてください。