CentOS7系 + Apache2.4最新版yumインストール

## 修正履歴

- 2021/04/07 iusリポジトリのURLが変更になっていたのに（やっと）気づいたので修正

# はじめに
### 環境
- asianux7（※CentOS7.2相当）※ゲストOS、本番環境で試せないことを手軽に試すためにWinPCに試用版を導入
- Windows10 Professional ※ホストOS
- VirtualBox5.1.30
- Vagrant1.9.8

### 本記事の目的

CentOS7でApache2.4をインストールすると `2.4.6` という古いバージョンが入ります。
今回の記事は `2.4.6` から最新の `2.4.29` に入替えたときのメモです。
ググるとソースからインストールする系の情報が多くヒットしますが、yumで最新版を入れたかったので、そのときの手順を備忘録として投稿します。
PHPの入れ直しも発生したので一部PHPインストールについても記載します。（むしろPHPでてこずったのでそちらをメインにしようかとも思っていたのですがショボい話だったので端折ります）

### 参考URL
以下のサイトを参考に作業しました。

[CentOS7にApache2.4最新版をyum installする(w3g.jp)](https://w3g.jp/blog/centos7_yum_install_latest_apache24)

# 作業メモ

rootで作業しました。root以外の場合、適宜 `sudo` を付けて作業します。

### epelリポジトリ

HTTP/2用コアエンジン `Nghttp2` インストール用です。
既にリポジトリがある場合はスキップ。

```:epelリポジトリのインストール
# yum -y install epel-release

```

ターゲットのソフトウェアをインストールするときだけepelを使用する様にデフォルトから外しておくことを推奨します。

```:有効化(enable)を外す
# vi /etc/yum.repos.d/epel.repo

[epel]
（略）
enabled=0 ←※0にする
（略）

```

### Remiリポジトリ

PHPインストール用です。既にリポジトリがある場合はスキップ。
メンテナンス等でたまに[Remiリポジトリ公式サイト](http://rpms.famillecollet.com/)へ繋がらないときがあるようです。
その場合はタイミングをずらして試してみてください。
またはミラーサイトを利用します。
（参考URL）
[yumでremiリポジトリが落ちたときの対応](https://qiita.com/KTaskn/items/03dec5a3bc8a10394666)

```sh:Remiリポジトリのインストール
# yum -y install "http://rpms.famillecollet.com/enterprise/remi-release-7.rpm"

```

### iusリポジトリ

Apacheの最新版のインストール用です。
iusはCentOS/RedHad用の最新ソフトウェアのrpmを提供するプロジェクトです。

```sh:iusリポジトリのインストール
# yum install -y https://repo.ius.io/ius-release-el7.rpm

```

最新版のソフトウェアをインストールするときだけiusを使用する様にデフォルトから外しておくことを推奨します。

```:有効化(enable)を外す
# vi /etc/yum.repos.d/ius.repo

[ius]
（略）
enabled=0 ←※0にする
（略）

```

### HTTP/2コアエンジン、/etc/mime.types

```:Nghttp2インストール
# yum --enablerepo=epel -y install nghttp2

```

mime.typesはmailcapパッケージに含まれます。

```:mailcapパッケージのインストール
# yum -y install mailcap

```

### 古いバージョンのhttpd、httpd-toolsを削除

`yum update` を試してみたけどコンフリクト（バージョンの競合）が起きました。
なので、古いバージョンを削除してから新しいバージョンを入れます。
httpd.confなどの設定はなくなるので必要に応じてバックアップしておきます。

```:httpdを削除
# systemctl stop httpd
# yum remove httpd

```

古いバージョンのhttpdを削除する際、道連れで削除されるパッケージがあるのでメモっておいて後でインストールし直します。
実はこの時PHPのパッケージが削除されていたのですが、 `php -v` で確認したところ普通に動いたので無視していたら後で苦労することに・・・

古いバージョンのhttpd-toolsが残っていると新しいhttpdのインストールの際にコンフリクトが起きるのでこれも削除します。

```:httpd-toolsを削除
# yum remove httpd-tools

```

### Apache2.4最新版インストール

やっと本題のApache2.4最新版のインストールです。
既存のリポジトリを無効（--disablerepo）にして、iusリポジトリを有効（--enablerepo）にします。

```:Apache2.4最新版インストール
# yum --disablerepo=base,extras,updates --enablerepo=ius -y install httpd

```

### 追加パッケージのインストール

必要に応じて追加のパッケージをインストールします。
httpd-develとmod_sslを入れました。

```:openldap-devel、expat-devel、httpd-devel、mod_sslインストール
# yum -y install openldap-devel expat-devel
※http-develで必要
# yum --disablerepo=base,extras,updates --enablerepo=ius -y install httpd-devel mod_ssl

```

### 設定など

httpd.confへの設定については割愛します。
設定変更したら必ず `httpd -t`でシンタックスのチェックをしましょう（これ重要）。


### httpd起動、再起動、停止、自動起動設定

```:httpd起動・停止など
（起動）
# systemctl start httpd
（再起動）
# systemctl reload httpd
（停止）
# systemctl stop httpd
（自動起動設定※サーバ起動時に自動で起動する）
# systemctl enable httpd

```
### PHP（再）インストール

phpのコンテンツが表示されずに「おかしいな。おかしいな。」と思っていましたが、古いバージョンのhttpdを削除したときにPHPも一緒に削除されていました。
`php -v` でちゃんと動くので見落としがちですが、 `rpm -qa | grep php` で確認するとパッケージがなくなっていることが確認できます。

Remiリポジトリから必要なバージョンを選んでPHPをインストールします。
remi-php72を有効にしてphp7.2.1をインストールしました。

```:PHPインストール
# yum --enablerepo=remi-php72 -y install php

```

PHPのインストールにより、/etc/httpd/modules/にlibphp7.soが入り、/etc/httpd/conf.modules.d/15-php.confからLoadModuleしてくれます。


# おわりに

やってみて古いパッケージを残しつつ、ソースからインストールの方がよほど楽なんじゃないかなとも思いました（笑）
公に（商用向けなど）Apacheを使っている場合はHTTP/2を使いたい等相当な理由がない限りバージョンアップは慎重に検討すべきと思います。