CentOS 7にPHP 5.6をインストール
remiリポジトリの追加
CentOS 7にPHP 5.6をインストールするために、remiリポジトリを追加します。
リポジトリの一覧は「/etc/yum.repos.d/」というディレクトリにまとめられていて、ここにリポジトリの情報をファイル単位で追加すればいいようです。 該当のディレクトリを見てみると、拡張子が「.repo」となっているファイルがいくつかあります。 これがリポジトリの情報ですね。
ファイルを右クリックしてみると、geditで開けるようです。 開いてみましょう。
内容はプレーンなテキストのようです。 セクション(という言い方が正確かは分かりません)が、[base][updates][extras][centosplus]と分かれていて、 それぞれのセクションに「name」「mirrorlist」「baseurl」「gpgcheck」「gpgkey」といった項目が記載されています。 名前、ミラーリスト(配布先の一覧?)、基本URL。 GPGは、非対称暗号鍵で暗号化する「GnuPG」のことかな? リポジトリには実行ファイルが含まれるので、伝送途中で改ざんされたり、ウィルスが混入されたりしたことを検知するためのものでしょうか。 んで、リポジトリを追加するには、これらの情報をリポジトリのサイトから入手しなければなりません。
ただ、remiリポジトリについては、このあたりが自動化されているようで、「yum install (URL)」で追加されるっぽいです。 URLの部分は多くの解説サイトで「http://rpms.famillecollet.com/enterprise/remi-release-7.rpm」とされています。
拡張子の「.rpm」は、パッケージのフォーマットを示すもののようです。
ふと「このURLはどこから調達するのか」という疑問が湧いたのでURLのルート(http://rpms.famillecollet.com/)にアクセスしてみたところ、 「Maintained Enterprise Linux (RHEL / CentOS / Other clones)」という項目があり、そこに前述のURLと一致するリンクがありました。 リンクの手前には「repository auto-configuration package」とあるので、「リポジトリを自動設定するパッケージ」のようです。
では、端末(suコマンドでroot化済み)でremiリポジトリを追加するコマンドを実行してみましょう。
# yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
実行の確認を求められるので、[y]と返答。 ちなみに、「yum」コマンドのオプションに「-y」を追加すると、これらの質問に自動的に[y]で答えてくれるようになるらしいです。
完了しました。
改めて「/etc/yum.repos.d/」を見てみると、「remi.repo」を始め、いくつかのリポジトリ情報が追加されたことが分かります。 よく見ると「epel.repo」というリポジトリも追加されていますね。 細かいことが気になるので調べます。
EPELは、Fedora Projectが管理するリポジトリのようです。 EPELとRemi、これに加えてRepoForge(旧名RPMForge)はCentOSではよく使われるリポジトリのようです。
よく見たら、インストールの確認の画面に、依存性関連のインストールとしてEPELリポジトリが提示されていました。
リポジトリの内容を確認
remiリポジトリを追加し、PHP 5.6がインストールできるようになったか確認します。 入手したリポジトリにPHP 5.6に関する情報があるかどうかを調べましょう。
リポジトリに含まれるパッケージの一覧を表示するには、「yum list」というコマンドを使うようです。 このとき「--enablerepo」でリポジトリを指定できます。
# yum list --enablerepo=remi
お…多すぎっ! これでは目的のものがあっというまに通り過ぎてしまって、確認できません。
こんなときは「grep」を使うと便利らしいです。
「grep」は文字列を検索するコマンド。 「yum list」で出力されるデータを「grep」に送り込むため、パイプでつないで「yum | grep」の形で実行します。 検索キーワードは、「php56」としましょう。
# yum list --enablerepo=remi | grep php56
なるほど。 キーワードと一致した「行」が表示されるわけですね。 一致箇所が赤字になっていて分かりやすい。 PHP 5.6は64bit版が読み込まれるようです。
PHP 5.6のインストール
さて、remiリポジトリにPHP 5.6(x86-64)が含まれていることが分かったので、インストールしましょう。 リポジトリの指定(--enablerepo)も忘れないように。
# yum install --enablerepo=remi php
インストールの確認メッセージ。 んんん?? PHPのバージョンが5.4になってる…。 いやいやいや。 5.6がほしいので、ここは「n」で返答。
パッケージ名が「php」だと5.4になっちゃうのか。 じゃぁ、「php56」と指定すればいいのかな。
# yum install --enablerepo=remi php56
これでいいのかなぁ…。 とりあえず[y]でインストールしてみましょう。
「よろしいでしょうか?」 よろしいです。
完了しました。
ブラウザでphpinfoにアクセスしてみます。
あれ…? 出てこない。 PHPはちゃんとインストールされてるよな…。
PHPのバージョンをコマンドで確認。 「php -v」だとコマンドが見つからないと言われます。 「php56 -v」とすればOKでした。
PHPはインストールされている。 けど、ブラウザで表示されない。 ということは、ApacheとPHPがつながっていない、ということですね。 自分でhttpd.confに拡張子の関連付けを追加しないとだめか。
/etc/httpd/conf/httpd.confのmime_moduleの項を確認すると、やはり拡張子が登録されていません。 「AddType application/x-httpd-php .php」を追加しましょう。
viコマンドで「/etc/httpd/conf/httpd.conf」を開きます。 (端末で開いているディレクトリが違うのでフルパスで指定しています。)
# vi /etc/httpd/conf/httpd.conf
ここで行いたい処理は次の通り。
- 挿入する位置までカーソルを移動する
- 行を追加してテキストを入力
- 保存[:w]して終了[:q]
カーソルの移動は方向キーで行えます。 <IfModule mime_type>ブロックの最後の行まで移動。
行を追加して入力モードに移行するには[o]を押します。 このとき、カーソルのある行の「次」に行が追加されて、入力モードになります。 空行を挟みたいので、一旦[esc]で入力モードを抜け、もう一度[o]で入力モードにしたあとで、「AddType application/x-httpd-php .php」を記入して[esc]で入力モード終了。
あとは[:w]で保存し、[:q]でviを終了します。
httpd.confを書き換えたので、Apacheを再起動します。 Apacheはすでにサービスで実行しているので、systemctlコマンドでrestartを指示します。
# systemctl restart httpd.service
改めてブラウザで確認。 む…? ファイルをダウンロードしようとしている…。 PHPが動いていないことは明白。 しかし、mime_moduleは認識されているようで、MIMEタイプが text/plain や text/html でないから、ファイルとして保存しようとしているのでしょう。
つまり、ApacheがMIMEタイプの「application/x-httpd-php」を理解していない、ということ。 さっきのPHPコマンドが正しく通らない点をみても、インストールの仕方を間違えたかな?
調べてみると、インストールの際、PHPのバージョンが5.4になってしまったのは、リポジトリに「remi-php56」を指定していなかったのが原因と判明。 ということで、インストールのやり直し。
# yum install --enablerepo=remi --enablerepo=remi-php56 php
今度は、ちゃんと「Version 5.6」になってます。 [y]で返答してインストール続行。
完了したので、PHPコマンドでバージョンをチェック。 先ほどは「コマンドが見つからない」と叱られましたが、今度は大丈夫です。
# php -v
Apacheを再起動して、ブラウザで確認。
キター!
ひとまずこれでPHP 5.6のインストールは完了です。
この章のまとめ
- 拡張子「.rpm」はパッケージファイルを示す。
- yumコマンドでのパッケージインストールは、URLを直接指定することもできる。
- grepコマンド:キーワードに一致する行のみを表示する。パイプ[|]でつなぎ、コマンド出力の結果をフィルタリングする時に使うことが多い。