こんにちは。千本木です。
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系が採用されていることがわかります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# 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コマンドで見てみると以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
# 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オプションを使ってトピック一覧を表示してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# 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のインストールテスト
ではインストールしてみましょう。インストールは簡単で、以下のコマンドを実行します。
1 |
amazon-linux-extras install トピック名 |
試しにPHP7.3をインストールしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# 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でインストールしようとすると以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# 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でインストールしてみても依存関係の問題は発生しません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# 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に搭載された新機能を発見したら紹介していきたいと思います。