wiz.code

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」とあるので、「リポジトリを自動設定するパッケージ」のようです。

yumでremiリポジトリを追加

では、端末(suコマンドでroot化済み)でremiリポジトリを追加するコマンドを実行してみましょう。

# yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
※ #より前の[root@localhost]は省略して記載しています。また、表示幅の都合で改行が入っていますが、実際には改行せずに入力します。
yumの実行確認

実行の確認を求められるので、[y]と返答。 ちなみに、「yum」コマンドのオプションに「-y」を追加すると、これらの質問に自動的に[y]で答えてくれるようになるらしいです。

リポジトリ追加完了

完了しました。

remiリポジトリの追加を確認

改めて「/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コマンド

リポジトリに含まれるパッケージの一覧を表示するには、「yum list」というコマンドを使うようです。 このとき「--enablerepo」でリポジトリを指定できます。

# yum list --enablerepo=remi
リポジトリのパッケージ一覧

お…多すぎっ! これでは目的のものがあっというまに通り過ぎてしまって、確認できません。

こんなときは「grep」を使うと便利らしいです。

パッケージ一覧からphp56を抜粋

「grep」は文字列を検索するコマンド。 「yum list」で出力されるデータを「grep」に送り込むため、パイプでつないで「yum | grep」の形で実行します。 検索キーワードは、「php56」としましょう。

# yum list --enablerepo=remi | grep php56
grepを使った結果

なるほど。 キーワードと一致した「行」が表示されるわけですね。 一致箇所が赤字になっていて分かりやすい。 PHP 5.6は64bit版が読み込まれるようです。

PHP 5.6のインストール

PHPをインストール

さて、remiリポジトリにPHP 5.6(x86-64)が含まれていることが分かったので、インストールしましょう。 リポジトリの指定(--enablerepo)も忘れないように。

# yum install --enablerepo=remi php
PHP 5.4?

インストールの確認メッセージ。 んんん?? PHPのバージョンが5.4になってる…。 いやいやいや。 5.6がほしいので、ここは「n」で返答。

PHP5.6を指定してインストール

パッケージ名が「php」だと5.4になっちゃうのか。 じゃぁ、「php56」と指定すればいいのかな。

# yum install --enablerepo=remi php56
PHP5.6のパッケージ確認

これでいいのかなぁ…。 とりあえず[y]でインストールしてみましょう。

PHP5.6のインストール確認

「よろしいでしょうか?」 よろしいです。

PHP5.6インストール完了

完了しました。

インストール失敗?

ブラウザでphpinfoにアクセスしてみます。

あれ…? 出てこない。 PHPはちゃんとインストールされてるよな…。

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でhttpd.confを編集

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ファイルをダウンロード?

改めてブラウザで確認。 む…? ファイルをダウンロードしようとしている…。 PHPが動いていないことは明白。 しかし、mime_moduleは認識されているようで、MIMEタイプが text/plain や text/html でないから、ファイルとして保存しようとしているのでしょう。

つまり、ApacheがMIMEタイプの「application/x-httpd-php」を理解していない、ということ。 さっきのPHPコマンドが正しく通らない点をみても、インストールの仕方を間違えたかな?

PHP 5.6のインストールやり直し

調べてみると、インストールの際、PHPのバージョンが5.4になってしまったのは、リポジトリに「remi-php56」を指定していなかったのが原因と判明。 ということで、インストールのやり直し。

# yum install --enablerepo=remi --enablerepo=remi-php56 php
インストールされるバージョンを確認

今度は、ちゃんと「Version 5.6」になってます。 [y]で返答してインストール続行。

PHPコマンドのテスト

完了したので、PHPコマンドでバージョンをチェック。 先ほどは「コマンドが見つからない」と叱られましたが、今度は大丈夫です。

# php -v

Apacheを再起動して、ブラウザで確認。

PHP 5.6の稼働確認

キター!

ひとまずこれでPHP 5.6のインストールは完了です。

この章のまとめ

  • 拡張子「.rpm」はパッケージファイルを示す。
  • yumコマンドでのパッケージインストールは、URLを直接指定することもできる。
  • grepコマンド:キーワードに一致する行のみを表示する。パイプ[|]でつなぎ、コマンド出力の結果をフィルタリングする時に使うことが多い。