1、环境
准备一个linux环境,我这里使用ubuntu20.04
安装所需依赖
sudo apt-get update
sudo apt-get install -y build-essential fakeroot debhelper \autotools-dev quilt libssl-dev libncurses5-dev \python3-pip python3-setuptools python3-wheel python3-all \libtool libffi-dev pkg-config cmake gcc-multilib g++-multilib \zlib1g-dev bison flex libelf-dev \libjson-c-dev libnl-3-dev libnl-route-3-dev \libnl-genl-3-dev libnl-nf-3-dev libnl-idiag-3-dev \git curl
克隆SONiC源码
开启代理,允许局域网使用(具体方法自行探索)
在ubuntu中进行配置,具体ip根据主机ip进行修改:
export https_proxy=http://192.168.4.178:7890
export http_proxy=http://192.168.4.178:7890
使用Git将SONiC的源码克隆到本地:
git clone https://github.com/Azure/sonic-buildimage.git
cd sonic-buildimage
配置编译环境
安装docker:
sudo apt install docker.io
将当前用户添加到 docker
用户组:
为了避免每次使用 Docker 时都要加上 sudo
,你可以将当前用户添加到 docker
用户组。这样,用户在执行 Docker 命令时就不再需要 sudo
权限。
创建 docker 组(如果还没有的话):
sudo groupadd docker
将当前用户添加到 docker 组:
sudo usermod -aG docker $USER
重新启动 Docker 服务:
sudo systemctl restart docker
退出当前终端会话并重新登录,或重新启动系统,来使用户组的更改生效。
配置docker代理:
1)编辑 Docker 配置文件
nano /etc/docker/daemon.json
2)添加国内镜像源
{"registry-mirrors": ["https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"]
}
3) 重启 Docker 服务
# 重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
SONiC使用Docker来构建编译环境,首先需要配置该环境:
make init
2、编译
配置编译选项
首先,我们要修改一些配置过程,以保证在这个过程中能够顺利进行:
1)修改sonic-slave-buster/Dockerfile.j2文件,要修改部分原文如下:
......# Install depot-tools (for git-retry)
RUN git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git /usr/share/depot_tools
ENV PATH /usr/share/depot_tools:$PATH......RUN curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -......
git clone在执行过程中总是失败,因此我们要手动下载,进入下载地址:
将下载后的包传入ubuntu中,进行解压,将解压后的文件放到sonic-slave-buster目录下:
tar -xf depot_tools.git-refs_heads_main.tar.gz -C depot_tools
cp -rf ../depot_tools sonic-slave-buster/
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -要修改的原因则是因为我们在configure过程中不能开启代理,但是这行命令执行时需要代理环境,所以需要单独处理。
最终修改如下:
......# Install depot-tools (for git-retry)
#RUN git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git /usr/share/depot_tools
COPY depot_tools /usr/share/depot_tools
ENV PATH /usr/share/depot_tools:$PATH......# 设置代理环境变量
ENV http_proxy=http://192.168.4.178:7890
ENV https_proxy=http://192.168.4.178:7890
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
# 解除代理环境变量
RUN unset http_proxy https_proxy......
2)修改sonic-slave-stretch/Dockerfile.j2文件
将depot_tool拷贝到对应目录:
cp -rf ../depot_tools sonic-slave-stretch/
修改同上!
3)修改sonic-slave-jessie/Dockerfile.j2文件
将depot_tool拷贝到对应目录:
cp -rf ../depot_tools sonic-slave-jessie/
修改同上!
4)修改sonic-slave-bullseye/Dockerfile.j2文件
5)修改sonic-slave-bookworm/Dockerfile.j2文件
只需要修改gpg部分。
根据目标设备的需求,选择对应的平台配置文件。SONiC支持多种硬件平台,您需要根据具体的硬件选择正确的配置文件。常见的配置文件包括 broadcom、mellanox 等。您可以通过以下命令列出所有支持的配置文件:
make configure PLATFORM=[platform_name]
例如:
make configure PLATFORM=broadcom
开始编译
配置完成后,您可以开始编译整个SONiC镜像。编译过程可能需要较长时间,视系统性能和配置而定:
make target/sonic-broadcom.bin
编译完成后,生成的镜像文件会存放在 target/
目录下。您可以将该镜像文件烧录到设备上以启动SONiC系统。