ONIE:Open Network Install Environment

ベアメタルスイッチ(bare metal switch)[ホワイトボックススイッチ(White Box Switch)]とかで
OSを別途必要とするコンピューター(大抵はSwitch)のmini-bootを担当するOS、ブートローダって感じかな.
*一応その下地にBIOSも存在します

大抵CPUがあってSwitchを担当するchipが別途存在して、ONIEはその上で動くOS(Networks OS:NOS)の導入に使われます。

っで、NOSとしてはCumulus Linuxがメジャーっぽいがこちらは有償品. フリーなのとして OpenNetworkLinux(ONL)がある.

「安いSwitchingHubがある」と飛び込むとNOSが必要とかで却って手間がかかり高価になる可能性がありますので要注意

ここでは Edgecore社製「AS6812-32X」にNOSを導入してみた.
*OEMでfs.comとかでも売っていたがなんかいつの間にかURLごと消えていた

手始めに

google先生を頼って調べてみたら「https://opennetlinux.org/binaries」にあるOpenNetworkLinux
OpenNSL(BroadcomのSwitingHuBChipのドライバ)をコンパイルしてOpenNetworkLinux向けに作って公開してくれているサイト
https://github.com/onfsdn/atrium-docs/tree/master/16A/ONOS/builds」にあるパッケージを使えばできるとあった.

っが、該当するOpenNetworkLinuxのインストーラーは既にnot found。
一応同系列のDEB8(Debian8)のNOS INSTALLERを入手してこれを手始めに(練習がてら)インストールしてみた

シリアルで接続してSwitchを起動すると自動的にインストーラーを探してくれるが、

ONIE:/ # onie-discovery-stop

にて停止させ、WEBサイトとか載せたインストーラーを参照させる形でNOSをインストールします
使用したNOSは、https://opennetlinux.org/binaries/2018.05.30.1929.56bf7f1b23878b5be3330272e259b846f88b91d7/ にあります

ONIE:/ # onie-nos-install http://c/ONL-master-ONL-OS-DEB8-2018-05-30.1929-56bf7f1-AMD64-INSTALLED-INSTALLER

OSがインストールされ暫くすると自ら再起動します。

localhost login:

とログイン画面になりますが、ここでアカウントは「root」パスワードは「onl」でログインできます。
管理コンソール用のnicにipを設けるには

root@localhost:~# vi /etc/network/interfaces
 :
 :
auto ma1
iface ma1 inet dhcp
 
root@localhost:~# reboot

と追記して、再起動します。そうすればdhcp経由ですが、シリアルを介さずログインできます。

っでいろいろこの段階で調べてみた
ONIE/ONL-master-ONL-OS-DEB8-2018-05-30.1929-56bf7f1-AMD64-INSTALLED-INSTALLER
ただNOSを入れただけではSwitchに繋がったマシンでLinkUpは得られなかった。

やっぱりチップドライバーを含んだOpenNSLが必要なようで有志様の「https://github.com/onfsdn/atrium-docs/tree/master/16A/ONOS/builds」から
下記のパッケージを取得した。
「ofdpa_3.0.5.5+accton1.7-1_amd64.deb」
試しにこのdebファイルの中身をばらしてみると、

[illya@c ~]$ mkdir ofdpa ; cd ofdpa
[illya@c ofdpa]$  ar -xf ../ofdpa_3.0.5.5+accton1.7-1_amd64.deb
[illya@c ofdpa]$ ls -l
total 9824
-rw-r--r-- 1 illya em     4344 Dec 19 19:32 control.tar.gz
-rw-r--r-- 1 illya em 10044192 Dec 19 19:32 data.tar.xz
-rw-r--r-- 1 illya em        4 Dec 19 19:32 debian-binary
 
[illya@c ofdpa]$ xz -cd data.tar.xz | tar tvf - |less
 :
-rw-r--r-- root/root     36208 2018-01-10 15:23 ./lib/modules/3.16.39-OpenNetworkLinux/ofdpa/linux-user-bde.ko
-rw-r--r-- root/root     63480 2018-01-10 15:23 ./lib/modules/3.16.39-OpenNetworkLinux/ofdpa/linux-kernel-bde.ko
 :
