linux 25、 rpm打包

# 最终参考的文章:
# 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之后


 

猜你喜欢

转载自blog.csdn.net/qingyuanluofeng/article/details/81239018