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を入れられるリポジトリは存在しないっぽいです。

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

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

# 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というあまりない事例だったので、

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

この記事が気に入ったらサポートをしてみませんか?