Red Hat Software CollectionsとSCLについて調べたメモ
CentOSユーザーならお世話になっているだろうRemi Collet氏がブログに「Red Hat will provide PHP 7.1 for RHEL (and CentOS)」なる記事をポストされていた。タイトルだけ見て、デフォルトがPHP5.4.16から7.1系になるの?こんなタイミングで?と思ったら、そういう話ではなく。
なんでもRed Hat Software Collections(以下RHSCL)という新しめな安定版のソフトウェアコンポート集?があり、それの3.0でPHP7.1やnode8なんかを提供してくれるとのこと。
以下はRHSCLについてよくわかっていないので調べたメモ。
RHEL/CentOSの標準パッケージの運用ポリシー
RHSCLの前にまずは標準パッケージの運用ポリシーから。
CentOS公式のFAQにもある通り、RHEL/CentOSはエンプラ向けのため、新しいバージョンをどんどんサポートするのではなくあるバージョンを安定的、長期的(10年)に提供する、というポリシーがある。要は、「脆弱性対応で新しいバージョンにアップデートせざるを得ない時、そこに脆弱性の修正だけでなく後方互換性のない変更が入ってるとエンプラの現場じゃ辛くない?ウチがバージョンを維持したまま脆弱性対応なんかはバックポートするよ」と言ってくれている。
実際にバックポートされているかどうかは、rpmコマンドでchangelogが見れるのでそこで確認できる。
$ rpm -q --changelog php | head -10
* Fri Aug 05 2016 Remi Collet <rcollet@redhat.com> - 5.4.16-42
- bz2: fix improper error handling in bzread() CVE-2016-5399
* Mon Aug 01 2016 Remi Collet <rcollet@redhat.com> - 5.4.16-41
- gd: fix integer overflow in _gd2GetHeader() resulting in
heap overflow CVE-2016-5766
- gd: fix integer overflow in gdImagePaletteToTrueColor()
resulting in heap overflow CVE-2016-5767
- mbstring: fix double free in _php_mb_regex_ereg_replace_exec
CVE-2016-5768
RHSCL/SCL
とはいえ新しいバージョンのソフトウェアを使いたいよね、という場面は往々にしてある。そこで、じゃあライフサイクルは短くなるけどそれも提供しましょう、というのがRed Has Software Collections並びにCentOS向けのSoftware Collectionsということらしく、これらは
- 対象OSはRHEL/CentOSの6, 7
- ライフサイクルは3年
- 標準パッケージやシステムを破壊したり競合しないように設計されている
- インストール先が
/opt/rh/
だったり
- インストール先が
- 標準パッケージとの共存が可能(後述)
- RHSCLはRed Hatが、SCLはコミュニティが運用
などという特徴がある。
RHSCL3.0でサポートする予定のソフトウェアはRed Hatのブログで、それ以前のバージョンでサポートしているソフトウェアとそのサポート終了予定はRed Hatのサポートで確認できる。
SCLでサポートしているソフトウェアはDirectory — Software CollectionsやSpecialInterestGroup/SCLo/CollectionsList - CentOS Wikiで確認できそう(だけど、実際のリポジトリの状態より古い?)。
2つを見比べると、SCLでサポートしていないものはちらほらあるが、これは人的なリソースの具合に依存しているんだろうか…
RHSCL/SCLを使うメリットデメリット
- メリット
- 最長3年間はバージョン自体を上げることなく脆弱性対応が可能
- 公式リポジトリやRemiリポジトリからインストールした場合は、マイナー/メジャーバージョンアップを伴う可能性がある
- 公式のサポートが切れた後もしばらく脆弱性対応が継続されることがある
- 例えばPHP7.0であれば、公式のセキュリティサポートは2018年12月までなのに対し、RHSCL2.4提供のものは2019年11月まで
- ある程度新しいバージョンを使用可能
- 最長3年間はバージョン自体を上げることなく脆弱性対応が可能
- デメリット
- 脆弱性対応がバックポートされるまでに時間を要しうる
- 最新版への追従はできない
- (標準パッケージと比べてライフサイクルが短いため)バージョンアップの検証・実施が必要になるまでの期間が短い
CentOS7でSCLで提供されているPHP7.0系をインストール
実際にCentOS7でSCLリポジトリからPHP7.0をインストールし、有効化、標準パッケージとの共存、バックポートの有無を確認していく。
単純にPHPをインストールしてphp -v
しているだけなので、フレームワーク動かすやらはハマりどころがあるかもしれない。
テスト環境はVagrantでbento/centos-7.3
標準のphpをインストール
$ sudo yum install -y php
$ php -v
PHP 5.4.16 (cli) (built: Nov 6 2016 00:29:02)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
リポジトリを登録
$ sudo yum install -y centos-release-scl
$ ls /etc/yum.repos.d/CentOS-SCLo-scl*
/etc/yum.repos.d/CentOS-SCLo-scl.repo /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
PHP7.0をインストール
$ yum info rh-php70
Loaded plugins: fastestmirror
Determining fastest mirrors
* base: www.ftp.ne.jp
* epel: ftp.kddilabs.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
Available Packages
Name : rh-php70
Arch : x86_64
Version : 2.3
Release : 1.el7
Size : 4.0 k
Repo : centos-sclo-rh/x86_64
Summary : Package that installs PHP 7.0
License : GPLv2+
Description : This is the main package for rh-php70 Software Collection,
: that install PHP 7.0 language.
$ sudo yum install -y rh-php70
$ php -v
PHP 5.4.16 (cli) (built: Nov 6 2016 00:29:02)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
切り替え
$ scl enable rh-php70 bash
$ php -v
PHP 7.0.10 (cli) (built: Nov 3 2016 08:06:03) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
$ exit
exit
$ php -v
PHP 5.4.16 (cli) (built: Nov 6 2016 00:29:02)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
バックポートの確認…と思ったけど、PHP7.0ではまだ特にない様子なのでnginx1.8で確認
$ sudo yum install -y rh-nginx18
$ rpm -q --changelog rh-nginx18-nginx
* Mon Jun 20 2016 Joe Orton <jorton@redhat.com> - 1:1.8.1-1
- update to 1.8.1 (CVE-2016-0742 CVE-2016-0746 CVE-2016-0747)
- add security fix for CVE-2016-4450
* Fri Nov 13 2015 Jan Kaluza <jkaluza@redhat.com> - 1:1.8.0-4
- fix SELinux context of /var/opt and /etc/opt directories (#1280221)
常時PHP7.0を有効にする(scp enable
で実行している?スクリプトを/etc/profile.d/に置く)
sudo ln -s /opt/rh/rh-php70/enable /etc/profile.d/rh-php70.sh
雑感
- 継続的にバージョンアップなりの理解を得られにくい環境においては有効何だろうと思う
- サポート切れの日は分かっているので、いついつにバージョンアップする必要があります、というのは周知し、その時がきたらやる必要がある
- とはいえRHSCL/SCLでなく公式の安定版に追従していくことが可能であればそれが一番心に優しそう
- 必要なのは
- CI/CD環境を整備すること
- 経営層に、作業の必要性やそれにかかるコストへの理解を得ること
- 必要なのは
参考
- https://blog.remirepo.net/post/2017/10/05/Red-Hat-will-provide-PHP-7.1-for-RHEL-and-CentOS
- https://developers.redhat.com/blog/category/software-collections/
- https://wiki.centos.org/FAQ/General#head-472ce8446ebcfc82ca1800f775ba0e629ac835c7
- https://www.softwarecollections.org/en/docs/guide/#sect-Enabling_Support_for_Software_Collections