Armadilloフォーラム

Armadillo-640の時刻設定

k.sato

2024年7月2日 9時39分

佐藤です。

お世話になっております。

●コンテナ内からREST APIを使用した時刻設定
https://armadillo.atmark-techno.com/forum/armadillo/19677

上記で質問してArmadilloの時刻は変更できたのですが、
rebootコマンドで再起動し、dateコマンドで時刻を確認すると設定した時刻+9時間となっていました。

また、ABOS Webの時刻設定よりPCと時刻を同期させrebootした場合でも、
同じ様に+9時間ズレているのですが何か設定がおかしいのでしょうか?

ABOS Webのタイムゾーン設定もAsia/Tokyoとなっております。

以上、よろしくお願い致します。

コメント

at_dominique.m…

2024年7月2日 10時49分

佐藤さん
お世話になっています、
マルティネです。

> 同じ様に+9時間ズレているのですが何か設定がおかしいのでしょうか?

申し訳ございません、ABOS Web の不具合です。
Armadillo Base OS では時刻を UTC で保存していますが、ABOS Web は hwclock のデフォルトである localtime で保存してしまっていましたので、再起動の際にそのズレが発生します。

すぐに修正できますので、以下のコマンドを実行してください:

# 修正
armadillo:~# sed -i -e 's/hwclock --/hwclock -u --/' /usr/libexec/abos-web/time_setup.sh
# 確認
armadillo:~# grep hwclock /usr/libexec/abos-web/time_setup.sh
	hwclock -u --systohc \
# 永続化
armadillo:~# persist_file /usr/libexec/abos-web/time_setup.sh

その後にあらかじめ時刻を同期すると再起動してもずれないはずです。
今月のアップデートにも対応します。

よろしくお願いします。

マルティネ様

佐藤です。
素早い回答ありがとうございます。

> 今月のアップデートにも対応します。
対応よろしくお願いします。

●NTPサーバー同期間隔(chrony)
https://armadillo.atmark-techno.com/forum/armadillo/19865
また、REST APIにてNTPサーバの設定も行っているのですが、
設定変更後に「cat /etc/chrony/conf.d/servers.conf」で確認してから
再起動しても前回の設定に戻っている現象が発生しました。

時間を空けると保存出来たり、出来なかったり不安定なのですが、
設定変更から再起動までどれくらい空けなければならないというのがあれば教えてください。

それとも自分で「persist_file」をしなければならないのでしょうか?

以上、よろしくお願い致します。

at_dominique.m…

2024年7月2日 12時58分

佐藤さん

マルティネです。

> ●NTPサーバー同期間隔(chrony)
> https://armadillo.atmark-techno.com/forum/armadillo/19865
> また、REST APIにてNTPサーバの設定も行っているのですが、
> 設定変更後に「cat /etc/chrony/conf.d/servers.conf」で確認してから
> 再起動しても前回の設定に戻っている現象が発生しました。

すみません、こちらの問題については手元で再現できてません。

REST API で設定を変更した後に自動的に persist_file されるはずですが、何でしょうね。

REST API コマンドで設定した内容は /etc/chrony/conf.d/servers.conf に反映されていますが、再起動の際に戻ります、ということであっていますね?

念のため abos-web のバージョンと使ってるコマンドを教えていただけますか?

> 時間を空けると保存出来たり、出来なかったり不安定なのですが、
> 設定変更から再起動までどれくらい空けなければならないというのがあれば教えてください。

こちらについては、ネットワーク接続がある状態で initstepslew の設定があれば、コマンドが終了した時点でそちらのサーバーから時刻の取得が完了しています。

initstepslew を使わない場合、またはinitstepslew の時間いないにサーバーに連絡できなかった場合は普通の ntp スケジュールで取得していますので、これぐらいの期間で設定される保証はないです。
(サーバーの設定に「iburst」を設定した場合はネットワーク接続できた後の数十秒程度になると思います。iburst なければ数分かかると思います)

よろしくお願いします。

マルティネ様

佐藤です。

> REST API コマンドで設定した内容は /etc/chrony/conf.d/servers.conf に反映されていますが、再起動の際に戻ります、ということであっていますね?
あっています。

> 念のため abos-web のバージョンと使ってるコマンドを教えていただけますか?
abos-web のバージョンは「Version: 1.3.0」です。

コマンドは下記となります。

f'-X POST https://127.0.0.1:58080/api/time/ntp_config -d "servers=server {ntp} iburst" -d "initstepslew=5 {ntp}"'

