Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 19 章: Build / Packaging / Debian を参照。
裏取りステータス: code-verified
SPM CLI: sonic-utilities/sonic_package_manager/{main.py,manifest.py,manager.py,database.py,dockerapi.py} で確認。
SONiC Application Extension Infrastructure(sonic-package-manager / SPM)¶
読み手が知りたいこと¶
- 3rd-party docker を inbox 機能と同列に扱うために何が必要か
- install から起動までの実体は何が動くのか
- manifest にはどんな互換性情報を書くのか
- CLI 拡張や showtech はどう連携されるのか
なぜ SPM が要るか¶
3rd-party / 任意の docker コンテナを「SONiC application extension」として inbox 機能と同じ管理面で扱う ためのフレームワーク1:
- アプリ追加が
apt-相当の単一 CLI で済む(sonic-package-manager install) - 通常の SONiC 機能と同じく
FEATUREテーブル・config featureで on/off - warm reboot / reset-factory・showtech・syslog 等の運用フックに統一して載る
- 動作に必要な base image や他機能を manifest に宣言し互換性を機械的に検証
構成要素¶
flowchart LR
REG[(コンテナレジストリ)] --> PM[sonic-package-manager]
PM --> PKGDB["/var/lib/sonic-package-manager/<br/>installed manifests"]
PM --> DOCKER[(local docker images)]
PM --> CFGDB["CONFIG_DB<br/>FEATURE エントリ追加"]
CFGDB --> HC[hostcfgd]
HC --> SVC["/etc/systemd/system/<feature>.service"]
SVC --> CONT["docker run --name <feature>"]
主要コンポーネント1:
- CLI
sonic-package-manager(別名 SPM): install / uninstall / upgrade / list / show / repository - manifest: コンテナイメージ同梱の JSON。package 名、version、依存(base image / 他 package / SONiC version 範囲)、起動引数、warm-reboot 対応フラグ、CLI 拡張・showtech プラグイン宣言
hostcfgd:FEATURE追加に追従して systemd unit を rendering し start/stop を駆動- CLI plugin: 各 package が
clickベース CLI をsonic-utilitiesに動的 register(plugin entry-point)
ライフサイクル¶
flowchart LR
INST["install <repo>:<tag>"] --> PULL[image pull]
PULL --> VERIFY["manifest 検証<br/>version / 依存 / SONiC ver"]
VERIFY --> REGISTER["FEATURE 追加<br/>CLI plugin / showtech plugin 登録"]
REGISTER --> ENABLE["config feature state <pkg> enabled"]
ENABLE --> RUN[hostcfgd → systemd → docker]
RUN --> UNINST[uninstall]
UNINST --> CLEAN["disable → FEATURE 削除<br/>image / plugin 削除"]
manifest が必須宣言する項目1:
name/versionbase-os/min-sonic-version/max-sonic-versiondepends/breaks(他 package との互換性)service/container起動オプション(warm-reboot 対応、privileged、namespaces)cli(config/showへの拡張サブコマンド)processes(critical process として監視するか)
設定¶
| Table | 説明 |
|---|---|
FEATURE |
install したアプリも inbox 機能と同列に扱う |
| Command | 用途 |
|---|---|
sonic-package-manager install <repo>:<tag> |
install |
sonic-package-manager uninstall <name> |
uninstall |
sonic-package-manager upgrade <name> <new-version> |
バージョン更新 |
sonic-package-manager list |
現在の package 一覧 |
sonic-package-manager show package versions <name> |
バージョン情報 |
config feature state <name> {enabled,disabled} |
起動制御(inbox と同じ) |
制限事項¶
- manifest 検査の限界:
min-sonic-version/dependsで表せない暗黙依存(kernel module、SAI 拡張等)は捕まえられない - warm reboot 対応: package 側の対応が必要。非対応 package は warm reboot でリセット
- CLI plugin 衝突: 同じ
config <subcommand>を複数 package が登録すると挙動不定 - 資源管理: cgroup / メモリ / CPU 上限はコンテナ起動オプションでしか制御できない
干渉する機能¶
- inbox 機能の
FEATURE: 名前空間が同じため衝突に注意 - warm/fast reboot: 非対応 package の data plane 連続性は保証不可
- show techsupport: package 側 plugin が登録されないと docker のログが収集されない
トラブルシューティング¶
- install 失敗 →
sonic-package-managerログ / image pull 権限 / manifest 検証エラー - 起動しない →
systemctl status <feature>と docker ログ /config feature状態 - CLI が出ない → plugin entry-point の取り込み、
sonic-utilities再起動 / shell 再ログイン
コマンド例: Application extension 状態確認¶
下記コマンドで関連する CONFIG_DB / APP_DB / STATE_DB と CLI 出力・syslog を 突き合わせ、HLD 記載の挙動と現在の挙動が一致しているか確認できる。
# インストール済み拡張 Docker package 一覧
sudo sonic-package-manager list
sudo sonic-package-manager show <name> manifest
# 拡張サービスの稼働状況
systemctl list-units '*.service' | grep -i package
コマンド例: Application extension 状態確認¶
下記コマンドで関連する CONFIG_DB / APP_DB / STATE_DB と CLI 出力・syslog を 突き合わせ、HLD 記載の挙動と現在の挙動が一致しているか確認できる。
# インストール済み拡張 Docker package 一覧
sudo sonic-package-manager list
sudo sonic-package-manager show <name> manifest
# 拡張サービスの稼働状況
systemctl list-units '*.service' | grep -i package
関連 Topics¶
参考リンク¶
- CLI: sonic-package-manager
- CONFIG_DB: FEATURE
- CLI: show feature
- CLI: show techsupport
- Topics: Reboot / Warm / Fast
- Glossary
- Reference 索引
既知の問題¶
テレメトリサービスが SONiC バージョンアップグレード後に停止する問題(sonic-buildimage#5955)¶
テレメトリサービスが SONiC バージョンアップグレード後に停止する問題。gNMI サーバーの証明書やポート設定が新バージョンで変更されている場合がある
yang-models ディレクトリからの YANG モデル取得のリクエスト(sonic-buildimage#6025)¶
yang-models ディレクトリからの YANG モデル取得のリクエスト。sonic-mgmt-common の YANG モデルは /usr/models/yang/ からも参照可能