一、rpmbuild命令的安装

yum install rpm-build

二、用法

rpmbuild -bb XXXX.spec或者rpmbuild -ba XXX.tar.gz

三、目录概述

rpmbuild在运行后会在用户目录下生成一个rpmbuild的文件夹:

[root@localhost rpmbuild]# ls ~/rpmbuild/
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS

有四个目录:
BUILD:你要打包的文件将会在这里编译;
BUILDROOT:在虚拟安装(make install)的目录;
RPMS:存放生成的二进制的rpm包,也就是我们普通用的那种RPM包;
SOURCES:你要编译的源码包会被copy到这里;
SPECS:你执行的spec文件会被copy到这里;
SRPMS:存放的是rpm源码包,源码包里只有一个文件,就是你的XXXX.tar.gz

四、SPEC文件的编写

vim一个空文件,可以看到rpmbuild已经帮我们生成了一个格式:

[root@localhost packages]# vi aaa.spec
Name:
Version:
Release: %{?dist}
Summary: Group:
License:
URL:
Source0: BuildRequires:
Requires: %description %prep
%setup -q %build
%configure
make %{?_smp_mflags} %install
make install DESTDIR=%{buildroot} %files
%doc %changelog

相对应的关键字介绍如下:

Name:软件包的名称 %{name}
Version:软件的实际版本号
Release:发布序列号 %{release}
比如:moosefs-3.0.-.tar.gz
Name:moosefs; 版本号:3.0. Release: Summary:软件包的内容概要
Group:软件分组,建议使用标准分组
License:软件授权方式
URL:软件的主页
Source0:源代码包地址,多个源可以用"%{source1}"、"%{source1}"等引用
Requires:该rpm包所依赖的软件包名称,可以用>=或<=表示大于或小于某一特定版本
PreReq、Requires(pre)、Requires(post)、Requires(preun)、Requires(postun)、BuildRequires等都是针对不同打包阶段的依赖指定的
%description:软件的详细说明
%prep:表示要开始编译软件了,通常包括%setup和%patch两个命令
%setup -q: 解压源文件程序
%patch:把补丁放到源码中
%build表示开始构建
%configure 相当于"./configure",也可以指定参数
make %{?_smp_mflags} 就是"make"
%install:表示开始安装(其实是安装到虚拟目录,一般我们指定是BUILDROOT)
make install DESTDIR=%{buildroot}就是"make install"
%files:用来指定要把那些文件打包到rpm包中
%defattr(,root,root,)用来设定文件的默认权限
%doc:这个非常重要,只有写在这下面的文件,才会被打包到rpm中去 如果目录不对都会提醒你File not found by glob: /root/rpmbuild/BUILDROOT/XXXXX
其实在打包的时候%doc可以先不用写,执行过后到 /root/rpmbuild/BUILDROOT/目录下看都安装了什么,再写;
%changelog:变更日志,有些时候回提醒你前面加"*"

下面是我给fuse-2.9.7写的spec文件:

%define _relname .devel

