Linux
AWS

Amazon Linux と Amazon Linux 2 の技術面の違い

Amazon Linux 向けに書いた Ansible Playbook を Amazon Linux 2 に対応させるときに気づいた点をまとめておきます。

個人ブログに書いた「Ansible で Amazon Linux と Amazon Linux 2 を見分ける」も参考にしてください。

TL;DR

Amazon Linux はもともと CentOS とよく似た構成なので、概ね CentOS 6 から 7 への変更点と同じです。

大きな変更点

init デーモン

init デーモンが Upstart から systemd に変更されています。 pstree コマンドで見ると PID 1 のデーモンが init から systemd に変わっていることがわかります。

Amazon_Linux_2
$ pstree -p --ascii
systemd(1)-+-agetty(3177)
           |-agetty(3178)
           |-amazon-ssm-agen(3204)-+-{amazon-ssm-agen}(3208)
           |                       |-{amazon-ssm-agen}(3209)
           |                       |-{amazon-ssm-agen}(3210)
           |                       |-{amazon-ssm-agen}(3211)
           |                       |-{amazon-ssm-agen}(3212)
           |                       |-{amazon-ssm-agen}(3213)
           |                       `-{amazon-ssm-agen}(3215)
           |-atd(3162)
           |-auditd(2567)---{auditd}(2568)
           |-chronyd(2630)
           |-crond(3164)
(snip)
Amazon_Linux
$ pstree -p --ascii
init(1)-+-acpid(2415)
        |-agetty(2605)
        |-amazon-ssm-agen(2250)-+-{amazon-ssm-agen}(2262)
        |                       |-{amazon-ssm-agen}(2263)
        |                       |-{amazon-ssm-agen}(2264)
        |                       |-{amazon-ssm-agen}(2265)
        |                       |-{amazon-ssm-agen}(2266)
        |                       |-{amazon-ssm-agen}(2271)
        |                       |-{amazon-ssm-agen}(2281)
        |                       |-{amazon-ssm-agen}(2282)
        |                       `-{amazon-ssm-agen}(2638)
        |-atd(2580)
        |-auditd(2258)---{auditd}(2259)
        |-crond(2566)
(snip)

ファイルシステム

ファイルシステムが ext4 から xfs に変更されています。

Amazon_Linux_2
$ df -T /dev/xvda1
Filesystem     Type 1K-blocks    Used Available Use% Mounted on
/dev/xvda1     xfs    8376300 1055844   7320456  13% /
Amazon_Linux
$ df -T /dev/xvda1
Filesystem     Type 1K-blocks    Used Available Use% Mounted on
/dev/xvda1     ext4   8123812 1072296   6951268  14% /

軽微な変更点

ユーザー

ec2-user の uid と gid が 500 から 1000 に変更されています。

Amazon_Linux_2
$ id
uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal)
Amazon_Linux
$ id
uid=500(ec2-user) gid=500(ec2-user) groups=500(ec2-user),10(wheel)

パッケージ管理

Yum リポジトリがひとつに集約されました。 /etc/yum.repos.d/ 以下を見ると、epel リポジトリが削除されたことがわかります。

Amazon_Linux_2
$ yum repolist
Loaded plugins: langpacks, update-motd
repo id                            repo name                              status
!amzn2-core/2017.12/x86_64         Amazon Linux 2 core repository         7,102
repolist: 7,102

$ ls -l /etc/yum.repos.d/
total 4
-rw-r--r-- 1 root root 1003 Dec 12 20:52 amzn2-core.repo
Amazon_Linux
$ yum repolist
Loaded plugins: priorities, update-motd, upgrade-helper
repo id                               repo name                           status
!amzn-main/latest                     amzn-main-Base                      5,883
!amzn-updates/latest                  amzn-updates-Base                     738
repolist: 6,621

$ ls -l /etc/yum.repos.d/
total 24
-rw-r--r-- 1 root root 1014 Nov  1 19:45 amzn-main.repo
-rw-r--r-- 1 root root  327 Nov  1 19:45 amzn-nosrc.repo
-rw-r--r-- 1 root root 1041 Nov  1 19:45 amzn-preview.repo
-rw-r--r-- 1 root root 1041 Nov  1 19:45 amzn-updates.repo
-rw-r--r-- 1 root root  957 Mar  1  2013 epel.repo
-rw-r--r-- 1 root root 1056 Mar  1  2013 epel-testing.repo

NTP クライアント

NTP クライアントが ntpd から chronyd に変更されています。

Amazon_Linux_2
$ ps aux | grep -e ntpd -e chronyd
chrony    2633  0.0  0.8 120480  4356 ?        S    22:53   0:00 /usr/sbin/chronyd
Amazon_Linux
$ ps aux | grep -e ntpd -e chronyd
ntp       2506  0.0  0.8  29772  4280 ?        Ss   22:53   0:00 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g

MTA

MTA が Sendmail から Postfix に変更されています。

Amazon_Linux_2
$ alternatives --display mta
mta - status is auto.
 link currently points to /usr/sbin/sendmail.postfix
/usr/sbin/sendmail.postfix - priority 30
 slave mta-mailq: /usr/bin/mailq.postfix
 slave mta-newaliases: /usr/bin/newaliases.postfix
 slave mta-pam: /etc/pam.d/smtp.postfix
 slave mta-rmail: /usr/bin/rmail.postfix
 slave mta-sendmail: /usr/lib/sendmail.postfix
 slave mta-mailqman: /usr/share/man/man1/mailq.postfix.1.gz
 slave mta-newaliasesman: /usr/share/man/man1/newaliases.postfix.1.gz
 slave mta-sendmailman: /usr/share/man/man1/sendmail.postfix.1.gz
 slave mta-aliasesman: /usr/share/man/man5/aliases.postfix.5.gz
Current `best' version is /usr/sbin/sendmail.postfix.
Amazon_Linux
$ alternatives --display mta
mta - status is auto.
 link currently points to /usr/sbin/sendmail.sendmail
/usr/sbin/sendmail.sendmail - priority 90
 slave mta-mailq: /usr/bin/mailq.sendmail
 slave mta-newaliases: /usr/bin/newaliases.sendmail
 slave mta-rmail: /usr/bin/rmail.sendmail
 slave mta-sendmail: /usr/lib/sendmail.sendmail
 slave mta-pam: /etc/pam.d/smtp.sendmail
 slave mta-sendmailman: /usr/share/man/man8/sendmail.sendmail.8.gz
 slave mta-mailqman: /usr/share/man/man1/mailq.sendmail.1.gz
 slave mta-newaliasesman: /usr/share/man/man1/newaliases.sendmail.1.gz
 slave mta-aliasesman: /usr/share/man/man5/aliases.sendmail.5.gz
Current `best' version is /usr/sbin/sendmail.sendmail.

まとめ

ひとつの Playbook の中で Amazon Linux と Amazon Linux 2 に対応するのはなかなか大変なので、fork して別の Playbook を書いたほうが楽かもしれませんね。