CentOS6.10+PHP7.3環境でApacheを2.2→2.4にする

# 前提
bento/centos-6.10
PHP 7.3.13
Apache 2.2
Vagrant+VirtualBoxを使用した、ローカルの仮想環境。

- phpとApacheのパッケージは依存関係にある。
- CentOS6の標準対応はApache2.2まで。
- Apache2.2→2.4のバージョンアップには、Apache2.4をどこかから持ってくる必要がある。

参考
[CentOS6.9 + Apache2.4 + PHP7.1 の環境構築](https://qiita.com/a4_nghm/items/e944bb4a894848b591af)



# 手順

yumインストール使用ならば、旧ファイルの名前を変更して保存・上書き回避してくれるはずだが、念のため設定ファイルを残しておく。

```bash:
# 管理者権限でログイン
su

# 旧php.iniとhttpd.confファイルを改名、設定ファイルを残しておく
mv /etc/php.ini /etc/‪php.ini.org‬
mv /etc/httpd/conf/httpd.conf /etc/httpd/conf/‪httpd.conf.org‬

# Apache2.2を削除(yum removeだとphpまで削除されてしまう)
rpm -e --nodeps httpd
rpm -e --nodeps httpd-tools
 
# iusリポジトリの追加&Apache2.4のインストール
yum install ‪https://centos6.iuscommunity.org/ius-release.rpm‬
yum install httpd24u httpd24u-tools httpd24u-devel

# バージョン確認
httpd -v
```
 
※httpd24u-develはあとでコンパイルに使う


これだけだとphpが動かないので、
php -v で表示されたのと同じバージョンのphpソースをもってきてビルドしてモジュールを作る。

ビルドするためのソースファイルは、共有フォルダ下に置くとconfigureがこけるので、/var/www/html下に置いて作業した。

```bash:
# bison libxml2-develのインストール
yum install bison libxml2-devel
 
# autoconf2.69のインストール
cd /var/www/html
wget ‪http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz‬
tar xvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure --prefix=/usr
make
make install

# php7.3.13のソースを持ってきて展開
cd /var/www/html
wget ‪https://github.com/php/php-src/archive/php-7.3.13.tar.gz‬
tar xvf php-7.3.13.tar.gz

# phpをビルド
cd php-src-php-7.3.13
./buildconf --force
./configure --with-config-file-path=/etc/ --with-config-file-scan-dir=/etc/php.d --with-apxs2=/usr/bin/apxs
make
```

makeしたphpはインストールしない。
出来上がったlibphp7.soをモジュールとして配置する。


```bash:
# モジュールを配置
cp /var/www/html/php-src-php-7.3.13/libs/libphp7.so /usr/lib64/httpd/modules/libphp7.so
```


Apache2.4になって、httpd.confの書き方が微妙に変わっているらしい。2.2の時のものを流用するならば、手を加える必要がある。
私の環境の場合、旧ファイルに置き換えるでなく、旧ファイルを見ながら新ファイルを書き換えたほうが楽だった。
DocumentRootや<Directory "/var/www/html">のパスを環境に合わせて変更して、リダイレクトを追記して終わり。

```bash:
# httpd.confの書き換え
vi /etc/httpd/conf/httpd.conf
```


php.iniは旧ファイルに置き換えた。

```bash:
# php.iniの置き換え
mv /etc/php.ini /etc/php.ini.new
mv /etc/‪php.ini.org‬ /etc/php.ini
```

モジュールが一部読み込めておらず関数エラーを吐いていたので、extension_dirの追記を行う。

```bash:
vi /etc/php.ini
```

```bash:php.ini
extension_dir = "/usr/lib64/php/modules"
```

```bash:
# Apacheの再起動
service httpd restart
```

これでPHPも動くようになった。(うれしい)




# バージョンアップ経緯
php5.3.3(!!!!)で動いていたLAMP環境のサイトを改修する機会があった。
当初の文言修正・画像差し替えのほか、phpのバージョンも上げることに。その他、mysqlなどバージョンを上げられるものは上げましょう、の方針をとる。
→ リリースに先立ち、バージョンアップ手順書を作成する
→上司「Apacheのバージョンは2.4に上げなくていいの？」
→（発想になかった）「対応いたします！」

 
# 対応手順が生まれるまでのおもいで
- sudo yum remove httpd
「httpdとの依存関係でphp消えるで。ええか？[y/N]」　に　「いいよお[y]」　と返しておきながら、何故phpのパッケージが消えていくのか分からず、無垢な目をして流れていくログを見つめた。
消えないで、と縋り付けばよかった？　引き留めることもできないのに。


- Apache2.4(RedHat)
このリポジトリ
https://repos.fedorapeople.org/repos/jkaluza/httpd24/epel-httpd24.repo

リポジトリの大元をちゃんと見てなかったから、水色に期待していたのに赤色のページ出てぎょっとしちゃった。CentOSがRedHatの傍系みたいなものだって、この時調べて初めて知った。
今回Apache2.2→2.4方法調べて、よく出てきたのはこっちのリポジトリ。
どうせ依存関係解消できないでビルドだかコンパイルだかするなら、サービス起動コマンドそのまま使えてシンボリックリンク張り直しとかもないiusリポジトリくんの方が使い勝手良いと思うけど、実際どうなの。
まあ、そもそも、複数の別リポジトリから、依存関係にあるようなパッケージをばらばらにインストールしないほうがいいよね。
iusリポジトリでphp7.3があればと何度も考えたけど、ないからね。しかたないね。


- ビルドでこける

/vagrantフォルダ直下にビルドしたいソースを置いたら、configure実行時にこのファイル使用中だから削除できないよ、みたいなエラーが出た。Vagrantの共有フォルダ下避けて/var/www/html下にソース置いたら普通にいけた。
普段ソースからコンパイルとかビルドとか全くやらないので、足りないものが続々。エラーメッセージを手掛かりに、必要なものを入れていった。
色々参考にして、記事の通りにやったとして、足りないものは出てくる。

 


 
# おわりに
バージョンアップ対応に詳しいパイセン
「CentOS7にしたほうがいいんじゃないかな」
 
わかる。そのとおりでございます。
現行phpはremiリポジトリ使用なのに、iusリポジトリから持ってきたもので依存関係解消する羽目になるくらいなら、アップグレード対応したほうがいい。
とはいえ、アップグレード対応は大変すぎる、リリースは今年中にということもあって、本番環境のApacheバージョンアップ対応は見送られました。
するべきものは相談ですね。

バージョンアップに取り組みだした当初、実施が難しい、ということを全く分かっていなかったので、それを知ることができたことは幸いでした。