アーキテクチャ¶
ビルド成果物が ONIE installer に収まり、ターゲット機材で立ち上がるまでの流れを、source から image までの順で追う。各ステップに対応する HLD・コードリンクは末尾に集約している。
Build artifact flow¶
flowchart LR
src[sonic-buildimage<br/>sources / submodules] --> slave[sonic-slave-<dist><br/>build container]
slave --> pkgs[debian packages<br/>per submodule]
pkgs --> dockers[docker images<br/>bgp / teamd / swss ...]
pkgs --> base[base rootfs<br/>build_debian.sh]
base --> rfs[squashfs<br/>RFS stage]
dockers --> rfs
rfs --> onie[ONIE installer<br/>SONiC-OS.bin]
onie --> target[target switch<br/>install.sh]
各箱がどの HLD で扱われているかを次に対応付ける。
sonic-slave-<dist>とPLATFORM_ARCH、onie-image-*.confの流れは ARM architecture support で扱う。これは AMD64 / armhf / arm64 で同じ枠組みを使うための変数定義である。build_debian.shの段差と squashfs 中間配備は RFS Split build が分割対象。HLD の単一ENABLE_RFS_SPLIT_BUILDは現行 master では採用されず、RFS_SPLIT_FIRST_STAGE/RFS_SPLIT_LAST_STAGEの 2 段に分かれている。- Dockerfile レイヤ削減、
DOCKER_BUILDKIT、並列dh、SAIREDIS_DPKG_TARGETなどビルド時間の改善は Build system improvements にまとまっている。BuildKit はリポジトリ既定では off で、CI / 一部スクリプトがDOCKER_BUILDKIT=1を立てる現状。 - container build の構造的な切り口は Container build に整理されている。
Build profile(提案ベース)¶
make ENABLE_ZTP=y SECURE_UPGRADE_MODE=... を毎回手で書く煩雑さを解消する目的で、rules/profiles/<name>.mk をインクルードするフラグセット機構が提案されている。詳細と注意点は Build profiles を読む。現行 master には Makefile への取り込みが無い ことに注意。
Debian / docker / OS の世代管理¶
Base OS のリリース cadence と、その上に乗る docker image / package のバージョニングは別レイヤで管理されている。
- Base OS の更新リズムと旧版の廃止予定は Debian upgrade cadence を見る。
MakefileのNOSTRETCH/NOBUSTER/NOBULLSEYE/NOBOOKWORM/NOTRIXIEフラグで build 系統を切り替える形が実装と一致している。 - 配布される docker 群と Base OS の互換性は semver でラベル付けする。基準は Redis DB スキーマ に置く方針で、
manifest.py/constraint.pyに実装がある。詳しくは OS / docker semver を参照する。 - ディスク書き込み量(log、tmpfs、container 経由の I/O)の分析は Disk writers analysis を読む。SSD 寿命の観点で base image / docker 設計に直接効く。
Application Extension の入る位置¶
sonic-package-manager(SPM)は ONIE installer に焼かれた SONiC image の上で動く CLI である。すなわち本章の前半(build flow)は終わった後の世界で、SPM は docker registry から pull した manifest 付き image を FEATURE テーブルに登録し、docker_image_ctl や systemd unit と統合する。manifest schema・依存解決・install 経路は Application Extension Infrastructure に集約されている。