SONiCをいじる環境を自宅に構築したい
SONiCをおうちで触るときのメモ
体系だって記載するわけではなく、知った順に記載していく
どのように環境を用意すれば良いかもよくわからないので忘備録として
準備
SONiCを扱うためのディストリビューション(ubuntu 22.04 LTS)を用意する
wsl --import sonic-test C:\study\sonic\wsl C:\study\sonic\ubuntu-22.04-server-cloudimg-amd64-root.tar.xz
つまった所
事象
wsl --import sonic-test C:\study\sonic\wsl C:\study\sonic\ubuntu-20.04-server-cloudimg-amd64.img
でディストリビューションを追加しようとしていたが、「エラーを特定できません」とエラーになっていた。
解決策
使用するディストリビューションのファイルを変更した
wsl --import sonic-test C:\study\sonic\wsl C:\study\sonic\ubuntu-22.04-server-cloudimg-amd64-root.tar.xz
原因
原因は使用しているファイルが異なる
- そもそも22.04をインストールしようとしていたのに20.04というバージョン
- 拡張子がimgのものを使用していたこと
2つのファイルの違い
imgファイルはディスクイメージであり、パーティションやブートローダーを含む
tar.xzファイルはアーカイブであり、ルートのファイルシステムのみ
カーネルとファイルシステムの分離について
WSL2環境ではカーネルとルートファイルシステム(ディストリビューションの部分)が分離されている。WSL2用に提供されている規定のLinuxカーネルを使用しており、ユーザはルートファイルシステムを提供するのみで良い
したがって、WSL環境ではルートファイルシステムのみが含まれている.tar.xz
等のアーカイブ形式のファイルをwsl --import
コマンドでインポートする。
手軽にSONiCを触るための方法
SONiCのコンテナがあるらしいからとりあえずコンテナ立ち上げてみようくらいの気持ちでいたが、どうやら大きく2通りあるよう
- コンテナでSONiC環境を用意
- GNS3で仮想NWを構築し、その中でSONiCを触る
GNS3(Graphical Network Simulator 3)はGUIでネットワークをシミュレートできるソフトウェア、Ciscoのパケトレの高度版みたいなもの?
なので、まずはコンテナでSONiCを2つ用意してコンテナ間で通信できる所まで確認し、スパインリーフの構成でEVPN/VXLANの動作確認についてはGNS3を使用してみようと思う
SONiCの物理環境と仮想環境の違い
SAI(Switch Abstration Interface)と呼ばれる、各メーカーのASICに対応するための抽象化レイヤーが存在する
このSAI配下にデバイスドライバが存在するが仮想SONiCでは存在しないため、デバイスに強く依存する機能の動作確認は不可能
WSL2使用時のお作法
PID1問題
Linuxではsystemd(/sbin/init)というプロセスがPID1として動作する事で、ゾンビプロセスの防止やプロセスのライフサイクル管理を行う仕組みとなっている
PID1は重要な事から特別な扱いがされているため、プロセス自身がシグナルに対してハンドリング(シグナルに対する行動で、無視・任意の処理・そのまま終了等がある)を行っていなければ、無視されてしまう
コンテナやWSLではsystemd以外のプロセスがPID1として動作する事があるため、SIGTERMコマンドが無視(ハンドリングがされていない)されてしまう
WSL2の動作
WSL2では初期だとsystemdが無効で、microsoftが設計したinitプロセスが動作する
解決策
systemdを有効にし、PID1でsystemdを動作させる
- /etc/wsl.confに以下を追加
[boot]
systemd=true
- WSLの再起動
wsl --shutdown
wsl
SONiCのコンテナを触ってみる
使用するイメージはこちら
公式ではイメージの提供はされていない?みたい
上記は良くわからなかったのでやめ
公式からsonic-vs版をビルドする事にした
ハードウェア要件は以下
・ビルド速度を上げるための複数のコア
・十分な RAM (8 GiB 未満では問題が発生する可能性があります)
・300Gの空きディスク容量
・KVM 仮想化のサポート。
下2つが不安ではあるが、とりあえず試してみる
SONiC-VCのビルド
下記の説明の通りに進める
準備
pipとj2cliの用意
sudo apt install -y python3-pip
pip3 install --user j2cli
dockerグループにユーザを追加
sudo gpasswd -a root docker
ブランチを切る
git checkout -b 20241122/sonic-vc/build
buildする
make init
Add your user account to docker group and use your user account to make. root or sudo are not supported
上記エラーとなったので、別のユーザを作成しdockerグループへ追加してみる
ユーザを作成しdockerグループへ追加
sudo useradd -m sonic-user
sudo gpasswd -a sonic-user docker
確認
groups sonic-user
sonic-user : sonic-user docker
ログイン
su - sonic-user
rootユーザでcloneしてしまって色々面倒なので新しいユーザで準備からやり直す