资讯专栏INFORMATION COLUMN

rpm包构建

社区管理员 / 367人阅读

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%_rpmdirrpm目录生成的rpm包所在目录
SOURCES%_sourcedir源码目录源码包目录,%prep阶段从此目录找需要解压的包
SRPMS%_srcrpmdir源码rpm目录生成的rpm源码包所在目录
SPECS%_specdirSpec目录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

    摘要:总结制作就是指改造软件源代码使之符合打包要求的过程,这也可以等价为源码包的制作过程,因为当你有了源码包就可以直接编译得到二进制安装包和其他任意包。到此一个完整的打包环境已经构建完成,下面我们就可以开始构建二进制和源代码包。 介绍 缩写 前世:RPM为Red Hat Package Manager的缩写(Red Hat软件包管理),顾名思义是Red Hat贡献出来的软件包管理。 今...

    derek_334892 评论0 收藏0
  • 制作 RPM

    摘要:总结制作就是指改造软件源代码使之符合打包要求的过程,这也可以等价为源码包的制作过程,因为当你有了源码包就可以直接编译得到二进制安装包和其他任意包。到此一个完整的打包环境已经构建完成,下面我们就可以开始构建二进制和源代码包。 介绍 缩写 前世:RPM为Red Hat Package Manager的缩写(Red Hat软件包管理),顾名思义是Red Hat贡献出来的软件包管理。 今...

    wapeyang 评论0 收藏0
  • Linux RPM管理简介

    摘要:使包从源代码开始构建。站在包创建者的角度上看,使从源代码开始工作十分重要。组成部分包的发布号包的发布号反映出包在同一个版本号下重新构建的次数,重新的构建的原因可能是因为修复了一个。 什么是包(Packages),为什么要管理它们 要回答这个问题,我们需要回到三个最基本的问题上面来: 计算机 数据 程序 计算机需要获取数据和程序来做它应当做的事情,把数据和程序交给计算机,意味着把它们...

    zhoutk 评论0 收藏0
  • Linux RPM管理简介

    摘要:使包从源代码开始构建。站在包创建者的角度上看,使从源代码开始工作十分重要。组成部分包的发布号包的发布号反映出包在同一个版本号下重新构建的次数,重新的构建的原因可能是因为修复了一个。 什么是包(Packages),为什么要管理它们 要回答这个问题,我们需要回到三个最基本的问题上面来: 计算机 数据 程序 计算机需要获取数据和程序来做它应当做的事情,把数据和程序交给计算机,意味着把它们...

    galois 评论0 收藏0
  • 使用RPM获取的信息

    摘要:包名片包名片是标识一个包的唯一字符串,每个名片包含了三种信息安装包的名字安装包的版本安装包的发行号当使用一个包的名片来查询包的信息时,必须有包名,你也可以加上版本号和发行号。 rpm -q 做了什么 如果你想要在你的系统上安装、卸载或升级软件,但却不知道在你的系统中已经有哪些软件了,这是不是一件很蛋疼的事?你可能会陷入下面这些场景中: 你在你的系统中遇到一个文件,你不认识它,它也不认...

    wslongchen 评论0 收藏0
  • 使用RPM获取的信息

    摘要:包名片包名片是标识一个包的唯一字符串,每个名片包含了三种信息安装包的名字安装包的版本安装包的发行号当使用一个包的名片来查询包的信息时,必须有包名,你也可以加上版本号和发行号。 rpm -q 做了什么 如果你想要在你的系统上安装、卸载或升级软件,但却不知道在你的系统中已经有哪些软件了,这是不是一件很蛋疼的事?你可能会陷入下面这些场景中: 你在你的系统中遇到一个文件,你不认识它,它也不认...

    caikeal 评论0 收藏0

发表评论

0条评论

社区管理员

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<