こんにちは。千本木です。
EC2で使えるAmazon Linuxの新バージョンであるAmazon Linux 2 の正式版がリリースされて10ヶ月近く経過しました。
正式版と言えども稼働実績が少ないため、従来のAmazon Linuxからの移行を様子見している方も多いのではないでしょうか。
今回Amazon Linux 2を触ってみたところ便利な機能がありましたので、紹介したいと思います。
Amazon Linux 2の中身
Amazon Linux 2を弄ってみると、systemdが採用されていたり、インストールされているパッケージバージョンからRHEL 7(CentOS 7)系をベースに開発されているようです。
例えばPHPのバージョンを確認するとCentOS 7の標準リポジトリと同じ5.4系が採用されていることがわかります。
# yum info php
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Available Packages
Name : php
Arch : x86_64
Version : 5.4.16
Release : 45.amzn2.0.6
Size : 1.4 M
Repo : amzn2-core/2/x86_64
Summary : PHP scripting language for creating dynamic web sites
URL : http://www.php.net/
License : PHP and Zend and BSD
Description : PHP is an HTML-embedded scripting language. PHP attempts to make it
: easy for developers to write dynamically generated web pages. PHP also
: offers built-in database integration for several commercial and
: non-commercial database management systems, so writing a
: database-enabled webpage with PHP is fairly simple. The most common
: use of PHP coding is probably as a replacement for CGI scripts.
:
: The php package contains the module (often referred to as mod_php)
: which adds support for the PHP language to Apache HTTP Server.
ですが、このPHP5.4系は既にPHP公式では開発はもちろんサポート自体も終了してしまっています。
2019年4月11日時点でサポートが終了しているPHPバージョンの一覧が以下のものです。
Unsupported Branches | php.net
https://www.php.net/eol.php
PHP7.0系までがサポート切れになっていることがわかります。
これはPHPに限ったことではなくPostgreSQLなども同様で、RHELベースのディストリビューションでは、開発元のサポートが終了しているバージョンを標準リポジトリで採用しているケースがあります。
十分に枯れているので安定的だと言えば確かにその通りですし、開発元のサポートが切れているとはいえ各ディストリビューションでの公式サポートは続きます。
ただ、セキュリティ面や機能面を考えると、これから構築して数年は動かそうというサーバでは、開発元のサポートが継続しているバージョンを使いたいですよね。
PHPに関して言えばremiリポジトリを使うという手段がありますが、既存パッケージと競合する場合もあり、ちょっと使い勝手が良くないです。
Software Collectionsを使うにしてもサポート期間が短いほか、インストールパスが通常と異なり癖があります。
tarballからインストールするなど他にも手段はありますが、もっと簡単にインストールができる仕組みはないものでしょうか。
Amazon Linux Extras
そんなユーザーの要望に応える仕組みがAmazon Linux 2にありました。
Amazon Linux Extrasです。
AWSの公式サイトから引用すると Amazon Linux Extrasは以下のように説明されています。
簡単に言ってしまうと、Amazonが公式サポートした新バージョンをyumで扱えるようにする仕組みです。
amazon-linux-extrasのコマンド概要
Amazon Linux Extrasを使うためにはamazon-linux-extrasコマンドを使用します。
helpコマンドで見てみると以下のようになります。
# amazon-linux-extras help
help See list of commands.
info See details of a specific package.
install Enables specified topics and installs their packages.
list Lists topics in the catalog. Some may be enabled.
Amazon Linux Extras software topics give you access to the most-recent
stable software you specifically choose, without the uncertainty of a
wholly new environment.
Best practice is to enable only one or two topics. More than that, and
you lose the benefits of working in a stable environment.
大体以下の内容です。トピックというのはamazon-linux-extrasで取り扱いが可能なアプリケーションのことです。
amazon-linux-extras help :ヘルプの呼び出し(↑の状況)
amazon-linux-extras info トピック名 :対象トピックの概要の表示
amazon-linux-extras install トピック名 :対象トピックのインストール
amazon-linux-extras list :トピック一覧の表示
ちなみにアンインストール方法は公開されていません。この場合、yum removeで削除するしかないですね。 ここだけが残念な仕様です。
amazon-linux-extrasを使ってみよう
listオプションを使ってトピック一覧を表示してみます。
# amazon-linux-extras list
0 ansible2 available [ =2.4.2 =2.4.6 ]
2 httpd_modules available [ =1.0 ]
3 memcached1.5 available [ =1.5.1 ]
4 nginx1.12 available [ =1.12.2 ]
5 postgresql9.6 available [ =9.6.6 =9.6.8 ]
6 postgresql10 available [ =10 ]
8 redis4.0 available [ =4.0.5 =4.0.10 ]
9 R3.4 available [ =3.4.3 ]
10 rust1 available \
[ =1.22.1 =1.26.0 =1.26.1 =1.27.2 =1.31.0 ]
11 vim available [ =8.0 ]
13 ruby2.4 available [ =2.4.2 =2.4.4 ]
15 php7.2 available \
[ =7.2.0 =7.2.4 =7.2.5 =7.2.8 =7.2.11 =7.2.13 =7.2.14
=7.2.16 ]
16 php7.1 available \
[ =7.1.22 =7.1.25 =7.1.27 ]
17 lamp-mariadb10.2-php7.2 available \
[ =10.2.10_7.2.0 =10.2.10_7.2.4 =10.2.10_7.2.5
=10.2.10_7.2.8 =10.2.10_7.2.11 =10.2.10_7.2.13
=10.2.10_7.2.14 =10.2.10_7.2.16 ]
18 libreoffice available [ =5.0.6.2_15 =5.3.6.1 ]
19 gimp available [ =2.8.22 ]
20 docker=latest enabled \
[ =17.12.1 =18.03.1 =18.06.1 ]
21 mate-desktop1.x available [ =1.19.0 =1.20.0 ]
22 GraphicsMagick1.3 available [ =1.3.29 ]
23 tomcat8.5 available \
[ =8.5.31 =8.5.32 =8.5.38 ]
24 epel available [ =7.11 ]
25 testing available [ =1.0 ]
26 ecs available [ =stable ]
27 corretto8 available [ =1.8.0_192 =1.8.0_202 ]
28 firecracker available [ =0.11 ]
29 golang1.11 available [ =1.11.3 ]
30 squid4 available [ =4 ]
31 php7.3 available [ =7.3.2 =7.3.3 ]
32 lustre2.10 available [ =2.10.5 ]
33 java-openjdk11 available [ =11 ]
34 lynis available [ =stable ]
多くのアプリケーションの様々なバージョンがありますね。
例えばPHPであれば、7.1 / 7.2 /7.3から選べます。
執筆時点でのPHP7.3の最新版は、7.3.4ですが、2019年3月7日にリリースされた7.3.3が選択できる状態になっていますので、頻繁に更新が行われていることもわかります。
この他にも標準リポジトリではインストールできないnginxも選択できます。
LAMP環境を簡単に使えるlamp-mariadb10.2-php7.2なんていうトピックもあります。
PHP7.3のインストールテスト
ではインストールしてみましょう。インストールは簡単で、以下のコマンドを実行します。
amazon-linux-extras install トピック名
試しにPHP7.3をインストールしてみます。
# amazon-linux-extras install php7.3
Installing php-pdo, php-fpm, php-mysqlnd, php-cli, php-json
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Cleaning repos: amzn2-core amzn2extra-docker amzn2extra-httpd_5f_modules amzn2extra-php7.3
13 metadata files removed
6 sqlite files removed
0 metadata files removed
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core | 2.4 kB 00:00:00
amzn2extra-docker | 1.3 kB 00:00:00
amzn2extra-httpd_5f_modules | 1.3 kB 00:00:00
amzn2extra-php7.3 | 1.3 kB 00:00:00
(1/6): amzn2-core/2/x86_64/group_gz | 2.4 kB 00:00:00
(2/6): amzn2-core/2/x86_64/updateinfo | 95 kB 00:00:00
(3/6): amzn2extra-docker/2/x86_64/primary_db | 51 kB 00:00:00
(4/6): amzn2extra-httpd_5f_modules/2/x86_64/primary_db | 3.5 kB 00:00:00
(5/6): amzn2extra-php7.3/2/x86_64/primary_db | 74 kB 00:00:00
(6/6): amzn2-core/2/x86_64/primary_db | 28 MB 00:00:00
Resolving Dependencies
--> Running transaction check
---> Package php-cli.x86_64 0:7.3.3-1.amzn2.0.1 will be installed
--> Processing Dependency: php-common(x86-64) = 7.3.3-1.amzn2.0.1 for package: php-cli-7.3.3-1.amzn2.0.1.x86_64
---> Package php-fpm.x86_64 0:7.3.3-1.amzn2.0.1 will be installed
---> Package php-json.x86_64 0:7.3.3-1.amzn2.0.1 will be installed
---> Package php-mysqlnd.x86_64 0:7.3.3-1.amzn2.0.1 will be installed
---> Package php-pdo.x86_64 0:7.3.3-1.amzn2.0.1 will be installed
--> Running transaction check
---> Package php-common.x86_64 0:7.3.3-1.amzn2.0.1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
======================================================================================================================================================
Package Arch Version Repository Size
======================================================================================================================================================
Installing:
php-cli x86_64 7.3.3-1.amzn2.0.1 amzn2extra-php7.3 4.9 M
php-fpm x86_64 7.3.3-1.amzn2.0.1 amzn2extra-php7.3 1.7 M
php-json x86_64 7.3.3-1.amzn2.0.1 amzn2extra-php7.3 70 k
php-mysqlnd x86_64 7.3.3-1.amzn2.0.1 amzn2extra-php7.3 237 k
php-pdo x86_64 7.3.3-1.amzn2.0.1 amzn2extra-php7.3 132 k
Installing for dependencies:
php-common x86_64 7.3.3-1.amzn2.0.1 amzn2extra-php7.3 1.1 M
Transaction Summary
======================================================================================================================================================
Install 5 Packages (+1 Dependent package)
Total download size: 8.1 M
Installed size: 34 M
Is this ok [y/d/N]: y
Downloading packages:
(1/6): php-common-7.3.3-1.amzn2.0.1.x86_64.rpm | 1.1 MB 00:00:00
(2/6): php-cli-7.3.3-1.amzn2.0.1.x86_64.rpm | 4.9 MB 00:00:00
(3/6): php-fpm-7.3.3-1.amzn2.0.1.x86_64.rpm | 1.7 MB 00:00:00
(4/6): php-json-7.3.3-1.amzn2.0.1.x86_64.rpm | 70 kB 00:00:00
(5/6): php-pdo-7.3.3-1.amzn2.0.1.x86_64.rpm | 132 kB 00:00:00
(6/6): php-mysqlnd-7.3.3-1.amzn2.0.1.x86_64.rpm | 237 kB 00:00:00
------------------------------------------------------------------------------------------------------------------------------------------------------
Total 22 MB/s | 8.1 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : php-common-7.3.3-1.amzn2.0.1.x86_64 1/6
Installing : php-json-7.3.3-1.amzn2.0.1.x86_64 2/6
Installing : php-pdo-7.3.3-1.amzn2.0.1.x86_64 3/6
Installing : php-mysqlnd-7.3.3-1.amzn2.0.1.x86_64 4/6
Installing : php-cli-7.3.3-1.amzn2.0.1.x86_64 5/6
Installing : php-fpm-7.3.3-1.amzn2.0.1.x86_64 6/6
Verifying : php-pdo-7.3.3-1.amzn2.0.1.x86_64 1/6
Verifying : php-cli-7.3.3-1.amzn2.0.1.x86_64 2/6
Verifying : php-fpm-7.3.3-1.amzn2.0.1.x86_64 3/6
Verifying : php-json-7.3.3-1.amzn2.0.1.x86_64 4/6
Verifying : php-mysqlnd-7.3.3-1.amzn2.0.1.x86_64 5/6
Verifying : php-common-7.3.3-1.amzn2.0.1.x86_64 6/6
Installed:
php-cli.x86_64 0:7.3.3-1.amzn2.0.1 php-fpm.x86_64 0:7.3.3-1.amzn2.0.1 php-json.x86_64 0:7.3.3-1.amzn2.0.1 php-mysqlnd.x86_64 0:7.3.3-1.amzn2.0.1
php-pdo.x86_64 0:7.3.3-1.amzn2.0.1
Dependency Installed:
php-common.x86_64 0:7.3.3-1.amzn2.0.1
Complete!
0 ansible2 available [ =2.4.2 =2.4.6 ]
2 httpd_modules=latest enabled [ =1.0 ]
3 memcached1.5 available [ =1.5.1 ]
4 nginx1.12 available [ =1.12.2 ]
5 postgresql9.6 available [ =9.6.6 =9.6.8 ]
6 postgresql10 available [ =10 ]
8 redis4.0 available [ =4.0.5 =4.0.10 ]
9 R3.4 available [ =3.4.3 ]
10 rust1 available \
[ =1.22.1 =1.26.0 =1.26.1 =1.27.2 =1.31.0 ]
11 vim available [ =8.0 ]
13 ruby2.4 available [ =2.4.2 =2.4.4 ]
_ php7.2 available \
[ =7.2.0 =7.2.4 =7.2.5 =7.2.8 =7.2.11 =7.2.13 =7.2.14
=7.2.16 ]
_ php7.1 available \
[ =7.1.22 =7.1.25 =7.1.27 ]
_ lamp-mariadb10.2-php7.2 available \
[ =10.2.10_7.2.0 =10.2.10_7.2.4 =10.2.10_7.2.5
=10.2.10_7.2.8 =10.2.10_7.2.11 =10.2.10_7.2.13
=10.2.10_7.2.14 =10.2.10_7.2.16 ]
18 libreoffice available [ =5.0.6.2_15 =5.3.6.1 ]
19 gimp available [ =2.8.22 ]
20 docker=latest enabled \
[ =17.12.1 =18.03.1 =18.06.1 ]
21 mate-desktop1.x available [ =1.19.0 =1.20.0 ]
22 GraphicsMagick1.3 available [ =1.3.29 ]
23 tomcat8.5 available \
[ =8.5.31 =8.5.32 =8.5.38 ]
24 epel available [ =7.11 ]
25 testing available [ =1.0 ]
26 ecs available [ =stable ]
27 corretto8 available [ =1.8.0_192 =1.8.0_202 ]
28 firecracker available [ =0.11 ]
29 golang1.11 available [ =1.11.3 ]
30 squid4 available [ =4 ]
31 php7.3=latest enabled [ =7.3.2 =7.3.3 ]
32 lustre2.10 available [ =2.10.5 ]
33 java-openjdk11 available [ =11 ]
34 lynis available [ =stable ]
あっという間にインストール完了です。
ちょっとわかりづらいですが、122行目のPHP7.3がenabledになりました。
なお、この状態でphp-pgsqlをyumでインストールしようとすると以下のようになります。
# yum install php-pgsql
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Resolving Dependencies
--> Running transaction check
---> Package php-pgsql.x86_64 0:7.3.3-1.amzn2.0.1 will be installed
--> Processing Dependency: libpq.so.5()(64bit) for package: php-pgsql-7.3.3-1.amzn2.0.1.x86_64
--> Running transaction check
---> Package postgresql-libs.x86_64 0:9.2.24-1.amzn2.0.1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
======================================================================================================================================================
Package Arch Version Repository Size
======================================================================================================================================================
Installing:
php-pgsql x86_64 7.3.3-1.amzn2.0.1 amzn2extra-php7.3 130 k
Installing for dependencies:
postgresql-libs x86_64 9.2.24-1.amzn2.0.1 amzn2-core 235 k
Transaction Summary
======================================================================================================================================================
Install 1 Package (+1 Dependent package)
Total download size: 364 k
Installed size: 1.0 M
Is this ok [y/d/N]:
しっかりPHP7.3系で依存関係を解決してくれますね。
別バージョンのPostgreSQLをインストールした場合の依存関係
ちなみにamazon-linux-extrasでPostgreSQL10をインストールした後で同様にphp-pgsqlをyumでインストールしてみても依存関係の問題は発生しません。
# amazon-linux-extras install postgresql10
略
# yum install php-pgsql
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Existing lock /var/run/yum.pid: another copy is running as pid 32534.
Another app is currently holding the yum lock; waiting for it to exit...
The other application is: yum
Memory : 100 M RSS (317 MB VSZ)
Started: Thu Apr 11 03:02:44 2019 - 00:04 ago
State : Running, pid: 32534
Resolving Dependencies
--> Running transaction check
---> Package php-pgsql.x86_64 0:7.3.3-1.amzn2.0.1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
======================================================================================================================================================
Package Arch Version Repository Size
======================================================================================================================================================
Installing:
php-pgsql x86_64 7.3.3-1.amzn2.0.1 amzn2extra-php7.3 130 k
Transaction Summary
======================================================================================================================================================
Install 1 Package
Total download size: 130 k
Installed size: 361 k
Is this ok [y/d/N]:
手軽に確実に素早く新バージョンを使うことができます。素晴らしい!
まとめ
インストールアプリケーションのバージョン選択は安定性を重視するのか、新機能やセキュリティを重視するのかで変わりますが、amazon-linux-extrasによって新バージョンも取り扱いが楽になりました。
サーバ管理者にとっては重大な脆弱性が発見された場合に、対応が早い最新版を選択し更新ができるこの仕組みは非常にありがたいのではないでしょうか。
amazon-linux-extrasだけでなく、今後Amazon Linux 2に搭載された新機能を発見したら紹介していきたいと思います。