SONIC系统(1)编译与构建

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

其他依赖 

sudo pip3 install j2cli 

克隆SONiC源码

开启代理,允许局域网使用(具体方法自行探索)

在ubuntu中进行配置,具体ip根据主机ip进行修改:

export https_proxy=http://192.168.4.178:7890
export http_proxy=http://192.168.4.178:7890
export all_proxy=socks5://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",
    "https://registry.docker-cn.com"
  ]
}

或者如下:

{
  "registry-mirrors": [
    "https://registry.cn-hangzhou.aliyuncs.com",
    "https://hub-mirror.c.163.com",
    "https://mirror.ccs.tencentyun.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.tuna.tsinghua.edu.cn"
  ]
}

3) 重启 Docker 服务

# 重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker

ps:如果网络不稳定,可以增加超时时间:

export DOCKER_CLIENT_TIMEOUT=300
export COMPOSE_HTTP_TIMEOUT=300

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系统。

Note

所有的make命令(除了make init)一开始都会检查并创建所有debian版本的docker builder:bullseye,stretch,jessie,buster。每个builder都需要几十分钟的时间才能创建完成,这对于我们平时开发而言实在完全没有必要,一般来说,我们只需要创建最新的版本即可(当前为bullseye,bookwarm暂时还没有支持),具体命令如下:

NOJESSIE=1 NOSTRETCH=1 NOBUSTER=1 make PLATFORM=<platform> configure

当然,为了以后开发更加方便,避免重复输入,我们可以将这个命令写入到~/.bashrc中,这样每次打开终端的时候,就会设置好这些环境变量了。

export NOJESSIE=1
export NOSTRETCH=1
export NOBUSTER=1
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Absorbed_w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值