随着Linux风靡全球,越来越多的开发者喜欢采用RPM格式来发布自己的软件包,大多数的公司文件服务器会要求项目的资材作成rpm包。那么RPM软件包是怎样制作的呢?
这篇文章就带大家了解一下RPM包作成的方法。

RPM概述

RPM全称是 Red Hat Package Manager(Red Hat包管理器)。几乎所有的 Linux 发行版本都使用这种形式的软件包管理安装、更新和卸载软件。

RPM功能

安装
rpm -i ( or --install) options file1.rpm … fileN.rpm 通过rpm -ivh可以把rpm软件包安装到系统中。
删除
rpm -e ( or --erase) options pkg1 … pkgN 如果某个软件包你再也不想使用了,那就用以上这个命令彻底的把你指定的rpm软件包清除。
升级
rpm -U ( or --upgrade) options file1.rpm … fileN.rpm 建议用-Uvh。
查询
rpm -q ( or --query) options 参数选项是-qpi。
校验
rpm -V ( or --verify, or -y) options 一般我们可用通过该命令来验证已安装软件包。
制作RPM软件包并不是一件复杂的工作,其中的关键在于编写SPEC软件包描述文件。要想制作一个rpm软件包就必须写一个软件包描述文件(SPEC)。

SPEC文件详解

#软件包的名字
Name:app_script
#软件包的版本
Version:rpmVer
#软件包release号,一般spec文件有改动的时候会改release no
Release:app_script_releaseNumber
#Summary用一句话概括该软件包尽量多的信息
Summary:shell script app server
License:Proprietary
#软件开发者名字
Vendor:xxx Co.,Ltd.
#源文件tar包
Source:app_script.tar.gz
BuildRoot:%{name}-%{version}-%{release}-root
%define userpath /opt
%define apppath /opt/app
%define binpath /opt/app/bin
%description
GitCommitID
# prep这个段是预处理段,通常用来执行一些解开源程序包的命令,为下一步的编译安装作准备。%prep和下面的%build,%install段一样,除了可以执行RPM所定义的宏命令(以%开头)以外,还可以执行SHELL命令
%prep
# 保留编译阶段生成的二进制文件
%define __strip /bin/true
%define __os_install_post %{nil}
%setup -c
# 建立段,所要执行的命令为生成软件包服务,如make 命令
%build
echo "build exec"
#安装阶段,其中的命令在安装软件包时执行,如make install命令
%install
echo "make install"
#install -p -d -m 0755 %{buildroot}%{logpath}
install -d %{buildroot}%{userpath}
cp -r app %{buildroot}%{userpath}
%clean
rm -rf %{buildroot}
%pre
echo "Start to install app scripts."
%post
chown app:app %{apppath}
chown -R app:app %{binpath}
chmod -R 770 %{binpath}
echo "Finish to install app scripts."
%preun
echo "Start to uninstall app scripts."
%postun
echo "Finish to uninstall app scripts."
#package file to rpm
#文件段,用于定义软件包所包含的文件,分为三类--说明文档(doc),配置文件(config)及执行程序,还可定义文件存取权限,拥有者及组别
%files
%defattr(0664,root,root,0770)
%{binpath}

rpmbuild 目录结构

使用rpmbuild工具需要建立如下目录树结构

rpmbuild
--------BUILD 用来存放打包过程中的源文件
--------BUILDROOT
--------RPMS 生成rpm包二进制文件存放目录
--------SOURCES 存放打包时要用到的源文件和patch
--------SPECS spec文件存放目录
--------SRPMS 生成rpm格式的源文件存放目录

命令

  1. 只生成二进制格式的rpm包,生成的文件会在之前建立的RPM目录
  rpmbuild -bb xxx.spec
  1. 只生成src格式的rpm包,生成的文件会在之前建立的SRPM目录下
  rpmbuild -bs xxx.spec
  1. 只需要生成完整的源文件, 源文件存在目录BUILD下,这个命令的作用就是把tar包解开然后把所有的补丁文件合并而生成一个?MN BV?完整的具最新功能的源文件。
   rpmbuild -bp xxx.spec
  1. 完全打包, 产生以上3个过程分别生成的包。存放在相应的目录下
   rpmbuild -ba xxx.spec

软件包制作完成后可用rpm命令查询。如果不满意可以再次修改SPEC文件,重新运行以上命令产生新的RPM软件包。

