Apacheをソースインストールしてみる

普段Apacheを利用する際は、OSが提供しているパッケージ管理ソフト経由でインストールしています。今回は興味本位でソースからインストールしてみました。

所々躓いので、そのエラー内容や対応方法についてもまとめていきます。

環境

OS

AlmaLinux9 9.7

インストールファイル
  • apr-1.7.6
  • apr-util-1.6.3
  • httpd-2.4.66

手順

APRのセットアップ

Apache Portable Runtimeの略で、公式サイトを訳してみると以下のように書かれています。

Apache Portable Runtime (APR) プロジェクトの使命は、基盤となるプラットフォーム固有の実装に対して予測可能で一貫性のあるインターフェースを提供するソフトウェアライブラリを作成・維持することです。主な目的は、ソフトウェア開発者がAPIに対してコーディングを行い、そのソフトウェアが構築されるプラットフォームに関係なく、同一ではないにせよ予測可能な動作を保証されることです。これにより、プラットフォーム固有の欠陥や機能を利用したり回避したりするための特殊ケース条件をコーディングする必要がなくなります。

すごくざっくりまとめると、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/