- 安装构建工具
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