はじめに
以前こちらの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をインストールするには必要なパッケージがあるので以下のものをインストールしておきます。
sudo apt update
****sudo apt install python3-pip
sudo apt install git
sudo pip install j2cli
Gitからイメージをダウンロードして準備
GitHubからSONiCのイメージをダウンロードします。
SONiCはネットワークOSとして動作しますので、各ASICごとにインストールのイメージが異なります。今回はIAサーバーにインストールするのでVS(Virtual Server)版を選択します。
git clone --recursive https://github.com/Azure/sonic-buildimage.git
sudo modprobe overlay
cd sonic-buildimage
Dockerインストール
SONiCをインストールするにはDockerが必要です。まだお使いの環境にDockerが入っていない場合にはインストールしてください。Dockerがまったく入っていない場合には以下のように依存関係を解消し、Dockerのレポジトリも登録する必要があります。 (Dockerが入っている場合にはこちらは無視して先にお進みください)
💡 Ubuntu 20.04を想定しています
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt update
実際にDockerをインストールする前にレポジトリを表示して、Docker公式のものになっているか確認しておくといいと思います。以下のコマンドで確認が可能です。
apt-cache policy docker-ce
[実行結果]
ubuntu@xxx:~/sonic-buildimage$ apt-cache policy docker-ce
docker-ce:
Installed: (none)
Candidate: 5:20.10.22~3-0~ubuntu-focal
Version table:
5:20.10.22~3-0~ubuntu-focal 500
### 以下、省略 ###
バージョンはお使いの環境によって異なっている可能性があります
太字のようにubuntu-focalと表示されればOKです
確認できましたらDockerをインストールします。
sudo apt install docker-ce
最後にユーザー権限を追加しておきます。
sudo usermod -aG docker $USER
newgrp docker
sudo chown root:docker /var/run/docker.sock
SONiCのコミットIDを変更する
もしまだsonic-buildimageディレクトリにいない場合には移動しておいてください。
cd sonic-buildimage
SONiCのコミットは毎日のように変更されています。下記のサイトからできるだけ最新、かつ、Resultがsucceeded になっているIDを選択されるとうまくいくかと思います。
https://sonic-build.azurewebsites.net/ui/sonic/pipelines/142/builds?branchName=202205
私の時は3947ea6d1cを使いましたが、このIDが今もうまく動くとは限りません。最新のものをお使いになる方が確実かと思います。コミットIDを変更するには以下のコマンドを用います。
git checkout 3947ea6d1c
#このIDはなるべく最新のものに変更
SONiC イメージをビルド
それではいよいよSONiCのイメージをビルドしていきます。以下のコマンドを使って、イメージをビルドします。
💡 ビルドするのに3時間ほどかかります。SSHで接続している場合には途中でセッションが切れないように設定しておくと良いかと思います。
make init
make configure PLATFORM=vs
make SONIC_BUILD_JOBS=4 target/sonic-vs.img.gz
なお、公式レポジトリでは 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がインストールできるかどうか確認していきます。
sudo apt install -y cpu-checker
kvm-ok
💡 以下のように表示されればインストール可能です。 INFO: /dev/kvm exists KVM acceleration can be used
KVMをインストールするのは以下のコマンドです。
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager
libvirtd が active か確認します。
以下のコマンドを実行して、activeと表示されればOKです。
sudo systemctl is-active libvirtd
使用しているユーザーを libvirt と kvm グループに追加します。ここでは新たにlibvertグループとkvmグループを作成した後にユーザーを追加しています。
newgrp libvirt
newgrp kvm
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER
libvertグループとkvmグループにユーザーが追加されたかどうかは以下のコマンドで確認できます。
sudo groupmems -g libvirt -l
sudo groupmems -g kvm -l
KVMでSONiCを動かす
SONiC用の仮想マシンを作成するためのxml ファイルを用意します。ファイルは以下からダウンロードします。
https://raw.githubusercontent.com/sonic-net/sonic-buildimage/master/platform/vs/sonic.xml
wget https://raw.githubusercontent.com/sonic-net/sonic-buildimage/master/platform/vs/sonic.xml
上記xmlをもとに仮想マシン作成
sudo virsh create sonic.xml
qemuで動作確認
sudo virsh list --all
Id Name State
-----------------------
1 sonic running
ログインしてみる
XMLファイルのなかでtelnet 7000番ポートが定義されていますので、以下のコマンドでログイン可能です。デフォルトの管理者アカウントはadmin/YourPaSsWoRdになっています。4
telnet localhost 7000
ログインできると以下のようにSONiCのロゴが出てくるかと思います。私はここまで来るのに数日かかったので、ロゴが見えた時にかなり感動しました(笑)
telnet localhost 7000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
sonic login: admin
Password:
Linux sonic 5.10.0-18-2-amd64 #1 SMP Debian 5.10.140-1 (2022-09-02) 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/
show versionでバージョンの確認も可能です。
admin@sonic:~$ show version
SONiC Software Version: SONiC.HEAD.0-3947ea6d1
Distribution: Debian 11.6
Kernel: 5.10.0-18-2-amd64
Build commit: 3947ea6d1
Build date: Thu Jan 26 01:23:02 UTC 2023
Built by: nos-usa@hpe-microserver-10
Platform: x86_64-kvm_x86_64-r0
HwSKU: Force10-S6000
ASIC: vs
ASIC Count: 1
Serial Number: N/A
Model Number: N/A
Hardware Revision: N/A
Uptime: 18:25:52 up 13 min, 1 user, load average: 0.00, 0.32, 0.36
Date: Thu 26 Jan 2023 18:25:52
### 以下、省略 ###
まとめ
今回はSONiCをビルドしてKVM上の仮想マシンとして動作させるところまで実施しました。SONiC自体は以前のTech Blogでもお伝えしたとおりハイパースケーラーを中心に導入が進んでいますが、米国ではTarget(米国 大手小売業)が採
用するなどエンタープライズ領域にも広がり始めています。米国で採用されたものが3年から5年後に日本でも導入が進むパターンはこれまで何度も起きています。今からSONiCに注目し、少しずつでも実際に触ってみると将来の役に立つかもしれません。
本Blogでも引き続き追いかけて情報を共有していきます。