Tech Blog #60 - SONiCインストールしてみた How To Install SONiC NOS On Your Server.

はじめに
以前こちらのTech Blog #46でSONiC Network OSについて取り上げました。Bay Area Newsletter / シリコンバレーの中でもっとも読まれている記事でSONiCが注目され始めていることを実感しています。
前回のBlog記事ではSONiCとは何かを説明したのですが、せっかくだから実際に使ってみたいというエンジニアの方もいらっしゃるのではないかと思いまして、今回はいわゆる”やってみた系”の内容で、SONiCを実際にサーバー(パソコンでも可能)で動作させるところをお伝えしたいと思います。実際にSONiCのイメージをビルドして、KVM上で動かすところまでをご紹介いたします。
SONiCのおさらい
SONiCはもともとMicrosoft主導で開発されていたフルオープンソースのネットワーク用OSです。その中でもOpen Network Linuxと呼ばれるネットワーク用ソフトウェアのひとつで、今回のようにKVM上でLinux OSとして動作することもできますし、ONIE対応のホワイトボックススイッチで動作させることも可能です。
このあたりの用語は2015年に開催された『ホワイトボックススイッチユーザ会 第一回勉強会』の資料が分かりやすかったので一部抜粋して紹介いたします。簡単にまとめますとONIEがブートローダーとOSのインストール部分を担い、その上にOpen Network Linux (今回でいえばSONiCが該当します) が動作するかたちになっています。1


💡今回はLinuxサーバーの上に仮想マシンとしてSONiCを動作させるためONIEは利用していません。SONiCを物理的なホワイトボックススイッチで動作させる際、ONIE対応のものを使うことになります。
SONiCを動かしてみよう
それでは実際にSONiCのイメージをビルドして動かしていきたいと思います。だいたいのことは公式GitHubレポジトリにもインストールの方法は記載されていますが、わりと落とし穴といいますか、ハマるポイントもいくつかありましたので、以下実際の流れをご紹介できればと思います。
インストールの構成
SONiCの公式GitHubレポジトリに必要となる構成が記載されています。
Multiple cores to increase build speed
Plenty of RAM (less than 8 GiB is likely to cause issues)
300G of free disk space
KVM Virtualization Support.
特にハードディスク容量にはご注意ください。ビルドするのに200GB - 300GB程度必要になりますし、容量が不足しているとビルドに失敗します。お恥ずかしながらUbuntuをインストールした際、適当にパーティション切りすぎて、容量不足におちいりました。No space left on deviceとエラーが出てしまい先に進めませんでした。
また、公式レポジトリに以下記載のあるように、Ubuntu 20.04が推奨されています。
A good choice of OS for building SONiC is currently Ubuntu 20.04.
なお、今回利用したサーバーのスペックは以下のとおりです。
モデル名: HPE ProLiant MicroServer
CPU: Intel® Xeon® E-2300 processors
Memory: 32GB
Storage: 4TB
OS: Ubuntu Linux 20.04
依存関係を解決しておく
SONiCをインストールするには必要なパッケージがあるので以下のものをインストールしておきます。

Gitからイメージをダウンロードして準備
GitHubからSONiCのイメージをダウンロードします。
SONiCはネットワークOSとして動作しますので、各ASICごとにインストールのイメージが異なります。今回はIAサーバーにインストールするのでVS(Virtual Server)版を選択します。

Dockerインストール
SONiCをインストールするにはDockerが必要です。まだお使いの環境にDockerが入っていない場合にはインストールしてください。Dockerがまったく入っていない場合には以下のように依存関係を解消し、Dockerのレポジトリも登録する必要があります。 (Dockerが入っている場合にはこちらは無視して先にお進みください)
💡 Ubuntu 20.04を想定しています

実際にDockerをインストールする前にレポジトリを表示して、Docker公式のものになっているか確認しておくといいと思います。以下のコマンドで確認が可能です。

[実行結果]

