Chrony on Amazon Linux

表題の通り。先日の”Amazon Time Sync Service“の続き。

■ 環境

  • Chrony 3.2
  • Amazon Linux
  • AWS EC2

■ Amazon Time Sync Service

先日は”Chrony“をUbuntuで入れた。今回はAmazonLinuxでやってみる。

$ ps -ef | grep ntp
ntp       2571     1  0 Nov18 ?        00:00:01 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g
$

`ntp`が動いているのでこれを停止する。

$ sudo service ntpd stop

chronyをインストール。

$ sudo yum install chrony
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main                                                                                                       | 2.1 kB  00:00:00
amzn-updates                                                                                                    | 2.5 kB  00:00:00
Resolving Dependencies
--> Running transaction check
---> Package chrony.x86_64 0:3.2-1.22.amzn1 will be installed
--> Processing Dependency: libseccomp.so.2()(64bit) for package: chrony-3.2-1.22.amzn1.x86_64
--> Running transaction check
---> Package libseccomp.x86_64 0:2.3.1-2.4.amzn1 will be installed
--> Processing Conflict: chrony-3.2-1.22.amzn1.x86_64 conflicts ntp
--> Finished Dependency Resolution
Error: chrony conflicts with ntp-4.2.6p5-44.34.amzn1.x86_64
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
$

`ntp`とconflictしていると怒られた。というわけで`ntp`の削除を実施してから再度実行する。

$ sudo yum remove ntp
 :
$ sudo yum install chrony

あとは前回と同じように設定を入れ込む。

server 169.254.169.123 prefer iburst

設定ファイルはUbuntuの時とは違い、下記にあった。

/etc/chrony.conf

またサービス名もUbuntuの時は”chrony“であったが、こちらでは”chronyd“であった。ansibleのplaybookにする時等はいつものように注意が必要だ。

$ sudo service chronyd start

以上。

■ 関連

Amazon Time Sync Service

Amazon Time Sync Service

表題を使うように設定を変更する。re:inventで発表された表題を実際に使いたい。

■ 環境

  • Ubuntu 16.04
  • AWS EC2

■ chrony

現状では`ntpd`が動いているので止める。

$ ps -ef | grep ntp
ntp      19577     1  0 Sep22 ?        00:03:01 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 112:116
$
$ sudo systemctl stop ntp
$
$ ps -ef | grep ntp
$

`ntp`のパッケージ削除は後回しにするとして、`chrony`をインストールする。

$ sudo apt-cache search chrony
  :
chrony - Versatile implementation of the Network Time Protocol
  :
$
$ sudo apt-get install chrony

インストールしたら既に起動していた。

$ sudo systemctl status chrony
● chrony.service - LSB: Controls chronyd NTP time daemon
   Loaded: loaded (/etc/init.d/chrony; bad; vendor preset: enabled)
   Active: active (running) since Mon 2017-12-04 19:05:19 JST; 34s ago
     Docs: man:systemd-sysv-generator(8)
   CGroup: /system.slice/chrony.service
           └─3038 /usr/sbin/chronyd

Dec 04 19:05:17 host001 systemd[1]: Starting LSB: Controls chronyd NTP time daemon...
Dec 04 19:05:17 host001 chronyd[3038]: chronyd version 2.1.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP -DEBUG +ASYNCDNS
Dec 04 19:05:17 host001 chronyd[3038]: Initial frequency 18.920 ppm
Dec 04 19:05:19 host001 chronyd[3038]: Source XXX.XXX.XXX.XX1 online
Dec 04 19:05:19 host001 chronyd[3038]: Source XXX.XXX.XXX.XX2 online
Dec 04 19:05:19 host001 chronyd[3038]: Source XXX.XXX.XXX.XX3 online
Dec 04 19:05:19 host001 chronyd[3038]: Source XXX.XXX.XXX.XX4 online
Dec 04 19:05:19 host001 chrony[3017]: chronyd is running and online.
Dec 04 19:05:19 host001 systemd[1]: Started LSB: Controls chronyd NTP time daemon.
Dec 04 19:05:23 host001 chronyd[3038]: Selected source XXX.XXX.XXX.XX4

接続先を確認する。

$ sudo chronyc sources
210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^+ xxxxxxxxxxxxxxxxxxxx          2   6    77    92  +1700us[+1398us] +/-   31ms
^* ec2-XX-XX-X-XX.ap-northea     2   6   177    28  -1129us[-1423us] +/-   21ms
^- zzzzzzzzzzzz                  2   6   177    27   -363us[ -363us] +/-  162ms
^- aaaaaaaaaaaaaaa               2   6   177    27  -3461us[-3461us] +/-  106ms

ここで繋がった先が2つ目のようなのだが、EC2のどこかのIPのようである。これではちょいと問題がありそうなのでマニュアルを確認。

ネットワークタイムプロトコル (NTP) の構成
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/set-time.html#configure_ntp

