一 准备工作
要制作的linux系统中(centos6.5为例),需要保证有rpmbuild rpmdevtools两个开发工具
yum install rpm-build
yum install rpmdevtools
安装完rpmdevtools后,会创建一些工具,比如
rpmdev-setuptree Create RPM build tree within user's home directory
rpmdev-diff Diff contents of two archives
rpmdev-newspec Creates new .spec from template
rpmdev-rmdevelrpms Find (and optionally remove) "development" RPMs
rpmdev-checksig Check package signatures using alternate RPM keyring
rpminfo Print information about executables and libraries
rpmdev-md5/sha* Display checksums of all files in an archive file
rpmdev-vercmp RPM version comparison checker
spectool Expand and download sources and patches in specfiles
rpmdev-wipetree Erase all files within dirs created by rpmdev-setuptree
rpmdev-extract Extract various archives, "tar xvf" style
rpmdev-bumpspec Bump revision in specfile
二 创建执行目录
执行rpmdev-setuptree会在当前用户目录下创建rpmbuild的执行目录,创建的目录如下:
rpmbuild
BUILD #创建过程使用
BUILDROOT #创建过程使用,执行rpmbuild后会产生
RPMS #生成没有源代码的rpm文件目录
SOURCES #需要打包的文件目录
SPECS #spec文件目录
SRPMS #生成包含源代码的rpm文件目录
将需要打包的文件放到SOURCES下,将spec文件当道SPECS下,rpm只支持tar.bz压缩文件
三 写spec文件
1.可以使用rpmdev-newspec工具产生一个spec模板文件
按照模板文件先大体说一下spec文件
newpackage.spec:
Name: #文件名称
Version: #文件版本
Release: 1%{?dist} #发布版本
Summary: #综述
Group: #组织
License: #许可
URL: #URL地址
Source0: #源文件
BuildRequires: #编译依赖
Requires: #安装依赖
%description #描述
%prep #prep安装前做的工作,使用%是引用宏定义
%setup -q #解压源文件下的压缩包 tar.bz格式的
%build #创建
%configure #软件源码编译的步骤configure
make %{?_smp_mflags} #make命令 并行编译
%install #安装,将打包好的文件安装到目标目录中
rm -rf $RPM_BUILD_ROOT #删除BUILDROOT目录中的临时文件
make install DESTDIR=$RPM_BUILD_ROOT # make 编译安装
%clean #打包结束后clean工作
rm -rf $RPM_BUILD_ROOT #删除BUILDROOT目录中的临时文件
%files #打包好的rpm文件包含的文件或目录
%defattr(-,root,root,-) #打包rpm文件中默认的文件属性 owner=root group=root
%doc #标示文件doc属性
%changelog #修改日志
2.实例说明
Name: xxxxx
Version: 0.1
Release: 1
Summary: xxxxxx
License: GPL-3.0+
Group: meituan
URL: xxxxx
BuildArch: x86_64
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-%{_arch}
Source0: xxxx.tar.bz
%description
xxxxx
%prep
tar xzvf %{_sourcedir}/xxxxxx.tar.bz -C %{_builddir} #解压源文件到BUILD目录
%build
%install
%{__install} -d -m644 %{_builddir}/%{name}-%{version}-%{release}-%{_arch}/test %{buildroot}/usr/local/src/test
#安装创建test目录
%{__cp} -f %{_builddir}/%{name}-%{version}-%{release}-%{_arch}/test/test.c
%{buildroot}/test/test.c
#安装到%{buildroot}后的目录,就是rpm安装包最后安装到系统的目录
#使用install cp等命令尽量使用rpm提供的宏定义,查看这些宏定义一般在/usr/lib/rpm/macros中
%files
%defattr(-, root, root, 0644)
%attr(655, root, root) /usr/test.c #对单个文件进行权限控制
%config(noreplace) /etc/test.conf #标识test.conf文件是配置文件,升级时不删除
%post #安装完成后执行的操作
sup xxxx
%clean
rm -rf %{buildroot}
%changelog
四 执行打包程序
rpmbuild -ba xxxx.spec
参数说明:
-ba #分别在RPMS SRPMS中生成不带源码的二进制rpm包 和 带源码的 src.rpm包
-bb #只在RPMS中生成不带源码的二进制rpm包
-bs #只在SRPMS中生成带源码的src.rpm包
-bp #执行到prep段结束
-bc #执行到build段结束
-bi #执行到install段结束
-bl #执行files段对打包文件进行检查
--sign #软件包签名 需要增加%_gpg_name
--rebuild #编译源码包并安装
--showrc #查看rpm相关的宏定义
五 执行安装
正常安装 rpm -ivh xxx.rpm
强制安装 rpm -ivh --force xxx.rpm
六 查看rpm包
rpm2cpio XXX.rpm | cpio -div 解压出rpm包中文件
cpio -t 只是输出文件列表