【com】基于RPM源码包制作RPM包

基于RPM源码包制作RPM包(以heat为例)

一、下载源码包

yumdownloader --source openstack-heat
得到源码包文件:openstack-heat-2015.1.1-1.el7.src.rpm

二、安装工具包

yum grouplist
yum groupinstall Development

三、安装源码包

sudo rpm -ivh openstack-heat-2015.1.1-1.el7.src.rpm
Updating / installing...
1:openstack-heat-2015.1.2-1.el7.cen################################# [100%]

四、切换到rpmbuild目录,并查看目录结构

[root@NFJD-TESTN-COMPUTE-1 rpmbuild]# tree
.
├── SOURCES
│ ├── 0001-Count-all-nested-stack-resources-with-DB-operations.patch
│ ├── 0002-Switch-total_resources-to-use-stack_count_total_reso.patch
│ ├── heat-2015.1.1.tar.gz
│ ├── heat.conf.sample
│ ├── heat-dist.conf
│ ├── heat.logrotate
│ ├── openstack-heat-api-cfn.service
│ ├── openstack-heat-api-cloudwatch.service
│ ├── openstack-heat-api.service
│ └── openstack-heat-engine.service
└── SPECS
└── openstack-heat.spec
2 directories, 11 files

五、修改SPECS/openstack-heat.spec文件

vim SPECS/openstack-heat.spec
在vim编辑器中执行下面两行命令
:%s/^%patch/#%patch/g
:%s/^Patch/#Patch

六、删除SOURCE/*.patch文件

rm -f SOURCES/*.patch

七、基于旧的源码更新代码

cd /root/rpmbuild/SOURCES
tar -zxvf heat-2015.1.1.tar.gz
cp -rf heat-2015.1.1 heat-2015.1.2
拷贝修改的代码到改目录下
cp -rf /root/eldon/heat/heat heat-2015.1.2/
cp -rf /root/eldon/heat/setup.cfg heat-2015.1.2/

八、修改源码权限

chmod -R 775 heat-2015.1.2
chown -R 3000:3000 heat-2015.1.2

九、打包源码

rm -rf heat-2015.1.2.tar.gz
tar zcvf heat-2015.1.2.tar.gz heat-2015.1.2/

十、修改源码包权限

chown mockbuild:mockbuild heat-2015.1.2.tar.gz

十一、编译源码包

rpmbuild -ba /root/rpmbuild/SPECS/openstack-heat.spec
Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/openstack-heat-2015.1.2-1.el7.centos.x86_64
Wrote: /root/rpmbuild/SRPMS/openstack-heat-2015.1.2-1.el7.centos.src.rpm
Wrote: /root/rpmbuild/RPMS/noarch/openstack-heat-common-2015.1.2-1.el7.centos.noarch.rpm
Wrote: /root/rpmbuild/RPMS/noarch/openstack-heat-engine-2015.1.2-1.el7.centos.noarch.rpm
Wrote: /root/rpmbuild/RPMS/noarch/openstack-heat-api-2015.1.2-1.el7.centos.noarch.rpm
Wrote: /root/rpmbuild/RPMS/noarch/openstack-heat-api-cfn-2015.1.2-1.el7.centos.noarch.rpm
Wrote: /root/rpmbuild/RPMS/noarch/openstack-heat-api-cloudwatch-2015.1.2-1.el7.centos.noarch.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.LFiqMq

  • umask 022
  • cd /root/rpmbuild/BUILD
  • cd heat-2015.1.2
  • /usr/bin/rm -rf /root/rpmbuild/BUILDROOT/openstack-heat-2015.1.2-1.el7.centos.x86_64
  • exit 0

问题小结

1.安装源码包时缺少操作的用户(组)

warning: openstack-heat-2015.1.1-1.el7.src.rpm: Header V4 RSA/SHA1 Signature, key ID 7d10ce81: NOKEY
Updating / installing...
1:openstack-heat-2015.1.1-1.el7 ################################# [100%]
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root

  • 解决方法:先添加缺少的用户组,再安装源码包

groupadd mockbuild
useradd mockbuild -g mockbuild
sudo rpm -ivh openstack-heat-2015.1.1-1.el7.src.rpm

2.git history和setup.conf文件中版本不一致
  • 解决方法:修改setup.conf中版本号为需要的版本
3.问题三

/var/tmp/rpm-tmp.9wVSLj: line 51: sphinx-build: command not found

  • 解决方法:安装Sphinx

sudo easy_install Sphinx

4.问题四

AttributeError: 'module' object has no attribute 'Cmd'

  • 问题原因:替换heatpython代码时没有修改代码文件权限

你可能感兴趣的:(【com】基于RPM源码包制作RPM包)