drwxr-xr-x root/root         0 2018-01-10 15:24 ./etc/init.d/
-rwxr-xr-x root/root      3573 2017-11-30 11:25 ./etc/init.d/ofagentd
drwxr-xr-x root/root         0 2018-01-10 15:24 ./etc/ofagent/
-rw-r--r-- root/root      1355 2017-11-30 11:25 ./etc/ofagent/ofagent.conf
 :
-rw-r--r-- root/root      6221 2017-12-15 13:25 ./usr/share/ofdpa/conf/as6712-32x.conf
 :
[illya@c ofdpa]$

どうやらこのOpenNSLの対象カーネルは「3.16.39」な模様.

Switchに入れてみたOpenNetworkLinuxのカーネルは「4.14.34」なので
このOpenNSLパッケージは適用できないみたい.
カーネルのバージョンが違うので無理

なのでここでは OpenNetworkLinux を OpenNSL 込みで作り直してみた。

OpenNetworkLinuxを作り直す

参照先はこちらhttps://github.com/Broadcom-Switch/OpenNSL/issues/34

docker環境が必要です。
docker#h256f5f6を参照に

yum install yum-utils -y
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce -y
systemctl start docker
systemctl enable docker

とします「docker --version」の値は「Docker version 20.10.1, build 831ebea」でした。
次にhttps://github.com/Broadcom-Switch/OpenNSL/issues/34#issuecomment-424718956を参考に

[root@docker ~]# mkdir /opt/work
[root@docker ~]# cd /opt/work/
[root@docker work]# git clone https://github.com/opencomputeproject/OpenNetworkLinux
[root@docker work]# cd OpenNetworkLinux
 
[root@docker OpenNetworkLinux]# git clone https://github.com/Broadcom-Switch/OpenNSL

これで必要なコードが揃います。
ディレクトリはこんな感じで、OpenNSLのサイズが1.9GBと結構大きいです

[root@docker OpenNetworkLinux]# ls -l
total 36
drwxr-xr-x.  8 root root   118 Dec 20 01:14 builds
drwxr-xr-x.  4 root root    33 Dec 20 01:14 docker
drwxr-xr-x.  3 root root   241 Dec 20 01:14 docs
-rw-r--r--.  1 root root 12379 Dec 20 01:14 LICENSE
drwxr-xr-x.  3 root root  4096 Dec 20 01:14 make
-rw-r--r--.  1 root root  1714 Dec 20 01:14 Makefile
drwxr-xr-x. 10 root root   242 Dec 20 01:56 OpenNSL
drwxr-xr-x.  5 root root    75 Dec 20 01:14 packages
-rw-r--r--.  1 root root   789 Dec 20 01:14 README.md
drwxr-xr-x.  6 root root    97 Dec 20 01:14 REPO
-rwxr-xr-x.  1 root root  1795 Dec 20 01:14 setup.env
drwxr-xr-x.  5 root root    57 Dec 20 01:14 sm
drwxr-xr-x.  4 root root  4096 Dec 20 01:14 tools
[root@docker OpenNetworkLinux]#
[root@docker OpenNetworkLinux]# du -hs ./*
896K    ./builds
284K    ./docker
164K    ./docs
16K     ./LICENSE
92K     ./make
4.0K    ./Makefile
1.9G    ./OpenNSL
140M    ./packages
4.0K    ./README.md
100K    ./REPO
4.0K    ./setup.env
0       ./sm
420K    ./tools
[root@docker OpenNetworkLinux]#

この段階で中身を「ls -lR」とかで簡単に調べてみた
OpenNetworkLinuxに用意されるカーネルは下記のようで、

[root@docker OpenNetworkLinux]# ls -l ./packages/base/amd64/kernels
total 4
drwxr-xr-x. 3 root root 51 Dec 20 02:49 kernel-3.16-lts-x86-64-all
drwxr-xr-x. 3 root root 51 Dec 20 02:49 kernel-3.2-lts-x86-64-all
drwxr-xr-x. 3 root root 51 Dec 20 02:49 kernel-4.14-lts-x86-64-all
drwxr-xr-x. 3 root root 51 Dec 20 02:49 kernel-4.19-lts-x86-64-all
drwxr-xr-x. 3 root root 51 Dec 20 02:49 kernel-4.9-lts-x86-64-all
drwxr-xr-x. 3 root root 51 Dec 20 02:49 kernel-5.4-lts-x86-64-all
-rw-r--r--. 1 root root 26 Dec 20 01:14 Makefile
[root@docker OpenNetworkLinux]#