日本語の方にはまだないようなので英語版で確認する。

Configuring the Amazon Time Sync Service
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html#configure-amazon-time-service

これを参考に、下記を`/etc/chrony/chrony.conf`に追記した。

server 169.254.169.123 prefer iburst

chronyを再起動し再度確認する。

$ sudo systemctl restart chrony
$
$ sudo chronyc sources
210 Number of sources = 5
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 169.254.169.123               3   7   377   126  +1540ns[+2000ns] +/- 1343us
^- ec2-XX-XX-X-XX.ap-northea     2   7   377   127   -336us[ -336us] +/-   19ms
^- aaaaaaaaaaaaaaaaaaaaaaaaa     2   7   377   127    -38us[  -38us] +/-   28ms
^- bbbbbbbbbbbbbbb               2   7   377   127   -245us[ -245us] +/-  113ms
^- ccccccccccccccccccccc         2   7   377    57  -2171us[-2171us] +/-   91ms
$

us“が”ns”に、”ms“が”us“になって凄く速くなったようだ。

これらの設定を他にもVPCで動いている各ホストにも入れ込むことにする。

ちなみにntpは後で削除しようと思っていたが、chronyをインストールする時に同時に削除されていた。

以上。

■ 関連

Chrony on Amazon Linux

sshdが起動しない

AWS EC2において表題の件に陥った。

■ 環境

  • AWS EC2
  • Amazon Linux

■ 接続できない

「SSHで接続できなくなった」

と相談を受けた。話を聞いてみると「/var を全て削除した」という事をやったらしい。状況がおかしいのでManagementConsoleからインスタンスを再起動してみたりもした。とのこと。

該当のインスタンスを停止し、EBSをデタッチ。別途復旧用のインスタンスを起動し、デタッチしたEBSを復旧用のインスタンスにアタッチ。復旧用インスタンスにSSHでアクセスし、アタッチしたEBSを`mount`する。そして中を確認した。

ログファイル等を見ているとsshdが起動した形跡がない。”/var/log/secure“が空っぽのままであったので”/etc/init.d/sshd“にログを仕込む。先ほどの手順を逆に行い、該当のインスタンスを起動してみるも、やはり`ssh`での接続はできなかった。

再度復旧用のインスタンスでEBSを`mount`して仕込んだログを見ると下記のメッセージが出力されていた。

failed to run commands: exit status 255
Missing privilege separation directory: /var/empty/sshd

とりあえず該当のディレクトリを作成し、再度インスタンスを起動したところ`ssh`での接続ができるようになった。

念のため、”openssh-server“を入れ直すことにしたのだが、”/var“を削除したことによって`yum`のデータベースも削除されてしまったのだろうエラーとなる。ので見た目だけではあるがインストールした。

$ sudo yum install openssh-server

他にもエラーが残っている気がするが、とりあえずの復旧としては終了。

以上。

EC2 Maintenance

表題の件について。

■ 環境

  • Amazon EC2

■ mail

下記の件名のメールが届いていた。

Amazon EC2 Maintenance - Maintenance [AWS Account: XXXXXXXXXXXX]

使用しているインスタンスでメンテナンスがあるようだ。1インスタンスのみであったし、対象は別に再起動されても問題のないものであったのだが、先に自身で再起動してしまうことにした。

対象のインスタンスで`reboot`コマンドで実施した。

再起動後にManagementConsoleから確認したが、「予定されているイベントが1件あります」は変わらず。下記を参照した。

Amazon EC2のメンテナンスのヘルプページ
https://aws.amazon.com/jp/maintenance-help/

上記によると、再起動後にManagementConsoleに反映するのに1時間ほど掛かるようである。よってしばし待つ。

と思って1時間ほど待っていたのだが、反映されず…。はて?と思っていると下記に気がついた。

インスタンスの予定されたイベント
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html?icmpid=docs_ec2_console#schedevents_actions_reboot

確認してみると今回通知が来ているのは”system-reboot“の方であった。「予定されたメンテナンス期間中にシステムの再起動が実行されるまで待つことをお勧めします。」とのことなので放置することにした。

以上。

AmazonLinuxでJSTに固定

AmazonLinuxにおいて表題の通り。”glibc“のパッケージを”update“した際に”JST“にしておいた時間が”UTC“に戻ってしまっていた。

■ 環境

  • Amazon Linux

■ /etc/localtime

/etc/localtime“はいつも変更をしている。

$ sudo cp /usr/share/zoneinfo/Japan /etc/localtime

これで”JST“に変わったと満足してしばらく放置してしまうことが多々ある。前述の通り”glibc“のパッケージを”update“した際に再度”UTC”に戻ってしまうという現象が発生する。

■ /etc/sysconfig/clock

このファイルも下記のように変更する。

$ cat /etc/sysconfig/clock
ZONE="Asia/Tokyo"
UTC=true
$

後はおとなしく次の”update“を待つべし。

以上。