OpenBSDでh2oをビルドしhttp/3でコンテンツを配信する

OpenBSDでソースコードからh2oをビルドし、http/3でコンテンツを配信する。

基本的にはh2oのインストレーション ドキュメント https://h2o.examp1e.net/install.html に従う。ビルドにのみ注意点がある。

build

ビルド時に --std=c11 を指定する必要がある

# ビルドツール (cmake) をインストールしておく
sudo pkg_add -i cmake

# h2oのリポジトリを取得 (この記事を書いている時点では @4f31229e6)
git clone https://github.com/h2o/h2o

# ビルドディレクトリに移動
mkdir -p h2o/build && cd h2o/build

# cmake && make の実行
# 今回はインストール先に /usr/local/h2o を指定
# CFLAGSに "-std=c11" を指定する
# (picotls が stdlib.h: aligned_alloc()を用いるため 
#   "-std=c11" を指定しなければビルドに失敗する)
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/h2o  -DCMAKE_C_FLAGS="-std=c11" ..
make -j$(expr $(sysctl -n hw.ncpu) + 1) 
sudo make install

configuration

OpenBSD用のh2oの rc Script は 過去記事 から拝借する

# /etc/rc.d/h2o の配置
sudo wget -O /etc/rc.d/h2o \
https://github.com/0x8100/handytools/raw/main/OpenBSD/etc/rc.d/h2o

# 環境設定(詳細は環境に合わせて)
sudo mkdir -p /var/h2o/run
sudo chown -R www:www /var/h2o/run
sudo mkdir -p /usr/local/h2o/etc

# h2oの設定ファイルを配置する(HTTP/3対応)
# https://h2o.examp1e.net/configure/quick_start.html
sudo bash -c 'cat > /usr/local/h2o/etc/h2o.conf <<EOF
error-log: "| logger -t h2o -i -p local0.err"
access-log: "| logger -t h2o -i -p local0.info"
pid-file: /var/h2o/run/h2o.pid
user: www
listen:
    port: 80
hosts:
    hoge.example.net:
        header.add: "Alt-Svc: h3=\":443\";ma=60,quic=\":443\";ma=60"
        listen: &listen_ssl
            port: 443
            ssl:
                certificate-file: /etc/letsencrypt/live/hoge.example.net/fullchain.pem
                key-file: /etc/letsencrypt/live/hoge.example.net/privkey.pem
        listen:
            <<: *listen_ssl
            type: quic
        paths:
            "/":
                file.dir: "/usr/www/hoge.example.net/"
EOF'

# h2o を起動
sudo rcctl start h2o