给SONiC添加deb软件包
首先
SONiC是基于Debian/GNU Linux的,增加了白盒交换机所需功能的软件。它作为开源软件提供,用户可以根据需要安装软件。本文将介绍如何添加deb软件包。
在启动后添加deb软件包
只要启动SONiC并登录,您就可以像在PC上的Debian系列发行版上一样,使用”sudo apt-get install”命令来安装各种软件包。
实例:admin@sonic:~$ sudo apt-get update
获取:1 http://debian-archive.trafficmanager.net/debian buster InRelease [121 kB]
获取:2 http://debian-archive.trafficmanager.net/debian-security buster/updates InRelease [65.4 kB]
获取:3 http://debian-archive.trafficmanager.net/debian buster-backports InRelease [46.7 kB]
获取:4 http://debian-archive.trafficmanager.net/debian buster/contrib amd64 Packages [60.4 kB]
获取:5 http://debian-archive.trafficmanager.net/debian buster/main amd64 Packages
获取:6 http://debian-archive.trafficmanager.net/debian buster/non-free amd64 Packages [107 kB]
获取:7 http://debian-archive.trafficmanager.net/debian-security buster/updates/non-free amd64 Packages [486 B]
获取:8 http://debian-archive.trafficmanager.net/debian-security buster/updates/main amd64 Packages [318 kB]
获取:9 http://debian-archive.trafficmanager.net/debian buster-backports/non-free amd64 Packages [27.2 kB]
获取:10 http://debian-archive.trafficmanager.net/debian buster-backports/main amd64 Packages [391 kB]
获取:11 http://debian-archive.trafficmanager.net/debian buster-backports/contrib amd64 Packages [7,824 B]
已提取 11.9 MB,用时 7 分 28 秒(26.5 kB/s)
正在读取软件包列表… 完成
admin@sonic:~$ sudo apt-get install -y htop
正在读取软件包列表… 完成
正在构建依赖关系树
正在读取状态信息… 完成
建议安装:
lsof strace
将会安装下列新包:
htop
0 个升级,新安装 1 个,要移除 0 个,未升级 35 个。
需要下载 92.8 kB 的归档。
此操作后将使用额外 230 kB 的空间。
获取:1 http://debian-archive.trafficmanager.net/debian buster/main amd64 htop amd64 2.2.0-1+b1 [92.8 kB]
已提取 92.8 kB,用时 2 秒(59.9 kB/s)
debconf:延迟软件包配置,因为未安装apt-utils
正在选择以前未选择的软件包 htop。
(正在读取数据库 … 目前已安装 29799 个文件和目录。)
正准备解包 …/htop_2.2.0-1+b1_amd64.deb …
正在解包 htop (2.2.0-1+b1) …
正在设置 htop (2.2.0-1+b1) …
正在处理触发器 mime-support (3.62) …
admin@sonic:~$
获取:1 http://debian-archive.trafficmanager.net/debian buster InRelease [121 kB]
获取:2 http://debian-archive.trafficmanager.net/debian-security buster/updates InRelease [65.4 kB]
获取:3 http://debian-archive.trafficmanager.net/debian buster-backports InRelease [46.7 kB]
获取:4 http://debian-archive.trafficmanager.net/debian buster/contrib amd64 Packages [60.4 kB]
获取:5 http://debian-archive.trafficmanager.net/debian buster/main amd64 Packages
获取:6 http://debian-archive.trafficmanager.net/debian buster/non-free amd64 Packages [107 kB]
获取:7 http://debian-archive.trafficmanager.net/debian-security buster/updates/non-free amd64 Packages [486 B]
获取:8 http://debian-archive.trafficmanager.net/debian-security buster/updates/main amd64 Packages [318 kB]
获取:9 http://debian-archive.trafficmanager.net/debian buster-backports/non-free amd64 Packages [27.2 kB]
获取:10 http://debian-archive.trafficmanager.net/debian buster-backports/main amd64 Packages [391 kB]
获取:11 http://debian-archive.trafficmanager.net/debian buster-backports/contrib amd64 Packages [7,824 B]
已提取 11.9 MB,用时 7 分 28 秒(26.5 kB/s)
正在读取软件包列表… 完成
admin@sonic:~$ sudo apt-get install -y htop
正在读取软件包列表… 完成
正在构建依赖关系树
正在读取状态信息… 完成
建议安装:
lsof strace
将会安装下列新包:
htop
0 个升级,新安装 1 个,要移除 0 个,未升级 35 个。
需要下载 92.8 kB 的归档。
此操作后将使用额外 230 kB 的空间。
获取:1 http://debian-archive.trafficmanager.net/debian buster/main amd64 htop amd64 2.2.0-1+b1 [92.8 kB]
已提取 92.8 kB,用时 2 秒(59.9 kB/s)
debconf:延迟软件包配置,因为未安装apt-utils
正在选择以前未选择的软件包 htop。
(正在读取数据库 … 目前已安装 29799 个文件和目录。)
正准备解包 …/htop_2.2.0-1+b1_amd64.deb …
正在解包 htop (2.2.0-1+b1) …
正在设置 htop (2.2.0-1+b1) …
正在处理触发器 mime-support (3.62) …
admin@sonic:~$
将deb软件包添加到安装镜像中。
如果要自己构建SONiC的安装映像,只需在build_debian.sh脚本的以下部分添加软件包名称并进行构建,即可创建预先安装了软件包的安装映像。
## Pre-install the fundamental packages
## Note: gdisk is needed for sgdisk in install.sh
## Note: parted is needed for partprobe in install.sh
## Note: ca-certificates is needed for easy_install
## Note: don't install python-apt by pip, older than Debian repo one
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install \
file \
ifmetric \
iproute2 \
bridge-utils \
isc-dhcp-client \
sudo \
在Docker容器中添加deb软件包。
SONiC在Docker容器中运行主要功能。考虑到有些情况下需要在容器内添加和运行软件以满足其功能需求,我会介绍如何向容器(准确说是为了运行容器的Docker镜像)添加软件包的方法。
向所有的容器中添加
在 dockers/docker-base/Dockerfile.j2 文件的以下部分添加软件包名称。
# Pre-install fundamental packages
RUN apt-get -y install \
vim-tiny \
perl \
python \
python-pip \
rsyslog \
向特定容器中添加
对于除了”Syncd Docker”之外的容器,您需要编辑位于”Dockers”目录下的”Dockerfile.j2″文件,并将要安装的软件包名称添加到与所有容器安装相同的apt-get install命令的包名列表中。
由于SONiC在运行时所见到的容器名称与在构建时引用的目录名称不同,因此在下面提供对应表。
コンテナ名ファイルsnmp docker
dockers/docker-snmp/Dockerfile.j2
mgmt-framework dockerdockers/docker-sonic-mgmt-framework/Dockerfile.j2
telemetry dockerdockers/docker-telemetry/Dockerfile.j2
sflow dockerdockers/docker-sflow/Dockerfile.j2
radv dockerdockers/docker-router-advertiser/Dockerfile.j2
lldp dockerdockers/docker-lldp/Dockerfile.j2
dhcp_relay dockerdockers/docker-dhcp-relay/Dockerfile.j2
nat dockerdockers/docker-nat/Dockerfile.j2
teamd dockerdockers/docker-teamd/Dockerfile.j2
swss dockerdockers/docker-orchagent/Dockerfile.j2
bgp dockerdockers/docker-fpm-frr/Dockerfile.j2
(quaggaやgobgpを使う場合は適宜変更)pmon dockerdockers/docker-platform-monitor/Dockerfile.j2
database dockerdockers/docker-database/Dockerfile.j2
如果要将syncd docker添加到目标平台中,则需要修改位于Dockerfile.j2下的文件。(如果您更改了rules/config并使用RPC,那么将变为docker-syncd-任意rpc)
我认为一看就可以理解,但我会先给出每个平台的文件位置。
プラットフォームファイルBarefoot
platform/barefoot/docker-syncd-bfn/Dockerfile.j2
Broadcomplatform/broadcom/docker-syncd-brcm/Dockerfile.j2
Caviumplatform/cavium/docker-syncd-cavm/Dockerfile.j2
Centecplatform/centec/docker-syncd-centec/Dockerfile.j2
Centec(ARM64)platform/centec-arm64/docker-syncd-centec/Dockerfile.j2
Innoviumplatform/innovium/docker-syncd-invm/Dockerfile.j2
Marvellplatform/marvell/docker-syncd-mrvl/Dockerfile.j2
Marvell(ARM64)platform/marvell-arm64/docker-syncd-mrvl/Dockerfile.j2
Marvell(ARM)platform/marvell-armhf/docker-syncd-mrvl/Dockerfile.j2
Mellanoxplatform/mellanox/docker-syncd-mlnx/Dockerfile.j2
Nephosplatform/nephos/docker-syncd-nephos/Dockerfile.j2
P4platform/p4/docker-sonic-p4/Dockerfile.j2
VSplatform/vs/docker-syncd-vs/Dockerfile.j2
最后
除了我们刚刚介绍的添加deb包以外,还可以进行其他自定义操作,例如添加docker容器或添加源代码等。如果有机会,我会进行进一步介绍。