> こちらについては、ネットワーク接続がある状態で initstepslew の設定があれば、コマンドが終了した時点でそちらのサーバーから時刻の取得が完了しています。
>
> initstepslew を使わない場合、またはinitstepslew の時間いないにサーバーに連絡できなかった場合は普通の ntp スケジュールで取得していますので、これぐらいの期間で設定される保証はないです。
> (サーバーの設定に「iburst」を設定した場合はネットワーク接続できた後の数十秒程度になると思います。iburst なければ数分かかると思います)
取得できないNTPサーバアドレスが指定されていた場合、
servers.conf とinitstepslew.confが変更されていても保存されないのでしょうか?

WindowsのNTPサーバーを有効にして確認していて他のPC相手では正常に取得できるのですが、
1台だけ同期出来なかったり、同期に時間がかかるものがありその環境で設定が保存されていないのかもしれません。

以上、よろしくお願い致します。

at_dominique.m…

2024年7月2日 14時07分

佐藤さん、

> > REST API コマンドで設定した内容は /etc/chrony/conf.d/servers.conf に反映されていますが、再起動の際に戻ります、ということであっていますね?
> あっています。

了解しました。

> > 念のため abos-web のバージョンと使ってるコマンドを教えていただけますか?
> abos-web のバージョンは「Version: 1.3.0」です。
>
> コマンドは下記となります。

ありがとうございます。
すみません、やっぱり再現できません。

再起動の際にアプリケーションから別のサーバーを設定する可能性はありますか?

また、abos-web で設定した後に /etc/chrony/conf.d/servers.conf の他に /live/rootfs/etc/chrony/conf.d/servers.conf の内容も確認してみてください。
/live/rootfs には読み取り専用の / パーティションの内容を確認できますので、そのファイルの内容が更新された場合は persist_file が正しく実行されたことになります。

/live/rootfs が更新されなかった場合は追加質問しますが、された場合はやっぱり起動時に何かから設定が再び変更されると思いますので、そちらを確認していただければ幸いです。

> 取得できないNTPサーバアドレスが指定されていた場合、
> servers.conf とinitstepslew.confが変更されていても保存されないのでしょうか?

そういう機能はありません。サービスを起動した際に initstepslew で設定されたサーバーに連絡できなかったとしても、サービスの起動は成功したことになりますので設定ファイルはちゃんと保存されます。
設定ファイルを保存しない条件は chrony が parsing できなかった時だけです。

(念のため存在しないサーバーで確認しました)

よろしくお願いします。

マルティネ様

佐藤です。

> 再起動の際にアプリケーションから別のサーバーを設定する可能性はありますか?
無いです。

> また、abos-web で設定した後に /etc/chrony/conf.d/servers.conf の他に /live/rootfs/etc/chrony/conf.d/servers.conf の内容も確認してみてください。
> /live/rootfs には読み取り専用の / パーティションの内容を確認できますので、そのファイルの内容が更新された場合は persist_file が正しく実行されたことになります。
NTP設定後に 「/etc/chrony/conf.d/servers.conf」は即反映されるのですが、
/live/rootfs/etc/chrony/conf.d/servers.conf」こちらは3分程経ってから反映されました。

以上、よろしくお願い致します。

at_dominique.m…

2024年7月2日 16時50分

佐藤さん、

> NTP設定後に 「/etc/chrony/conf.d/servers.conf」は即反映されるのですが、
> 「/live/rootfs/etc/chrony/conf.d/servers.conf」こちらは3分程経ってから反映されました。

ご確認ありがとうございます。永続されますが、ものすごく遅いですね…
仕組みとしては
1/ /etc/chrony/conf.d のファイルに設定を保存する
2/ chronyd サービスを起動する
3/ サービスを無事に起動できた場合にファイルを永続化する(起動できなかった場合は /etc/chrony/conf.d ファイルを永続化せずに元に戻します)
4/ curlコマンドが完了します

サービスの再起動はコンフィグに間違いがないかを確認するためですが、確認だけではなく initstepslew を待ちますので、10秒ほどかかる想定ですが、3分は長いですね。

実際に Armadillo 640 で確認してみたら、サーバーが存在した場合は 7秒、サーバーが存在しない場合は13秒で保存まで完了できたので、気になりますね。

また追加確認で申し訳ないですが、以下のを確認していただけますでしょうか?

1/ curl コマンドの実行時間(それだけ長ければどこかでタイムアウトするか、失敗する恐れもあります…)
2/ curl ではなく、ABOS で直接に以下のコマンドの実行時間:

armadillo:~# ntp=10.1.1.1 # dns でもいいです
armadillo:~# time /usr/libexec/abos-web/ntp_setup.sh source "server $ntp iburst" initstepslew "5 $ntp"

3/ chronyd のサービスリスタートの時間だけの確認

armadillo:~# time rc-service chronyd restart

お手数ですがよろしくお願いします。

