LoginSignup
8
0

SONiCのイメージをビルドしてGNS3で使ってみた

Last updated at Posted at 2023-12-21

この記事は、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の使い方は省略します:bow_tone1:

GNS3で起動してみる

インポートが完了したら、早速起動してみます。
まずは、単体で起動です。

sonic-vc-gns3.png

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!

8
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
0