手动制作rpm包
制作RPM包的过程,简单的说,就是为制作过程提供一个“工作车间”,即一个目录,里面需要包含以下几个子目录:
BUILD ————编译相关源码包时的工作目录;
RPMS ————生成的二进制格式的RPM包存放的位置;
SOURCES ————程序的源码文件及其其他辅助文件的存放位置;
SPCES ————spec文件的存放位置;
SRPMS ————生成的SRC格式的RPM包存放位置;
如果用户目录主目录下没有类似目录结构,可以通过一个工具软件来自动配置和生成。
#yum install rpmdevtools –y
#rpmdev-setuptree
rpmdev-setuptree命令默认在当前用户主目录下创建一个RPM构建目录结构。
当“工作车间”准备停当之后,将用到的源码及辅助文件放置于相应的SOURCES目录中,并在SPECS目录中创建一个spec文件,就可以使用rpmbuild命令开始制作过程了。由于root用户的权限没有任何限制,RPM制作过程的不当命令有可能会给系统带去破坏,所以,一定不能使用root用户执行制作过程。切记!
RPM生成要素:
1、
生成rpm所用的文件列表或者源代码;
2、
根据文件列表或者源代码生成rpm包的规范,也就是spec文件;
3、
根据spec文件加工源码/文件的工具rpmbuild;
操作步骤:
一般我们都把源码打包成tar.gz格式然后存放于SOURCES路径下,而在SPECS路径下编写spec文档,通过命令打包后,默认会把打包后的rpm包放在RPMS下,而源码包会被放置在SRPMS下。
先看看rpmbuild命令的用法:
1、 从spec文档建立有以下选项:
-bp #只执行spec的%pre段(解源代码包并打补丁,只是准备阶段)
-bc #执行spec的%pre和%build段(准备并编译)
-bi #执行spec的%pre, %build与%install(准备,编译并安装)
-bl #检查spec中的%file段(查看文件是否齐全)
-ba #建立源码与二进制包(常用)
-bb #只建立二进制包
-bs #只建立源码包
2、重点介绍spec文件:
Summary: rpm hello world.
Name: hello
Version: 0.1
Source: $RPM_SOURCE_DIR/hello-0.1-1.tar.gz #源代码的tar包名字,严格一致;
Release: 1
Vendor: lx
License: Share
Group: Application/test
BuildRequires: gcc, make #环境要求
Requires:
libdnet.1 libpcap.so.1 libsfbpf.so.0 #依赖库要求
%description
print hello
%prep #编译前的准备部分,一般为删除之前的中间文件(BUILD目录),解压缩源码文件
rm -rf $RPM_BUILD_DIR/hello-0.1-1
zcat $RPM_SOURCE_DIR/hello-0.1-1.tar.gz |
tar xvf -
%build
#完成make编译部分,如果源码中提供了Makefile文件,就是一条make命令
cd $RPM_BUILD_DIR/hello
./configure --prefix = /usr/local/
make
%install #完成安装部分,如果源码中提供了Makefile文件,就是一条make
install命令
cd $RPM_BUILD_DIR/hello
make install
%files #列出软件被安装后,目标机器上由该文件新建的文件,包括可执行文件、配置文件、man文件等
%doc
%defattr(-,root,root)
/usr/lib/*
/usr/include/*
/usr/sbin/*
Rpm包制作注意点:
1、%file段 文件的添加;
2、安装时,对依赖库的需求;
手动制作rpm包的更多相关文章
- 一步步制作RPM包
一步步制作RPM包 来源 http://blog.51cto.com/laoguang/1103628 一.RPM制作步骤 我们在企业中有的软件基本都是编译的,我们每次安装都得编译,那怎么办呢?那就根 ...
- 制作rpm包步骤
由于项目需要,需要自行制作rpm包.比较全面的可以参考如下链接: http://blog.chinaunix.net/uid-23069658-id-3944462.html 大致框架如下: 1,安装 ...
- 烂泥:Linux源码包制作RPM包之Apache
本文由秀依林枫提供友情赞助,首发于烂泥行天下 公司服务器比较多,需要把apache源码包制作成rpm包,然后放到公司内网yum源上进行下载安装.apache的rpm包安装方式比源码安装方式比较快,这能 ...
- Linux系统手动安装rpm包依赖关系分析(以Kernel升级为例)
有在Linux系统中安装软件的经历的人都知道,在Linux系统中手动安装软件不想在Windows下安装软件那么方便,直接双击,然后下一步下一步就可以把软件成功的装入到系统中,而在Linux系统中,安装 ...
- 速成制作rpm包
FPM 由于很多软件在安装时需要编译,这会浪费不少的时间,为了提升部署效率,于是就想到制作rpm包.通常rpm包的制作是使用rpmbuild命令来制作,但是你需要知道它的语法,比较繁琐.这就用到了FP ...
- 利用fpm制作rpm包
使用fpm制作rpm包 安装如下 [root@web01 ~]# yum install -y gcc zlib zlib-devel wget http://ruby.taobao.org/mirr ...
- fpm制作rpm包
一.前言 在企业中我们有事安装软件包.部分都是源码安装,如nginx安装路径都已经固化了,但实际业务中,我们都是把软件包安装到固定目录下,不满足需要,这是其一.其二,编译安装很耗时,比如mysql,特 ...
- fpm 制作rpm包
使用fpm命令制作rpm包并安装 工作中有如下情况需要将文件打包rpm: 避免重复工作,将源码程序打包为rpm 使用yum发布项目,项目打包为rpm 将自己写好的程序打包为rpm,提供给用户下载 其他 ...
- linux制作RPM包
制作rpm包 1.制作流程1.1 前期工作 1)创建打包用的目录rpmbuild/{BUILD,SPECS,RPMS, SOURCES,SRPMS} 建议使用普通用户,在用户家目录中创建 2)确定好制 ...
随机推荐
- POJ1797 Heavy Transportation 【Dijkstra】
Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 21037 Accepted: ...
- [dfs+水] hdu 4462 Scaring the Birds
题意: N*N的矩阵中有M个点能够放稻草人.且给覆盖距离R 每一个稻草人能覆曼哈顿距离R以内的点 问最少须要多少个稻草人 思路: 由于范围非常小,直接能够暴力 注意稻草人所在的位置是不须要被覆盖的 代 ...
- go语法之一
Go语法: Go语言要求public的变量必须以 大写字母开头,private变量则以小写字母开头,这种做法不仅免除了public.private关键字,更重要的是统一了命名风格. Go语言对{ } ...
- OC-nonatomic和atomic相关
1.原子和非原子属性1.1>OC在定义属性时又nonatomic和atomic两种选择(1)atomic:原子属性,为setter方法加锁(默认就是atomic)(2)nonatomic:非原子 ...
- 「Foundation」集合
一.NSArray和NSMutableArray (一)NSArray不可变数组 (1)NSArray的基本介绍 NSArray是OC中使用的数组,是面向对象的,以面向对象的形式操纵对象,是不可变数组 ...
- BZOJ 1863: [Zjoi2006]trouble 皇帝的烦恼( 二分答案 )
二分答案..然后从头到尾推一下, 看最后一个能不能取0个和第一个人相同的勋章 ------------------------------------------------------------- ...
- php随笔11-Thinkphp常用系统配置大全
Thinkphp常用配置 CHECK_FILE_CASE -- windows环境下面的严格检查大小写. /* 项目设定 */ 'APP_DEBUG' => false, // ...
- jmeter 压力测试 参数
Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”.今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅. 如果 ...
- javascript定义函数不同方式的区别
学习javascript中遇到了这么一个问题,代码如下: var test = 'a'; function test() { alert('Hello World!'); } alert(test); ...
- 深入浅出—JAVA(1)
1.基本概念 JAVA的工作方式 编写源代码文件--用编译器运行源代码(javac)--编译器会产出字节码--通过JAVA虚拟机读取与执行字节码(jvm). JAVA的程序结构 什么是源文件? 源文件 ...