Summary:    File System in Userspace (FUSE) utilities
Name: fuse
Version: 2.9.
Release: %{?_reasename}
License: commercial
Group: System Environment/Base
Source0: %{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Requires: kernel >= 2.6. %description
libfuse %prep
%setup -q %clean
rm -rf $RPM_BUILD_ROOT %build
%configure
make %install
make install DESTDIR=$RPM_BUILD_ROOT %files
%defattr(,root,root,)
%doc
%{_includedir}/*
%{_includedir}/fuse/*
%{_libdir}/*
%{_libdir}/pkgconfig/*
%{_bindir}/*
%{_mandir}/man1/*
%{_mandir}/man8/*
/sbin/*
%{_sysconfdir}/init.d/*
%{_sysconfdir}/udev/*
%{_sysconfdir}/udev/rules.d/* %changelog
*Mon Feb 13 2006 Peter Lemenkov <lemenkov newmail ru> - 2.9.1-1
*Proper udev rule
*Mon Feb 13 2006 Peter Lemenkov <lemenkov newmail ru> - 2.9.1-1
*Added missing requires

五、打包之后的疑问和解决方法

1.那么打包之后的文件是不是我们想要的呢?

答:可以用"rpm --prefix"去安装,结果:error: package fuse is not relocatable,用rpm命令查看包信息,原来被禁掉了。

[root@localhost x86_64]# rpm -ivh fuse-2.9.-.x86_64.rpm --prefix=/usr/local/fuse3
error: package fuse is not relocatable
[root@localhost x86_64]# rpm -qpi fuse-2.9.-.x86_64.rpm
Name : fuse
Version : 2.9.
Release :
Architecture: x86_64
Install Date: (not installed)
Group : System Environment/Base
Size :
License : commercial
Signature : (none)
Source RPM : fuse-2.9.-.src.rpm
Build Date : Wed Aug ::
Build Host : localhost
Relocations : (not relocatable)
Summary : File System in Userspace (FUSE) utilities
Description :
libfuse

2.怎么样不安装rpm就知道里面有什么文件呢?

#先看我们之前说的SRPM中打的源码包是什么样子的:
[root@localhost SRPMS]# pwd
/root/rpmbuild/SRPMS
[root@localhost SRPMS]# rpm -qlp fuse-2.9.-.src.rpm
fuse-2.9..tar.gz
libfuse.spec
#再看我们最终想要的二进制的rpm包是神样子的:
[root@localhost x86_64]# pwd
/root/rpmbuild/RPMS/x86_64
[root@localhost x86_64]# rpm -qlp fuse-2.9.-.x86_64.rpm
/etc/init.d/fuse
/etc/udev/rules.d
/etc/udev/rules.d/-fuse.rules
/sbin/mount.fuse
/usr/bin/fusermount
/usr/bin/ulockmgr_server
/usr/include/fuse

3.怎么样不安装rpm包就可以提取rpm包里的文件:
http://blog.chinaunix.net/uid-33787-id-3331183.html

4.怎样确定系统多出来的命令就是我们刚装上的呢?

[root@localhost packages]# rpm -qi fuse-libs
Name : fuse-libs
Version : 2.9.
Release : .el7
Architecture: x86_64
Install Date: Wed Aug ::
Group : System Environment/Libraries
Size :
License : LGPLv2+
Signature : RSA/SHA256, Wed Nov :: , Key ID 24c6a8a7f4a80eb5
Source RPM : fuse-2.9.-.el7.src.rpm
Build Date : Fri Nov ::

以libfuse为例介绍rpm打包工具rpmbuild的使用和SPEC文件的编写的更多相关文章

  1. 写你自己 android 多通道打包工具 可以包libs和.so文件

    android上传应用程序,需要区分各个信道. 通常更改配置文件中的一个通道id,假设有多个通道,手动更改并生成apk这将是非常麻烦的,及增加误差的概率. 在这个课堂上分享一个打包工具.也可在网上类似 ...

  2. rpm打包工具---FPM

    FPM的安装:fpm是由ruby gem仓库里面安装的所以要先装ruby.yum安装的ruby版本是1.8.7版本,使用gem命令会报错: >= 1.9.3,所以要安装一个比1.9.3版本高的 ...

  3. rpm打包工具

    http://fedoraproject.org/wiki/How_to_create_an_RPM_package # rpm --showrc|grep _topdir -14: _builddi ...

  4. 【centos7常用技巧】RPM打包

    一.RPM打包的目的 1.当目标机中不存在编译环境时,可以先在本地环境中编译打包,然后直接在目标机中用rpm -ivh *.rpm安装即可. 2.当需要在目标机中安装多个软件或者增加多个文件时,可以将 ...

  5. RPM 打包技术与典型 SPEC 文件分析

    一 .rpm 介绍 1. 概述 RPM全称是 Red Hat Package Manager(Red Hat包管理器).几乎所有的 Linux 发行版本都使用这种形式的软件包管理安装.更新和卸载软件. ...

  6. 用 RPM 打包软件,第 1 部分

    http://www.ibm.com/developerworks/cn/linux/management/package/rpm/part1/ RPM(Red Hat Package Manager ...

  7. HN669打包工具--打包工具使用文档

    打包工具主要包含下载更新资源文件以及打包两个部分 一.下载更新资源文件 1.终端进入工具根目录,即HN669SDK_iOS目录,并运行./api.sh脚本 2.输入游戏id (note:此游戏id为我 ...

  8. FPM打包工具 可以把源码包制定为rpm包 是自动化部署的环节

    注意部FPM时的环境一定要跟生产环境的系统版本最好是保持一至,我第一次测试没通过,(我在CENTOS7和部属FPM打好的包在Centos6.x和安装,结果失败) 1:安装 FPM打包工具的依赖包: [ ...

  9. 前端打包工具——build release介绍

    前言 对于前端开发者来说,资源打包是日常过程中一个必不可少的过程:目前我们大多数时候使用grunt.gulp.webpack这三个工具来完成这个工作:但是有一个特点就是我们没创建一个项目都要对应的去编 ...

随机推荐

  1. UML(Unified Modeling Language)统一建模语言

    什么是模型 模型是对现实的简化 模型是提供系统的蓝图,模型可是包括详细计划.也可是是从更高程度考虑系统的总体计划,每个系统可以从不同的方面用不通过的模型来描述.因而每个模型都是在语义上闭合的抽象系统. ...

  2. 用html5的canvas画布绘制贝塞尔曲线

    查看效果:http://keleyi.com/keleyi/phtml/html5/7.htm 完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...

  3. (有趣)chrome不同浏览器版本对display:flex和溢出隐藏显示省略符号的bug

    项目中碰到一个十分有趣的情形: 布局要求是这样:右边创建新订单是固定宽度80px,左侧是自适应宽度,溢出隐藏.如下图. 这里布局不用说肯定使用display:flex的.左侧flex:1;右侧widt ...

  4. arcgis server之路网服务发布

    路网服务发布首先需要建立好道路的网络集,为了保证道路网络分析的准确性,建立网络集之前,要对道路图层进行拓扑差错,确保道路的连通性.具体操作流程为:道路拓扑差错-建立几何网络集-路网服务发布. 1.道路 ...

  5. 网络分析之networkx(转载)

    图的类型 Graph类是无向图的基类,无向图能有自己的属性或参数,不包含重边,允许有回路,节点可以是任何hash的python对象,节点和边可以保存key/value属性对.该类的构造函数为Graph ...

  6. python之很好的网站

    1.python官方开发者文档查询和python下载网站 2.

  7. Windows on Device 项目实践 5 - 姿态控制灯制作

    在前面几篇文章中,我们学习了如何利用Intel Galileo开发板和Windows on Device来设计并完成PWM调光灯.感光灯.火焰报警器和智能风扇的制作,涉及到了火焰传感器.DC直流电机. ...

  8. 查看Linux版本信息

    如何查看Linux系统使用的版本信息呢? 下面这篇文章收集.整理了一些常见的查看Linux系统版本的方法.由于手头只有Oracle Linux.Centos Linux.Redhat Linux三个版 ...

  9. Nagios学习实践系列——产品介绍篇

    Nagios介绍 Nagios是一款功能强大.优秀的开源监控系统,它能够让你发现和解决IT架构中存在的问题,避免这些问题影响到关键业务流程. Nagios最早于1999年发布,它在开源社区的影响力是相 ...

  10. .NET框架设计(常被忽视的C#设计技巧)

    阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你的对象如虎添翼(要学会使用扩展方法的设计思 ...