前回はCentOSの主なyumレポジトリとしてRemi、EPEL、Software Collectionsについてまとめてみました。
今回はSoftware Collections(以下SCL)のyumを使ってLAMP環境を構築してみようと思います。
まずは事前準備としてSCLのyumレポジトリを登録します。
yum --enablerepo=extras install centos-release-scl
※なおこの記事ではCentOS 6.9で検証したものをご紹介しています。
MySQL
今回はMySQL 5.7をインストールしてみたいと思います。
まずは試しにyum search mysql
してみます。
いろいろ出てくるのですが主要なものを抜き出すと、以下の3つのパッケージがあることがわかります。
mysql55.x86_64 : Package that installs mysql55
rh-mysql56.x86_64 : Package that installs rh-mysql56
rh-mysql57.x86_64 : Package that installs rh-mysql57
それぞれのパッケージをyum info
コマンドで確認してみると、どのパッケージも"centos-sclo-rh"のレポジトリに格納されていることがわかります(下記の"Repo"のところです)。通常であればOracleが公開しているレポジトリをインストールする必要がありますが、SCLを使えばそれも不要です。
yum info rh-mysql57.x86_64
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
Available Packages
Name : rh-mysql57
Arch : x86_64
Version : 2.3
Release : 3.el6
Size : 6.4 k
Repo : centos-sclo-rh
Summary : Package that installs rh-mysql57
License : GPLv2+
Description : This is the main package for rh-mysql57 Software Collection, which installs
: necessary packages to use MySQL 5.7 server.
: Software Collections allow to install more versions of the same
: package by using alternative directory structure.
: Install this package if you want to use MySQL 5.7
: server on your system.
ここからはSCLのドキュメントを参考に進めていきます。
ドキュメントのとおり、こいつをyum install rh-mysql57
でインストールするとMySQLクライアントであるrh-mysql57-mysql
やrh-mysql57-mysql-server
もインストールされます。
インストール先は/opt/rh/rh-mysql57
です。SCLではどうやら他のyumパッケージと区別するためなのか/opt/rh
の下にパッケージ名のディレクトリを作ってそこにインストールされるようです。
/opt/rh/rh-mysql57
の下には下記のようになっています。
[root@localhost rh-mysql57]# ll
total 20
drwxr-xr-x. 3 root root 4096 Mar 7 06:04 .
drwxr-xr-x. 3 root root 4096 Mar 7 06:04 ..
-rw-r--r--. 1 root root 1045 Nov 16 2016 enable
dr-xr-xr-x. 19 root root 4096 Mar 7 06:04 root
-rw-r--r--. 1 root root 453 Oct 24 19:13 service-environment
そしてroot
の下はこうなっています。
r-xr-xr-x. 2 root root 4096 Nov 16 2016 bin
dr-xr-xr-x. 2 root root 4096 Nov 16 2016 boot
drwxr-xr-x. 2 root root 4096 Nov 16 2016 dev
drwxr-xr-x. 2 root root 4096 Nov 16 2016 home
dr-xr-xr-x. 3 root root 4096 Mar 7 06:04 lib
dr-xr-xr-x. 3 root root 4096 Mar 7 06:04 lib64
drwxr-xr-x. 2 root root 4096 Nov 16 2016 media
drwxr-xr-x. 2 root root 4096 Nov 16 2016 mnt
drwxr-xr-x. 2 root root 4096 Nov 16 2016 opt
dr-xr-xr-x. 2 root root 4096 Nov 16 2016 proc
dr-xr-x---. 2 root root 4096 Nov 16 2016 root
dr-xr-xr-x. 2 root root 4096 Nov 16 2016 sbin
drwxr-xr-x. 2 root root 4096 Nov 16 2016 selinux
drwxr-xr-x. 2 root root 4096 Nov 16 2016 srv
drwxr-xr-x. 2 root root 4096 Nov 16 2016 sys
drwxrwxrwt. 2 root root 4096 Nov 16 2016 tmp
drwxr-xr-x. 13 root root 4096 Mar 7 06:04 usr
CentOSのルートと同じ構造になっています。おなじみのmysqlコマンドやmysqldumpコマンドは/opt/rh/rh-mysql57/root/usr/bin
に格納されています。このように、SCLでは/opt/rh/パッケージ名/root
配下に仮想ルートを作成して、その下にコマンドファイルやライブラリがインストールされていくようです。
また、/opt/rh/rh-mysql57/enable
の中身はこうなっています。
# For binaries
export PATH="/opt/rh/rh-mysql57/root/usr/bin${PATH:+:${PATH}}"
# For header files
export CPATH="/opt/rh/rh-mysql57/root/usr/include${CPATH:+:${CPATH}}"
# For libraries during build
export LIBRARY_PATH="/opt/rh/rh-mysql57/root/usr/lib64${LIBRARY_PATH:+:${LIBRARY_PATH}}"
# For libraries during linking
export LD_LIBRARY_PATH="/opt/rh/rh-mysql57/root/usr/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"
# For man pages; empty field makes man to consider also standard path
export MANPATH="/opt/rh/rh-mysql57/root/usr/share/man:${MANPATH}"
# For Java Packages Tools to locate java.conf
export JAVACONFDIRS="/etc/opt/rh/rh-mysql57/java:${JAVACONFDIRS:-/etc/java}"
# For XMvn to locate its configuration file(s)
export XDG_CONFIG_DIRS="/etc/opt/rh/rh-mysql57/xdg:${XDG_CONFIG_DIRS:-/etc/xdg}"
# For systemtap
export XDG_DATA_DIRS="/opt/rh/rh-mysql57/root/usr/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
# For pkg-config
export PKG_CONFIG_PATH="/opt/rh/rh-mysql57/root/usr/lib64/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}"
パスを通したり必要な変数を定義したりしています。先程の仮想ルート配下のパスを参照していますね。
次にドキュメントの通り、scl enable rh-mysql57 bash
コマンドを実行します。
ドキュメントには
Start using the software collection
とだけ書いてありますが、実行内容としては、上記のenable
ファイルを読み込んでbashに登録するようです。$PATHを見てみましょう。
[root@localhost vagrant]# echo $PATH
/opt/rh/rh-mysql57/root/usr/bin:/sbin:/bin:/usr/sbin:/usr/bin
PATHが通っているのでmysql
コマンドを直接実行できますね。
マニュアルによると次はサービスの起動です。
service rh-mysql57-mysqld start
いつもどおりのservice mysqld start
ではないので注意が必要です。
psコマンドで確認してみます。
3533 ? S 0:00 /bin/sh /opt/rh/rh-mysql57/root/usr/bin/mysqld_safe --datadir=/var/opt/rh/rh-mysql57/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/rh-mysql57-mysqld/mysqld.pid --basedir=/opt/rh/rh-mysql57/root/usr --user=mysql
3759 ? Sl 0:00 /opt/rh/rh-mysql57/root/usr/libexec/mysqld --basedir=/opt/rh/rh-mysql57/root/usr --datadir=/var/opt/rh/rh-mysql57/lib/mysql --plugin-dir=/opt/rh/rh-mysql57/root/usr/lib64/mysql/plugin --log-error=/var/opt/rh/rh-mysql57/log/mysql/mysqld.log --pid-file=/var/run/rh-mysql57-mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
先程は/opt/rh/rh-mysql57/root
配下にいろんなものが格納されると説明しましたが、これを見る限り必ずしもそういうわけではないようです。pidやsockファイルはそれぞれ/var/lib/mysql/mysql.sock
、/var/run/rh-mysql57-mysqld/mysqld.pid
ですし、datadirも/var/opt/rh/rh-mysql57/lib/mysql
となっているので注意が必要です。
Apache Httpd
SCLのhttpdは2.4が提供されています。apacheの2.4のyumはあまり見かけない気がするので、それだけでもSCLを使う価値があるかもしれないですね。
こちらもSCLのドキュメントをみながらインストールしていきます。
yum install httpd24
scl enable httpd24 bash
service httpd24-httpd start
基本的な手順はMySQLと同じです。
apachectl
コマンドでコンパイルセッティングを見てみます。
[root@localhost ~]# apachectl -V
Server version: Apache/2.4.27 (Red Hat)
Server built: Oct 24 2017 14:22:43
Server's Module Magic Number: 20120211:68
Server loaded: APR 1.5.1, APR-UTIL 1.5.4
Compiled using: APR 1.5.1, APR-UTIL 1.5.4
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/opt/rh/httpd24/root/etc/httpd"
-D SUEXEC_BIN="/opt/rh/httpd24/root/usr/sbin/suexec"
-D DEFAULT_PIDLOG="/opt/rh/httpd24/root/var/run/httpd/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
今度は/opt/rh/httpd24
というディレクトリにインストールされています。
設定ファイルは/opt/rh/httpd24/root/etc/httpd
配下です。
PHP
最後にphpについて見ていこうと思います。
今回は7.0をインストールしてみます。
https://www.softwarecollections.org/en/scls/rhscl/rh-php70/
ちなみに7.1も配布されていますが、CentOS 6は対応しておらず、CentOS 7から対応しているようです。
yum install rh-php70
scl enable rh-php70 bash
今度は/opt/rh/rh-php70/
というディレクトリにインストールされます。
php -i
で詳細を見てみます。
php -i
phpinfo()
PHP Version => 7.0.10
System => Linux localhost.localdomain 2.6.32-696.18.7.el6.x86_64 #1 SMP Thu Jan 4 17:31:22 UTC 2018 x86_64
Build Date => Nov 3 2016 08:05:15
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /etc/opt/rh/rh-php70
Loaded Configuration File => /etc/opt/rh/rh-php70/php.ini
Scan this dir for additional .ini files => /etc/opt/rh/rh-php70/php.d
Additional .ini files parsed => /etc/opt/rh/rh-php70/php.d/20-bz2.ini,
/etc/opt/rh/rh-php70/php.d/20-calendar.ini,
/etc/opt/rh/rh-php70/php.d/20-ctype.ini,
/etc/opt/rh/rh-php70/php.d/20-curl.ini,
/etc/opt/rh/rh-php70/php.d/20-dom.ini,
/etc/opt/rh/rh-php70/php.d/20-exif.ini,
/etc/opt/rh/rh-php70/php.d/20-fileinfo.ini,
/etc/opt/rh/rh-php70/php.d/20-ftp.ini,
/etc/opt/rh/rh-php70/php.d/20-gettext.ini,
/etc/opt/rh/rh-php70/php.d/20-iconv.ini,
/etc/opt/rh/rh-php70/php.d/20-json.ini,
/etc/opt/rh/rh-php70/php.d/20-phar.ini,
/etc/opt/rh/rh-php70/php.d/20-posix.ini,
/etc/opt/rh/rh-php70/php.d/20-shmop.ini,
/etc/opt/rh/rh-php70/php.d/20-simplexml.ini,
/etc/opt/rh/rh-php70/php.d/20-sockets.ini,
/etc/opt/rh/rh-php70/php.d/20-sysvmsg.ini,
/etc/opt/rh/rh-php70/php.d/20-sysvsem.ini,
/etc/opt/rh/rh-php70/php.d/20-sysvshm.ini,
/etc/opt/rh/rh-php70/php.d/20-tokenizer.ini,
/etc/opt/rh/rh-php70/php.d/20-xml.ini,
/etc/opt/rh/rh-php70/php.d/20-xmlwriter.ini,
/etc/opt/rh/rh-php70/php.d/20-xsl.ini,
/etc/opt/rh/rh-php70/php.d/20-zip.ini,
/etc/opt/rh/rh-php70/php.d/30-wddx.ini,
/etc/opt/rh/rh-php70/php.d/30-xmlreader.ini
php.iniは/etc/opt/rh/rh-php70
配下にありました。
また、ためしにphp-fpmも入れてみたいと思います。
yum install rh-php70-php-fpm.x86_64
service rh-php70-php-fpm start
Starting php-fpm: [ OK ]
マニュアルではrh-php70
を入れればfpmも入ってくるような書き方ですが、fpm用のパッケージは別にインストールしなければなりませんので、ちょっと注意が必要です。
なお、mod_php的なパッケージは配布されていないようなので、mod_phpで動かしたい場合はSCLではちょっと都合が悪いです。ご注意ください。
まとめ
ということでSCLを使ってLAMP環境を構築してみました。
サービス名などが通常とちょっと違うので戸惑うかもしれませんが、インストール自体はSCLのページを見ながらやれば簡単です。
また設定ファイルの場所も変わったりしていますが、/opt/rh/
配下や/var/opt/rh
,/etc/opt/rh
などの下にあると思われますので、psコマンドで起動オプションを確認してみたりしてください。
参考になれば幸いです。