マルティネ様

佐藤です。

> 1/ curl コマンドの実行時間(それだけ長ければどこかでタイムアウトするか、失敗する恐れもあります…)
1はソースに手を入れないと見れないのでまず2と3を回答します。

> 2/ curl ではなく、ABOS で直接に以下のコマンドの実行時間:

armadillo:~# time /usr/libexec/abos-web/ntp_setup.sh source "server *.*.*.* iburst" initstepslew "5 *.*.*.*"
chronyd                  | * Stopping chronyd ... [ ok ]
chronyd                  | * Starting chronyd ... [ ok ]
real    3m 24.21s
user    0m 0.37s
sys     0m 0.35s

> 3/ chronyd のサービスリスタートの時間だけの確認

armadillo:~# time rc-service chronyd restart
chronyd                  | * Stopping chronyd ... [ ok ]
chronyd                  | * Starting chronyd ... [ ok ]
real    3m 24.82s
user    0m 0.29s
sys     0m 0.26s

朝一などArmadilloとPCの電源を入れて、Armadilloの時刻が1970/01/01 のときにNTPサーバの同期がされにくいです。
WireSharkで確認してもNTP client の要求にNTP serverが応答を返しているのですが...

そのためかArmadillo起動時のコンソールに下記が出力され、ログインの入力が出来るまで時間がかかります。

podman-atmark            | [ ok ]
local                    | * local: waiting for chronyd (50 seconds)
local                    | * local: waiting for chronyd (41 seconds)
local                    | * local: waiting for chronyd (32 seconds)
local                    | * local: waiting for chronyd (23 seconds)
local                    | * local: waiting for chronyd (14 seconds)
local                    | * local: waiting for chronyd (5 seconds)
local                    | * local: timed out waiting for chronyd
local                    | * Starting local ... [ ok ]
 
 [ ok ]
 
Welcome to Alpine Linux 3.19
Kernel 5.10.213-0-at on an armv7l (/dev/ttymxc0)
 
armadillo login:

30分~1時間ほど放置するとNTPサーバと同期され、
1度同期されるとNTPサーバのアドレスを変更して、元に戻してもNTP同期は7秒ほどで完了します。

以上、よろしくお願い致します。

at_dominique.m…

2024年7月3日 10時47分

佐藤さん、

マルティネです。
> > 1/ curl コマンドの実行時間(それだけ長ければどこかでタイムアウトするか、失敗する恐れもあります…)
> 1はソースに手を入れないと見れないのでまず2と3を回答します。

了解しました、それだけでいいです。

> > 3/ chronyd のサービスリスタートの時間だけの確認
>

> armadillo:~# time rc-service chronyd restart
> chronyd                  | * Stopping chronyd ... [ ok ]
> chronyd                  | * Starting chronyd ... [ ok ]
> real    3m 24.82s
> user    0m 0.29s
> sys     0m 0.26s
> 

>
> 朝一などArmadilloとPCの電源を入れて、Armadilloの時刻が1970/01/01 のときにNTPサーバの同期がされにくいです。

なるほど、それは確かに不便ですね..
同期が早くなるわけじゃないと思いますが、それでしたら initstepslew を無効化した方がいいかもしれません
(少なくとも、60秒以上かかると Armadillo起動に関しては openrc が時刻取得前に諦めてますので、待つ意味がないですね…)

> WireSharkで確認してもNTP client の要求にNTP serverが応答を返しているのですが...

全く返事がない場合は13秒ぐらいで起動できてますので、ネットワークジッターなどがあれば一番遅いかもしれないですね。

> 30分~1時間ほど放置するとNTPサーバと同期され、
> 1度同期されるとNTPサーバのアドレスを変更して、元に戻してもNTP同期は7秒ほどで完了します。

この点についても少し気になりますが、サーバーと Armadillo の時刻が遠ければ計算を増やしている可能性がありますね。

initstepslew で影響するかどうかが分かりませんが、サーバーのオプションにいくつかの設定で取得を早くさせることはできそうです: https://chrony-project.org/doc/3.4/chrony.conf.html

まずは遅くなっている理由を確認したいですが、またいくつかの確認で申し訳ないですが、以下のをお願いします:

1/ サーバーとの接続についての情報です。IP アドレスを削除して構いません。Armadillo/chronyd を起動して数分以上経った状態でお願いします。

armadillo:~# chronyc -n tracking
armadillo:~# chronyc -n sources
armadillo:~# chronyc -n sourcestats
armadillo:~# chronyc -n ntpdata
armadillo:~# cat /var/lib/chrony/chrony.drift
armadillo:~# ping -i 0.2 -c 10 [ntpサーバーアドレス]

