Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 21 章: Lab / SONiC-VS / 開発者 を参照。
裏取りステータス: code-verified(手順書ベース)
sonic-buildimage master の Makefile / Makefile.work で NOJESSIE / NOSTRETCH / NOBUSTER / NOBULLSEYE / NOBOOKWORM の no-* ビルドスイッチ群と make NOJESSIE=1 KEEP_SLAVE_ON=yes の使用例を確認。VS 経路も platform/vs/docker-sonic-vs.{mk,dep} 等で生きている。手順書としての主張は master と整合。実機ビルドでは現行リリース 1 種だけを残す(古い distro はスキップ)運用が前提。
SONiC-VS のビルドと libvirt 起動手順¶
概要¶
SONiC-VS(Virtual Switch)は ASIC を SAI VS バックエンドで模した仮想イメージで、KVM/libvirt 上で起動して機能テストやトポロジ実験に使う。本ドキュメントは doc/test/Bring-up_Sonic-VS_on_Cloud_top.md を基にした手順サマリである1。
GNS3 経路 は GUI 中心、本ページは CLI で libvirt を直接叩く 経路。
動作仕様¶
全体フロー¶
flowchart LR
S[sonic-buildimage] -->|make target/sonic-vs.img.gz| IMG[sonic-vs.img.gz]
IMG --> COPY[/var/lib/libvirt/images/hdd/]
XML[sonic1-vs.xml] --> COPY2[/var/lib/libvirt/images/]
COPY --> VM[virsh create]
COPY2 --> VM
VM --> TEL[telnet localhost 7000]
1. sonic-buildimage のビルド¶
sudo gpasswd -a ${USER} docker
git clone --recurse-submodules https://github.com/sonic-net/sonic-buildimage
sudo modprobe overlay
cd sonic-buildimage
make init
NOJESSIE=1 NOSTRETCH=1 NOBUSTER=1 NOBULLSEYE=1 SONIC_BUILD_JOBS=12 \
make configure PLATFORM=vs
NOJESSIE=1 NOSTRETCH=1 NOBUSTER=1 NOBULLSEYE=1 SONIC_BUILD_JOBS=12 \
make target/sonic-vs.img.gz
NOJESSIE / NOSTRETCH / NOBUSTER / NOBULLSEYE はそれぞれ古い Debian リリース向けビルドを スキップ するフラグ1。Bookworm 等の現行向け 1 種だけをビルドする時短策。
成果物は target/sonic-vs.img.gz。
2. KVM / libvirt の準備¶
kvm-ok # 仮想化サポート確認
sudo apt install -y qemu-kvm virt-manager libvirt-daemon-system \
virtinst libvirt-clients bridge-utils ebtables
sudo systemctl enable --now libvirtd
sudo usermod -aG kvm,libvirt $USER # 一旦ログアウト/ログイン
libvirt-sock のパーミッション問題が出る環境では setfacl で書き込み権を補う1:
sudo systemctl stop libvirtd
sudo setfacl -m user:$USER:rw /var/run/libvirt/libvirt-sock
sudo systemctl start libvirtd
3. ホスト側ブリッジ作成¶
mgtbr0 は管理ネット用、vmbr0 は VM 間トラフィック用1。VM の libvirt XML がこれらに繋がる。
4. イメージと libvirt XML 配置¶
サンプル XML(sonic1-vs.xml)と VM ディスクを配置1:
sudo cp sonic1-vs.xml /var/lib/libvirt/images/
sudo mkdir -p /var/lib/libvirt/images/hdd
sudo cp sonic-vs.img.gz /var/lib/libvirt/images/hdd/
sudo gunzip /var/lib/libvirt/images/hdd/sonic-vs.img.gz
5. VM 起動とアクセス¶
sudo virsh create /var/lib/libvirt/images/sonic1-vs.xml
sudo virsh list --all
sudo virsh shutdown --domain sonic1-vs
# シリアルコンソール
telnet localhost 7000
# user: admin / pass: YourPaSsWoRd
virsh create は persistent ではない 起動。再起動後に消える。永続化したい場合は virsh define を使う1(HLD には記載なし)。
📋 検証エビデンス: sonic-net/SONiC/doc/test/Bring-up_Sonic-VS_on_Cloud_top.md#L86-L129 (sha: 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06)
出典:
sonic-net/SONiC/doc/test/Bring-up_Sonic-VS_on_Cloud_top.md#L86-L129 (sha: 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06)
抜粋:
判断根拠: 起動コマンドとデフォルト認証情報の根拠。
設定¶
関連する CONFIG_DB / CLI / YANG¶
該当なし。本ページは VM ブートストラップであり SONiC 内部の設定スキーマには触れない。
制限事項¶
NOJESSIE等のフラグ: HLD は古い Debian 名を列挙しているが、現行 master ではフラグ集合が変わっている可能性がある。sonic-buildimageのMakefile/rules/configを要確認1。virsh createは非永続: VM 定義を維持したい場合はvirsh defineを使う。- デフォルト認証情報:
admin / YourPaSsWoRdはビルド時の uboot/initramfs 由来。sonic-vs.imgのバージョンによっては変更されている可能性。 - ブリッジ名は固定: サンプル XML が
mgtbr0/vmbr0を前提にしているため、ブリッジ名を変えるなら XML も変更する必要がある。
干渉する機能¶
- GNS3 経路: 同じ
sonic-vs.imgを使うが、GNS3 はテンプレートと GUI で管理する。virsh 経由と GNS3 を併用するとブリッジ名衝突に注意。 sonic-mgmtテストベッド: より複雑なトポロジ管理。本ページの単体起動を内部でvirsh系で扱う。- Docker と KVM の overlay:
sudo modprobe overlayはsonic-buildimageのビルドで必要。VM 実行時には不要だが、両方使うときはホスト kernel モジュール状態に注意。
トラブルシューティング¶
kvm-okでエラー: BIOS の VT-x / AMD-V を有効化、または nested virtualization が許可されているかを確認。virsh createで permission denied:libvirt-sockの ACL(前述の setfacl)と libvirt 起動状態を確認1。telnet localhost 7000が拒否:sonic1-vs.xmlの serial port 設定を確認。port 番号は VM ごとに違うことがある。- ログイン拒否: パスワード
YourPaSsWoRdの大文字小文字を厳密に。新しいビルドでは別パスワードのことがある。
コマンド例: SONiC-VS bringup 確認¶
下記コマンドで関連する CONFIG_DB / APP_DB / STATE_DB と CLI 出力・syslog を 突き合わせ、HLD 記載の挙動と現在の挙動が一致しているか確認できる。
# SONiC-VS コンテナの初期化と各 docker 起動状況
docker ps --format 'table {{.Names}}\t{{.Status}}'
show version
show interfaces status
コマンド例: SONiC-VS bringup 確認¶
下記コマンドで関連する CONFIG_DB / APP_DB / STATE_DB と CLI 出力・syslog を 突き合わせ、HLD 記載の挙動と現在の挙動が一致しているか確認できる。
# SONiC-VS コンテナの初期化と各 docker 起動状況
docker ps --format 'table {{.Names}}\t{{.Status}}'
show version
show interfaces status