LoginSignup
5
1

More than 3 years have passed since last update.

CentOS5.11にPHP7.0.33を入れる

Posted at

0.はじめに

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

ソース自体は全サーバーでmasterが動いており、
15台のサーバーのうち14台は冗長化され、CentOS6PHP7.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.33CentOS5に載せてみないか?
となり、完全にやり方は自分で調べてみてくれという感じでボールが渡され、

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

備忘録として大人の事情でCentOS5.11PHP7.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というあまりない事例だったので、

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

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1