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

apt-get upgradeできない

表題の通り。

■ 環境

  • Ubuntu 16.04

■ apt-get upgrade

とある環境で、下記のようなメッセージが出力された。

$ sudo apt-get upgrade
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
$

誰かが実行したのか?不明だが確認することに。

プロセスを確認したところ、過去に実行されたまま放置されているプロセスが存在した。

$ ps -ef | grep apt
root       654 31494  0 11:19 pts/1    00:00:00 grep --color=auto apt
root     23198     1  0 Nov15 ?        00:00:00 sudo apt-get upgrade -y
root     23199 23198  0 Nov15 ?        00:02:39 apt-get upgrade -y
$
$ sudo kill 23198
$

プロセスを`kill`し再度実行。

$ sudo apt-get upgrade
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
$

出力されたメッセージの通り実行すると、過去の実行したまま入力待ちの状態であったようだ。

$ sudo dpkg --configure -a

最後に再度`upgrade`を実行する。

$ sudo apt-get upgrade

以上。

sudo: no tty present and no askpass program specified

表題のエラーが出ていたのでメモ。

■ 環境

  • Ubuntu 14.04, 16.04

■ sudo

`sudo`を使っている箇所で表題のメッセージが出力され、正しく値を取得できていないようであった。

sudo: no tty present and no askpass program specified

何かの作業のタイミングで”/etc/sudoers“が書き換わっていたのが原因のようであった。`sudo`を実行するユーザに権限がなくなってしまっていた。

$ sudo visudo

正しく編集し保存した。再度実行したところ、想定通りの結果を得られるようになった。

以上。

apt-getでエラー

Ubuntuにおいて表題の通り。

■ 環境

  • Ubuntu 16.04

■ apt-get

下記のようなエラーが出た。

$ sudo apt-get upgrade
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
$

周囲の使っていそうな人に確認したが、現在は誰も操作をしていないとのこと。しばらく待ったが状況は変わらなかったので下記で対処する。

$ ps -ef | grep apt

`apt-get`のプロセスを探して`kill`する。その後、下記で回復させる。

$ sudo dpkg --configure -a

念のため、完了後に下記も実施しておく。

$ sudo apt-get update
$ sudo apt-get upgrade

以上。

timedatectl

表題のコマンドを使う機会があったのでメモ。

■ 環境

  • Ubuntu 16.04

■ timedatectl

そういえば、最近は”/etc/localtime“を置き換えるわけではないんだっけ、と思いやってみた。

$ timedatectl
      Local time: Thu 2017-08-17 10:15:18 UTC
  Universal time: Thu 2017-08-17 10:15:18 UTC
        RTC time: Thu 2017-08-17 10:15:17
       Time zone: Etc/UTC (UTC, +0000)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: yes

Warning: The system is configured to read the RTC time in the local time zone.
         This mode can not be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.

現状は”UTC“の時間が返却される。設定するときには”timezone“の名称が必要なようなので、まずは一覧を得る。

$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
  :
Asia/Tokyo
  :
$

Asia/Tokyo“という文字列を発見したのでこれを設定する。

$ sudo timedatectl set-timezone Asia/Tokyo

再度確認する。

$ timedatectl
      Local time: Thu 2017-08-17 19:18:28 UTC
  Universal time: Thu 2017-08-17 10:18:28 UTC
        RTC time: Thu 2017-08-17 19:18:27
       Time zone: Etc/UTC (UTC, +0000)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: yes

Warning: The system is configured to read the RTC time in the local time zone.
         This mode can not be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.

また、`date`コマンドでも変わっていることを確認。

$ date
Thu Aug 17 19:18:28 JST 2017
$

以上。