本文大体描述一下rpm打包过程和一些实践。

一.RPM制作流程

  • 1.计划做什么rpm包。软件的?库的?

  • 2.收集原材料,即收集源码包

  • 3.如果需要打补丁,收集补丁文件。此布骤不是必须

  • 4.确定依赖关系包

------------------ 上述动作可由我们手动编译一次软件来确定 -------------------

  • 5.开始动手制作RPM包

  • 5.1设定好目录结构,我们在这些目录中制作我们的RPM包,我们需要下列目录

    BUILD 源代码解压后的存放目录 RPMS 制作完成后的RPM包存放目录,里面有与平台相关的子目录 SOURCES 收集的源材料,补丁的存放位置 SPECS SPEC文件存放目录 SRMPS 存放SRMPS生成的目录

  • 5.2 把源材料放到正确的位置

  • 5.3 创建spec文件,这是纲领文件,rpmbuild命令根据spec文件来制作合适的rpm包

  • 5.4 制作src或二进制rpm包

  • 6.测试制作的PRM包

  • 7.为RPM包签名

二.RPM包制作实例

1.可以通过rpmbuild --showrc | grep topdir 查看工作目录:

-14: _builddir  %{_topdir}/BUILD 
-14: _buildrootdir  %{_topdir}/BUILDROOT 
-14: _rpmdir    %{_topdir}/RPMS 
-14: _sourcedir %{_topdir}/SOURCES 
-14: _specdir   %{_topdir}/SPECS 
-14: _srcrpmdir %{_topdir}/SRPMS 
-14: _topdir    %{getenv:HOME}/rpmbuild

2.工作目录可以进行自定义

vi ~/.rpmmacros 
%_topdir        /home/ibuler/rpmbuild    ##目录可以自定义

mkdir ~/rpmbuild

3.在topdir下建立需要的目录

cd ~/rpmbuild  
 mkdir -pv {BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

4.把收集的源码放到SOURCES下

cp stress-1.0.4.tar.gz SOURCES

5.在SPECS下建立重要的spec文件

cd SPECS 
vi stress.spec #内容见文末

6.用rpmbuild命令制作rpm包,rpmbuild命令会根据spec文件来生成rpm包

rpmbuild  
-ba 既生成src.rpm又生成二进制rpm 
-bs 只生成src的rpm 
-bb 只生二进制的rpm 
-bp 执行到pre 
-bc 执行到 build段 
-bi 执行install段 
-bl 检测有文件没包含

我们可以一步步试,先rpmbuild -bp ,再-bc 再-bi 如果没问题,rpmbuild -ba 生成src包与二进制包吧

7.安装测试有没有问题,能否正常安装运行,能否正常升级,卸载有没有问题

8.如果没问题为rpm包签名吧,防止有人恶意更改

到此整个流程完毕

附stress.spec文件

Name: stress
Version: 1.0.4
Release: 2
Summary: stress

License: GPL
Source: stress-%{version}.tar.gz
URL: http://www.stress.org/

BuildRequires:  /bin/gcc

%description

%package devel
Summary: Development files for %{name}
Requires: %{name} = %{version}-%{release}

%description devel
The %{name}-devel package contains libraries and header files for
developing applications that use %{name}.

%prep
%setup -q

%build
%configure
make

%install
rm -rf ${RPM_BUILD_ROOT}
%makeinstall bindir=${RPM_BUILD_ROOT}/%{_bindir}

%files
%defattr(-,root,root)
%{_bindir}/*
%{_mandir}/*/*

%changelog
* Wed Mar 01 2017 penglee - 1.0.4
-Rebuild for new  release

by 李鹏