VPP版本 20.01stable
1.VPP打包及安装概述
1 2 3 4 5 6 7 |
#在此之前一定要执行 #安装依赖安装包 make install-dep #下载安装第三方模块等 make install-ext-deps ##这步是打包命令 make pkg-rpm #或是pkg-deb |
随后,在vpp/build-root/目录中,可以看到已经打包好的文件;
通过yum install *.rpm
命令安装所有包后,分析如下
-
vpp安装的位置
/bin
-
startup.conf的位置(配置文件自动安装到 /etc/vpp/startup.conf)
-
vpp.service的安装位置(以服务形式启动vpp的 xxx.service文件安装到 /usr/lib/systemd/system/vpp.service )
-
json文件的安装位置(如果开发中用到python api时,这些json文件是必要的。有时间的话会讲下vpp框架下 基于python api 使用和开发)
-
动态库文件安装位置(可能是/lib,/lib64,/usr/lib,/usr/lib64下,本文环境路径是/usr/lib64/目录下)
2.VPP打包配置
本文以rpm为例,进行说明。在VPP首级目录中,Makefile文件中定义了make pkg-rpm命令。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
.PHONY: dist dist: @if git rev-parse 2> /dev/null ; then git archive --prefix=$(DIST_SUBDIR)/ --format=tar -o $(DIST_FILE) HEAD ; git describe > $(BR)/.version ; else (cd .. ; tar -cf $(DIST_FILE) $(DIST_SUBDIR) --exclude=*.tar) ; src/scripts/version > $(BR)/.version ; fi @tar --append --file $(DIST_FILE) --transform='s,.*/.version,$(DIST_SUBDIR)/src/scripts/.version,' $(BR)/.version @$(RM) $(BR)/.version $(DIST_FILE).xz @xz -v --threads=0 $(DIST_FILE) @$(RM) $(BR)/vpp-latest.tar.xz @ln -rs $(DIST_FILE).xz $(BR)/vpp-latest.tar.xz .PHONY: pkg-rpm pkg-rpm: dist make -C extras/rpm |
其中首先执行dist部分代码,然后执行vpp-20.01/extras/rpm目录中的Makefile。最后通过rpmbuild 执行spec文件vpp-20.01/extras/rpm/vpp.spec,也可以根据需要,来修改这个vpp.spec文件,满足新开发需求。
通过如上代码可知,在执行dist部分代码时首先通过git archive 获取最新版本的vpp源码tar包文件,然后压缩为xz格式,放入vpp-20.01/build-root/目录中,然后在vpp-20.01/extras/rpm/Makefile文件中创建软连接vpp-latest.tar.xz,如下图所示:
最后会解压缩它,并创建目录vpp-20.01/build-root/rpmbuild,放入其中的vpp20.01,里面包含了src,extra等全新的一套从vpp github源下载的最新代码。
3.生成自定义vpp rpm包
如果读者新开发某些代码,会发现你的代码没打包进去,原因就在vpp-lastest.tar.xz中。它是从git arcchive自动获取的代码压缩包,里面并没有包含自定义插件。
- 第一次失败尝试:
按正常思考,在build-root中压缩并替换其软连接的真实连接,在buildroot/中,并注释掉makefile文件中pkg-rpm部分对dist的引用即可,但是其中有版本依赖关系,直接注释掉仍会报错。很可能是因为在Makefile的dist步骤中,添加了隐藏文件.version,其中包含版本信息用于控制。所以导致后表面报错。此步骤没再深入调研。
1 2 3 4 5 6 7 8 9 10 11 12 |
$ yum install -y xz #将build-root文件清理干净,删除install-vpp_debug-native/build-vpp_debug-native/rpmbuild等目录 #压缩含有添加源文件的vpp目录,并将 vpp.tar压缩成为 vpp.tar.xz $ tar cvf vpp-add.tar vpp-20.01/ $ xz -z vpp-add.tar $ cp vpp-add.tar.xz vpp-20.01/build-root/ $ cd vpp-20.01/build-root/ # 这个版本号根据自己vpp-20.01/src/scripts/version脚本计算得出 $ cp vpp-add.tar.xz vpp-20.01-15~g042e8b0-dirty.tar.xz $ ln -rs vpp-20.01-15~g042e8b0-dirty.tar.xz vpp-latest.tar.xz $ cd .. $ make pkg-rpm |
错误排查
1 2 3 4 5 6 7 8 9 10 11 |
错误:/var/tmp/rpm-tmp.NnvbPv (%prep) 退出状态不好 RPM 构建错误: /var/tmp/rpm-tmp.NnvbPv (%prep) 退出状态不好 make[1]: *** [RPM] 错误 1 make[1]: 离开目录“/root/vpp/extras/rpm” make: *** [pkg-rpm] 错误 2 #可以通过如下命令删除 [root@bogon vpp]# rm -rf /var/tmp/ rm: 无法删除"/var/tmp/": 设备或资源忙 #如果设备忙碌,就重启设备reboot |
- 第二次成功尝试
它默认从本地源最新git版本获取并压缩为tar文件,因此本文采用最简单方法,直接提交源码到本地git源,并直接运行命令make pkg-rpm
打包成功,通过/root/vpp/build-root/rpmbuild/vpp-20.01/src/plugins/查看到本文自定义插件,并能够打包进入。
微信赞赏
支付宝赞赏