linux 使用rpm-build构建rpm包

  • 安装构建工具
yum install -y rpm-build rpmdevtools

rpm-build 包是主要使用的工具包

rpmdevtools 包可以快速生成构建环境,一般构建路径在家目录~/rpmbuild下

rpmdev-setuptree

目录结构如下图,初始是没有BUILDROOT的。

目录功能:

BUILD                 编译rpm包的临时目录     
BUILDROOT      编译后生成的软件临时安装目录
RPMS                 最终生成的可安装rpm包的所在目录
SOURCES         所有源代码和补丁文件的存放目录
SPECS               存放SPEC文件的目录(重要)
SRPMS              软件最终的rpm源码格式存放路径

  • 准备源码包

准备源码包,并将源码包存放在~/rpmbuild/SOURCES目录下

  • 编写spec脚本

spec脚本存放目录为~/rpmbuild/SPECS。

编写时建议使用vim ,因为vim可以自动生成一些提示。

软件包制作时建议使用标准的分组,标准分组如下:

  Amusements/Games (娱乐/游戏)
  Amusements/Graphics(娱乐/图形)
  Applications/Archiving (应用/文档)
  Applications/Communications(应用/通讯)
  Applications/Databases (应用/数据库)
  Applications/Editors (应用/编辑器)
  Applications/Emulators (应用/仿真器)
  Applications/Engineering (应用/工程)
  Applications/File (应用/文件)
  Applications/Internet (应用/因特网)
  Applications/Multimedia(应用/多媒体)
  Applications/Productivity (应用/产品)
  Applications/Publishing(应用/印刷)
  Applications/System(应用/系统)
  Applications/Text (应用/文本)
  Development/Debuggers (开发/调试器)
  Development/Languages (开发/语言)
  Development/Libraries (开发/函数库)
  Development/System (开发/系统)
  Development/Tools (开发/工具)
  Documentation (文档)
  System Environment/Base(系统环境/基础)
  System Environment/Daemons (系统环境/守护)
  System Environment/Kernel (系统环境/内核)
  System Environment/Libraries (系统环境/函数库)
  System Environment/Shells (系统环境/接口)
  User Interface/Desktops(用户界面/桌面)
  User Interface/X (用户界面/X窗口)
  User Interface/X Hardware Support (用户界面/X硬件支持)

当有多个资源需要打包时Sourcean按照顺序排列,例如:

Source0       AAAA.tar
Source1       BBBB.tar
Source2       CCCC.conf

 

各个参数的提示可以参考【圣地亚哥】博客:https://www.jianshu.com/p/691189360ede

  • spec文件中的宏变量
%{_topdir}            %{getenv:HOME}/rpmbuild
%{_builddir}          %{_topdir}/BUILD
%{_rpmdir}            %{_topdir}/RPMS
%{_sourcedir}         %{_topdir}/SOURCES
%{_specdir}           %{_topdir}/SPECS
%{_srcrpmdir}         %{_topdir}/SRPMS 
%{_buildrootdir}      %{_topdir}/BUILDROOT
#这几个是常用的宏变量,当遇到其他的时可以使用以下命令查询
rpmbuild -E %{command}
  • 示例
Name:		yasm		
Version:	1.3.0	
Release:	1%{?dist}
Summary:	yasm 

Group:		Development/Tools
License:	GPLv2
URL:		http://yasm.tortall.net/
Source0:	%{name}-%{version}.tar.gz	

BuildRequires:	gcc,make
#Requires:	

%description
Yasm installer.

%prep
# 解压安装包,解压后的文件在%{_builddir},即BUILDS
tar -zxf %{_sourcedir}/%{name}-%{version}.tar.gz 

%build
cd %{name}-%{version}
./configure --prefix=/usr/local/%{name}-%{version} --bindir=/usr/local/bin
make

%install
cd %{_builddir}/%{name}-%{version}
# 清理BUILDROOT下可能存在的临时安装目录
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}

%clean
# 安装后的清理工作,清理BUILDS目录下的解压文件和BUILDROOT下可能存在的临时安装目录
rm -rf %{_builddir}/%{name}-%{version}
rm -rf %{buildroot}

%postun
# 卸载软件后的清理工作
rm -rf /usr/local/%{name}-%{version}
rm -rf /usr/local/bin/vsyasm
rm -rf /usr/local/bin/yasm
rm -rf /usr/local/bin/ytasm

%files
# 在制作安装包是files可以先不用写,直接执行rpmbuild,执行到最后回报错提示分发包,将提示结果复制到这里即可
/usr/local/bin/vsyasm
/usr/local/bin/yasm
/usr/local/bin/ytasm
/usr/local/yasm-1.3.0/include/libyasm-stdint.h
/usr/local/yasm-1.3.0/include/libyasm.h
/usr/local/yasm-1.3.0/include/libyasm/arch.h
/usr/local/yasm-1.3.0/include/libyasm/assocdat.h
/usr/local/yasm-1.3.0/include/libyasm/bitvect.h
/usr/local/yasm-1.3.0/include/libyasm/bytecode.h
/usr/local/yasm-1.3.0/include/libyasm/compat-queue.h
/usr/local/yasm-1.3.0/include/libyasm/coretype.h
/usr/local/yasm-1.3.0/include/libyasm/dbgfmt.h
/usr/local/yasm-1.3.0/include/libyasm/errwarn.h
/usr/local/yasm-1.3.0/include/libyasm/expr.h
/usr/local/yasm-1.3.0/include/libyasm/file.h
/usr/local/yasm-1.3.0/include/libyasm/floatnum.h
/usr/local/yasm-1.3.0/include/libyasm/hamt.h
/usr/local/yasm-1.3.0/include/libyasm/insn.h
/usr/local/yasm-1.3.0/include/libyasm/intnum.h
/usr/local/yasm-1.3.0/include/libyasm/inttree.h
/usr/local/yasm-1.3.0/include/libyasm/linemap.h
/usr/local/yasm-1.3.0/include/libyasm/listfmt.h
/usr/local/yasm-1.3.0/include/libyasm/md5.h
/usr/local/yasm-1.3.0/include/libyasm/module.h
/usr/local/yasm-1.3.0/include/libyasm/objfmt.h
/usr/local/yasm-1.3.0/include/libyasm/parser.h
/usr/local/yasm-1.3.0/include/libyasm/phash.h
/usr/local/yasm-1.3.0/include/libyasm/preproc.h
/usr/local/yasm-1.3.0/include/libyasm/section.h
/usr/local/yasm-1.3.0/include/libyasm/symrec.h
/usr/local/yasm-1.3.0/include/libyasm/valparam.h
/usr/local/yasm-1.3.0/include/libyasm/value.h
/usr/local/yasm-1.3.0/lib/libyasm.a
/usr/local/yasm-1.3.0/share/man/man1/yasm.1
/usr/local/yasm-1.3.0/share/man/man7/yasm_arch.7
/usr/local/yasm-1.3.0/share/man/man7/yasm_dbgfmts.7
/usr/local/yasm-1.3.0/share/man/man7/yasm_objfmts.7
/usr/local/yasm-1.3.0/share/man/man7/yasm_parsers.7

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值