uen2825
2024年6月12日 11時28分
お世話になっております。
バックアップ電池を入れていないため起動時は初期の時間になります。
NTPサーバーに接続した時点で時間が更新されますが、停止させたいです。
https://armadillo.atmark-techno.com/forum/armadillo/20563
こちらのフォーラムとリンク先を参考にして、下記ファイルを書き換えました。(実行しないよう#を入れただけです)
/lib/chrony.conf.d/servers.conf
# servers queried for normal operation # pool pool.ntp.org iburst
上手く動いているようですが、やり方あってますでしょうか。
コメント
uen2825
at_matsuzaka
uen2825
uen2825
お世話になります。
追加での質問をお願いいたします。
日付ですが通常は時間の更新はしませんが、コンテナ内から時間を更新したい場面が出てきてしまいました。
コンテナ外からping -t -s 4 ntp.nict.jpと入力すると時間が更新されます。
コンテナ内から実行する場合、ntpdファイルをコンテナ内から見られるところに置き、a6e-gw-containers.confにadd_hotplugsを追加すればいいのでしょうか
add_hotplugsには何を追加したらいいでしょうか
そもそも手順が違うでしょうか?
宜しくお願いいたします。
at_dominique.m…
uen2825さん
マルティネです。
> コンテナ外からping -t -s 4 ntp.nict.jpと入力すると時間が更新されます。
このコマンドですが、 ping であってますか? ping にいくつかの実装がありますが -t -s 4 で時間を取得機能とは見つかりませんでした。
コマンドにこだわってないと思いますのでそのまま返事を続きます。
> コンテナ内から実行する場合、ntpdファイルをコンテナ内から見られるところに置き、a6e-gw-containers.confにadd_hotplugsを追加すればいいのでしょうか
> add_hotplugsには何を追加したらいいでしょうか
時刻の設定は add_hotplugs というより、CAP_SYS_TIME による制限です。
素直に回答すると、「add_args --cap-add=SYS_TIME
」をコンテナのコンフィグに追加すれば時刻を設定出きるようになります。
ただし、Armadillo Base OS 側で chronyd がそれも気づいてその後にゆっくりと自分の時間に直そうとするはずですので、その場合は chronyd を停止しないと妙な動きになります。
なので、コンテナから時刻を直接に設定するよりコンテナからホストの chronyd を操作した方がいいと思います。
方法は二つあります:
1/ ABOS Web が利用可能な場合は ABOS Web の時刻設定を参考にして、curl などで chronyd のサーバーを変更できます:
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
2/ どうしても ABOS Web を利用できない場合はコンテナのコンフィグに「add_volumes /run/chrony:/run/chrony」を追加すればコンテナから chronyc コマンドで現在実行中のサーバーのコンフィグを変更できます(例えば「chronyc add server [server ip] iburst
」や「chronyc makestep
」)。注意点としては、コンテナと Armadillo Base OS の chrony のバージョンが違う過ぎる場合には動かなくなる可能性もありますのでできれば ABOS Web を推奨します。また、この方法では設定した物は永続化されません。
いかがでしょうか。
よろしくお願いします。
uen2825
マルティネ様
ありがとうございます。
> > コンテナ外からping -t -s 4 ntp.nict.jpと入力すると時間が更新されます。
>
> このコマンドですが、 ping であってますか? ping にいくつかの実装がありますが -t -s 4 で時間を取得機能とは見つかりませんでした。
申し訳ございません。下記コマンドでした。
ntpd -q -p ntp.nict.jp
> 素直に回答すると、「add_args --cap-add=SYS_TIME
」をコンテナのコンフィグに追加すれば時刻を設定出きるようになります。
既に*.cocnfに、「add_args --cap-add SYS_ADMIN
」がありますが
続けて「add_args --cap-add=SYS_TIME
」を入れればよろしいですよね
よろしくお願いします。
at_dominique.m…
uen2825
マルティネス様
ありがとうございます。
python3を使用しており、下記で実行すると日付の更新は出来ました。
from subprocess import PIPE
subprocess.run("ntpd -q -p ntp.nict.jp", shell=True, stdout=PIPE)
ただこの処理をおこなうと、その後のLTE接続に時間が掛かるようになってしまいました。
やはり別プロセスを実行するとよろしくないのでしょうか?
良い方法があれば教えて頂きたいですが、これはarumadillo社さんにする質問じゃない事は承知ですが
教えて頂ければ幸いです
at_dominique.m…
uen2825さん
> python3を使用しており、下記で実行すると日付の更新は出来ました。
> from subprocess import PIPE
> subprocess.run("ntpd -q -p ntp.nict.jp", shell=True, stdout=PIPE)
>
> ただこの処理をおこなうと、その後のLTE接続に時間が掛かるようになってしまいました。
> やはり別プロセスを実行するとよろしくないのでしょうか?
すみません、この現象の説明が分かりませんでした。
言い直してみると、こういう順番でよろしいですか?
1/ Armadillo を起動して、LTE の接続を生成します。
2/ コンテナ内から ntpd で時刻を同期します。
3/ 時刻同期が完了します。
4/ LTE 接続を削除して、新しい LTE 接続を生成します。
その 4/ の接続を使用可能になるまでだいぶ時間かかります(1/ の時よりはっきりと)
> 良い方法があれば教えて頂きたいですが、これはarmadillo社さんにする質問じゃない事は承知ですが
ntpd のプロセスを疑っているならぜひ abos web を試してみてください。
以下の手順ですぐに確認できます。
1/ 準備:Armadillo BaseOS ホスト側で abos-web を起動してトークンを生成します(Web UI をアクセスできる場合はそちらでも操作可能ですが、ターミナルでの説明になります)
# ABOS Web を起動してない場合はパスワードを設定します。すでに起動している場合はスキップしてください。 armadillo:~# passwd abos-web-admin armadillo:~# persist_file /etc/shadow armadillo:~# rc-service abos-web restart # パスワードを使って ntp 操作のためのトークンを作ります。 # 一度作ったトークンが永続化されます。 armadillo:~# curl -k -u abosweb https://localhost:58080/api/tokens -d permissions=TimeAdmin; echo Enter host password for user 'abosweb': {"token":"c1fb6d1a-75b2-40d2-afba-e3fe14c6b5b7","permissions":["TimeAdmin"]}
2/ 生成したトークンで ntp の設定を変更します。
initstepslew の設定でこのリクエストが終了した際に時刻が同期されています。
以下のどれかの方法は同じ結果になります。
# curl で手っ取り早いバージョン / # curl -k -H 'Authorization: Bearer c1fb6d1a-75b2-40d2-afba-e3fe14c6b5b7' https://host.containers.int ernal:58080/api/time/ntp_config -d "servers=server ntp.nict.jp iburst" -d "initstepslew=10 ntp.nict.jp"; echo {"servers":["server ntp.nict.jp iburst"],"initstepslew":"10 ntp.nict.jp"} # 参考までにrequests板 >>> import requests >>> headers = {'Authorization': 'Bearer c1fb6d1a-75b2-40d2-afba-e3fe14c6b5b7'} >>> url = 'https://host.containers.internal:58080/api/time/ntp_config' >>> data = {'servers': 'server ntp.nict.jp iburst', 'initstepslew': '10 ntp.nict.jp'} >>> requests.post(url, data, headers=headers, verify=False) <Response [200]> # 参考(2)TLS の確認はコンテナのコンフィグに # add_volumes /etc/atmark/abos_web/tls/cert.pem:/etc/abosweb.pem:ro # を追加して、 # curl の -k を --cacert /etc/abosweb.pem に変更し、 # requests の verify=False を verify="/etc/abosweb.pem" に変更できます: # requests.post(url, data, headers=headers, verify="/etc/abosweb.pem")
よろしくお願いします
uen2825
at_dominique.m…
2024年6月12日 11時40分
uen2825さん
マルティネです。
> バックアップ電池を入れていないため起動時は初期の時間になります。
> NTPサーバーに接続した時点で時間が更新されますが、停止させたいです。
> https://armadillo.atmark-techno.com/forum/armadillo/20563
すみません、こういう場合のマニュアルの説明が足りてないです。
chronyd のコンフィグで時間を取得しているところは2ヶ所あります:
- servers.conf の pool (あるいは server) 命令。この設定は chronyd が起動している時に定期的にサーバーから時間を取得する設定です。
- initstepslew.conf の initstepslew 命令。こちらは chronyd を起動する際にサーバーから時間を取得する設定です。
なので、無効化するには両方の命令を取り消す必要があります。
(お手数をおかけしました、今月のアップデートにマニュアルの情報を追加します)
> /lib/chrony.conf.d/servers.conf
ちなみに、/lib/chrony.conf.d のファイルを編集すると Armadillo Base OS の更新でその内容が上書きされますので、マニュアルのとおりに /etc/chrony/conf.d/ に同じ名前のファイルを作って設定を変更してください。
今回は、サーバーを全くない状態にしたいので、空のファイルでもいいです:
よろしくお願いします。