「./packages/base/any/kernels/」も調べると

./packages/base/any/kernels/3.16-lts/kconfig.mk --> 3.16.76
./packages/base/any/kernels/3.2-lts/kconfig.mk  --> 3.2.98
./packages/base/any/kernels/4.14-lts/kconfig.mk --> 4.14.151
./packages/base/any/kernels/4.19-lts/kconfig.mk --> 4.19.81
./packages/base/any/kernels/4.9-lts/kconfig.mk  --> 4.9.75
./packages/base/any/kernels/5.4-lts/kconfig.mk  --> 5.4.40

のkernelバージョンになるみたい。
参照先では「git checkout -b 2018-01-09 04257be」を実行していてその際は

./packages/base/any/kernels/3.16-lts/kconfig.mk  --> 3.16.53
./packages/base/any/kernels/3.18.25/kconfig.mk --> 3.18.25
./packages/base/any/kernels/3.2-lts/kconfig.mk --> 3.2.98
./packages/base/any/kernels/4.9-lts/kconfig.mk --> 4.9.75

となっていた

閑話休題

続いて参照先と同じようにして

[root@docker OpenNetworkLinux]# git checkout -b 2018-01-09 04257be
[root@docker OpenNetworkLinux]# docker/tools/onlbuilder
[root@docker OpenNetworkLinux]# apt-cacher-ng
[root@docker OpenNetworkLinux]# source setup.env
[root@docker OpenNetworkLinux]# make amd64
 
[root@docker OpenNetworkLinux]# export KERNDIR=/opt/work/OpenNetworkLinux/packages/base/amd64/kernels/kernel-3.16-lts-x86-64-all/builds/linux-3.16.53
[root@docker OpenNetworkLinux]# cd OpenNSL-master/sdk-6.5.12-gpl-modules/systems/linux/user/x86-smp_generic_64-2_6
 
[root@docker x86-smp_generic_64-2_6]# make
[root@docker OpenNetworkLinux]# docker/tools/onlbuilder
 :
 :
Digest: sha256:9e1054ca3014e218e74a1973ec349d8f63ac626641cc47f4ce47b3551f1c3a42
Status: Downloaded newer image for opennetworklinux/builder8:1.11
[ ok ] Enabling additional executable binary formats: binfmt-support.
 
root@docker:/opt/work/OpenNetworkLinux# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Dec19 pts/0    00:00:00 /usr/bin/python /bin/docker_shell --user root:0 -c bash
root        38     1  0 Dec19 pts/0    00:00:00 /bin/sh -c /usr/bin/sudo -E -u root bash
root        39    38  0 Dec19 pts/0    00:00:00 /usr/bin/sudo -E -u root bash
root        40    39  0 Dec19 pts/0    00:00:00 bash
root        46    40  0 02:44 pts/0    00:00:00 ps -ef
root@docker:/opt/work/OpenNetworkLinux#
root@docker:/opt/work/OpenNetworkLinux# exit
exit
[root@docker OpenNetworkLinux]#
 
[root@docker OpenNetworkLinux]# docker images
REPOSITORY                  TAG       IMAGE ID       CREATED        SIZE
opennetworklinux/builder8   1.11      05a0ff2d3dea   8 months ago   10.4GB
 
[root@docker OpenNetworkLinux]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
 
[root@docker OpenNetworkLinux]# docker ps -a
CONTAINER ID   IMAGE                            COMMAND                  CREATED       STATUS                          PORTS     NAMES
aea77feff84f   opennetworklinux/builder8:1.11   "/bin/docker_shell -…"   7 hours ago   Exited (0) About a minute ago             root_2020-12-20.030346
 
