rpmbuild用法

利用rpmbuild打包,需要两类文件:1、源码,源码以tar归档进行压缩的源码包,以及一些.patch文件,存放于目录./SOURCES下;2、.spec文件,定义了打包的动作,以及依赖,是打包的最主要类容。

首先介绍SPEC文件:

SPEC文件的一些语法:

.spec中的条件判断语句有两种:
1、if结构
引用
%if %{str}
%else
动作
%endif
其中%{str}是条件,0为假,非0为真。
2、?:结构
引用
%{?变量:动作1}动作2
其中{}用于控制范围,而“?”号和“:”号是分割符,如果要判断条件是非的情况,可以在“?”号前加“!”号。
此条件与前面的%if有点不同,其只判断变量是否定义,定义了就为真,否则就为假,即使变量定义为0,也为真,并运行后面的语句。

spec文件的一些定义:

Name:  #软件包的名称

Version:  #软件包的版本号

Release:  #发布的序列

Epoch:  #发布的序列

Summary:  #摘要

Group:  #组描述

License:  发行许可证

Sources[0-n]:  #打包的源码包

Patch0: *.patch #补丁文件

BuildRequires:  #打包时依赖的软件

Requires:  #安装此rpm包时依赖的软件包

BuildRoot:  #安装此软件的虚拟根目录

以上是描述性的元素,其中Epoch:Version:Release表示了rpm包的新旧,优先级依次降低,打出的rpm包也是以${package}-${Version}-${Release}命名。

spec文件主体内容:

spec文件中引用的一些宏变量主要定义在/usr/lib/rpm/macros中

主要有三个阶段:

%pre

//预处理阶段,解压缩软件包

%setup

%setup 不加任何选项,仅将软件包打开。
%setup -n newdir 将软件包解压在newdir目录。
%setup -c 解压缩之前先产生目录。
%setup -b num 将第num个source文件解压缩。
%setup -T 不使用default的解压缩操作。
%setup -T -b 0 将第0个源代码文件解压缩。
%setup -c -n newdir 指定目录名称newdir,并在此目录产生rpm套件。
%patch 最简单的补丁方式,自动指定patch level。
%patch0 -p0 打第1个补丁,0表示利用当前相对路径名称
%pacth1 -p2 打第2个补丁,2表示忽略补丁文件第一层目录
%patch 0 使用第0个补丁文件,相当于%patch ?p 0。
%patch -s 不显示打补丁时的信息。
%patch -T 将所有打补丁时产生的输出文件删除。

%build 编译阶段

./configure --prefix=$RPM_BUILD_ROOT/usr
make
or
%configure #可以用rpm –eval '%configure'命令查看该宏
make

在openstack项目中直接是:python setup.py build

%install 将软件安装到虚拟根目录

常用命令:

make DESTDIR=$RPM_BUILD_ROOT install

install [options] src ${RPM_BUILD_ROOT}/${dst} #安装配置文件至指定目录,相当于cp

建立连接关系等。

在openstack 项目中:

%{_python2} setup.py install -01 --skip-build --root %{buildroot}

%clean

清理一些临时文件,或是生产中不需要的文件

%files [name]

文件和目录的归档,rpm包真正包含的内容,$name 与package name对应,一个package生成一个rpm包,名字${name}-${version}-${release}.rpm。若没有name,则即是spec Name项。

files是相对路径,应用宏或变量表示相对路径:

如果描述为目录,表示目录中除%exclude外的所有文件。
%defattr (-,root,root) 指定包装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755

%changelog 变更日志

一般会把git log记录输入,openstack文件中记录的日志:

git rev-parse --abbrev-ref HEAD >> *.spec

git log --pretty=oneline --abbrev-commit | head -n +1 >> *.spec

生成patch的命令

diff -Naur path/to/A_Project path/to/B_Project > Project.patch (A是原始项目)

或者利用 git命令:

new 是有更改的分支,old是没有更改的分支

git checkout new
git format-patch -M old

生成:000-*.patch
git打patch的命令:

git am 000-*.patch

打包:

 yum-duilddep *.spec 安装spec文件中的所有编译依赖软件,BuidRequires。

 rpmbuild --define "_topdir ${dir:-/home/rpmbuild}" -bb *.spec

_topdir指定打包的目录,rpmbuild/{SURCES,BUILD,BUILDROOT,SPECS,RPMS,SRPMS}。

也可以向spec文件传入参数,也是利用--define
解析rpm包

rpm -qpl *.rpm #列出rpm包包含的内容

rpm2cpio *.rpm | cpio -div #解压缩出rpm包

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354