CentOS5.11にPHP7.0.33を入れる

#0.はじめに

どうしても社内で、**CentOS5.11**を使わなければいけないサーバーがありました。

ソース自体は全サーバーでmasterが動いており、
15台のサーバーのうち14台は冗長化され、**CentOS6**の**PHP7.0.33**で動いていましたが、
1台だけ**CentOS5.11**で、**PHP5.6**で動いていました。

しかし、先日自身のコミットで、返り値の型指定を記載してしまい、14台の**PHP7.0.33**では一切問題なく動きましたが、

唯一**PHP5.6**で動いているサーバーがfetalで止まっている事に障害発生から24時間後に気づいてしまいました。

```
public function sample() : string
{
    return 'test';
}
```

その後、いくつか有識者で対策を検討し、
・このサーバー用に独立したブランチを作り、masterをpullしない
・該当サーバーをCentOS6以降で、稼働させる方法を考える
等々考えましたが、

最終的に、
・頑張って**PHP7.0.33**を**CentOS5**に載せてみないか？
となり、完全にやり方は自分で調べてみてくれという感じでボールが渡され、

日本語、英語、中国語で必死で調べましたが、いい感じの例がなかったので、

備忘録として大人の事情で**CentOS5.11**に**PHP7.0.33**を入れなければいけない場合の対処法を残しておきます。

#1.入れる
念のため、事前にphp関連のパッケージで何が入っているか、確認しておいた方がいいです。

```
# インストールされているPHP関連パッケージの確認
[root@bash] $ yum list installed | grep php
```

```
# php5.6.30を削除
[root@bash] $ yum remove php php-*
```

正常に削除されていることを確認したら、yumリポジトリの書き換えをします。
CentOS5はサポート終了を通り越して、リポジトリの提供もされていないので、
URLをミラーに書き換えます。

```
# リポジトリの変更
[root@bash] $ sed -i "s/mirrorlist/#mirrorlist/" /etc/yum.repos.d/CentOS-Base.repo
[root@bash] $ sed -i "s_#baseurl=http://mirror.centos.org/centos/\$releasever/os/\$basearch/_baseurl=http://vault.centos.org/5.11/os/\$basearch/_" /etc/yum.repos.d/CentOS-Base.repo 
[root@bash] $ sed -i "s_#baseurl=http://mirror.centos.org/centos/\$releasever/updates/\$basearch/_baseurl=http://vault.centos.org/5.11/os/\$basearch/_" /etc/yum.repos.d/CentOS-Base.repo 
[root@bash] $ sed -i "s_#baseurl=http://mirror.centos.org/centos/\$releasever/extras/\$basearch/_baseurl=http://vault.centos.org/5.11/os/\$basearch/_" /etc/yum.repos.d/CentOS-Base.repo 
[root@bash] $ sed -i "s_#baseurl=http://mirror.centos.org/centos/\$releasever/centosplus/\$basearch/_baseurl=http://vault.centos.org/5.11/os/\$basearch/_" /etc/yum.repos.d/CentOS-Base.repo 
[root@bash] $ sed -i "s_#baseurl=http://mirror.centos.org/centos/\$releasever/contrib/\$basearch/_baseurl=http://vault.centos.org/5.11/os/\$basearch/_" /etc/yum.repos.d/CentOS-Base.repo
```

PHP本体のインストール前に、依存性の高いパッケージのインストールをします。

```
# パッケージのインストール
[root@bash] $ yum install -y make gcc flex wget patch autoconf libxml2-devel
```

そして、めちゃくちゃ調べましたが、今のところCentOS5でPHP7を入れられるリポジトリは存在しないっぽいです。

https://servercan.net/blog/2021/02/centos5-%E3%81%B8-php7-%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AE%E5%87%BA%E6%9D%A5%E3%82%8B%E3%83%AC%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AF%E7%84%A1%E3%81%84/

ちょうどこの作業に入る前に、こちらの方が記事をあげており、
それでも尚、海外コミュニティ含めて探しましたが、見つかりませんでした。

そのため、ソースからのインストールを試みます。

```
# phpをソースからインストール
[root@bash] $ cd /usr/local/src/
[root@bash] $ wget http://museum.php.net/php7/php-7.0.33.tar.gz
```

PHP7自体の必要動作環境とか調べましたが、特にCentOS自体は条件になかったです。
ただ、PHP7.1以降だとopenssl1.0.1以上が要求されます。

またPHP7.0でもopenssl0.9.8は必要です。
必要があればアップデートしてください。

（今回はopenssl0.9.8が入っていたので、そちらの作業はしていないです）

あとは解凍してmakeコマンドでインストールします。

```
[root@bash] $ tar zxvf php-7.0.33.tar.gz
[root@bash] $ cd php-7.0.33/
[root@bash] $ rm -f configure
[root@bash] $ ./buildconf --force
[root@bash] $ ./configure --prefix=/usr
[root@bash] $ make && make install
```

今回、バイナリの環境変数パス指定を省略するために、/usrにインストール先を指定しましたが、

出来ればもっと下層にインストールをして、パス指定してある箇所にシンボリックを貼るか、
インストール先を環境変数に追加した方が安全かもしれないです。

```
[root@bash] $ php -v
```

# 2.まとめ

二度とやりたくないですが、
意外と大人の事情で、このサーバーは絶対CentOS5じゃないとダメなんだ！！
は実際にあったため、今回は貴重な経験をすることになりました。

EPELとかremiとか、php自体リポジトリからインストールする方が99%だと思うので、
ソースからのインストール、更にはCentOS5.11からのPHP7というあまりない事例だったので、

一応可能です。という事を記事に残しておきたかったです。
おやすみなさい。