「yum install epel-release」や「--enablerepo=remi」の意味,本当に理解して使ってますか?

カテゴリ: Linux, PHP

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という別のパッケージが存在することを前提としているためです。

平野レミのつぶやきごはん ~140字レシピ

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 構築・運用・管理パーフェクトガイド



実践! CentOS 7 サーバー徹底構築

こちらもおススメ

4 thoughts on “「yum install epel-release」や「--enablerepo=remi」の意味,本当に理解して使ってますか?

コメントを残す

メールアドレスが公開されることはありません。