nakayumcの技術ブログ

エンジニア2年目のブログです。

Apache(httpd)をソースから構築する

概要

今回はソースからインストールしてLAMP環境を構築していきます。必要になるものはなるべくソースからインストールしていますが、wgetgccはdnfコマンドでパッケージからインストールします。この記事は Apacheをソースからインストールします。MySQLPHPは次回の記事でインストールしていきます。

環境

OS - ホスト: ESXi 7.0.1 - OS: CentOS8 (最小限のインストール)

使用ライブラリ - apache-2.4.46 - apr-1.7.0 - apr-util-1.6.1 - openeel-3.0.0 - pcre-8.44 - expat-2.3.0

事前準備

Apacheソースコードからインストールするためには、gccmakepcrepcre-devel のライブラリが必要になります。 なので、それらをあらかじめインストールしておきます。

# dnf install gcc gcc-c++ make pcre pcre-devel perl wget

httpdをソースからインストール

今回は、ソースからApache(httpd)をインストールしていきます。 以下のページにApacheのビルドに必要なライブラリやインストール手順が書かれていて、ここを参考にしています。 Compiling and Installing – Apache HTTP Server Version 2.4 これに従うと、APRAPR-Util と PCRE というのライブラリが必要になりますが、その他にもExpatというライブラリや追加した方が良いモジュールもあるので、作業がスムーズになるように整理してまとめていきます。 まず、Apache本体をダウンロードします。

# cd /usr/local/src 
# wget https://ftp.yz.yamagata-u.ac.jp/pub/network/apache/httpd/httpd-2.4.46.tar.gz
# tar zxvf httpd-2.4.46.tar.gz

APRAPR-Util

APR(Apache Portable Runtime)は、Apacheのサポートライブラリで、OS等の環境の違いを吸収する機能です。使用するOSが、機能が備わっていない場合、このAPRが代わりとなってその機能を提供してくれます。

# wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/apr/apr-1.7.0.tar.gz
# tar zxvf apr-1.7.0.tar.gz
# mv apr-1.7.0 httpd-2.4.46/srclib/apr

APR-Utilも同様に、ダウンロードと解凍をして、解凍できたディレクトリをhttpd-2.4.46/srclib/apr-utilに移動させます

# wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/apr/apr-util-1.6.1.tar.gz
# tar zxvf apr-util-1.6.1.tar.gz
# mv apr-util-1.6.1.tar.gz httpd-2.4.46/srclib/apr-util

以上でAPRAPR-Utilの準備は終わりです。

PCRE

PCRE(Perl Compatible Regular Expressions)は、Perl互換の正規表現を他の言語でも使えるようにするもので、多くのミドルウェアで必要とされているライブラリです。 事前準備が終わっていなければ、インストールしてください。 PCREのビルドをしていきます。wget でダウンロードして、展開・解凍を行い、解凍・展開してビルドします。

# wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
# tar zxvf pcre-8.44.tar.gz
# cd pcre-8.44.tar.gz
# ./configure 
# make 
# make install

Expat

Expatとは、XMLファイルの中身のデータを解析・整形するライブラリです。 Welcome to Expat! · Expat XML parser のサイトから、wget でダウンロードして、展開・解凍を行い、解凍・展開してビルドします。

# wget https://github.com/libexpat/libexpat/releases/download/R_2_3_0/expat-2.3.0.tar.gz 
# tar zxvf expat-2.3.0.tar.gz 
# cd expat-2.3.0.tar.gz 
# ./configure 
# make 
# make install

OpenSSL

これでApacheのビルドができますが、TLS通信は必須なので、OpenSSLをソースからビルドしていきます。 この段階で設定しておかないと、後からOpenSSLを使用できないからです。(再度ビルドすることになる)

# wget https://www.openssl.org/source/openssl-3.0.0-alpha14.tar.gz
# tar zxvf openssl-3.0.0-alpha14.tar.gz
# cd openssl-3.0.0-alpha14.tar.gz
# ./config
# make
# make install

Apacheのビルド

これで準備ができたので、Apacheをビルドしていきます。

# cd httpd-2.4.46/
# ./configure \
--prefix=/usr/local/httpd \
--with-included-apr \
--with-pcre=/usr/local/src/pcre-8.44/pcre-config \
--enable-mods-shared=all \
--enable-ssl \
--with-ssl=/usr/local/ssl \
--with-mpms-shared=all
# make
# make install

configureのオプションは以下の通りです。

オプション 説明
–prefix インストールするディレクトリを指定
–with-included-apr srclib内のAPRAPR-Utilもビルド対象にする
–with-pcre インストールしたPCREのディレクトリを指定
–enable-mods-shared 動的モジュールをビルド対象にする
–enable-ssl sslモジュールをビルド対象にする
–with-ssl インストールしたOpenSSLのディレクトリを指定
–with-mpms-shared worker, prefork, eventをビルド対象にする

ビルドができたら、新しくapacheのユーザとグループを作成し、メイン設定ファイルを変更します。 サービスを動かす用のユーザなので、デフォルトシェルに/sbin/nologinを指定して、ログインを禁止にします。

# cd /usr/local/httpd/
# groupadd apache
# useradd apache -g apache -s /sbin/nologin
# chown -R apache.apache .
# vi conf/httpd.conf

# vi /usr/lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/httpd/bin/apachectl start
ExecReload=/usr/local/httpd/bin/apachectl graceful
ExecStop=/usr/local/httpd/bin/apachectl stop

[Install]
WantedBy=multi-user.target

以下のコマンドで変更を反映させます。

# systemctl daemon-reload

ファイアウォールの設定を変更して、HTTP/HTTPS通信用の待ち受けポートを開放させます。

# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --add-service=https --zone=public --permanent
# firewall-cmd --reload

自動起動&今すぐ起動の設定を行います。

# systemctl enable httpd --now

まずはcurlコマンドでページをとってこれるか確認します。

# curl http://192.168.1.220
<html><body><h1>It works!</h1></body></html>

そしたら、実際にWebブラウザで開いてみて、この画面が表示されればApacheがビルドして、起動することができています。

まとめ

こんかいは、Apacheのみでしたが、これから、LAMP環境のMySQL PHPのソースからのインストールに挑戦していきたいと思います。