安装 rpmbuild

1
# yum install -y rpm-build

查看 rpmbuild 相关的宏和参数

1
2
3
4
5
6
7
8
# rpmbuild --showrc | grep --color "_topdir"
-14: _builddir %{_topdir}/BUILD
-14: _buildrootdir %{_topdir}/BUILDROOT
-14: _rpmdir %{_topdir}/RPMS
-14: _sourcedir %{_topdir}/SOURCES
-14: _specdir %{_topdir}/SPECS
-14: _srcrpmdir %{_topdir}/SRPMS
-14: _topdir %{getenv:HOME}/rpmbuild
1
2
# rpmbuild --showrc | grep --color "buildroot"
-14: buildroot %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}
1
2
# rpm --eval "%_topdir"
/home/guoqiang.ding/rpmbuild

编写 rpmbuild 需要的 spec 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Name:   fdsRsync
Version: 1.0.0
Release: 0
Summary: call fds on the method of rsync. Group: ####
License: Commercial
URL: ####
Source0: %{name}-%{version}.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
大专栏  rpmbuild 实践r/>#BuildRequires:
#Requires:
Packager: guoqiang.ding
Vendor: ### %define _prefix /usr/local/%{name} %description
this is a rpm for fdsRsync. #=> preprocess.
%prep
%setup -q %build
mkdir -p $RPM_BUILD_ROOT/%{_prefix}
cp -rf $RPM_BUILD_DIR/%{name}*/* $RPM_BUILD_ROOT/%{_prefix}/ #=> cp the files compiled to somewhere.
%install
echo "RPM_BUILD_DIR=>" $RPM_BUILD_DIR
echo "RPM_BUILD_ROOT=>" $RPM_BUILD_ROOT
ls -R $RPM_BUILD_ROOT #=> rm the virtual dirs.
%clean
rm -rf $RPM_BUILD_DIR
rm -rf $RPM_BUILD_ROOT #=> file in the rpm must list here.
%files
%defattr(-,root,root,-)
%dir /%{_prefix}/
%dir /%{_prefix}/conf/
%dir /%{_prefix}/log/
%dir /%{_prefix}/src/ /%{_prefix}/boot.sh
/%{_prefix}/kill.sh
/%{_prefix}/conf/*.conf
/%{_prefix}/log/*.log
/%{_prefix}/src/*.py
%doc /%{_prefix}/README %changelog
* Mon Jan 26 2015 guoqiang.ding <guoqiang.ding@xxx.com>
- 1st release for fdsRsync RPM.

执行 rpmbuild

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh
version=1.0.0
rpm_sourcedir='/root/rpmbuild/SOURCES'
project_name='fdsRsync'
work_dir='/home/guoqiang.ding/'$project_name
temp_dir=$work_dir-$version
cp -rf $work_dir $temp_dir
cd $work_dir/../
zip_file=$project_name-$version'.tar.gz'
tar czvf $zip_file ./$project_name-$version
rm -rf $temp_dir
mv $zip_file $rpm_sourcedir
cd $work_dir
rpmbuild -bb ./$project_name.spec
rpm_dir='/root/rpmbuild/RPMS/x86_64'
cp $rpm_dir/$project_name-$version*.rpm ./
rpm -qpl ./$project_name-$version*.rpm

检查打包好的 rpm

如果只想知道包里的文件列表执行:

1
# rpm -qpl packetname

如果想要导出包里的内容,而不是安装,那么执行:

1
# rpm2cpio pkgname | cpio -ivd

rpmbuild 实践的更多相关文章

  1. Redis集群研究和实践(基于redis 3.0.5)

    前言 redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用.现在的2.x的稳定版本是2.8.19,也是我们项目中普遍用到的版本. redis在年初发布了3.0. ...

  2. [实践] ubuntu下编译安装ambari

    ambari是一个Hadoop套件的管理工具,可以方便部署.管理及监控.最初开发时使用的就是RH系的Linux,只支持RHEL.CentOS5/6.OEL.SLES,暂不支持Ubuntu:可我的需求就 ...

  3. dis集群研究和实践(基于redis 3.0.5) 《转载》

    https://www.cnblogs.com/wxd0108/p/5798498.html 前言 redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用.现在的 ...

  4. rpmbuild打包php

    安装php依赖库 mkdir -pv ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} php有一个依赖库,在yum源于epel源中都没有需要自己打包libico ...

  5. rhel7 rpmbuild 制作二进制程序安装包(.rpm) 简单示例

    下载rpm-build: # yum install rpm-build 如果上述方式无法安装(没配置网络源,虚拟机下是安装媒介源) 可以用下列方式下载后再安装(实践结果可能版本问题引起的缺少太多的* ...

  6. webp图片实践之路

    最近,我们在项目中实践了webp图片,并且抽离出了工具模块,整合到了项目的基础模板中.传闻IOS10也将要支持webp,那么使用webp带来的性能提升将更加明显.估计在不久的将来,webp会成为标配. ...

  7. Hangfire项目实践分享

    Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...

  8. TDD在Unity3D游戏项目开发中的实践

    0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...

  9. Logstash实践: 分布式系统的日志监控

    文/赵杰 2015.11.04 1. 前言 服务端日志你有多重视? 我们没有日志 有日志,但基本不去控制需要输出的内容 经常微调日志,只输出我们想看和有用的 经常监控日志,一方面帮助日志微调,一方面及 ...

随机推荐

  1. 1.linux系统调优

    首先来说调优是一门黑色艺术,使用来满足人的感知,通过人的感觉来进行配置,达到让人感觉操作系统速度很块的感觉. 操作系统拥有四个瓶颈:cpu,内存,网络,磁盘.调优主要是对上述四个子系统进行配置优化,其 ...

  2. echarts 实现柱状图重叠而不是相互增加

    1.引入echart 所需要的js和css,这不再引入 总量的数据是包含分量且大于等于分量 先上效果图: 当我们查看总量时,显示的是将分量的也包含里面,这样就不是叠加的数量了 2.直接上代码 (可复制 ...

  3. static及final知识点整理

    final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译 ...

  4. OA项目-表结构

    ###############  新建APP并配置   ############### INSTALLED_APPS = [ ... 'apps.users.apps.UsersConfig', 'a ...

  5. 变得“不正经”的CES,竟然越来越好玩了

    在所有科技界的展会中,国人最熟悉的当属CES.作为科技行业的风向指示标,CES一直在扮演着重要的潮流指引者角色.不过,现在的CES似乎变得越来越"不正经"了!原本CES是国际消费类 ...

  6. 修改hosts文件不需要重启的方法

    显示DNS缓存内容: ipconfig /displaydns 更新DNS缓存内容: ipconfig /flushdns

  7. Exchange Onine功能介绍

    Exchange Online是Office 365中提供的一个邮箱服务.Microsoft Exchange Online是将Microsoft Exchange Server功能作为基于云的服务提 ...

  8. 学习python-20191208(2)-Python Flask高级编程开发鱼书_第03章_数据与flask路由

    视频06: 定义静态方法的两种方式: 1.在方法上方加上装饰@staticmethod 2.在方法上方加上装饰@classmethod  方法中要加参数cls  如:def search_by_isb ...

  9. 爬虫之使用requests爬取某条标签并生成词云

    一.爬虫前准备 1.工具:pychram(python3.7) 2.库:random,requests,fake-useragent,json,re,bs4,matplotlib,worldcloud ...

  10. mysqli存储过程

    <?php$link = mysqli_connect('localhost','root','','chinatupai');  $sql = "call getEmail('000 ...