以打包fuse为例介绍rpm打包工具rpmbuild的使用和SPEC文件的编写

一、rpmbuild命令的安装

yum install rpm-build

二、用法

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

三、目录概述

rpmbuild在运行后会在用户目录下生成一个rpmbuild的文件夹:
[[email protected] 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已经帮我们生成了一个格式:

[[email protected] packages]# vi aaa.spec
Name:
Version:
Release:        1%{?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.81-1.tar.gz
Name:moosefs; 版本号:3.0.81 Release:1

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(644,root,root,755)用来设定文件的默认权限
%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.7
Release:    1%{?_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.14

%description
libfuse

%prep
%setup -q

%clean
rm -rf $RPM_BUILD_ROOT

%build
%configure
make

%install
make install DESTDIR=$RPM_BUILD_ROOT 

%files
%defattr(644,root,root,755)
%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命令查看包信息,原来被禁掉了。

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

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

#先看我们之前说的SRPM中打的源码包是什么样子的:[[email protected] SRPMS]# pwd
/root/rpmbuild/SRPMS
[[email protected] SRPMS]# rpm -qlp fuse-2.9.7-1.src.rpm
fuse-2.9.7.tar.gz
libfuse.spec
#再看我们最终想要的二进制的rpm包是神样子的:
[[email protected] x86_64]# pwd
/root/rpmbuild/RPMS/x86_64
[[email protected] x86_64]# rpm -qlp fuse-2.9.7-1.x86_64.rpm
/etc/init.d/fuse
/etc/udev/rules.d
/etc/udev/rules.d/99-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.怎样确定系统多出来的命令就是我们刚装上的呢?

[[email protected] packages]# rpm -qi fuse-libs
Name        : fuse-libs
Version     : 2.9.2
Release     : 6.el7
Architecture: x86_64
Install Date: Wed Aug 10 10:14:39 2016
Group       : System Environment/Libraries
Size        : 293074
License     : LGPLv2+
Signature   : RSA/SHA256, Wed Nov 25 22:30:48 2015, Key ID 24c6a8a7f4a80eb5
Source RPM  : fuse-2.9.2-6.el7.src.rpm
Build Date  : Fri Nov 20 13:49:56 2015
时间: 2025-01-02 18:36:12

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

rpm包介绍 rpm/yun工具用法 yum搭建本地仓库

一.安装软件包的三种方法1.rpm工具,类似于windows系统下的.exe2.yum工具,安装最简单,可以自动安装依赖关系3.源码包,安装最复杂的安装方式 二.rpm包介绍在VMware workstion软件中点击右下角小光盘,点击可以连接到linux系统,进行挂载挂载光驱: #mount /dev/cdrom /mnt/ //将光驱挂载到/mnt/目录下mnt# cd Packages Packages# ls //Packages目录下有非常多的rpm包teamd-1.25-4.el7.

RPM包rpmbuild SPEC文件深度说明 【装载】

转载地址[请查看作者原文] http://hlee.iteye.com/blog/343499 http://laoguang.blog.51cto.com/6013350/1103628 上一篇日志写到,为什么要制作rpm包,以及如何使用.src.rpm文件生成rpm包.最后部分还看到.src.rpm的内容,实际上 就是由.tar.gz源码.补丁软件和.spec脚本组成的.由此知道,使用.spec生成rpm包是比较简单的,因为.src.rpm通常都是由软件开 发者或者第三方的专业制作人根据源码

openstack RPM打包

背景: 常见的Linux发行版主要可以分为两类,类ReadHat系列和类Debian系列,这里我们是以其软件包的格式来划分的,这两类系统分别提供了自己的软件包管理系统和相应的工具.类RedHat系统中软件包的后缀是rpm:类Debian系统中软件包的后缀是deb.另一方面,类RedHat系统提供了同名的rpm命令来安装.卸载.升级rpm软件包:类Debian系统同样提供了dpkg命令来对后缀是deb的软件包进行安装.卸载和升级等操作. rpm的全称是Redhat Package Manager,

使用spec与fpm 2种方式进行rpm打包

最近分享zabbix与ansible好多,大家看烦了,我也没啥存货了,现在就介绍一下如何进行rpm打包吧. rpm打包有2个,一个是自己写spec,另外要给是使用ruby的fpm,我个人比较倾向于第二种fpm,这个不需要写spec文件,特简单,不过为了让大家看明白,我分别介绍一下这2款软件是如何进行rpm打包的. 目录 一.使用spec构建rpm 二.使用fpm构建rpm 一.使用spec构建rpm 在构架rpm包的时候,需要经过3个过程 1.解压源码包 2.编译环境configure 3.ma

第三方SQLITE打包库pldatabase的介绍

1. 怎么导入PlausibleDatabase.framework框架 先下载PlausibleDatabase.framework框架包,然后把该包直接加入到库中,然后再加入#import <PlausibleDatabase/PlausibleDatabase.h>头文件 下载地址:http://code.google.com/p/pldatabase/ 在这里可以下载和查看文档和代码. 第三方SQLITE封装库Pldatabase 基本使用指南 创建一个链接 为存在数据库文件打开一个链

困扰一天的rpm打包问题

rpm打包我们经常会遇到,通过直接拷贝的方式达来打包的情况.但是发现打包的时候并不是想象中的那么顺利,比如你会遇到这种情况: 通常遇上上面的警告之后,你还是能打包完成的.但是你会发现打包完成的rpm包很不正常的,无论从大小和安装方面都不行.holy shit!,我只是简单的拷贝啊.我们的rpmbuild代码也很简单: # Disable the stupid stuff rpm distros include in the build process by default: #   Disabl

Centos6_64 rpm打包实践

安装rpmbuild sudo yum install rpm-build 普通用户的配置 /home/you/rpmbuild/ 假设是要构建rpm的目录 先说说rpmbuild有什么用,给一个例子: echo "%  _topdir/home/you/rpmbuild" > ~/.rpmmacros mkdir -p /home/you/rpmbuild/{SPECS,BUILD,SRPMS,RPMS,SOURCES} /usr/lib/rpm/macros 中配置可以更改具

rpm打包

首先安装打包软件# yum install rpmbuild  rpmdevtools -y 生成打包路径1.使用rpmdev-setuptree ,会自动在用户家目录生成一个rpmbuild的文件夹,作为工作路径2.cd rpmbuild/SPECS路径,创建my.spec文件,仅仅需要以下内容################my.spec##############Name: shepherdVersion: 1.0Release: 1Summary: luckykrisLicense: [

运维自动化_rpmbulid 线上服务rpm打包

运维自动化需要涉及到rpmbuild的学习,现对rpmbuild进行打包,以下是spec文件内容: # online rpmbulid for h5_back Name:             h5_bak Version:          0.0.1 Release:          1%{?dist} Summary:          data_back for h5 Group:            Applications/File License:          BSD