目次
はじめに
CentOSの標準リポジトリ(Base、Updates、Extras)で提供されているバージョンより、新しいバージョンのパッケージをインストールする場合の方法として、CentOSコミュニティのSoftware Collections SIGで維持、管理されているSCLリポジトリが利用できます。
数年前は、別々のリポジトリからパッケージをインストールしていましたが、SCLリポジトリのみで標準リポジトリに無いパッケージや、新しいバージョンのパッケージをインストールできます。
VagrantとVirtualBoxで構築した仮想マシン上のCentOS 7.4に、SCLパッケージによりCakePHP3が利用できるLAMP環境を構築します。この構築を通して、SCLパッケージの仕組みにより、通常のパッケージとは異なる部分をまとめます。
ソフトウェアコレクションについては「ソフトウェアコレクション(SCL:Software Collections)とは?」で、まとめています。このページだけでも作業は進められます。
「[CentOS7、SCL(Software Collections)リポジトリからのLAMP環境構築について(後編)](https://stupiddog.jp/note/archives/1115)」でCakePHPアプリ(CMSチュートリアル)の実行までの設定をまとめてます。
用語説明
SCLリポジトリとは?
SCLパッケージを提供するためのリポジトリです。
SCL (Software Collections) パッケージとは?
ソフトウェア・コレクションの仕組みに沿って作られたRPMパッケージです。
SCL (Software Collections)とは?
近年の長いサポートライフサイクルの間でも、安定した最新版のソフトウェアコンポーネントを利用できるよう考えられた仕組みで、既存システムを上書きせずに、複数のバージョンの同じソフトウェアコンポーネントを同時にシステムにインストールできます。
Redhatで考えられ、Red Hat Enterprise LinuxとCentOSで利用できます。
(詳細は What are Software Collectionsや、Red Hat Software Collections)
Software Collections SIGとは?
CentOSのSCLパッケージを主に扱っているSIGです。
SCLパッケージの配布は、centos.orgとSoftwareCollections.orgを介して行われます。
SIG (Special Interest Group)とは?
特定の話題ごとに作成されたCentOSコミュニティ内の小規模なグループです。
検証環境
ホスト環境
- macOS 10.12.6 Sierra
- Vagrant 2.0.1
- VirtualBox 5.2.6r120293
ゲスト環境(仮想マシン)
- CentOS 7.4.1801 (CentOSが公式で維持、管理しているBOXイメージ)
https://app.vagrantup.com/centos/boxes/7
概要
以下の手順で構築・設定を行います。
- 仮想マシンの構築
- 仮想マシン構築後のソフトウェア構成確認
- SCLリポジトリの追加
- LAMP環境に必要なパッケージのインストール
- 実行確認
仮想マシンの構築
VagrantとVirtualBoxがインストールされている状態で次の手順で仮想マシンを構築します。
(主目的がSCLについてなので、仮想マシン構築の詳細説明は省きます)
- Vagrantのプロジェクトのルートディレクトリを作成し、設定ファイル(Vagrantfile)を作成します。
~$ mkdir -p vm/lamp
~$ cd vm/lamp
~/vm/lamp $ vagrant init -m
~/vm/lamp $ ls
Vagrantfile
vagrant init
コマンドで作成されたVagrantfile
の中身を以下の内容に置き換えます。
#
# Vagrantfile
#
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.box_version = "1801.02"
config.vm.network "private_network", ip:"192.168.202.201"
config.vm.hostname = "www.local"
config.vbguest.auto_update = false
config.vbguest.no_remote = true
config.vm.provider "virtualbox" do |vb|
vb.memory = 4096
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "off"]
end
end
vagrant up
により仮想マシンを構築、起動します。
~/vm/lamp $ vagrant up
仮想マシン構築後のソフトウェア構成確認
vagrant ssh
コマンドで構築した仮想マシンへSSHログインし、仮想マシン構築後の状態を確認します。
~/vm/lamp $ vagrant ssh
[vagrant@www ~]$
リポジトリリスト
3つの標準リポジトリ(Base、Updates、Extras)が有効な状態です。
[vagrant@www ~]$ yum repolist -q
repo id repo name status
base/7/x86_64 CentOS-7 - Base 9,591
extras/7/x86_64 CentOS-7 - Extras 388
updates/7/x86_64 CentOS-7 - Updates 1,929
標準パッケージの状況
OS以外の各パッケージが少々古いバージョンです。
php5.4に関しては、セキュリティサポートも含めて公式サポートが終了しています。
Webフレームワークの必要条件でも、CakePHP3はphp5.6以降、Laravel 5.6はphp7.1.3以降なので条件不足です。
LAMPのL (Linux)
これは既にインストール済みのCentOS 7.4です。
[vagrant@www ~]$ cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
LAMPのA (Apache httpd)
CentOS Wiki – CentOSの製品仕様 – Web Serverから、httpd 2.4.6 (apache)が利用可能です。
[vagrant@www ~]$ yum -q list httpd
Available Packages
httpd.x86_64 2.4.6-67.el7.centos.6 updates
LAMPのM (MySQL)
CentOS Wiki – CentOSの製品仕様 – Databaseから、MariaDB 5.5.xが標準対応です。
[vagrant@www ~]$ yum -q list mariadb
Available Packages
mariadb.x86_64 1:5.5.56-2.el7 base
標準対応のDatabaseがMySQLからMariaDBに変わったため、現在の標準リポジトリにはMySQLパッケージがありません。(SCLリポジトリからMySQLをインストールできます)
LAMPのP (PHP)
CentOS Wiki – CentOSの製品仕様 – Programming Languagesから、php5.4が利用可能です。
[vagrant@www ~]$ yum -q list php | cat
Available Packages
php.x86_64 5.4.16-43.el7_4 updates
SCLリポジトリの追加
SCLリポジトリを登録するためのパッケージはCentOS Extrasリポジトリに含まれるので、yumコマンドによりSCLリポジトリを追加できます。
インストール
[vagrant@www ~]$ sudo yum install centos-release-scl-rh
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 centos-release-scl-rh.noarch 0:2-2.el7.centos will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==========================================================================================
Package Arch Version Repository Size
==========================================================================================
Installing:
centos-release-scl-rh noarch 2-2.el7.centos extras 12 k
Transaction Summary
==========================================================================================
Install 1 Package
Total download size: 12 k
Installed size: 19 k
Is this ok [y/d/N]: y
Downloading packages:
warning: /var/cache/yum/x86_64/7/extras/packages/centos-release-scl-rh-2-2.el7.centos.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for centos-release-scl-rh-2-2.el7.centos.noarch.rpm is not installed
centos-release-scl-rh-2-2.el7.centos.noarch.rpm | 12 kB 00:00:00
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
Package : centos-release-7-4.1708.el7.centos.x86_64 (@anaconda)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Is this ok [y/N]: y
GPG keyに対する警告について(標準リポジトリ)
初回のyum install
ではGPG Keyがインポートされていないので警告が出ます。GPG Keyのファイルはローカルにあるので、問い合わせにyと答えればインポートされます。
GPG Keyは公式サイトで公開されているので、一応Fingerprint
を確認してからインポートします。
SCLリポジトリの確認
[vagrant@www ~]$ yum -q repolist
repo id repo name status
base/7/x86_64 CentOS-7 - Base 9,591
centos-sclo-rh/x86_64 CentOS-7 - SCLo rh 6,640
extras/7/x86_64 CentOS-7 - Extras 388
updates/7/x86_64 CentOS-7 - Updates 1,929
「centos-sclo-rh/x86_64 CentOS-7 – SCLo rh」が追加されたSCLリポジトリです。
LAMP環境に必要なパッケージのインストール
SCLリポジトリからインストールできるSCLパッケージは標準パッケージとは異なり、それぞれが衝突しないように命名ガイドに従って一意の名前が付けられています。また、インストールされる場所も異なります。
(詳細はPackaging Guide – 2.5. Software Collection Package Names)
必要なパッケージを調べる場合はBrowse Collectionsで検索できます。
LAMP環境に必要なパッケージは以下の通りです。(2018.1.28時点)
# | パッケージ名 | コンポーネント |
---|---|---|
1 | httpd24 | Apache HTTP Server 2.4 |
2 | rh-mysql57 | MySQL 5.7 |
3 | rh-php71 | PHP7.1 with PEAR 1.10 |
インストール
パッケージ名が一意なので--enablerepo
でリポジトリを指定する必要はありません。
GPG keyに対する警告について(SCLリポジトリ)
ここでも、初回はGPG keyがインポートされていないので警告がでます。
...
warning: /var/cache/yum/x86_64/7/centos-sclo-rh/packages/httpd24-1.1-18.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID f2ee9d55: NOKEY
Public key for httpd24-1.1-18.el7.x86_64.rpm is not installed
Importing GPG key 0xF2EE9D55:
Userid : "CentOS SoftwareCollections SIG (https://wiki.centos.org/SpecialInterestGroup/SCLo) <security@centos.org>"
Fingerprint: c4db d535 b1fb ba14 f8ba 64a8 4eb8 4e71 f2ee 9d55
Package : centos-release-scl-rh-2-2.el7.centos.noarch (@extras)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
Is this ok [y/N]:
SCLリポジトリのGPG KeyはCommunity Driven Project keys – Software Collections SIGです。Fingerprint
を確認してインポートします。
Apache httpd 2.4
[vagrant@www ~]$ sudo yum -q install httpd24
==========================================================================================
Package Arch Version Repository Size
==========================================================================================
Installing:
httpd24 x86_64 1.1-18.el7 centos-sclo-rh 4.5 k
Installing for dependencies:
apr x86_64 1.4.8-3.el7_4.1 updates 103 k
apr-util x86_64 1.5.2-6.el7 base 92 k
audit-libs-python x86_64 2.7.6-3.el7 base 73 k
checkpolicy x86_64 2.5-4.el7 base 290 k
httpd24-httpd x86_64 2.4.27-8.el7 centos-sclo-rh 1.4 M
httpd24-httpd-tools x86_64 2.4.27-8.el7 centos-sclo-rh 86 k
httpd24-libnghttp2 x86_64 1.7.1-6.el7 centos-sclo-rh 61 k
httpd24-runtime x86_64 1.1-18.el7 centos-sclo-rh 28 k
libcgroup x86_64 0.41-13.el7 base 65 k
libsemanage-python x86_64 2.5-8.el7 base 104 k
mailcap noarch 2.1.41-2.el7 base 31 k
policycoreutils-python x86_64 2.5-17.1.el7 base 446 k
python-IPy noarch 0.75-6.el7 base 32 k
scl-utils x86_64 20130529-18.el7_4 updates 24 k
setools-libs x86_64 3.3.8-1.1.el7 base 612 k
Transaction Summary
==========================================================================================
Install 1 Package (+15 Dependent packages)
Is this ok [y/d/N]: y
MySQL5.7
[vagrant@www ~]$ sudo yum -q install rh-mysql57
==========================================================================================
Package Arch Version Repository Size
==========================================================================================
Installing:
rh-mysql57 x86_64 2.3-3.el7 centos-sclo-rh 6.4 k
Installing for dependencies:
perl x86_64 4:5.16.3-292.el7 base 8.0 M
perl-Carp noarch 1.26-244.el7 base 19 k
perl-Encode x86_64 2.51-7.el7 base 1.5 M
perl-Exporter noarch 5.68-3.el7 base 28 k
perl-File-Path noarch 2.09-2.el7 base 26 k
perl-File-Temp noarch 0.23.01-3.el7 base 56 k
perl-Filter x86_64 1.49-3.el7 base 76 k
perl-Getopt-Long noarch 2.40-2.el7 base 56 k
perl-HTTP-Tiny noarch 0.033-3.el7 base 38 k
perl-PathTools x86_64 3.40-5.el7 base 82 k
perl-Pod-Escapes noarch 1:1.04-292.el7 base 51 k
perl-Pod-Perldoc noarch 3.20-4.el7 base 87 k
perl-Pod-Simple noarch 1:3.28-4.el7 base 216 k
perl-Pod-Usage noarch 1.63-3.el7 base 27 k
perl-Scalar-List-Utils x86_64 1.27-248.el7 base 36 k
perl-Socket x86_64 2.010-4.el7 base 49 k
perl-Storable x86_64 2.45-3.el7 base 77 k
perl-Text-ParseWords noarch 3.29-4.el7 base 14 k
perl-Time-HiRes x86_64 4:1.9725-3.el7 base 45 k
perl-Time-Local noarch 1.2300-2.el7 base 24 k
perl-constant noarch 1.27-2.el7 base 19 k
perl-libs x86_64 4:5.16.3-292.el7 base 688 k
perl-macros x86_64 4:5.16.3-292.el7 base 43 k
perl-parent noarch 1:0.225-244.el7 base 12 k
perl-podlators noarch 2.5.1-3.el7 base 112 k
perl-threads x86_64 1.87-4.el7 base 49 k
perl-threads-shared x86_64 1.43-6.el7 base 39 k
rh-mysql57-lz4 x86_64 r131-5.el7 centos-sclo-rh 71 k
rh-mysql57-mecab x86_64 0.996-1.el7.8 centos-sclo-rh 383 k
rh-mysql57-mysql x86_64 5.7.19-6.el7 centos-sclo-rh 8.3 M
rh-mysql57-mysql-common x86_64 5.7.19-6.el7 centos-sclo-rh 88 k
rh-mysql57-mysql-config x86_64 5.7.19-6.el7 centos-sclo-rh 60 k
rh-mysql57-mysql-errmsg x86_64 5.7.19-6.el7 centos-sclo-rh 273 k
rh-mysql57-mysql-server x86_64 5.7.19-6.el7 centos-sclo-rh 19 M
rh-mysql57-runtime x86_64 2.3-3.el7 centos-sclo-rh 1.2 M
Transaction Summary
==========================================================================================
Install 1 Package (+35 Dependent packages)
Is this ok [y/d/N]: y
PHP7.1
[vagrant@www ~]$ sudo yum -q install rh-php71
==========================================================================================
Package Arch Version Repository Size
==========================================================================================
Installing:
rh-php71 x86_64 1-1.el7 centos-sclo-rh 4.1 k
Installing for dependencies:
libxslt x86_64 1.1.28-5.el7 base 242 k
rh-php71-php-cli x86_64 7.1.8-1.el7 centos-sclo-rh 2.7 M
rh-php71-php-common x86_64 7.1.8-1.el7 centos-sclo-rh 648 k
rh-php71-php-json x86_64 7.1.8-1.el7 centos-sclo-rh 52 k
rh-php71-php-pear noarch 1:1.10.4-1.el7 centos-sclo-rh 356 k
rh-php71-php-process x86_64 7.1.8-1.el7 centos-sclo-rh 61 k
rh-php71-php-xml x86_64 7.1.8-1.el7 centos-sclo-rh 159 k
rh-php71-php-zip x86_64 7.1.8-1.el7 centos-sclo-rh 89 k
rh-php71-runtime x86_64 1-1.el7 centos-sclo-rh 1.1 M
Transaction Summary
==========================================================================================
Install 1 Package (+9 Dependent packages)
Is this ok [y/d/N]: y
CakePHP3に必要なPHP拡張
いくつかのパッケージは依存パッケージとしてインストールされていますが、CakePHP3を利用するために不足しているパッケージを追加します。
必要なパッケージの一覧
# | パッケージ名 | コンポーネント/PHP拡張 |
---|---|---|
1 | rh-php71-php-intl | intl PHP拡張 |
2 | rh-php71-php-mbstring | mbstring PHP拡張 |
3 | rh-php71-php-xml | simplexml PHP拡張 (インストール済) |
4 | rh-php71-php-zip | zip PHP拡張 (インストール済)(composerで必要となります) |
5 | rh-php71-php-pdo | PDO PHP拡張 |
6 | rh-php71-php-mysqlnd | MySQL Native Driver |
7 | rh-php71-php | mod_php(apacheでphpを処理するモジュール) |
[vagrant@www ~]$ sudo yum install -q rh-php71-php rh-php71-php-{intl,mbstring,xml,pdo,mysqlnd}
Package rh-php71-php-xml-7.1.8-1.el7.x86_64 already installed and latest version
==========================================================================================
Package Arch Version Repository Size
==========================================================================================
Installing:
rh-php71-php x86_64 7.1.8-1.el7 centos-sclo-rh 1.3 M
rh-php71-php-intl x86_64 7.1.8-1.el7 centos-sclo-rh 165 k
rh-php71-php-mbstring x86_64 7.1.8-1.el7 centos-sclo-rh 521 k
rh-php71-php-mysqlnd x86_64 7.1.8-1.el7 centos-sclo-rh 165 k
rh-php71-php-pdo x86_64 7.1.8-1.el7 centos-sclo-rh 98 k
Installing for dependencies:
libicu x86_64 50.1.2-15.el7 base 6.9 M
Transaction Summary
==========================================================================================
Install 5 Packages (+1 Dependent package)
Is this ok [y/d/N]: y
Git
CakePHP3のインストール時に利用するcomposer
コマンドで必要になります。
[vagrant@www ~]$ sudo yum install -q rh-git29
==========================================================================================
Package Arch Version Repository Size
==========================================================================================
Installing:
rh-git29 x86_64 2.3-4.el7 centos-sclo-rh 2.9 k
Installing for dependencies:
emacs-filesystem noarch 1:24.3-20.el7_4 updates 58 k
httpd24-libcurl x86_64 7.47.1-4.el7 centos-sclo-rh 260 k
libgnome-keyring x86_64 3.12.0-1.el7 base 109 k
perl-Error noarch 1:0.17020-2.el7 base 32 k
perl-TermReadKey x86_64 2.30-20.el7 base 31 k
rh-git29-git x86_64 2.9.3-3.el7 centos-sclo-rh 983 k
rh-git29-git-core x86_64 2.9.3-3.el7 centos-sclo-rh 3.4 M
rh-git29-git-core-doc x86_64 2.9.3-3.el7 centos-sclo-rh 2.2 M
rh-git29-perl-Git noarch 2.9.3-3.el7 centos-sclo-rh 35 k
rh-git29-runtime x86_64 2.3-4.el7 centos-sclo-rh 25 k
Transaction Summary
==========================================================================================
Install 1 Package (+10 Dependent packages)
Is this ok [y/d/N]: y
SCLパッケージがインストールされる場所
/opt
以下にサブディレクトリが作成されます。
[vagrant@www ~]$ find /opt -maxdepth 2
/opt
/opt/rh
/opt/rh/httpd24
/opt/rh/rh-mysql57
/opt/rh/rh-php71
/opt/rh/rh-git29
SCLパッケージ間での連携
SCLパッケージ内で依存関係を持ち、共通ライブラリの配置や、デフォルトで実行できる設定ファイルなどで連携が取れています。これにより、少ない手順で環境の構築が行えます。
例としてmod_php
を提供するrh-php71-php
パッケージを確認すると、httpd24
パッケージで配置されるディレクトリに、各種ファイルを配置する構成なのが分かります。
[vagrant@www ~]$ repoquery -ql rh-php71-php
/opt/rh/httpd24/root/etc/httpd/conf.d/rh-php71-php.conf
/opt/rh/httpd24/root/etc/httpd/conf.modules.d/15-rh-php71-php.conf
/opt/rh/httpd24/root/usr/lib64/httpd/modules/librh-php71-php7.so
/opt/rh/httpd24/root/usr/share/httpd/icons/rh-php71-php.gif
/opt/rh/rh-php71/register.content/var/opt/rh/rh-php71/lib/php/session
/opt/rh/rh-php71/register.content/var/opt/rh/rh-php71/lib/php/wsdlcache
/var/opt/rh/rh-php71/lib/php/opcache
/var/opt/rh/rh-php71/lib/php/session
/var/opt/rh/rh-php71/lib/php/wsdlcache
librh-php71-php7.so
が共通ライブラリ、rh-php71-php.conf
がmod_php
を使うための設定ファイルです。
設定ファイルを編集することなく、httpd24
サービスを起動すだけでphp
の拡張子を持ったファイルを処理することができます。
実行確認
Apache httpdの起動
systemctl
コマンドでhttpd24-httpd
サービスを起動します。
[vagrant@www ~]$ sudo systemctl start httpd24-httpd
[vagrant@www ~]$ sudo systemctl status httpd24-httpd
● httpd24-httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd24-httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2018-02-09 18:36:41 UTC; 10min ago
Main PID: 3309 (httpd)
Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec: 0 B/sec"
CGroup: /system.slice/httpd24-httpd.service
├─3309 /opt/rh/httpd24/root/usr/sbin/httpd -DFOREGROUND
├─3310 /opt/rh/httpd24/root/usr/sbin/httpd -DFOREGROUND
├─3311 /opt/rh/httpd24/root/usr/sbin/httpd -DFOREGROUND
├─3312 /opt/rh/httpd24/root/usr/sbin/httpd -DFOREGROUND
├─3313 /opt/rh/httpd24/root/usr/sbin/httpd -DFOREGROUND
└─3314 /opt/rh/httpd24/root/usr/sbin/httpd -DFOREGROUND
設定ファイル(httpd.conf)の位置
設定ファイルは/opt/rh/httpd24/root/etc/httpd/conf/httpd.conf
にあります。
DocumentRootの位置
初期状態でのDocumentRoot
の位置は/opt/rh/httpd24/root/var/www/html
です。
(後々、別の場所を使うので、初期状態の位置は気にせず進めます)
[vagrant@www www]$ grep -ir ^documentroot /opt/rh/httpd24/root/etc/httpd/conf/httpd.conf
DocumentRoot "/opt/rh/httpd24/root/var/www/html"
ファイルの配置
DocumentRoot
にindex.php
ファイルを以下の内容で作成します。
<?php
echo "<h1>らんぷ</h1>" . PHP_EOL;
phpinfo();
所有者、権限は以下の状態でかまいません。(CGIではないので実行権限は不要です)
[vagrant@www html]$ ll
total 4
-rw-r--r--. 1 root root 55 Feb 9 19:13 index.ph
サイトへアクセス
Vagrantfileでホスト名にwww.local
を指定しているので、ホストOSのブラウザでhttp://www.local/index.php
へアクセスすれば、このページを表示できます。
備考
ここまでの手順は、SELinuxを有効にしたままで行えます。
どうしても以下のようなHTTP ERROR 500
になる場合は、問題を減らすため一時的にSELinuxを監視だけにして原因を探ります。
[vagrant@www html]$ sudo setenforce 0
[vagrant@www html]$ getenforce
Permissive
まとめ
これで設定無しでインストール可能なパッケージのインストールが完了しました。
ソフトウェア・コレクション(SCL)はパッケージ名やインストール先が変わるので、違和感がありますがSCLリポジトリだけで必要なパッケージが揃うので管理が容易です。ただし、SCLリポジトリのパッケージの更新は各々のプロジェクトに任されているので廃れないことを祈るばかりです。
次はCakePHP3アプリを実行するところまで行います。