OpenStack新组件打包

来源:互联网 发布:thinkphp分销系统源码 编辑:程序博客网 时间:2024/05/20 22:29

..
声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:http://blog.csdn.net/liujiong63
新浪微博:@Jeremy____Liu
内容系本人学习、研究和总结,如有雷同,实属荣幸!


对于OpenStack里的新组件,不能只发布基于pip的安装包。一旦组件功能比较成熟稳定,发布基于各个Linux发行版的安装包就非常有必要了。这里,介绍我在为OpenStack的karbor组件打包的过程,希望对有需要的小伙伴们有所帮助。

rpm-packaging项目

链接:https://github.com/openstack/rpm-packaging
该项目维护了各个OpenStack组件的spec模板,可以使用这些模板生成供RDO和SUSE打包用的文件。如果想要发布基于RPM的安装包,就需要在这个项目中为你的组件编写spec模板文件。

pymod2pkg项目

链接:https://github.com/openstack/pymod2pkg
该项目维护了python模块名与发布的安装包名的映射关系。在OpenStack里,各个组件与其发布的安装包名有很强的规律性。
通常,OpenStack里的服务组件(例如nova),其发布的RPM包名有openstack-nova-api, openstack-nova-compute, python-nova等。其中,以openstack开头的RPM包,其打包进去的文件有配置文件、可执行文件等;而以python开头的RPM包,其打包进去的文件通常是源码文件。
这种RPM包名的确定就是由pymod2pkg项目决定的。
pymod2pkg维护了OpenStack组件在各个Linux发行版(RDO、SUSE、UBUNTU)中的包名。

踩坑经历

刚开始我参考rpm-packaging项目里现有的模板文件制作了karbor的spec文件,并推送到社区的gerrit,很快社区的CI反馈了测试结果。提示我找不到两个依赖包(abclient和icalendar)。这两个依赖项是karbor组件的依赖,可以通过pip源进行安装,但是却没有发布基于RDO的安装包,因此,CI测试失败。我在OpenStack开发者邮件列表中反馈了我遇到的问题,很快就有志愿者(非常感谢Chandan Kumar)为我制作了基于RDO的abclient和icalendar的安装包并上传到RDO仓库中。这解决了我遇到的第一个问题。
之后,我重新触发了CI的测试,测试结果是:error: Package already exists: %package -n python-karbor
我明白这是由于我的spec模板生成的打包文件中有两个包,名字都叫python-karbor。但是,我的模板文件写的没有问题。很快rpm-packaging的core reviewer就反馈说我必须修改pymod2pkg的映射关系。于是,就搜索到了pymod2pkg这个项目,看到其中维护的发行版组件中没有karbor,添加了karbor组件后,patch顺利合入。
目前,karbor的spec模板的patch还没合入主线,是否还有其他坑要踩呢,忧虑~

RDO中添加打包模板

按照RDO社区给的步骤(https://www.rdoproject.org/documentation/add-packages/)操作就可以了。

附链接

karbor的spec模板:https://review.openstack.org/#/c/480806/
pymod2pkg添加karbor映射:https://review.openstack.org/#/c/485057/
社区邮件列表反馈:https://www.mail-archive.com/openstack-dev@lists.openstack.org/msg108249.html
为RDO添加依赖包:https://review.rdoproject.org/r/#/c/7711/