本文大体描述一下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