rpm包制作介绍
RPM(Rpm Package Management)在ReadHat等发行版下被用作软件包管理程序,其将某个软件相关的文件置入一个.rpm包中,用rpm命令,我们可以方便地完成Linux下软件安装、文件查看等操作。在《rpm包管理》一文中我们学习了rpm安装、查看软件包的相关方法,下面介绍如何制作rpm包。
1.两种rpm包
用rpm打包,将会产生两种rpm包,一是源码包(xxx.src.rpm),一是binary包(xxx.rpm)。源码包可用于开源软件发布源码,一般包含xxx.spec文件和xxx.tar.gz文件;binary包用于直接软件安装,包含已完成编译的可执行文件以及相关配置文件等:
# rpm -qlp ../SRPMS/hello-.src.rpm hello-.spec hello-.tar.gz # rpm -qlp ../RPMS/x86_64/hello-.x86_64.rpm /bin/hello /usr/share/doc/packages/hello /usr/share/doc/packages/hello/README
2.打包目录
从.tar.gz等格式的源码文件,到.rpm文件,需要经过编译过程,为此rpm提供了专门的目录进行打包:
- SOURCES目录:存放.tar.gz源码文件
- SPECS目录:存放.spec文件
- SRPMS目录:存放生成的xxx.src.rpm文件
- BUILD目录:存放解压后的源码文件或其他中间的临时文件
- RPMS目录:存放生成的xxx.rpm文件
对于suse,以上目录在/usr/src/packages路径下,对于RedHat,以上目录在/usr/src/redhat路径下。
3.spec文件
rpm包制作过程中最主要一步就是编写spec文件,spec文件用于提供软件相关描述以及如何编译、安装等信息,以下是一个spec文件示例:
Summary: rpm hello world. Name: hello Version: 0.1 Source: $RPM_SOURCE_DIR/hello-.tar.gz Release: Vendor: lx License: Share Group: Application/test %description print hello %prep .tar.gz | tar xvf - %build cd $RPM_BUILD_DIR/hello make %install cd $RPM_BUILD_DIR/hello make install %files %doc $RPM_BUILD_DIR/hello/README /bin/hello
以上开头一段用于描述软件包相关信息,除了Summary/Name/Version/Source/Release/Vonder/License/Group外还有其他可选域,以上所列除Source外其他为必选域,建议在spec中提供Source信息,生成.src.rpm时软件包由Source提供的路径获取,否则.src.rpm中不包含.tar.gz源码包。
后面%xx为spec文件的宏定义,在/usr/lib/rpm/macros文件找到相关定义,最重要的是以下几个部分:
- %prep:编译前的准备部分,一般为删除之前的中间文件(BUILD目录),解压缩源码文件
- %build:完成make编译部分,如果源码中提供了Makefile文件,就是一条make命令
- %install:完成安装部分,如果源码中提供了Makefile文件,就是一条make install命令
- %files:列出软件被安装后,目标机器上由该文件新建的文件,包括可执行文件、配置文件、man文件等
4.生成目标文件
.tar.gz文件放到SOURCES目录下,.spec文件编辑完成并放到SPECS目录下,这些完成后我们就可以打包生成.src.rpm文件和.rpm文件了:
# rpmbuild -ba hello-0.1-1.spec
以上rpmbuild命令用到 -ba 选项,表示既生成.src.rpm文件,又生成.rpm文件。以上命令执行后,我们来看各打包目录下生成的文件:
/usr/src/packages # ll *
BUILD:
drwxr-xr-x 2 root root 4096 04-13 20:49 hello
RPMS:
drwxrwxrwt 2 root root 4096 04-13 20:49 x86_64
SOURCES:
-rw-r--r-- 1 root root 346 04-13 00:42 hello-0.1-1.tar.gz
SPECS:
-rw-r--r-- 1 root root 411 04-13 22:46 hello-0.1-1.spec
SRPMS:
-rw-r--r-- 1 root root 2076 04-13 20:49 hello-0.1-1.src.rpm
RPMS的x86_64目录下:
/usr/src/packages # ll RPMS/x86_64/ -rw-r--r-- root root - : hello-.x86_64.rpm
5.rpm解包
rpm2cpio xxx.rpm | cpio -div
Reference: Maximum RPM
RPM HOWTO
rpm包制作介绍的更多相关文章
- RPM包制作教程
一.RPM介绍 RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:现在应为RPM Package M ...
- RPM包制作方法
一.RPM介绍 RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:现在应为RPM Package M ...
- php-7.1.0 rpm包制作
nginx-1.8.0 rpm包制作见上篇文章:http://www.cnblogs.com/xiaoming279/p/6251149.html spec文件 Name: php Version: ...
- rpm包制作(待实验)
作者:firefoxbug 时间:July 18, 2014 rpm包命名规范 对于rpm包的命名符合如下规范. %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm N ...
- 简单介绍RPM包制作方法
RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,是一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中.它生成具有.RPM扩展名的文件.使用r ...
- 实战RPM包制作
在开发中经常会用到一些rpm包,但是一直没有自己手动制作过.今天在制作的时候意外地还解决了自己以前一直困惑的问题,就是怎么制作rpm debuginfo包,类似CentOS官网那样的debuginfo ...
- RPM包制作过程(一)
本机环境:centos7,64位 1. 首先安装工具,rpmbuild可能在rpmdevtools里已经包含 #yum install rpm-devel.x86_64 #yum install rp ...
- nginx-1.8.0 rpm包制作
1.安装rpm-build # yum install rpm-build 2.创建制作RPM包目录 # cat /root/.rpmmacros %_topdir /root/rpmbuild %_ ...
- gtibase rpm包制作
gitbase 是一个很不错的代码分析工具,我们可以直接使用sql来分析团队的代码,以下是rpm 包的制作 简单说明 rpm 包的制作使用了fpm 一个简单,方便可以跨平台的软件包制作工具 gitba ...
随机推荐
- 工具资源系列之给 windows 虚拟机装个 mac
众说周知,Mac 很好但也很贵,对一般大众而言,漂亮简洁高颜值,对软件开发者而言,方便省心有点贵. 好到什么程度? 内置大量常用的开发工具,省去了初学者安装配置环境的麻烦,版本控制工具 svn 默认已 ...
- c++学习书籍推荐《C++程序设计语言(特别版)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <C++程序设计语言(特别版•十周年中文纪念版)>编辑推荐:十周年纪念版,体味C++语言的精妙与魅力,享受与大师的心灵对话.1979年,Biarn ...
- Windows环境部署Redis集群
一.准备文件 1. 下载Redis for windows 的最新版本 下载地址:https://github.com/MSOpenTech/redis/releases 安装到 c:\Redis ...
- Bzoj 3170[Tjoi 2013]松鼠聚会 曼哈顿距离与切比雪夫距离
3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1318 Solved: 664[Submit][Stat ...
- Linux下安装docker与kubernetes(k8s)
环境 安装是使用Vmware虚拟机下进行,操作系统是CentOS7 64位.规划是使用三台虚拟机搭建k8s的集群,网络使用NAT模式.三台的ip分别为: k8s-master:192.168.91.1 ...
- 1.低权限的程序向高权限的程序发消息 2.慎用setcurrentdirectory
1.低权限的程序向高权限的程序发消息 2.慎用setcurrentdirectory
- 使用jqueryUI实现自由调整表格列宽
今天项目中需要插入表格,用Excel表格调整列宽时,想怎么拖就怎么拖,于是乎就让插入的表格也这么让人舒服.网上查找许久,没找到好用的方案.最后发现jQuery UI中的resizable()方法可以实 ...
- 个人永久性免费-Excel催化剂功能第70波-工作薄外部链接维护管理
Excel在数据领域万物互联的特性,其中一个使用场景是连接非本工作薄的外部性文件内容,如其他Excel工作薄文件里的内容或直接用OLE对象的方式嵌入一个文件链接,使其在不离开Excel环境,也可提供类 ...
- Docker 工作原理及容器化简易指南
Docker 非常棒! 它使软件开发者无需担心配置和依赖性,在任何地方打包,发送和运行他们的应用程序.而在与 Kubernetes 相结合后,它使应用集群部署和管理变得更方便.这使得 Docker 深 ...
- Java、Java SE、Java Web和Java EE的区别
刚接触Java对这些概念上的东西有点模糊,查了很多资料,想把它分享出来,要是哪里不对请大家指正(^_^) 1.Java 毫无疑问这就是门语言和C.C++.C#一样没什么好说的. 2.Java SE和J ...