在SONiC-202205版本的基础上添加了思科风格的命令行,并且支持大部分命令,模式与sonic-cli一致,添加了支持管控、接口、L2、L3、Lag、VRF、BGP、ACL、Device等特性的命令,该流程可应用于CTYUN一般基础命令行的适配。
编译流程:
1、替换XML标签sonic-clish.xsd
将XML中的标签类型添加为所需要的类型
路径:CLI/clitree/scripts/sonic-clish.xsd
在command-tree中配置操作的每个<ACTION>下会有相应对该config的<CONFIG>
说明:
(1)普通操作:<CONIFG/>
(2)输入参数操作:<CONIFG pattern=”${__line}”/>
(3)反向操作:<CONIFG operation=”unset” pattern=”set pattern”/>
2、在XML路径下添加进sonic-cli命令模式的三个文件
路径:CLI/clitree/cli-xml
分别对应显示模式、配置模式以及显示界面:
enable_model.xml
config_model.xml
views.xml
3、添加pipe-include文件用以在命令行中参与显示操作
添加pipe_without_display_xml.xml到clitree/cli-xml/include/路径下,以实现输入完整命令行之后过滤出想要的结果打印输出,操作有except、find、grep、save,在输入完命令行结束前,输入“|”符号进行输入显示命令。
4、添加XML命令文件
初次编译需要将需要实现命令的XML文件添加进clitree/cli-xml文件下进行编译,sonic-mgmt-framework编译成功之后可以将修改的src上传至git中,之后需要直接拉取分支进行修改编译。
5、添加action命令文件
对应每个XML文件需要添加对应执行<ACTION>指令的源码文件,一般可由python文件进行完成
在这里由于命令访问需要开启konf进程进行管道输出,需要将以上四个文件加入到action生成目录下,并且修改CLI/Makefile文件,让最后在设备上的konfd_service.sh能调用该进程。
6、修改原生clitree/scripts文件
更改clitree/scripts中对xml文件的插入标签等修改,避免生成的XML文件产生格式错乱。
由于原生的编译环境mgmt下会对clitree.xml文件添加一些宏、pipe参数以及多余的end、exit命令,插入这些标签会对原生代码产生干扰造成格式错乱。
7、修改Makefile、control、sh中的依赖版本python3.7为python3.9,避免安装时缺少依赖包
由于命令行的deb安装包是在docker-sonic-mgmt-framework的docker下进行安装,但由于该docker所含的python依赖libpython为3.7版本,而安装到主机上的python需要的是3.9版本,因此需要把该docker在bullseye下编译安装3.9版本,避免直接在系统下安装显示缺少相关依赖。
8、在设备上安装sonic-mgmt-framework.deb直接从设备上进入命令行界面
在~/sonic-buildimage/files/build_templates/ sonic_debian_extension.j2路径下添加安装mgmt的命令如下所示,安装完成之后编译环境里会显示系统文件夹,即最终设备上的文件目录,路径为~/sonic-buildimage/fsroot-mellanox,在该文件夹下验证mgmt是否安装成功,在系统下的目录为~/sonic-buildimage/fsroot-mellanox/usr/sbin/cli,如果该文件夹整体编译之后(make all)存在则说明能够安装成功。
9、在源代码目录下引入APPDB
由于src源码下拉取的python包没有添加APPDB组件,因此需要在编译前支持上APPDB主要为了实现show acl的相关功能。
在src/sonic-py-swsssdk/src/swsssdk目录下加入appdb.py文件(见git)并在__init__.py中导入AppDBConnector:
修改有关acl模块相关语法src/sonic-utilities/acl_loader/main.py中806行修改为python3语法if "ports" not in val:
然后将target目录下python-wheel里有关swsssdk的wheel包和关于sonic-utilities的deb包都清除掉然后再一起make all。
10、更改命令行入口为设备入口
由于原生编译代码是进入docker下执行cli,所以需要更改cli入口,目录在dockers/docker-sonic-mgmt-framework/base_image_files/下的sonic-cli
更改上述代码如下:
由于执行某些配置命令需要用到root权限,因此在开启命令行时需要用户添加sudo命令才可进入,然后每次都为进入命令行界面的用户自动开启konfd进程,以避免写入running-config产生warning,之后直接调用命令行所在目录/usr/sbin/cli下的入口文件clish_start。
11、在设备主机上安装mgmt.deb
在编译之前在files/build_templates/sonic_debian_extension.j2文件中添加如下命令,即在FILESYSTEM下安装命令行组件。
12、执行编译make all
注意:在编译前清理需修改且已安装的target包,编译完成之后在target目录下会生成有关版本的bin文件,并且进入生成的系统文件目录fsroot-mellanox检查上述安装修改是否成功。
13、安装版本
将以上生成的版本文件导入到设备上执行sudo sonic-installer install命令进行安装,安装成功后重启。