[root@docker OpenNetworkLinux]# docker start aea77feff84f
[root@docker OpenNetworkLinux]# docker attach aea77feff84f
root@docker:/opt/work/OpenNetworkLinux#
root@docker:/opt/work/OpenNetworkLinux# source setup.env
Submodule 'sm/infra' (http://github.com/floodlight/infra) registered for path 'sm/infra'
Cloning into 'sm/infra'...
remote: Enumerating objects: 1924, done.
remote: Total 1924 (delta 0), reused 0 (delta 0), pack-reused 1924
Receiving objects: 100% (1924/1924), 472.44 KiB | 308.00 KiB/s, done.
Resolving deltas: 100% (1103/1103), done.
Checking connectivity... done.
Submodule path 'sm/infra': checked out '8621a0bab76affaaad6dee0939fda0737c32c881'
Submodule 'sm/bigcode' (http://github.com/floodlight/bigcode) registered for path 'sm/bigcode'
Cloning into 'sm/bigcode'...
remote: Enumerating objects: 77, done.
remote: Counting objects: 100% (77/77), done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 3997 (delta 31), reused 46 (delta 17), pack-reused 3920
Receiving objects: 100% (3997/3997), 1.13 MiB | 266.00 KiB/s, done.
Resolving deltas: 100% (2466/2466), done.
Checking connectivity... done.
Submodule path 'sm/bigcode': checked out '981aee67ebf433d42f444d4faf1a46a596b39555'
Submodule 'sm/build-artifacts' (http://github.com/opennetworklinux/build-artifacts) registered for path 'sm/build-artifacts'
Cloning into 'sm/build-artifacts'...
remote: Enumerating objects: 53, done.
remote: Total 53 (delta 0), reused 0 (delta 0), pack-reused 53
Unpacking objects: 100% (53/53), done.
Checking connectivity... done.
Submodule path 'sm/build-artifacts': checked out '7567e96c5361c69672c80986a6ec585e0b19eb00'
root@docker:/opt/work/OpenNetworkLinux#

販売元から「opennsl-accton_3.5.0.3+accton5.0-1_amd64.deb」を頂いた

中身を見てみると

ar xf opennsl-accton_3.5.0.3+accton5.0-1_amd64.deb
xz -cd data.tar.xz | tar tf - |less
 
./lib/modules/4.14.49-OpenNetworkLinux/
./lib/modules/4.14.49-OpenNetworkLinux/opennsl-accton/
./lib/modules/4.14.49-OpenNetworkLinux/opennsl-accton/linux-kernel-bde.ko
./lib/modules/4.14.49-OpenNetworkLinux/opennsl-accton/linux-bcm-knet.ko
./lib/modules/4.14.49-OpenNetworkLinux/opennsl-accton/linux-user-bde.ko

とあったので 4.14.49をターゲットにNOSを作ってみた

[root@docker OpenNetworkLinux]# git checkout master
diff --git a/packages/base/any/kernels/4.14-lts/kconfig.mk b/packages/base/any/kernels/4.14-lts/kconfig.mk
index 0767ce4..c3d7e66 100644
--- a/packages/base/any/kernels/4.14-lts/kconfig.mk
+++ b/packages/base/any/kernels/4.14-lts/kconfig.mk
@@ -21,7 +21,7 @@
 THIS_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
 K_MAJOR_VERSION := 4
 K_PATCH_LEVEL := 14
-K_SUB_LEVEL := 151
+K_SUB_LEVEL := 49
 K_SUFFIX :=
 K_PATCH_DIR := $(THIS_DIR)/patches
 K_MODSYNCLIST := tools/objtool
[root@docker OpenNetworkLinux]# docker/tools/onlbuilder
[ ok ] Enabling additional executable binary formats: binfmt-support.
 
root@docker:/opt/work/OpenNetworkLinux# apt-cacher-ng
root@docker:/opt/work/OpenNetworkLinux# source setup.env
root@docker:/opt/work/OpenNetworkLinux# make amd64
root@docker:/opt/work/OpenNetworkLinux# export KERNDIR=/opt/work/OpenNetworkLinux/packages/base/amd64/kernels/kernel-4.14-lts-x86-64-all/builds/linux-3.16.53

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2021-01-11 (月) 03:45:24 (46d)