# 最终参考的文章:
# 1 简单程序打包: http://blog.csdn.net/king_on/article/details/7169384
# 2 命令解释:简略: http://blog.csdn.net/whyhonest/article/details/8449018
# 3 命令解释:详细: https://fedoraproject.org/wiki/How_to_create_an_RPM_package/zh-cn
# 4 命令解释:包含system部分: http://blog.csdn.net/hawkerou/article/details/53436427
# 5 rpm指引文档: http://rpm-guide.readthedocs.io/en/latest/rpm-guide.html
# 6 openstack rpm打包: http://stackeye.com/2014/08/rpmbuild-in-action/
# 7 修改打包目录: https://possiblelossofprecision.net/?p=1229
# 安装制作包的命令: yum install rpm-build
#制作rpm包的过程:
# 0 安装打包工具: yum install -y rpm-build
# 1 创建打包目录,
# mkdir -p /data/test_project/my_rpmbuild
# 进入到该目录
# cd /data/test_project/my_rpmbuild
# 2 在打包目录/data/test_project/my_rpmbuild下面创建其他目录
# mkdir -pv ./rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
# 3 修改打包的路径为当前创建的目录,执行如下命令
# vim ~/.rpmmacros
# 写入:
# %_topdir /data/test_project/my_rpmbuild/rpmbuild
# 注意: ~/.rpmmacros 必需要是root下面的.rpmmacros而不是你自己项目中的.rpmmacros ;
# 注意: %_topdir对应的目录一定要设置到/data/test_project/my_rpmbuild/rpmbuild,而不是/data/test_project/my_rpmbuild
# ref: https://possiblelossofprecision.net/?p=1229
# 3 将源码的tar.gz包放入到 /data/test_project/my_rpmbuild/rpmbuild/SOURCES 下面
# 4 在/data/test_project/my_rpmbuild/rpmbuild/SPECS下面编写spec脚本
# 5 生成rpm包:执行 rpmbuild -ba **.spec,例如: rpmbuild -ba /data/test_project/my_rpmbuild/rpmbuild/SPECS/hello.spec
# 6 编译成功后在RPMS下面找到RPMS/x86_64下找到编译成功的RPM包
# 7 如果要安装这个rpm包,执行rpm -ivh,如果要查看该rpm包含的文件: rpm -qlp **.rpm
# 原理:根据spec脚本文件,软件安装到虚拟目录中,然后打包,安装到指定目录下
#SOURCES目录:存放.tar.gz源码文件
#SPECS目录:存放.spec文件
#SRPMS目录:存放生成的xxx.src.rpm文件
#BUILD目录:存放解压后的源码文件或其他中间的临时文件
#RPMS目录:存放生成的xxx.rpm文件
# 编译的根目录,是一个虚拟目录,生成rpm中,make install会把软件安装到上述路径
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
# BuildRequires: libevent,libevent-devel #该rpm包所依赖的软件包名称
# name, 软件包的名称
Summary: hello world rpm package #软件包的内容摘要
Name: hello
Version: 0.1 #软件的实际版本号,具体命令需要跟源包一致
Release: 1 #发布序列号
Source: hello-0.1.tar.gz
License: GPL #软件授权方式,通常是GPL
Packager: wangdonglei
Group: Application #软件分组
%description
This is a simple example for rpm package!
# 源码包(xxx.src.rpm),一是binary包(xxx.rpm)
# 预处理脚本, %setup -q ,指提取源码到BUILD目录,-q:quietly:抑制不必要的输出
# %prep:编译前的准备部分,一般为删除之前的中间文件(BUILD目录),解压缩源码文件
%prep
%setup -q
# 开始构建包
%build
gcc -o hello hello.c
# 开始把软件安装到虚拟的根目录中
# %{buildroot} ~/rpmbuild/BUILDROOT Build root:%install 阶段中,将 %{_builddir} 子目录下的文件复制到
# %{buildroot} 的子目录(之前,%{buildroot} 使用的位置为 "/var/tmp/")
%install
mkdir -p %{buildroot}/usr/local/bin
install -m 755 hello %{buildroot}/usr/local/bin/hello
# 定义哪些文件会放入rpm包中,这里就放了可执行文件
# %files:列出软件被安装后,目标机器上由该文件新建的文件,包括可执行文件、配置文件、man文件等
# 这里的路径是在buildroot虚拟根基础上的,即%{buildroot}/%{name}-%{version}-%{release}-root/usr/local/bin/hello
%files
/usr/local/bin/hello
# %post,安装后的收尾阶段,执行在%install之后