CentOS に h2o をインストールしよう。そういうとき、定石では vi /etc/yum.repos.d/bintray-tatsushid-h2o-rpm.repo
するところだけど、執筆時点(2022年3月現在)ではこの手は使えない。リポジトリに指定する bintray が昨年5月の時点でサービス終了してしまっているのだ。
色々と検索してみたものの代替手段が見つからなかった。そこで、備忘録ついでに記事として残しておく。
環境
- OS:CentOS7.9(AWS EC2 AMI:ami-0ddea5e0f69c193a4)
- h2o:v2.2.6
必要なツールをインストールする。bison と ruby は mruby を使用する場合に必要。
sudo yum install wget gcc gcc-c++ bison ruby
手順
ソースコードの入手
cd /usr/local/src
sudo wget https://github.com/h2o/h2o/archive/refs/tags/v2.2.6.tar.gz
sudo tar -zxvf ./v2.2.6.tar.gz
cd ./h2o-2.2.6
以下を CMakeLists.txt の最下行に追記する。そうしなければ cmake 時に gnu99 を指定しなさいというエラーが返る。
sudo vi CMakeLists.txt
SET(CMAKE_C_FLAGS “-std=gnu99 -O2 -g ${CC_WARNING_FLAGS} ${CMAKE_C_FLAGS} -DH2O_ROOT=\“${CMAKE_INSTALL_PREFIX}\” -DH2O_CONFIG_PATH=\“${CMAKE_INSTALL_SYSCONFDIR}/h2o.conf\“”)
ビルド
sudo mkdir -p build
cd ./build
sudo cmake ..
sudo make
sudo make install
confを用意
sudo mkdir -p /etc/h2o/
sudo vi /etc/h2o/h2o.conf
service に追加(任意)
sudo vi /usr/lib/systemd/system/h2o.service
[Unit]
Description=H2O - the optimized HTTP/1, HTTP/2 server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=simple
ExecStart=/usr/local/bin/h2o -m master -c /etc/h2o/h2o.conf
ExecReload=/bin/kill -HUP ${MAINPID}
ExecStop=/bin/kill -TERM ${MAINPID}
PrivateTmp=true
LimitNOFILE=infinity
[Install]
WantedBy=multi-user.target
sudo systemctl start h2o
途中、cmake の段階で libvu のバージョンが古すぎたり、libwslay が見つからないというエラーが出るが、そのまま問題なく make; make install できた。もしかしたら何か起きるかもしれない。
ソースビルドなんていつぶりだろう。たまにやると、パッケージマネージャー(yum。8以降や streamでは dnf)様様だということがよくわかる。
おわりに
「今更h2o?」「今更CentoOS7?」という感じもあるが、久々に Amazon Linux 2023 で環境構築しようとしたところ、h2o のインストールでこけてしまい、結局 nginx に置き換えたあと、むかし自前のブログに書いたこの記事を思い出したので移植しました。誰かの役に立てば嬉しいな。
おしまい