VPP打包及自定义插件打包

VPP版本 20.01stable

1.VPP打包及安装概述

#在此之前一定要执行
#安装依赖安装包
make install-dep
#下载安装第三方模块等
make install-ext-deps
##这步是打包命令
make pkg-rpm #或是pkg-deb

  随后,在vpp/build-root/目录中,可以看到已经打包好的文件;

  通过yum install *.rpm命令安装所有包后,分析如下

  1. vpp安装的位置 /bin

  2. startup.conf的位置(配置文件自动安装到 /etc/vpp/startup.conf)

  3. vpp.service的安装位置(以服务形式启动vpp的 xxx.service文件安装到 /usr/lib/systemd/system/vpp.service )

  4. json文件的安装位置(如果开发中用到python api时,这些json文件是必要的。有时间的话会讲下vpp框架下 基于python api 使用和开发)

  5. 动态库文件安装位置(可能是/lib,/lib64,/usr/lib,/usr/lib64下,本文环境路径是/usr/lib64/目录下)

2.VPP打包配置

  本文以rpm为例,进行说明。在VPP首级目录中,Makefile文件中定义了make pkg-rpm命令。

.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,其中包含版本信息用于控制。所以导致后表面报错。此步骤没再深入调研。
$ 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

错误排查

错误:/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/查看到本文自定义插件,并能够打包进入。

发表评论

邮箱地址不会被公开。 必填项已用*标注