RPM包制作过程(一)
本机环境:centos7,64位
1. 首先安装工具,rpmbuild可能在rpmdevtools里已经包含
#yum install rpm-devel.x86_64
#yum install rpmdevtools
2. 执行如下rpmdev-setuptree生成rpmbuild的工作目录(会在当前用户的根目录下生成rpmbuild目录)
#rpmdev-setuptree
3. 查看生成的rpmbuid工作目录
#cd ~/rpmbuild/
#ls
结果如下图所示
[ump@localhost rpmbuild]$ ls
BUILD RPMS SOURCES SPECS SRPMS
目录含义解释如下:
SOURCES #放置打包资源,包括源码打包文件和补丁文件
SPECS #放置SPEC文档
BUILD #打包过程中的工作目录
RPMS #存放生成的二进制包
RPMS/i386 #存放生成的i386结构包
SRPMS #存放生成的源码包
2 撰写SPEC文档
----------------------------------------------------------
#软件包简要介绍
Summary: hellorpm is a test program。
#软件包的名字
Name: hellorpm
#软件包的主版本号
Version: 2.2.6
#软件包的次版本号
Release: 1
#源代码包,默认将在上面提到的SOURCES目录中寻找
Source0: %{name}-%{version}.tar.gz
#授权协议
License: GPL
#定义临时构建目录,这个地址将作为临时安装目录在后面引用
BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root
#软件分类
Group: Development/Tools
#软件包的内容介绍
%description
The hellorpm program is a test.
#表示预操作字段,后面的命令将在源码代码BUILD前执行
%prep
#构建BUILD环境,将解压源码压缩包到BUILD目录
%setup -q
#BUILD字段,将通过直接调用源码目录中自动构建工具完成源码编译操作
%build
#调用源码目录中的configure命令
./configure
#在源码目录中执行自动构建命令make
make
#安装字段
%install
#调用源码中安装执行脚本
make DESTDIR=$RPM_BUILD_ROOT install
#文件说明字段,声明多余或者缺少都将可能出错
%files
#设置文件权限属性
%defattr(-,root,root)
#声明/usr/local/bin/hellorpm将出现在软件包中
/usr/local/bin/hellorpm
#声明并设置文件属性
%doc %attr(0444,root,root) /usr/local/man/man1/hellorpm.1
#同上,声明文档文件
%doc README
-----------------------------------------------------------------------------------
这个文档需要说明的一点:
BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root
上面BuildRoot变量表示的是源码的临时按照目录,rpmbuild就是通过次目录
获得将要按照到系统中的所有文件,而在SPEC文档后面make install
命令中的参数DESTDIR=$RPM_BUILD_ROOT即是对该参数的引用,这个参数将传给Makefile文件一告诉自动构建工具应该安装文件那
里(实际上我再前文提到过的Makefile需要作一些改造以适应RPM的构建就包括此操作,你的Makefile文件中至少要知道在RPM构建过程中引
用此参数的值去控制安装操作的目标)。
如上一个简单的SPEC文档撰写完成,下面把一个名为hellorpm-2.2.6.tar.gz的源码压缩文件放到
rpmbuild根目录下的SOURCES目录下(注,确保此归档文件解压后的目录为hellorpm-2.2.6,
否则会有问题)。
到此一个完整的rpm打包环境已经构建完成,下面我们就可以开始构建二进制和源代码RPM包。
3 构建RPM包
构建RPM包是有命令rpmbuild在SPEC的指导下完成。
开始构建操作,首先进入到当前用户的rpmbuild根目录(即上面提到的目录环境)。
#cd ~/rpmbuild/
执行如何命令,-ba表示build
all,即生成包括二进制包和源代码包的所有RPM包,下来如果正常的话,rpmbuild将正常退出,同时在RPMS目录和SRPMS目录中将生成对应的RPM包。
#rpmbuild -ba SPECS/hellorpm.spec
这里仅仅介绍了一个最简单软件的最简单的RPM的打包操作过程,诸如带有共享文件的需要进行复杂配置的具有复杂依赖关系的等等的项目的打包以及后期的维护,包括补丁的制作我将在下来的时间完成补充更新,今天时间不早了,该休息了!
http://www.linuxsir.org/main/?q=node/50 RPM 的介绍和应用(北南兄)
http://www.ibm.com/developerworks/cn/linux/management/package/rpm/part3/ 用 RPM 打包软件
http://hlee.javaeye.com/blog/343499 RPM包rpmbuild
SPEC文件深度说明
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 ...
- rpm包制作介绍
RPM(Rpm Package Management)在ReadHat等发行版下被用作软件包管理程序,其将某个软件相关的文件置入一个.rpm包中,用rpm命令,我们可以方便地完成Linux下软件安装. ...
- php-7.1.0 rpm包制作
nginx-1.8.0 rpm包制作见上篇文章:http://www.cnblogs.com/xiaoming279/p/6251149.html spec文件 Name: php Version: ...
- rpm包安装过程中依赖问题“libc.so.6 is needed by XXX”解决方法
rpm包安装过程中依赖问题"libc.so.6 is needed by XXX"解决方法 折腾了几天,终于搞定了CentOS上的Canon LBP2900打印机驱动.中间遇到了一 ...
- rpm包制作(待实验)
作者:firefoxbug 时间:July 18, 2014 rpm包命名规范 对于rpm包的命名符合如下规范. %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm N ...
- 实战RPM包制作
在开发中经常会用到一些rpm包,但是一直没有自己手动制作过.今天在制作的时候意外地还解决了自己以前一直困惑的问题,就是怎么制作rpm debuginfo包,类似CentOS官网那样的debuginfo ...
- 【Linux】【Services】【Package】rpm包制作
1. 概念 1.1. BUILD:源代码解压之后存放的位置 1.2. RPMS:制作完成之后的RPM包的存放位置,包括架构的子目录,比如x86,x86_64 1.3. SOURCES:所有的原材料都应 ...
- nginx-1.8.0 rpm包制作
1.安装rpm-build # yum install rpm-build 2.创建制作RPM包目录 # cat /root/.rpmmacros %_topdir /root/rpmbuild %_ ...
随机推荐
- 监控mysql主从同步
1,昨天看到shell一道面试题,需求如下: 监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员.提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟:阶段1:开发一个守护进 ...
- Cannot obtain the required interface ("IID_IDBCreateCommand") from OLE DB provider "OraOLEDB.Oracle" for linked server xxxx
今天遇到了一个关于LINKED SERVER查询报错的案例,链接服务器链接ORACLE数据库,测试没有错误,但是执行脚本的时候,报如下错误: Msg 7399, Level 16, State 1 ...
- JavaScript中解决计算精度丢失的问题
在做项目之前老师就给我们封装好了一个js文件,解决计算中丢失精度的一些函数,直接引用js文件就可以使用. eg: var numA = 0.1; var numB = 0.2; alert( numA ...
- 一次线上问题引发的对于C#中相等判断的思考
线上报来一个问题,说用户的数据丢失了.开发经过紧张的调查.终于找到了原因. if (newData.GetValue(rowIndex) == oldData.GetValue(rowIndex)) ...
- [Hive_11] Hive 的高级聚合函数
0. 说明 Hive 的高级聚合函数 union all | grouping sets | cube | rollup pv //page view 页面访问量 uv //user view 访问人 ...
- shell 在终端中打开另一个终端执行命令
gnome-terminal -x bash -c "/home/XX/cc.sh; exec bash"
- 【2018.10.11 C与C++基础】C Preprocessor的功能及缺陷(草稿)
一.前言及参考资料 C Preprocessor即所谓的C预处理器,C++也继承了C的预处理程序,但在C++语言的设计与演化一书中,C++的设计者Bjarne Strustrup提及他从未喜欢过C预处 ...
- #005Python实验楼基本操作学习笔记
Ctrl + D 输入一个 EOF 字符来退出解释器,也可以键入 exit() 来退出解释器. 打开 Xfce 终端,键入 vim helloworld.py 来启动 Vim 并编辑 hellowor ...
- 解决IE8不支持html5标签最好解决办法?
完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法:HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面布局,加上CSS3的效果渲染,快速建立丰富灵活的web页面显 ...
- 寒假训练——搜索 K - Cycle
A tournament is a directed graph without self-loops in which every pair of vertexes is connected by ...