クリスマスなのにスイッチでソニックを遊んでみた！

# 注意事項

本記事は、個人の見解であり、所属組織や団体を代表するものではありません。
また、本記事の情報の内容について、一切の責任を負いません。ご利用は、自己責任でお願いします。

# Introduction

　今回は、[SONiC Advent Calendar 2022](https://qiita.com/advent-calendar/2022/sonic)の最終日の記事です。12月25日で、世間はクリスマスであるのにも関わらず、一人で家に籠って、Nintendo Switchでもなく、White Box Switchを触っています。（クリスマスに、クルシミマスというギャグです。

## About Software for Open Networking in the Cloud(SONiC)

　[Software for Open Networking in the Cloud (SONiC)](https://sonic-net.github.io/SONiC/)は、2016年に、Microsoftがネットワークベンダーたちと共同してOpen Compute Project (OCP) Summitで発表した、完全なOpen Source Softwareです[[1](https://azure.microsoft.com/en-us/blog/microsoft-showcases-software-for-open-networking-in-the-cloud-sonic/)]。そして、SONiCは、データセンタのネットワーキングの必要とする機能を基にしたModular Architectureであり、Frameworkを提供します。また、[Switch Abstraction Interface (SAI)](https://github.com/opencomputeproject/SAI)は、2015年に、OCP Summitで発表しており、SAIによりSONiCは、様々なSwitching Platformで動作できるようなっています。現在では、Linux Foundationに移動して開発を続けています[[2](https://www.linuxfoundation.org/press/press-release/software-for-open-networking-in-the-cloud-sonic-moves-to-the-linux-foundation)]。主な機能は、BGPやRDMAがあり、Full-suiteで提供します。

## Architecture, Configuration, and Command Line in SONiC

　SONiCは、集中管理でスケーラブルなアーキテクチャで構成しています。また、各モジュールは、コンテナでデプロイしています[[2](https://github.com/sonic-net/SONiC/wiki/Architecture)]。Configurationは[こちら](https://github.com/sonic-net/sonic-buildimage/blob/master/src/sonic-yang-models/doc/Configuration.md)とCommand Lineは[こちら](https://github.com/sonic-net/sonic-utilities/blob/master/doc/Command-Reference.md)にあります。

![SONiC_Architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/3f909606-e637-ac76-834a-8d57f26209da.png)

# White Box Switch

　ここからは、実際にHardwareについて述べます。

## なぜ、入手できたのか

　2021年頃に、32x100GbEのWhite Box Switchが、海外の中古市場では$1500程度で取引されるようになっていました。理由は、Switchに搭載されるIntel Atom C2000というCPUが'AVR54 bug'というブートしなくなるバグ[[3](https://www.servethehome.com/intel-atom-c2000-c0-stepping-fixing-the-avr54-bug/)]があり、中古市場に多く出品されたからです。この中で、注目されていたのが'Celestica Seastone DX010'というWhite Box Switchです。実際のバグの発生確率は10%以下であるという報告[[4](https://www.servethehome.com/inside-a-celestica-seastone-dx010-32x-100gbe-switch/)]があります。また、このバグは、新しいAtom C2000シリーズでは、修正されています。今回は、Celestica Seastone DX010(DX010)を使います。

## Celestica Seastone DX010(DX010)

　SONiCがサポートしているプラットフォームは[こちら](https://github.com/sonic-net/SONiC/blob/sonic_image_md_update/supported_devices_platforms.md)にあります。こちらの中に、DX010があり、Switch ASICは、Tomahawkになります。

| S.No |    Vendor | Platform | ASIC Vendor | Switch ASIC | Port Configuration |              Image|
|:----:|:---------:|:--------:|:-----------:|:-----------:|:------------------:|:-----------------:|
|  36　| Celestica |    DX010 |    Broadcom |    Tomahawk |            32x100G | SONiC-ONIE-Broadcom|

## DX010の大きさ

　DX010の物理サイズは、
- Height: 43.8 mm (1.73”)
- Width: 442 mm (17.3”)
- Depth: 521 mm (20.5”)

ですので、クリスマスプレゼントで欲しい人は、高さが5cmかつ幅が45cmかつ奥行きが55cmの靴下が必要です。

家庭によく置いていあるSwitchやStarlinkのアンテナとの比較画像は以下です。Starlinkのアンテナ大きいです...
![20221225_SONiC_Overview.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/36a41a46-c9fa-a47e-7811-005d60cff571.jpeg)

また、ピッツァボックスとの比較画像は以下です。大きさも重さも缶ビール箱級です...
（ピッツァはスタッフが美味しく頂きました。クリスマスで一人で寂しくLサイズのピッツァを食べるとは思わなかったです:cry:
![20221225_SONiC_PizzaBox.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/68c7aa4f-4346-9182-63f3-3c1107829dd7.jpeg)

また、内部は以下です。詳細は[こちら](https://www.servethehome.com/inside-a-celestica-seastone-dx010-32x-100gbe-switch/)を見るとわかりやすいです。

- Front部分、AirはRearからFrontです。
![20221226_SONiC_Front.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/00ea8d79-fedf-55d5-31d5-8c5924991fa6.jpeg)

- Top部分、密度は高いです。
![20221226_SONiC_Top.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/30f92123-9fd5-c0ef-1b22-a22fe19df636.jpeg)

- ASIC部分、二階層構造になっています。
![20221226_SONiC_ASIC.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/3a9b6a2b-378a-5f2c-2155-a696176740a0.jpeg)

- CPU、Memory、mSATA部分
    - CPU: Atom C2000が隠れてます。x86 processerです。
    - Memory: DDR3 SODIMM 4GB
    - mSATA: 16GB
![20221226_SONiC_CPU.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/abfee588-daa9-6c85-075e-4d36ca84ffdc.jpeg)

# Installing SONiC

　ここからは、DX010にSONiCをインストールするための内容です。SONiCのユーザマニュアルは、[こちら](https://github.com/sonic-net/SONiC/blob/master/doc/SONiC-User-Manual.md)です。

## SONiC Image

　基本的には、こちらの[Supported Devices and Platforms](https://github.com/sonic-net/SONiC/wiki/Supported-Devices-and-Platforms)から、プラットフォームにあったLatest master imageを探してダウンロードして用意します。
また、SONiCは、Azureが毎日イメージを作成する[Pipelines](https://sonic-build.azurewebsites.net/ui/sonic/Pipelines)を提供しており、プラットフォームとブランチを選択すると、ビルドが成功したのか失敗したのか、出力ログがどうなっているのかわかります。

　今回は、DX010なので、プラットフォームはBroadcomでmasterを選択します。

![20221225_SONiC_Image01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/e85f3dab-595a-462b-34d1-895e4c037286.png)

![20221225_SONiC_Image02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/9b1dc9d0-cad9-5850-e9b3-6e32c75c6631.png)

Artifactsでは、Nameは'sonic-buildimage.broadcom'を選択します。

![20221225_SONiC_Image03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/5aec7447-b444-0b5d-ad50-e41ce88af43d.png)

## Install SONiC ONIE Image

　[Open Network Install Environment (ONIE)](https://opencomputeproject.github.io/onie/)は、White Box Switchに、Network Operating Systemsをインストールするための、Open Source Softwareです。ONIEについてこちらに[User Guide](https://opencomputeproject.github.io/onie/user-guide/index.html)があります。

　今回は、ONIEにより、USBでSONiCをインストールします。ダウンロードした'sonic-broadcom.bin'を'onie-installer'に名前を変更してUSBに保存します。保存が終わりましたら、USBをDX010に繋げます。また、DX010にConsole-USBケーブルを繋げます。Screenコマンドで、ボーレートを115200に設定します。他のWhite Box Switchは、ボーレートが9600もあります。手順は、[Quick-Start](https://github.com/sonic-net/SONiC/wiki/Quick-Start)を参照してください。

初めに、'ONIE'を選択し'ONIE: Uninstall OS'を選択して、古いNOS(SONiC)を削除します。

![Screenshot 2022-12-26 at 5.14.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/4e1fb86a-8382-ac08-17bf-a6bdf2a023ff.png)

このような感じで削除が進みます。

![Screenshot 2022-12-26 at 5.19.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/211b6dc6-6d22-7622-62ba-8aec06e9fa2b.png)

リブートします。
'ONIE: Install OS'を選択すると、SONiCのインストールが開始します。

![Screenshot 2022-12-26 at 5.52.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/832f6ec6-f0fd-138c-1c43-4fe950945fe6.png)

checksumとArchiveがOKになり、インストーラーが進みます。

![Screenshot 2022-12-26 at 5.54.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/5cf0bd91-9e6c-5fe3-7a56-6839a1a156a7.png)

そして、無事インストールが完了すると、こちらの画面になります。

![Screenshot 2022-12-26 at 6.00.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/508bf004-9194-a02c-0034-ba2009c1d6aa.png)

次に、sonic loginに進みます。
UserとPasswordは[こちら](https://github.com/sonic-net/SONiC/blob/master/doc/SONiC-User-Manual.md#2-login-username--password)を確認してください。

![Screenshot 2022-12-26 at 6.04.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/9e6b05e8-7563-4dfa-58c7-dd686134e2b0.png)

Show version

![Screenshot 2022-12-26 at 6.12.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997765/6c76bc70-064b-891e-5589-54ce4b71baf2.png)

これで、最新のSONiCが動作しました。
また、セキュリティのためパスワードを変更してください。

## 気になる消費電力

電力計測計だと、ブートとアイドル状態では200W以下でした。

# 最後に

　今回は、White Box Switchを使ってSONiCを動作するところまで行いました。SONiCの機能がどこまで実装されているのかは、[Sonic Roadmap Planning](https://github.com/sonic-net/SONiC/wiki/Sonic-Roadmap-Planning)を確認する必要があります。自分で機能を追加して、イメージをビルドをすることもできますが、コンパイルとデバックに時間がかかります。また、SAIがどこまで機能追加しているのかも確認する必要があります。個人で機能を追加しないなら[Pipelines](https://sonic-build.azurewebsites.net/ui/sonic/Pipelines)から、イメージをダウンロードすることをおすすめします。SONiCはvs版(VMで動作するイメージです)もありますので、簡単に試すことができます。私は、2xDX010を$1000で輸入費込みで購入していました。現在は、円安の影響や在庫などの影響でもっと高騰していると思いますが、中古サーバくらいの金額で、SONiCが遊べます。皆さんも、ぜひとお試しくださいと言おうとしましたが、隣人などと騒音問題になる可能性があるので、オススメはしません（笑