深入openstack rpm打包原理(openstack cinder rpm打包完全分析)

    xiaoxiao2021-12-14  19

    在这篇博文openstack软件包管理我已经介绍了下openstack打包原理最核心的原理和问题,但是并没有以实际的例子来介绍,因此这篇博文主要是通过cinder的spec文件来深入的讲解如何通过rpmbuild工具打出自己的版本,顺带对涉及到rpmbuild相关的知识做讲解,本次博文的主要笔记直接记录在spec文件里中。

    我的rpmbuild的测试环境:

    RPM 版本 4.11.3

    rpmbuild构建路径采用默认值,具体如下

    %_topdir %{getenv:HOME}/rpmbuild

    %_rpmdir        %{_topdir}/RPMS

    %_sourcedir     %{_topdir}/SOURCES

    %_specdir       %{_topdir}/SPECS

    %_srcrpmdir     %{_topdir}/SRPMS

    %_buildrootdir      %{_topdir}/BUILDROOT

    %buildroot      %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}

    关于如何配置自定义的宏环境,可以参考rpm 宏定义。

    将下面的cinder.spec放入~/rpmbuild/SPECS/

    将spec用到的source原文件(tarball、patch文件、控制脚本等)手动拷贝到~/rpmbuild/SOURCES

    执行打包编译

    rpmbuild -ba ~/rpmbuild/SPECS/

    -ba:打源码包和二进制包

    -bb:只构建二进制包

    何为打源码包?生成在SRPMS下面的.src.rpm包

    何为二进制包?生成在RPMS下面的.rpm包

    其他的可以通过rpmbuild --help自行查看

    生成的.rpm包在~/rpmbuild/RPMS/

    生成的.src.rpm包在~/rpmbuild/SRPMS/

    最终生成的包有:

    openstack-cinder-7.0.0-123.el7.centos.noarch.rpm

    python-cinder-7.0.0-1.el7.centos.noarch.rpm

    openstack-cinder-7.0.0-1.el7.centos.src.rpm

    包名称的构成:{Name}-{Version}-{Release}.{BuildArch}.rpm or .src.rpm

    下面就是cinder.spec的内容,里面带有每个关键点的解释。

    %global with_doc %{!?_without_doc:1}%{?_without_doc:0} %global pypi_name cinder %global release_name liberty #global是用来定义一些全局变量,变量的反问语法是%{},如果是%{?},则表示变量如果有定义才取值 %{!?upstream_version: %global upstream_version %{version}%{?milestone}} Name: openstack-cinder #打出来的rpm包的名字 # Liberty semver reset # https://review.openstack.org/#/q/I6a35fa0dda798fad93b804d00a46af80f08d475c,n,z Epoch: 1 Version: 7.0.0 Release: 123%{?milestone}%{?dist} #dist的值在/etc/rpm/macros.dist里面定义:%dist .el7.centos Summary: OpenStack Volume service License: ASL 2.0 URL: http://www.openstack.org/software/openstack-storage/ Source0: http://tarballs.openstack.org/%{pypi_name}/%{pypi_name}-%{upstream_version}.tar.gz #源码包下载路径,这里目前我没看到rpmbuild有相关参数可以控制自动下,我的做法是:1、手动打执行版本的tarball,将其拷贝到SOURCES下。2、通过spectool工具来自动下载 #如果是自己手动打的tarball,最好要通过python标准的打包方式:python setup.py sdist来发布,否则会涉及到解压出来的发布软件包的版本问题. #下面这些都是原来打包进rpm包的配置和systemd的控制文件 Source1: cinder-dist.conf Source2: cinder.logrotate Source3: cinder-tgt.conf Source10: openstack-cinder-api.service Source11: openstack-cinder-scheduler.service Source12: openstack-cinder-volume.service Source13: openstack-cinder-backup.service Source20: cinder-sudoers BuildArch: noarch #以BuildRequires定义的包是指在python setup.py build编译的时候需要用到的依赖 BuildRequires: intltool BuildRequires: python-d2to1 BuildRequires: python-oslo-sphinx BuildRequires: python-pbr BuildRequires: python-sphinx BuildRequires: python2-devel BuildRequires: python-setuptools BuildRequires: python-netaddr BuildRequires: systemd BuildRequires: git BuildRequires: os-brick BuildRequires: python-oslo-concurrency BuildRequires: python-oslo-messaging BuildRequires: python-oslo-service # Required to build cinder.conf BuildRequires: python-keystonemiddleware BuildRequires: python-glanceclient BuildRequires: python-novaclient BuildRequires: python-swiftclient BuildRequires: python-oslo-db BuildRequires: python-oslo-config >= 2:1.11.0 BuildRequires: python-oslo-policy BuildRequires: python-oslo-reports BuildRequires: python-oslotest BuildRequires: python-oslo-versionedobjects BuildRequires: python-oslo-vmware BuildRequires: python-crypto BuildRequires: python-lxml BuildRequires: python-osprofiler BuildRequires: python-paramiko BuildRequires: python-suds BuildRequires: python-taskflow #以Requires定义的包是指在安装rpm包的时候依赖或者说对python来说就是指:python setup.py install Requires: openstack-utils Requires: python-cinder = %{epoch}:%{version}-%{release} # we dropped the patch to remove PBR for Delorean Requires: python-pbr # as convenience Requires: python-cinderclient Requires(post): systemd Requires(preun): systemd Requires(postun): systemd Requires(pre): shadow-utils Requires: lvm2 Requires: python-osprofiler Requires: python-rtslib #这是默认包即openstack-cinder包的描述
    转载请注明原文地址: https://ju.6miu.com/read-965470.html

    最新回复(0)