sonic_version 201911
1. 全量编译/更换版本步骤回顾 1.1. 全量编译命令
编译环境:开发机
1 2 3 4 cd $SONIC_CODE_DIR rm -rf target/ make configure PLATFORM=broadcom make target/sonic.bin
1.2. 全量更换版本命令
安装环境:交换机 将全量安装包 sonic.bin 上传到交换机后执行
1 2 sudo sonic_installer install -f /home/admin/sonic.bin sudo reboot
2. 编译及更新单个容器步骤 2.1. 以 bgp 为例
bgp 容器镜像文件: docker-fpm-frr.gz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 在编译机的代码库的 <code>$SONIC_CODE_DIR </code> 路径下,删除(待编译容器镜像)旧的镜像包 rm target/docker-fpm-frr.gz rm target/debs/stretch/frr_7.2-sonic-0_amd64.deb # 编译 bgp 容器镜像包(约 8 min) make target/docker-fpm-frr.gz # 上传到交换机 ls -l $SONIC_CODE_DIR/target/docker-fpm-frr.gz scp $SONIC_CODE_DIR/target/docker-fpm-frr.gz admin@A.B.C.D:/home/admin/ # 登录交换机 ssh admin@A.B.C.D # 确认容器镜像包信息 ls -l /home/admin/docker-fpm-frr.gz # 单独更新 bgp 容器(无需 reboot 宿主机) sudo sonic_installer upgrade_docker --cleanup_image bgp /home/admin/docker-fpm-frr.gz
2.2. 以 lldp 为例
lldp 容器镜像文件: docker-lldp-sv2.gz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 在编译机的代码库的 <code>$SONIC_CODE_DIR </code> 路径下,删除(待编译容器镜像)旧的镜像包 rm target/docker-lldp-sv2.gz rm target/debs/lldpd_1.0.4-1_amd64.deb # 编译 lldp 容器镜像包(约 8 min) make target/docker-lldp-sv2.gz # 上传到交换机 ls -l $SONIC_CODE_DIR/target/docker-lldp-sv2.gz scp $SONIC_CODE_DIR/target/docker-lldp-sv2.gz admin@A.B.C.D:/home/admin/ # 登录交换机 ssh admin@A.B.C.D # 确认容器镜像包信息 ls -l /home/admin/docker-lldp-sv2.gz # 单独更新 lldp 容器(无需 reboot 宿主机) sudo sonic_installer upgrade_docker --cleanup_image lldp /home/admin/docker-lldp-sv2.gz
2.3. 以 pmon 为例
pmon 容器镜像文件: docker-platform-monitor.gz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # 在编译机的代码库的 <code>$SONIC_CODE_DIR </code> 路径下,删除(待编译容器镜像)旧的镜像包 rm target/docker-platform-monitor.gz rm target/python-debs/python-sonic-hwmgrd_1.0-1_all.deb rm target/python-debs/python-sonic-syseepromd_1.0-1_all.deb rm target/python-debs/python-sonic-psud_1.0-1_all.deb rm target/python-debs/python-sonic-xcvrd_1.0-1_all.deb rm target/python-debs/python-sonic-ledd_1.1-1_all.deb # 编译 pmon 容器镜像包(约 min) make target/docker-platform-monitor.gz # 上传到交换机 ls -l $SONIC_CODE_DIR/target/docker-platform-monitor.gz scp $SONIC_CODE_DIR/target/docker-platform-monitor.gz admin@A.B.C.D:/home/admin/ # 登录交换机 ssh admin@A.B.C.D # 确认容器镜像包信息 ls -l /home/admin/docker-platform-monitor.gz # 单独更新 pmon 容器(无需 reboot 宿主机) sudo sonic_installer upgrade_docker --cleanup_image pmon /home/admin/docker-platform-monitor.gz
2.4. 以 radv 为例
radv 容器镜像文件: docker-router-advertiser.gz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 在编译机的代码库的 <code>$SONIC_CODE_DIR </code> 路径下,删除(待编译容器镜像)旧的镜像包 rm target/docker-router-advertiser.gz rm target/debs/stretch/radvd-dbgsym_2.17-2~bpo9+1_amd64.deb rm target/debs/stretch/radvd_2.17-2~bpo9+1_amd64.deb # 编译 radv 容器镜像包(约 10 min) make target/docker-router-advertiser.gz # 上传到交换机 ls -l $SONIC_CODE_DIR/target/docker-router-advertiser.gz scp $SONIC_CODE_DIR/target/docker-router-advertiser.gz admin@A.B.C.D:/home/admin/ # 登录交换机 ssh admin@A.B.C.D # 确认容器镜像包信息 ls -l /home/admin/docker-router-advertiser.gz # 单独更新 radv 容器(无需 reboot 宿主机) sudo sonic_installer upgrade_docker --cleanup_image radv /home/admin/docker-router-advertiser.gz
2.5. 以 swss 为例
swss 容器镜像文件: docker-orchagent.gz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # 在编译机的代码库的 <code>$SONIC_CODE_DIR </code> 路径下,删除(待编译容器镜像)旧的镜像包 rm target/docker-orchagent.gz rm target/debs/stretch/swss_1.0.0_amd64.deb rm target/debs/stretch/libswsscommon_1.0.0_amd64.deb rm target/debs/stretch/python-swsscommon_1.0.0_amd64.deb # 编译 swss 容器镜像包(约 13 min) make target/docker-orchagent.gz # 上传到交换机 ls -l $SONIC_CODE_DIR/target/docker-orchagent.gz scp $SONIC_CODE_DIR/target/docker-orchagent.gz admin@A.B.C.D:/home/admin/ $ $ # 登录交换机 ssh admin@A.B.C.D # 确认容器镜像包信息 ls -l /home/admin/docker-orchagent.gz # 单独更新 swss 容器(无需 reboot 宿主机) sudo sonic_installer upgrade_docker --cleanup_image swss /home/admin/docker-orchagent.gz
2.6. 以 snmp 为例
snmp 容器镜像文件: docker-snmp-sv2.gz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # 在编译机的代码库的 <code>$SONIC_CODE_DIR </code> 路径下,删除(待编译容器镜像)旧的镜像包 rm target/docker-snmp-sv2.gz rm target/debs/stretch/libsnmp30_5.7.3+dfsg-1.5_amd64.deb rm target/debs/stretch/libsnmp-base_5.7.3+dfsg-1.5_all.deb rm target/debs/stretch/libsnmp-dev_5.7.3+dfsg-1.5_amd64.deb # 编译 snmp 容器镜像包 make target/docker-snmp-sv2.gz # 上传到交换机 ls -l $SONIC_CODE_DIR/target/docker-snmp-sv2.gz scp $SONIC_CODE_DIR/target/docker-snmp-sv2.gz admin@A.B.C.D:/home/admin/ # 登录交换机 ssh admin@A.B.C.D # 确认容器镜像包信息 ls -l /home/admin/docker-snmp-sv2.gz # 单独更新 snmp 容器(无需 reboot 宿主机) sudo sonic_installer upgrade_docker --cleanup_image snmp /home/admin/docker-snmp-sv2.gz
2.7. 以 teamd 为例
teamd 容器镜像文件: docker-teamd.gz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cd $SONIC_CODE_DIR # 在编译机的代码库的 <code>$SONIC_CODE_DIR </code> 路径下,删除(待编译容器镜像)旧的镜像包 rm target/docker-teamd.gz rm target/debs/stretch/libteam5_1.28-1_amd64.deb # 编译 teamd 容器镜像包(约 8 min) make target/docker-teamd.gz # 上传到交换机 ls -l $SONIC_CODE_DIR/target/docker-teamd.gz scp $SONIC_CODE_DIR/target/docker-teamd.gz admin@A.B.C.D:/home/admin/ # 登录交换机 ssh admin@A.B.C.D # 确认容器镜像包信息 ls -l /home/admin/docker-teamd.gz # 单独更新 teamd 容器(无需 reboot 宿主机) sudo sonic_installer upgrade_docker --cleanup_image teamd /home/admin/docker-teamd.gz
2.8. 以 syncd 为例(sonic_installer 不支持单独更换此容器)
syncd 容器镜像文件: docker-syncd-brcm.gz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 在编译机的代码库的 <code>$SONIC_CODE_DIR </code> 路径下,删除(待编译容器镜像)旧的镜像包 rm target/docker-syncd-brcm.gz rm target/debs/stretch/syncd_1.0.0_amd64.deb # 编译 syncd 容器镜像包(约 min) make target/docker-syncd-brcm.gz # 上传到交换机 ls -l $SONIC_CODE_DIR/target/docker-syncd-brcm.gz scp $SONIC_CODE_DIR/target/docker-syncd-brcm.gz admin@A.B.C.D:/home/admin/ # 登录交换机 ssh admin@A.B.C.D # 确认容器镜像包信息 ls -l /home/admin/docker-syncd-brcm.gz # 单独更新 syncd 容器(无需 reboot 宿主机) sudo sonic_installer upgrade_docker --cleanup_image syncd /home/admin/docker-syncd-brcm.gz
3. 强制替换同版本镜像方式 3.1. 以 syncd 为例 1 2 3 4 5 6 7 8 9 10 # 停止旧 syncd 容器 docker stop syncd # 删除旧 syncd 容器 sudo docker rm -f syncd # 删除旧 syncd 镜像 sudo docker rmi -f $(docker images | grep syncd | awk '{ print $3 }') # 加载新 syncd 镜像包 sudo docker load < /home/admin/docker-syncd-brcm.gz # 通过服务的方式自动创建新 syncd 容器 sudo service syncd restart
3.2. 以 swss 为例 1 2 3 4 5 6 7 8 9 10 # 停止旧 swss 容器 docker stop swss # 删除旧 swss 容器 sudo docker rm -f swss # 删除旧 swss 镜像 sudo docker rmi -f $(docker images | grep docker-orchagent | awk '{ print $3 }') # 加载新 swss 镜像包 sudo docker load < /home/admin/docker-orchagent.gz # 通过服务的方式自动创建新 swss 容器 sudo service swss restart
4. 备注
编译时若报 Telemetry 失败可修改 rules/config
中如下配置,以关闭使能Telemetry:
1 ENABLE_SYSTEM_TELEMETRY = n
sonic_installer upgrade_docker
的 OPTION参数说明如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 sudo sonic_installer upgrade_docker --help # 执行结果 Usage: sonic_installer upgrade_docker [OPTIONS] <container_name> URL Upgrade docker image from local binary or URL Options: -y, --yes --cleanup_image Clean up old docker image --skip_check Skip task check for docker upgrade --tag TEXT Tag for the new docker image --warm Perform warm upgrade --help Show this message and exit.