SONiC調査の続きです。
単体で読んでもわかるように前説
- SONiCの機能の一つにtelemetryというのがある
- しかし動いてなかった
- ログなど色々調べた
- dockerコンテナの中で問題が起こっていることまではわかった
では、続きです。
パラメータを指定してコンテナを起動する
前回はこれがなかったがために/var/run/redis
が見えず、想定外のエラーが出ていた模様。今回はちゃんとパラメータを指定してみます。パラメータはSONiCに用意されている/usr/bin/telemetry.sh
に書かれてたものです。コンテナの中と外でファイル名同じなのに中身が違うので混乱しそうになる点に注意。(うっかり--entrypoint=/bin/bashを指定し忘れたのですが、怪我の功名となりました)
$ docker rm telemetry
$ env PLATFORM=x86_64-delta_ag9032v2a-r0 HWSKU=Delta-ag9032v2a \
docker run --net=host --privileged -it -v /etc/sonic:/etc/sonic:ro \
--log-opt max-size=2M --log-opt max-file=5 \
-v /var/run/redis:/var/run/redis:rw \
-v /usr/share/sonic/device/$PLATFORM:/usr/share/sonic/platform:ro \
-v /usr/share/sonic/device/$PLATFORM/$HWSKU:/usr/share/sonic/hwsku:ro \
--tmpfs /tmp \
--tmpfs /var/tmp \
--hostname "$HOSTNAME" \
--name=telemetry docker-sonic-telemetry:latest
/usr/lib/python2.7/dist-packages/supervisor/options.py:298: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
'Supervisord is running as root and it is searching '
Error: not a valid boolean value: 'always' in section 'eventlistener:supervisor-proc-exit-listener' (file: '/etc/supervisor/conf.d/supervisord.conf')
For help, use /usr/bin/supervisord -h
これはいけない。コンテナにくっついているファイルシステムイメージ内の/etc/supervisor/conf.d/supervisord.conf
の記述ミス。
修正する
修正するにはビルドしなおしが必要ということになります。差分はこう。
diff --git a/dockers/docker-sonic-telemetry/supervisord.conf b/dockers/docker-sonic-telemetry/supervisord.conf
index b6a01de5..6cdeef82 100644
--- a/dockers/docker-sonic-telemetry/supervisord.conf
+++ b/dockers/docker-sonic-telemetry/supervisord.conf
@@ -6,7 +6,7 @@ nodaemon=true
[eventlistener:supervisor-proc-exit-listener]
command=/usr/bin/supervisor-proc-exit-listener
events=PROCESS_STATE_EXITED
-autostart=always
+autostart=true
autorestart=unexpected
[program:start.sh]
部分ビルドしてみる
- SONiCのインストールイメージは
target/sonic-broadcom.bin
- telemetryパッケージは
target/debs/stretch/sonic-telemetry_0.1_amd64.deb
- make ターゲット-cleanで部分的にcleanできる
ということで早速やってみます。
$ make target/debs/stretch/sonic-telemetry_0.1_amd64.deb-clean
(ログ省略)
$ make target/sonic-broadcom.bin-clean
(ログ省略)
$ time make target/sonic-broadcom.bin
(ログ省略)
real 10m37.322s
user 0m2.257s
sys 0m0.426s
全体をcleanしてビルドしなおすと70分くらいかかるので、ビルド時間はかなり短縮できました。
更新したイメージで挙動が変わるかを確認
以前解説したsonic_installer
を使って更新し、リブート。果たして結果は?
$ show services |grep tele
telemetry docker
root 18 6.4 0.0 629060 13904 pts/0 Sl 16:19 0:02 /usr/sbin/telemetry -logtostderr --insecure --port 8080 --allow_no_client_auth -v=2
動くようになりました。めでたしめでたし。
本家にPR?
する?
追伸 (2019/12/24)
PRしなかったが、Management Frameworkのcommitで修正された模様。試したところ、なぜか標準でtelemetry dockerが起動してなくて謎。手動で/usr/bin/telemetry.sh start
を実行すると無事起動。上記のパッチなしで動くように修正されていました。