RPM打包过程及spec文件解释相关推荐

  1. 提取原rpm包里的SPEC文件及重新打包

    一.概要 目的是要修改原rsyslog rpm包的systemd rsyslog.service文件,添加一行"ExecStartPre=/bin/bash -c "/usr/bi ...

  2. RPM包制作之Spec文件详解

    看这篇文章的人基本都有一个想法,就是:"劳资不想用YUM的安装!不是版本太低就是文件分布太野路子",此时我们需要自己订制软件包的需求,我们会把一些源码包按照我们的需求来做成rpm包 ...

  3. linux安装spec编译器,RPM包制作之Spec文件参数详解

    看这篇文章的人基本都有一个想法,就是:"劳资不想用YUM的安装!不是版本太低就是文件分布太野路子",此时我们需要自己订制软件包的需求,我们会把一些源码包按照我们的需求来做成rpm包 ...

  4. linux spec 脚本,RPM包制作之Spec文件详解

    看这篇文章的人基本都有一个想法,就是:"劳资不想用YUM的安装!不是版本太低就是文件分布太野路子",此时我们需要自己订制软件包的需求,我们会把一些源码包按照我们的需求来做成rpm包 ...

  5. 【收藏】RPM包制作和spec文件详解

    1.How to create an RPM package/zh-cn https://fedoraproject.org/wiki/How_to_create_an_RPM_package/zh- ...

  6. RPM的制作(.spec文件)

    参考的资料:<鸟哥的Linux基础篇>(此书第三版使用centos5.x) 使用系统:centos6.5 rpm和srpm文件都是对/root/rpmbuild/里面的源码和配置文件编译打 ...

  7. RPM打包探索(rpm-max翻译整理)

    1. %global 和 %define 的区别? 这是内置宏,%define用来定义宏,%global用来定义一个全局可见的宏(在整个spec文件中可见) 2. %{!?macro-name} 和 ...

  8. RPM安装包-Spec文件參数具体解释与演示样例分析

    spec文件是整个RPM包建立过程的中心,它的作用就如同编译程序时的Makefile文件. 1.Spec文件參数 spec文件包括建立一个RPM包必需的信息,包括哪些文件是包的一部分以及它们安装在哪个 ...

  9. RPM打包与SPEC文件

    制作RPM软件包并不是一件复杂的工作,其中的关键在于编写SPEC软件包描述文件.要想制作一个rpm软件包就必须写一个软件包描述文件(SPEC). 这个文件中包含了软件包的诸多信息,如软件包的名字.版本 ...

最新文章

  1. 我一顿操作把电脑弄崩了!!!数据全没了!!!我该怎么办?
  2. Android 网络操作常用的两个类
  3. 1.3.2 java程序的运行机制和jvm
  4. AI打AI,人脸对抗攻击公开课第四讲预告:对抗防御介绍
  5. 听说面试又挂在计算机操作系统了?仔细看看这个!!!【强烈推荐】
  6. What day is that day?(快速幂,打表找周期,或者求通项公式)
  7. 未为dll加载任何符号_专家发现aspersky 和Trend Micro安全性解决方案中的DLL劫持问题...
  8. 【报告分享】2021新茶饮研究报告.pdf(附下载链接)
  9. linux 多线程学习
  10. HDU-5889 Barricade
  11. 工具使用-----Jmeter-脚本的录制
  12. learning opencv3: 四:Mat
  13. Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php  c#.Net
  14. [读书笔记]小决心还是大决心
  15. php留言板系统管理,php留言板系统 更加便于网站管理
  16. php排序orderby,云优CMS如何按orderby排序上一条下一条信息
  17. 网络抖动多少ms算正常_网络延迟多少ms才算正常
  18. Generic XDP Hook
  19. VS2008宏无法运行的问题
  20. 破解无线路由器,获得微信等上网信息

热门文章

  1. 计算机毕业设计(附源码)python学校实验室设备管理系统
  2. 嵌入式端音频开发(基础篇)之2021-2022年国内主流语音识别芯片科普(1)
  3. C语言数据结构-2020级ICODING编程练习(详细版)
  4. BFS算法 蓝桥杯长草问题
  5. BGA焊盘分类和阻焊层要求
  6. 计算机专业第五轮学科评估排名,第五轮学科评估排行榜-第二轮双一流淘汰名单预测...
  7. 中国科学院大学计算机分数线低,2018中国科学院大学录取分数线公布,能否冲击清北霸主地位?...
  8. 那个拒绝硅谷来了阿里的实习工程师,后来怎么样了?
  9. 人人都是产品经理2.0-02章摘要总结
  10. FFmpeg入门详解之63:画龙点睛:捋起袖子亲手操练直播项目