RPM(Redhat Package Manager)是Rhel,Centos,Fedora等系统的软件包管理格式
在centos等使用rpm的系统中安装
yum install -y rpm-build rpmlint yum-utils rpmdevtools
初始化目录结构:
rpmdev-setuptree
在home
目录下生成目录结构如下
rpmbuild ├── BUILD ├── BUILDROOT ├── RPMS ├── SOURCES ├── SPECS └── SRPMS
目录位置 | 宏代码 | 说明 | 用途 |
---|---|---|---|
BUILD | %_builddir | 编译目录 | %build 阶段在此目录执行编译 |
BUILDROOT | %_buildrootdir | 安装虚拟目录 | %install 阶段在此目录执行安装脚本 |
RPMS | %_rpmdir | rpm目录 | 生成的rpm包所在目录 |
SOURCES | %_sourcedir | 源码目录 | 源码包目录,%prep 阶段从此目录找需要解压的包 |
SRPMS | %_srcrpmdir | 源码rpm目录 | 生成的rpm源码包所在目录 |
SPECS | %_specdir | Spec目录 | spec文件存放的目录 |
%global debug_package %{nil} Name: {{.project}} Version: %{_version} Release: 1%{?dist} Summary: {{.ShortDescribe}} Group: Application/WebServer License: Apache 2.0 URL: http://www.baidu.com Source0: %{name}.tar.gz # 构建依赖 BuildRequires: git BuildRequires: make # 详细描述 %description {{.LongDescribe}} # 构建之前执行的脚本,一般为解压缩将在source目录的压缩包解压到build目录 %prep # %setup 不加任何选项,仅将软件包打开。 # %setup -a 切换目录前,解压指定 Source 文件,例如 "-a 0" 表示解压 "Source0" # %setup -n newdir 将软件包解压在newdir目录。 # %setup -c 解压缩之前先产生目录。 # %setup -b num 将第 num 个 source 文件解压缩。 # %setup -D 解压前不删除目录 # %setup -T 不使用default的解压缩操作。 # %setup -q 不显示解包过程 # %setup -T -b 0 将第 0 个源代码文件解压缩。 # %setup -c -n newdir 指定目录名称 newdir,并在此目录产生 rpm 套件。 # %setup -q 不打印解压日志 %setup -q -c -n src -a 0 # 编译脚本 %build cd {{.project}} && make # 检查 %check {{.project}}/bin/{{.project}} version # 安装脚本,将build目录产生的可执行文件复制到buildroot虚拟目录中 %install install -D -p -m 0755 ${RPM_BUILD_DIR}/src/{{.project}}/bin/{{.project}} ${RPM_BUILD_ROOT}%{_bindir}/{{.project}} install -D -m 0644 ${RPM_BUILD_DIR}/src/{{.project}}/{{.project}}.service ${RPM_BUILD_ROOT}%{_unitdir}/{{.project}}.service # 说明%{buildroot}中那些文件和目录需要打包到rpm中 %files %{_bindir}/{{.project}} %{_unitdir}/{{.project}}.service # 变更记录 %changelog
将上面的文件保存到rpmbuild/SPECS
目录
将上面的spec文件保存为test.spec到~/rpmbuild/SPECS/
中执行
rpmbuild -ba ~/rpmbuild/SPECS/test.spec
脚本如果没有问题的话在~/rpmbuild/RPMS
目录下生成rpm文件~/rpmbuild/SRPMS
为rpm源码包
-ba 表示构建二进制包和源码包
-bb 只构建二进制包
–clean 构建完成后清理
–define=”k v” 定义spec中的变量
–help 查看帮助
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/127879.html
摘要:总结制作就是指改造软件源代码使之符合打包要求的过程,这也可以等价为源码包的制作过程,因为当你有了源码包就可以直接编译得到二进制安装包和其他任意包。到此一个完整的打包环境已经构建完成,下面我们就可以开始构建二进制和源代码包。 介绍 缩写 前世:RPM为Red Hat Package Manager的缩写(Red Hat软件包管理),顾名思义是Red Hat贡献出来的软件包管理。 今...
摘要:使包从源代码开始构建。站在包创建者的角度上看,使从源代码开始工作十分重要。组成部分包的发布号包的发布号反映出包在同一个版本号下重新构建的次数,重新的构建的原因可能是因为修复了一个。 什么是包(Packages),为什么要管理它们 要回答这个问题,我们需要回到三个最基本的问题上面来: 计算机 数据 程序 计算机需要获取数据和程序来做它应当做的事情,把数据和程序交给计算机,意味着把它们...
摘要:使包从源代码开始构建。站在包创建者的角度上看,使从源代码开始工作十分重要。组成部分包的发布号包的发布号反映出包在同一个版本号下重新构建的次数,重新的构建的原因可能是因为修复了一个。 什么是包(Packages),为什么要管理它们 要回答这个问题,我们需要回到三个最基本的问题上面来: 计算机 数据 程序 计算机需要获取数据和程序来做它应当做的事情,把数据和程序交给计算机,意味着把它们...
摘要:包名片包名片是标识一个包的唯一字符串,每个名片包含了三种信息安装包的名字安装包的版本安装包的发行号当使用一个包的名片来查询包的信息时,必须有包名,你也可以加上版本号和发行号。 rpm -q 做了什么 如果你想要在你的系统上安装、卸载或升级软件,但却不知道在你的系统中已经有哪些软件了,这是不是一件很蛋疼的事?你可能会陷入下面这些场景中: 你在你的系统中遇到一个文件,你不认识它,它也不认...
摘要:包名片包名片是标识一个包的唯一字符串,每个名片包含了三种信息安装包的名字安装包的版本安装包的发行号当使用一个包的名片来查询包的信息时,必须有包名,你也可以加上版本号和发行号。 rpm -q 做了什么 如果你想要在你的系统上安装、卸载或升级软件,但却不知道在你的系统中已经有哪些软件了,这是不是一件很蛋疼的事?你可能会陷入下面这些场景中: 你在你的系统中遇到一个文件,你不认识它,它也不认...
阅读 1103·2024-02-01 10:43
阅读 282·2024-01-31 14:58
阅读 338·2024-01-31 14:54
阅读 723·2024-01-29 17:11
阅读 2077·2024-01-25 14:55
阅读 1396·2023-06-02 13:36
阅读 1948·2023-05-23 10:26
阅读 426·2023-05-23 10:25