バージョンはお使いの環境によって異なっている可能性があります
太字のようにubuntu-focalと表示されればOKです
確認できましたらDockerをインストールします。

最後にユーザー権限を追加しておきます。

SONiCのコミットIDを変更する
もしまだsonic-buildimageディレクトリにいない場合には移動しておいてください。

SONiCのコミットは毎日のように変更されています。下記のサイトからできるだけ最新、かつ、Resultがsucceeded になっているIDを選択されるとうまくいくかと思います。 https://sonic-build.azurewebsites.net/ui/sonic/pipelines/142/builds?branchName=202205
私の時は3947ea6d1cを使いましたが、このIDが今もうまく動くとは限りません。最新のものをお使いになる方が確実かと思います。コミットIDを変更するには以下のコマンドを用います。

SONiC イメージをビルド
それではいよいよSONiCのイメージをビルドしていきます。以下のコマンドを使って、イメージをビルドします。
💡 ビルドするのに3時間ほどかかります。SSHで接続している場合には途中でセッションが切れないように設定しておくと良いかと思います。

なお、公式レポジトリでは make SONIC_BUILD_JOBS=4 all となっていますが、以下のサイトでallにするとエラーになると解説されており、これにしたがって変更しています。2
https://hackmd.io/@rossano/r1TXEjQW5
無事にビルドが成功するとtargetディレクトリの下にsonic-vs.img.gzができているはずです!サイズはおよそ1.1GBぐらいです。
KVMインストール
次に作成したSONiCを動かすためにKVMをインストールしていきます。すでにKVMが入っている環境でしたら、こちらのステップはスキップしても構いません。
インストールの際は以下のサイトを参考にさせてもらいました。3
https://help.ubuntu.com/community/KVM/Installation
まずはKVMがインストールできるかどうか確認していきます。

💡 以下のように表示されればインストール可能です。
INFO: /dev/kvm exists KVM acceleration can be used
KVMをインストールするのは以下のコマンドです。

libvirtd が active か確認します。
以下のコマンドを実行して、activeと表示されればOKです。

使用しているユーザーを libvirt と kvm グループに追加します。ここでは新たにlibvertグループとkvmグループを作成した後にユーザーを追加しています。

libvertグループとkvmグループにユーザーが追加されたかどうかは以下のコマンドで確認できます。

KVMでSONiCを動かす
SONiC用の仮想マシンを作成するためのxml ファイルを用意します。ファイルは以下からダウンロードします。
https://raw.githubusercontent.com/sonic-net/sonic-buildimage/master/platform/vs/sonic.xml

上記xmlをもとに仮想マシン作成

qemuで動作確認

ログインしてみる
XMLファイルのなかでtelnet 7000番ポートが定義されていますので、以下のコマンドでログイン可能です。デフォルトの管理者アカウントはadmin/YourPaSsWoRdになっています。4

ログインできると以下のようにSONiCのロゴが出てくるかと思います。私はここまで来るのに数日かかったので、ロゴが見えた時にかなり感動しました(笑)

show versionでバージョンの確認も可能です。

まとめ
今回はSONiCをビルドしてKVM上の仮想マシンとして動作させるところまで実施しました。SONiC自体は以前のTech Blogでもお伝えしたとおりハイパースケーラーを中心に導入が進んでいますが、米国ではTarget(米国 大手小売業)が採用するなどエンタープライズ領域にも広がり始めています。米国で採用されたものが3年から5年後に日本でも導入が進むパターンはこれまで何度も起きています。今からSONiCに注目し、少しずつでも実際に触ってみると将来の役に立つかもしれません。
本Blogでも引き続き追いかけて情報を共有していきます。
参照リンク
1 https://www.publickey1.jp/blog/15/post_255.html
2 https://hackmd.io/@rossano/r1TXEjQW5
3 https://help.ubuntu.com/community/KVM/Installation
4 https://github.com/sonic-net/SONiC/blob/master/doc/SONiC-User-Manual.md