美文网首页Linux学习之路
【com】基于RPM源码包制作RPM包

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

作者: EldonZhao | 来源:发表于2016-11-23 20:12 被阅读305次

    基于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包

        本文链接:https://www.haomeiwen.com/subject/wcvvpttx.html