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がインストールされ暫くすると自ら再起動します。
とログイン画面になりますが、ここでアカウントは「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
|