普段Apacheを利用する際は、OSが提供しているパッケージ管理ソフト経由でインストールしています。今回は興味本位でソースからインストールしてみました。
所々躓いので、そのエラー内容や対応方法についてもまとめていきます。
環境
OS
AlmaLinux9 9.7
インストールファイル
- apr-1.7.6
- apr-util-1.6.3
- httpd-2.4.66
手順
APRのセットアップ
Apache Portable Runtimeの略で、公式サイトを訳してみると以下のように書かれています。
すごくざっくりまとめると、OSなどの環境の違いがあっても、うまいこと動くようにしますよということですね。
APRのドキュメントを覗いてみるとモジュールリストが載っており、どのような機能が使えるのか見ることができます。
https://apr.apache.org/docs/apr/1.7/modules.html
ファイルの取得
ApacheのリポジトリからAPRのソースコードを取得します。
# cd /usr/local/src/
# wget https://dlcdn.apache.org//apr/apr-1.7.6.tar.gz
インストールファイルを解凍します。
# tar -vzxf apr-1.7.6.tar.gz
tarコマンドで-vオプションを付けると処理状況が表示されます。処理の内容を見ていると.hや.cファイルがずらっと表示され、主にC言語で作られていることがわかります。
解凍が完了すれば、インストールしたファイルに移動して構成ファイルを実行します。
# cd apr-1.7.6
# ./configure --prefix=/opt/apr-1.7.6
configure実行時にprefixを引数とし、インストール先を指定します。その他オプションについては./configure --helpで確認できます。
configureの実行で生成されたファイルを元にコンパイルします。
# make
# make test
# make install
APR-utilのセットアップ
APRの補助ライブラリになります。
APRのセットアップと同様、公式のリポジトリからファイルを入手し、ファイルの解凍→構成ファイルの実行→コンパイルを行います。
configureの引数にはインストール先とライブラリを指定します。
# cd /usr/local/src/
# wget https://dlcdn.apache.org//apr/apr-util-1.6.3.tar.gz
# tar -vzxf apr-util-1.6.3.tar.gz
# cd apr-util-1.6.3
# ./configure --prefix=/opt/apr-util-1.6.3 --with-apr=/opt/apr-1.7.6
# make
# make test
# make install
httpdのセットアップ
デーモンファイルも同様に、ファイルを入手→解凍→構成ファイルの実行→コンパイルを行います。
# wget https://dlcdn.apache.org/httpd/httpd-2.4.66.tar.gz
# tar -vzxf httpd-2.4.66.tar.gzhttpd-2.4.66.tar.gz
# ./configure --prefix=/opt/httpd-2.4.66 --with-apr=/opt/apr-1.7.6 --with-apr-util=/opt/apr-util-1.6.3
# make
# make install
サービスの起動確認
サービスを起動して実際に利用できるか確かめてみましょう。
# /opt/httpd-2.4.66/bin/apachectl start
ブラウザなどからDocumentRootに指定されているファイルにアクセスし、ページが表示されていれば成功です👏
躓いたポイント
一通り手順を書いていきましたが、無事起動するまでにいくつかエラーに遭遇しました。後学のためにもエラー内容と対応方法についてまとめておきます。
xml/apr_xml.c:35:10: fatal error: expat.h: No such file or directory
apr-utilのコンパイル時にexpatに関するエラーが出ていました。
# make
:
:
xml/apr_xml.c:35:10: fatal error: expat.h: No such file or directory
35 | #include <expat.h>
| ^~~~~~~~~
expat-develライブラリが無かったため、インストールしました。
dnf install expat-devel
サービススタート時
# /opt/httpd-2.4.66/bin/apachectl start
サービスを立ち上げましたが、DocumentRootに指定してあるファイルにアクセスで来ませんでした。
立ち上がっているサービスのプロセスやポートを確認したところ、dnfでインストールしていたhttpdが残ったままとなり、新しくインストールしたhttpdとポートがぶつかっていました。
ソースインストールを始める前にサービスをアンインストールしていましたが、設定ファイルは残ったままだったので削除し、サービスを立ち上げ直すとうまくいきました。
# dnf remove httpd
# /opt/httpd-2.4.66/bin/apachectl start
まとめ
ソースインストールでは依存関係を気にしながらセットアップする必要があり、パッケージ管理ソフトでインストールすることが如何に楽かを実感しました。
エラーの内容は環境によって異なるかと思いますが、参考になれば幸いです。
参考
APACHE PORTABLE RUNTIME (APR) PROJECT https://apr.apache.org/