2/ サーバーとの接続方法はなんでしょうか?(物理的ないみで、有線、LTE等)
また、起動時にリクエストを多めにさせて問題ないでしょうか?(iburst はすでに使ってますが、filter や minpoll オプションで通信をふやせることができます)

よろしくお願いします。

マルティネ様

佐藤です。

> まずは遅くなっている理由を確認したいですが、またいくつかの確認で申し訳ないですが、以下のをお願いします:
>
> 1/ サーバーとの接続についての情報です。IP アドレスを削除して構いません。Armadillo/chronyd を起動して数分以上経った状態でお願いします。

armadillo:~# chronyc -n tracking
armadillo:~# chronyc -n sources
armadillo:~# chronyc -n sourcestats
armadillo:~# chronyc -n ntpdata
armadillo:~# cat /var/lib/chrony/chrony.drift
armadillo:~# ping -i 0.2 -c 10 [ntpサーバーアドレス]

ファイルを添付しました。

> 2/ サーバーとの接続方法はなんでしょうか?(物理的ないみで、有線、LTE等)
有線です。

> また、起動時にリクエストを多めにさせて問題ないでしょうか?(iburst はすでに使ってますが、filter や minpoll オプションで通信をふやせることができます)
問題ありません。

> initstepslew で影響するかどうかが分かりませんが、サーバーのオプションにいくつかの設定で取得を早くさせることはできそうです: https://chrony-project.org/doc/3.4/chrony.conf.html

1/ のRoot dispersionが8秒近くあったため
https://chrony-project.org/doc/3.4/chrony.conf.html
上記を参考にして「/etc/chrony/chrony.conf」に「maxdistance 20」を追加することで
NTPサーバ設定にかかる時間が下記となりました。

armadillo:~# time /usr/libexec/abos-web/ntp_setup.sh source "server *.*.*.* iburst" initstepslew "5 *.*.*.*"
chronyd                  | * Stopping chronyd ...  [ ok ]
chronyd                  | * Starting chronyd ...  [ ok ]
 
real    0m 7.91s
user    0m 0.45s
sys     0m 0.32s
armadillo:~#

また下記の起動時にchronyd を繰り返すログも発生しなくなりました。

podman-atmark            | [ ok ]
local                    | * local: waiting for chronyd (50 seconds)
local                    | * local: waiting for chronyd (41 seconds)
local                    | * local: waiting for chronyd (32 seconds)
local                    | * local: waiting for chronyd (23 seconds)
local                    | * local: waiting for chronyd (14 seconds)
local                    | * local: waiting for chronyd (5 seconds)
local                    | * local: timed out waiting for chronyd
local                    | * Starting local ... [ ok ]
 
 [ ok ]
 
Welcome to Alpine Linux 3.19
Kernel 5.10.213-0-at on an armv7l (/dev/ttymxc0)
 
armadillo login:

以上、よろしくお願い致します。

ファイル ファイルの説明
chrony ログ.txt 1/ を実行したときのログ

at_dominique.m…

2024年7月3日 14時52分

佐藤さん
> のRoot dispersionが8秒近くあったため
> https://chrony-project.org/doc/3.4/chrony.conf.html
> 上記を参考にして「/etc/chrony/chrony.conf」に「maxdistance 20」を追加することで
> NTPサーバ設定にかかる時間が下記となりました。

原因が明確になってよかったです。

そうですね、それでしたら maxdistance を増やすのが適切だと思います。

この設定を /etc/chrony/chrony.conf にするとアップデートと絡まる恐れがありますので、 /etc/chrony/conf.d/maxdistance.conf 等の別のコンフィグファイルに設定するといいです。

また、場合によっては問題にならないでしょうけれど、8秒近くの root dispersion は異常だと思いますので修正できなくても定期的に値が増加しないかを確認した方がいいかもしれません。(20秒越えたら armadillo の起動がまた遅くなるので、それだけでもいいかもしれません..)

よろしくお願いします。

マルティネ様

佐藤です。

返信が遅くなり申し訳ありません。

> この設定を /etc/chrony/chrony.conf にするとアップデートと絡まる恐れがありますので、 /etc/chrony/conf.d/maxdistance.conf 等の別のコンフィグファイルに設定するといいです。
/etc/chrony/conf.d/maxdistance.conf」こちらの方法に変更し、問題ありませんでした。

> また、場合によっては問題にならないでしょうけれど、8秒近くの root dispersion は異常だと思いますので修正できなくても定期的に値が増加しないかを確認した方がいいかもしれません。(20秒越えたら armadillo の起動がまた遅くなるので、それだけでもいいかもしれません..)
承知しました。
armadillo の起動が伸びることがないか引き続き確認しておきます。

ありがとうございました。