Amazon Linux2とAmazon Linuxの違いについて（メモ）

Amazon Linux2が発表されたので、今までのAmazonLinuxとの違いについてメモしてみます。
基本的にはRHEL7ベースに変わっているので、CentOS7の知識が役に立ちます。
検証にはHyper-V上にインストールしたAmazonLinux2(amzn2-hyperv-2017.12.0.20171212.2-x86_64.xfs.gpt)を使用しました。

- initからsystemdに変わった。
    - 今まで/etc/rc3.d/xxxとか作っていたり、chkconfigとかは使えない。
- ホスト名の設定方法が違う
    - Amazon Linux

    ```
     /etc/sysconfig/networkを編集
     /etc/hostnameを編集
    ```
    - Amazon Linux2
     
    ```
      hostnamectl set-hostname amazonlinux2.example.com
    ```
- epelリポジトリがない。Amazon公式リポジトリに色々入っていない。
    - CentOSのように、コミュニティリポジトリをガシガシ入れないといけない？
        - ミドルウエアはDockerでコンテナ化する前提なのかなぁ。
        - CentOSみたく、あとで相性問題でyum update出来ないとか起きそうだし、セキュリティパッチの提供とかあるので今まで通りAmazonのリポジトリから入れられると良いんだけどなぁ・・
- タイムゾーンの変更方法が違う
    - Amazon Linux
    
    ```
     /etc/sysconfig/clockを編集
     cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
    ```
    - Amazon Linux2

    ```
     timedatectl set-timezone Asia/Tokyo
    ```
- MySQLが公式リポジトリにない。一見MySQLがインストールされるように見えるが、MariaDBが入る。

    ```console
    [root@amazon ~]# yum install mysql
    Loaded plugins: langpacks, update-motd
    Resolving Dependencies
    --> Running transaction check
    ---> Package mariadb.x86_64 1:5.5.56-2.amzn2 will be installed
    --> Finished Dependency Resolution

    Dependencies Resolved

    ================================================================================
    Package        Arch          Version                   Repository         Size
    ================================================================================
    Installing:
    mariadb        x86_64        1:5.5.56-2.amzn2          amzn2-core        8.9 M

    Transaction Summary
    ================================================================================
    Install  1 Package
    ```

    - MySQLを入れる場合はコミュニティリポジトリを追加して入れるしかないっぽい。
    - 入るMariaDBのバージョンが微妙に古いが、amazon-linux-extrasでmariaDB単品で入れる方法がない？
         - ``amazon-linux-extras install lamp-mariadb10.2-php7.2`` とするとリポジトリが追加される＆`phpとMariaDBがインストールされる`のだが、`何故かMariaDBはクライアントしか入らない`ので注意。(書いてある通りphpとMariaDBしか入らないので、Apacheも入らないのですが、まさかlampと書いてあってDBサーバが入らないとは。RDS利用を想定？？)
- 同じく、PHPが5.4しかない。amazon-linux-extrasで入るのは7.2で、それ以外のバージョンは無いので、他のバージョンを入れたい場合はRemiなどで入れるしかない。ただしその場合`パッケージ名が違うので注意`
    - php71-devel -> php71-php-develなど。
    - 今のところalternatives --config phpで複数バージョンを切り替えられないようです。
    - 何故かphp-fpmが入るので、Nginx前提っぽい。

- ファイルシステムがXFSになったので、`fallocateで作ったファイルをswaponすることができない。`ので、SWAP用のEBSを別でつけて、スワップ領域とするか、DDで固定容量のスワップファイルを作成してマウントする。AmazonLinuxの頃にやっていた[クラスメソッドさんの記事](https://dev.classmethod.jp/cloud/ec2linux-swap-bestpractice/)は動きませんので、[EC2のCentOS7でSWAP領域を作る方法](http://kumonchu.com/aws/ec2-centos7-swap/)にあるようにすればいいのですが、`起動毎に数分かかる`のでちょっと・・・
    - ついでに、/etc/rc.localに実行権限は付いていないので注意です。

- その他
    - ~~Hyper-V版ではpostfixがインストールされていたのですが、EC2版ではMTAがインストールされていなかった。(sendmailコマンド自体がなかった)~~ 最新版IAMではsendmailコマンドがあったので何かの拍子に消えてだけかも。
    - Apache2.4が標準になったので、`パッケージ名が変更されています。`Chefなど構成管理を使っていると修正が必要
        - httpd24 -> httpd
        - mod_php70 -> mod_php(extra入れた場合)
        - mod24_ssl -> mod_ssl
    - Chefのohaiで取得できる情報が違いますので、レシピの条件分岐で注意しましょう。

        ```console
        [root@amazon ~]# ohai | grep platform
        "platform": "amazon",
        "platform_version":"2.0",
        "platform_family": "rhel",
            "platform": "x86_64-linux",
        ```

        - systemdになったので動くか不安でしたが、Chef側で検知できるので通常のserviceで問題ありませんでした。
    - ntpが動いていない！と思ったらchronydになったようです。
        - ntpqで時刻監視しているところは注意が必要。
    
        - ```ntpq```はないので、アンインストールしてntpを入れるか、```chronyc sources```が同等コマンドらしいので書き換える。


   - rsyslogがない！と思ったらsystemd-journald.serviceになったようです。
   
    ```console
     [root@amazon ~]# systemctl status rsyslog.service
    Unit rsyslog.service could not be found.
    [root@amazon ~]# systemctl status systemd-journald.service
    ● systemd-journald.service - Journal Service
    ```
    - ifconfigやpstreeは生き残っているみたいｗ
    - `yum check --security`を実行すると、Hyper-V環境だと何故かCPU100%で暴走しましたOrz
- 追記
    - amazon-linux-extrasでphp7.2を入れたところ、ssh2やzipなどエクステンションが全然足りない。
        - 結局amzn2-coreリポジトリを無効化してepelとremiから入れた。無効化すればパッケージ名を気にしなくてよいが、アップデート時に衝突する、yum update securityが効くのか疑問なので、コアのほうでパッケージが充実してほしい。
    - Apacheのバージョンが2.4.6となんと現行AmazonLinuxよりも古いため、`SSLSessionTicketsがエラーになる。`地味に嵌った。nginx使えという事なのかなぁ。
    - 標準で入っているPythonは2系ですが、pipが入っていないので個別インストールが必要
    - ふと気づいたら、/var/log配下が妙にさみしい。messageとかsecureとかmailとかcronとかのログが見当たらないぞ（汗 どこに行った？journaldが管理になったのかな？
        - journalctlコマンドで見ると見れる。CentOS7だとrsyslogにも転送しているとのことだが、AmazonLinux2ではrsyslogがインストールされていない。試しにrsyslogをインストールしてみた。

       ```
       yum install rsyslog
       systemctl enable rsyslog
       systemctl start rsyslog
       ```

       いつもの見慣れたログたちが無事出力された。