この記事は、MicroAd Advent Calender 2023の22日目の記事です。
はじめに
相変わらず年末の雰囲気にソワソワと落ち着かず、
今年も「もう年末かー」と、
毎年同じコメントしている自分の成長の無さに愕然としています。
さて、みなさんは良いクリスマス・年末年始を迎えられそうですか?
今回は、SONiCのイメージをビルドして、触ってみたよ。という話です。
環境準備
SONiCの公式wikiに詳しくは書いてあるので省略します。
注意点は、公式Wikiにも書いてあるとおり
- CPUがマルチコアであること
- メモリが8GB以上あること。
- HDDは300GB以上の空きがあること
- KVM仮想化がサポートされていること
です。
推奨されるビルド環境のOSは、Ubuntu 20.04です。
特にハードウェアの要件さえクリアしていれば、手順的なハマりポイントはなかったと思います。
注意としては、ビルド時にインターネットにアクセスできる必要があることぐらいです。
早速ビルド
環境が準備できたところで、Githubからクローンしてビルドしていきたいと思います。
まずは、すべてのサブモジュールを含むかたちでクローンします。
$ git clone --recurse-submodules https://github.com/sonic-net/sonic-buildimage.git
クローンが完了したら、カーネルモジュールのロードを行います。
$ sudo modprobe overlay
次に、ディレクトリを移動して、ビルドするイメージのブランチをチェックアウトします。
今回は、202305のブランチのイメージを作ります。
$ cd sonic-buildimage
$ git checkout 202305
make initを実行します。
$ make init
ここまで完了したら、
ASICを選択してmake configureを実行します。
今回は、GNS3上で動くイメージを作りたいので、VSを選択します。
$ make configure PLATFORM=vs
私が使った環境では、初回のconfigureにかかった時間は、約35分でした。
configureがエラーなく完了したら、いよいよイメージをビルドします。
$ make SONIC_BUILD_JOBS=4 target/sonic-vc.img.gz
SONIC_BUILD_JOBSを4に設定しているのは、Wikiに記載してある通りに実行しているためです。
まずは、Wikiの通りに実行してみよう。という心がけです。
ドキドキしながら、イメージ作られるのを待ってましたが、時間がかかるのは目に見えていたので
しばらく放置しておくことに。
完了までに約5時間くらいかかりました。
GNS3 Appliance Fileの作成
ビルドしたイメージをGNS3でインポートするために、GNS3 Appliance File (.gns3a)を作成します。
以下のパスにスクリプトが準備されているので、それを使って作成します。
platform/vs/sonic-gns3a.sh
以下のようにして使用します。
ビルドされたイメージは、gzipされているので解凍します。
$ gzip -d ./target/sonic-vs.img
$ ./platform/vs/sonic-gns3a.sh -r 1.2 -b ./target/sonic-vs.img
実行するとカレントディレクトリに、SONiC-1.2.gns3aというファイルができます。
これを使って、GNS3にビルドしたイメージをインポートします。
今回はGNS3の使い方は省略します
GNS3で起動してみる
インポートが完了したら、早速起動してみます。
まずは、単体で起動です。
Debian GNU/Linux 11 sonic ttyS0
sonic login: admin
Password:
Linux sonic 5.10.0-23-2-amd64 #1 SMP Debian 5.10.179-3 (2023-07-27) x86_64
You are on
____ ___ _ _ _ ____
/ ___| / _ \| \ | (_)/ ___|
\___ \| | | | \| | | |
___) | |_| | |\ | | |___
|____/ \___/|_| \_|_|\____|
-- Software for Open Networking in the Cloud --
Unauthorized access and/or use are prohibited.
All access and/or use are subject to monitoring.
Help: https://sonic-net.github.io/SONiC/
admin@sonic:~$
起動してログインプロンプトが表示されたら、
デフォルトユーザは、admin、パスワードはYourPaSsWoRdでログインしてみます。
ログインできました。
とりあえず、インタフェースが確認できるかコマンドを実行してみます。
admin@sonic:~$ show interfaces status
/usr/local/lib/python3.9/dist-packages/sonic_platform_base/sonic_xcvr/fields/xcvr_field.py:118: SyntaxWarning: assertion is always true, perhaps remo
ve parentheses?
assert (bitpos >= 0 and (bitpos+self.size-1 < 8), "bitpos must be within one byte")
Interface Lanes Speed MTU FEC Alias Vlan Oper Admin Type Asym PFC
----------- --------------- ------- ----- ----- -------------- ------ ------ ------- ------ ----------
Ethernet0 25,26,27,28 40G 9100 N/A fortyGigE0/0 routed down up N/A N/A
Ethernet4 29,30,31,32 40G 9100 N/A fortyGigE0/4 routed down up N/A N/A
Ethernet8 33,34,35,36 40G 9100 N/A fortyGigE0/8 routed down up N/A N/A
Ethernet12 37,38,39,40 40G 9100 N/A fortyGigE0/12 routed down up N/A N/A
Ethernet16 45,46,47,48 40G 9100 N/A fortyGigE0/16 routed down up N/A N/A
〜〜以下省略
SyntaxWarningが出てますが、とりあえずインタフェースの状態は見えたっぽいです。
あとは、このイメージを使ってネットワークを作ってみるという感じになりますが、
おっと時間が来てしまったようです。
続きは、またの機会に。
Happy holidays!