CentOS7の環境にPHP7をインストールする場合、以下のようなコマンドを実行するかと思います。
sudo yum install epel-release -y
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum install --enablerepo=remi,remi-php71 -y php
php --version
何も考えずにこれらのコマンドを実行すればPHP7.1の環境は手に入るのですが、CentOSやLinuxに不慣れだと各コマンドの意味をきちんと把握しておきたいですよね。そこで今回は、これらのコマンドの意味を確認するために、あえて試行錯誤しながら作業を行ってみます。
今回の例ではphpのインストール手順を例にしていますが、yumコマンドやepelリポジトリ、remiリポジトリに関する解説がメインです。
実行環境はWindow上で、Vagrant+VirtualBoxを使用した仮想マシン(VM)を作成しています。
VagrantでCentOS7.3を起動する
まずは、CentOS7.3がインストールされた環境を構築します。新しいPCを購入して、CentOSのDVDからインストール...しても良いのですが、手間もお金もかかるので、今回はVagrantを利用して仮想マシンを用意します。
vagrantを使うと、下記の2コマンドだけでCentOS7.3がインストールされたLinuxをVMとして起動させることができます。初回の実行時はCentOSが入ったディスクのイメージファイルをネットワーク経由でダウンロードするため時間がかかります。
vagrant init bento/centos-7.3
vagrant up
CentOSへログインする
vagrant upコマンドが終了したら、起動したCentOSにSSHでログインします。SSHログインを行うためにはvagrant ssh
コマンドを使います。
vagrant ssh
Last login: Sat Mar 1 10:20:40 2017 from 10.0.2.2
[vagrant@localhost ~]$
phpがインストールされていないことを確認する
まずは、which php
コマンドでphpがインストールされていないことを確認します。
[vagrant@localhost ~]$ which php
/usr/bin/which: no php in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vagrant/.local/bin:/home/vagrant/bin)
結果に"no php in..."と出力されているのでインストール直後の時点ではphpがインストールされて無いことが分かります。
インストールされるPHPパッケージのバージョンを確認
CentOSではソフトウェアのパッケージをyum install
コマンドでインストールします。
今回インストールしたいのは、PHPのバージョン7.1なのですが、yumコマンドを使った場合にどのバージョンのPHPがインストールされるかを事前チェックします。
パッケージをインストールするyum install
コマンドでには、"--assumeno"(assume no)オプションがあり、これを指定すると何がインストールされるかだけ表示され実際のインストールは行われません。
[vagrant@localhost ~]$ sudo yum install --assumeno php
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
Resolving Dependencies
--> Running transaction check
---> Package php.x86_64 0:5.4.16-42.el7 will be installed
...
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================
Package Arch Version Repository Size
=============================================================================================
Installing:
php x86_64 5.4.16-42.el7 base 1.4 M
Installing for dependencies:
apr x86_64 1.4.8-3.el7 base 103 k
apr-util x86_64 1.5.2-6.el7 base 92 k
httpd x86_64 2.4.6-45.el7.centos.4 updates 2.7 M
...
上記の結果の中でInstallingの行を見ると、デフォルトではかなり古めのPHP5.4.16がインストールされることになることが分かります。
Installing:
php x86_64 5.4.16-42.el7 base 1.4 M
この状態ではPHP7.1はインストールできないため、パッケージのインストール元を変更する必要があります。
パッケージのインストール元を確認する
yumコマンドでは、パッケージのインストール元のことをパッケージリポジトリと呼んでいます(以下,リポジトリと表記します)。yum repolist
コマンドで、現在登録されているリポジトリの一覧を確認できるのでチェックしてみましょう。
[vagrant@localhost ~]$ yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
repo id repo name status
base/7/x86_64 CentOS-7 - Base 9,363
extras/7/x86_64 CentOS-7 - Extras 451
updates/7/x86_64 CentOS-7 - Updates 2,146
repolist: 11,960
出力結果にあるrepo idの欄が、現在CentOSに登録されているリポジトリの一覧です。コマンドの実行結果より、現状パッケージを取得するリポジトリは"base/7/x86_64", "extras/7/x86_64", "updates/7/x86_64"の3つであることが分かりました。
ちなみに、先ほどのsudo yum install --assumeno php
コマンドを実行するとRepositoryの欄に"base"を記載されていましたので、バージョン5.4.16のPHPは"base/7/x86_64"のリポジトリにあることも分かります。
パッケージのインストール元リポジトリを追加する
これまでの調査で、前述の3つのリポジトリからはPHP7.1がインストールできないことが分かりました。それでは、PHP7をどのリポジトリこから取得すればよいかというと、CentOSやRedHatでは有名な外部リポジトリにremiというものがあります。
このリポジトリは、RetHat社に務めているremi colletさんという人がメンテンナンスしている外部のパッケージです。RedHat社はCentOSの元になったRedHat Linuxの提供元なのでremiリポジトリは安心して使うことができ、実際に商用のサービスを提供するサーバ構築でもよく利用されています。
現在使っているCentOSへremiリポジトリを追加するためには、remi-release-7.rpmというrpmパッケージをインストールすればよいです。remi colletさんは、remi-release-7.rpmをhttp://rpms.famillecollet.com/enterprise/remi-release-7.rpmのURLで提供してくれているため、下記のコマンドを実行すればよいです。
[vagrant@localhost ~]$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Retrieving http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
warning: /var/tmp/rpm-tmp.YWLY5S: Header V4 DSA/SHA1 Signature, key ID 00f97f56: NOKEY
error: Failed dependencies:
epel-release = 7 is needed by remi-release-7.3-2.el7.remi.noarch
....ですが、出力を見ると、error: Failed dependencies:
と依存性(dependencies)に関するエラーが出ています。これは、remi-release-7.rpmが動作する上で、epel-releaseという別のパッケージが存在することを前提としているためです。
epel-releaseをインストールする
というわけで、remiリポジトリを使うためにepel-releaseパッケージが必要なことが分かったので早速インストールします。epel-releaseパッケージは一体何かというと、Extra Packages for Enterprise Linuxの略でRedHat,CentOSでデフォルト以外の拡張パッケージを提供している別のリポジトリです。
epel-releaseは下記のコマンドでインストールできます。
sudo yum install epel-release -y
epel-releaseのインストール後、再度yum repolist
コマンドを実行してみると、以下のようにepel/x86_64
が追加されました。
[vagrant@localhost ~]$ yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: ftp.yz.yamagata-u.ac.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
repo id repo name status
base/7/x86_64 CentOS-7 - Base 9,363
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 11,896
extras/7/x86_64 CentOS-7 - Extras 451
updates/7/x86_64 CentOS-7 - Updates 2,146
repolist: 23,856
再度remi-release-7.rpm
をインストールしましょう。
[vagrant@localhost ~]$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Retrieving http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
warning: /var/tmp/rpm-tmp.zra7fH: Header V4 DSA/SHA1 Signature, key ID 00f97f56: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:remi-release-7.3-2.el7.remi ################################# [100%]
今度はうまくいったようです。
再度yum repolist
を実行してみます。
[vagrant@localhost ~]$ yum repolist
repo id repo name status
base/7/x86_64 CentOS-7 - Base 9,363
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 11,896
extras/7/x86_64 CentOS-7 - Extras 451
remi-safe Safe Remi's RPM repository for Enterprise Linux 7 - x86_64 2,505
updates/7/x86_64 CentOS-7 - Updates 2,146
repolist: 26,361
remi-safeというリポジトリが増えました。
再度PHPパッケージのバージョンを確認する
この状態で、再度sudo yum install --assumeno php
を実行してみます。
[vagrant@localhost ~]$ sudyo yum install --assumeno php
Resolving Dependencies
--> Running transaction check
...
Dependencies Resolved
================================================================================================================================================
Package Arch Version Repository Size
================================================================================================================================================
Installing:
php x86_64 5.4.16-42.el7 base 1.4 M
Installing for dependencies:
apr x86_64 1.4.8-3.el7 base 103 k
apr-util x86_64 1.5.2-6.el7 base 92 k
httpd x86_64 2.4.6-45.el7.centos.4 updates 2.7 M
...
せっかく頑張ってremiリポジトリを追加したのにも関わらず、依然として5.4.16がインストール対象になってしまいます。これは、後から追加されたリポジトリは(デフォルトのものと比べると)安全ではないため、自動では使われないためです。
追加したremiリポジトリからパッケージをインストールするよう明示的に指定するためには--enablerepo
オプションを使用します。
[vagrant@localhost ~]$ sudo yum install --enablerepo=remi,remi-php71 --assumeno php
...
Dependencies Resolved
=========================================================================================================
Package Arch Version Repository Size
=========================================================================================================
Installing:
php x86_64 7.1.9-1.el7.remi remi-php71 2.7 M
ついにバージョンの欄が"7.1.9-1.el7.remi"と、PHP7.1になりました!! Repositoryの欄にもremi-php71とremiリポジトリを参照していることが分かります。
これで、php7.1がインストールできる準備が整いました。
PHP7.1をインストールする
実際のインストールはyum installコマンドから--assumeno
を外せばよいです。
今回は、インストール中で確認のプロンプトを出さないようにするために'-y'オプションをつけてインストールを行います。(確認しながらインストールしたい場合は-yオプションをつけなくても良いです)
[vagrant@localhost ~]$ sudo yum install --enablerepo=remi,remi-php71 -y php
Loaded plugins: fastestmirror
remi-php70 | 2.9 kB 00:00:00
remi-php70/primary_db | 194 kB 00:00:02
Loading mirror speeds from cached hostfile
...
Installed:
php.x86_64 0:7.1.9-1.el7.remi
Dependency Installed:
apr.x86_64 0:1.4.8-3.el7
apr-util.x86_64 0:1.5.2-6.el7
httpd.x86_64 0:2.4.6-45.el7.centos.4
httpd-tools.x86_64 0:2.4.6-45.el7.centos.4
mailcap.noarch 0:2.1.41-2.el7
php-cli.x86_64 0:7.1.9-1.el7.remi
php-common.x86_64 0:7.1.9-1.el7.remi
php-json.x86_64 0:7.1.9-1.el7.remi
出力結果を見ると、phpパッケージのインストールに伴なって、phpパッケージが必要としている依存パッケージであるapr, apr-util,...php-json等も同時にインストールされたようです。
PHP7.1がインストールされたことを確認する
whichで、phpコマンドが存在することを確認します。
[vagrant@localhost ~]$ which php
/usr/bin/php
また、'php --version'を実行して、たしかにPHPのバージョン7.1が入っていることも確認できました。
```language-php
[vagrant@localhost ~]$ php --version
PHP 7.1.9 (cli) (built: Aug 30 2017 20:06:08) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
ここまでのおさらい
これまで、いろいろな確認をしながらPHP7.1のインストールを進めていきましたが、最終的に意味のあるコマンドは下記の4つでした。
sudo yum install epel-release -y
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum install --enablerepo=remi,remi-php71 -y php
php --version
回り道をしながら確認をしたことで、各コマンドの意味がより深く理解できましたね。
VagrantでPHP7.1のインストールまでを自動で行う
今回はこれまで、vagrantで起動したVM上にインストールされたCentOS上で、コマンドを1つづつ手入力することでインストールの作業を行いました。
実はVagrantではVagrantfile
という名前の設定ファイルを事前に用意しておくことで、VMが起動した後のLinuxに対して自動でセットアップのコマンドを実行させることが可能になっています。(今回の記事で、最初にvagrant init
を実行していますが、これは実はVagrantfileのひな型を作るためのコマンドです)
Vagrantによる自動セットアップの機能を利用するためには、適当なフォルダに下記の内容でVagrantファイルを用意します。
Vagrant.configure("2") do |config|
config.vm.box = "bento/centos-7.3"
config.vm.provision "shell", inline: <<-SHELL
yum install epel-release -y
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum install --enablerepo=remi,remi-php71 -y php
php --version
SHELL
end
config.vm.boxの行には、"vagrant init"コマンドで指定したCentOS7.3を記載しています。また、config.vm.provisionという行の下を見ると、先ほど確認したコマンドたちが書かれていることが分かります。
このファイルがあるディレクトリ上で、vagrant up
コマンドを実行してみてください。
vagrant up
のコマンドで1つだけで、PHP7.1のインストールまで完了した状態のCentOS7.3が動作するLinuxが手に入ります。
> vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'bento/centos-7.3'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'bento/centos-7.3' is up to date...
...
==> default: Installed:
==> default: php.x86_64 0:7.1.9-1.el7.remi
==> default:
==> default: Dependency Installed:
==> default: apr.x86_64 0:1.4.8-3.el7
==> default: apr-util.x86_64 0:1.5.2-6.el7
==> default: httpd.x86_64 0:2.4.6-45.el7.centos.4
==> default: httpd-tools.x86_64 0:2.4.6-45.el7.centos.4
==> default: mailcap.noarch 0:2.1.41-2.el7
==> default: php-cli.x86_64 0:7.1.9-1.el7.remi
==> default: php-common.x86_64 0:7.1.9-1.el7.remi
==> default: php-json.x86_64 0:7.1.9-1.el7.remi
==> default:
==> default: Complete!
==> default: PHP 7.1.9 (cli) (built: Aug 30 2017 20:06:08) ( NTS )
==> default: Copyright (c) 1997-2017 The PHP Group
==> default: Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
最後の行を見ると、PHP7.1.9のインストールまで完了していそうです。
本当に正しくインストールされたかは、vagrant sshでCentOSにSSHログインしてから確認しても良いのですが、ここではvagrant sshの-cオプションを使ってみます。-c
オプションの後にLinuxコマンドを書くことで、VM上でコマンドを1つだけ実行させ、その結果を見ることが可能です。
> vagrant ssh -c "php --version"
PHP 7.1.9 (cli) (built: Aug 30 2017 20:06:08) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
これで、セットアップの自動化まで行うことができました。
補足:リポジトリ名を明示してパッケージをインストールする
今回の記事では、PHP7.1をインストールしましたが、--enablerepo
の指定を変更することで、PHP7.0や5.6, 5.5など古いバージョンのPHPをインストールすることができます。
php7.0の場合
sudo yum install --enablerepo=remi,remi-php70 --assumeno php
=====================================================================================================
Package Arch Version Repository Size
=====================================================================================================
Installing:
php x86_64 7.0.23-1.el7.remi remi-php70 2.6 M
php5.6の場合
sudo yum install --enablerepo=remi,remi-php56 --assumeno php
=====================================================================================================
Package Arch Version Repository Size
=====================================================================================================
Installing:
php x86_64 5.6.31-1.el7.remi remi-php56 2.6 M
Installing for dependencies:
php5.5の場合
sudo yum install --enablerepo=remi,remi-php55 --assumeno php
=====================================================================================================
Package Arch Version Repository Size
=====================================================================================================
Installing:
php x86_64 5.5.38-7.el7.remi remi-php55 2.6 M
php7.2(RC1バージョン)の場合
PHP 7.2は現時点はまだ正式リリースではなくRC1なので、バージョン番号は"7.2.0~RC1"となっていました。正式リリース前ですが、これもインストール可能です。
sudo yum install --enablerepo=remi,remi-php72 --assumeno php
=====================================================================================================
Package Arch Version Repository Size
=====================================================================================================
Installing:
php x86_64 7.2.0~RC1-1.el7.remi remi-php72 3.1 M
標準テキスト CentOS 7 構築・運用・管理パーフェクトガイド
7 thoughts on “「yum install epel-release」や「--enablerepo=remi」の意味,本当に理解して使ってますか?”