openEuler本地构建RPM包实战(一)——基础知识

本文详细介绍了RPM包的基础知识,包括RPM包的定义、用途、构建原理和步骤。重点讲解了RPM包构建所需的工作目录、工具、源码、SPEC文件及其重要性。此外,还提到了RPM包构建过程中的关键步骤,如创建工作目录、使用rpmbuild命令,以及SPEC文件的内容和作用,旨在帮助读者掌握在openEuler系统上构建RPM包的基本技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 基础知识

1.1 什么是RPM包?

        rpm包是 Red Hat Package Manager的缩写,它是一种软件包管理工具,主要用于Linux操作系统中管理和分发软件包。 RPM包包含了一个软件的所有相关组件,如可执行的二进制文件(binaries)、库文件(libraries)、配置文件以及其他必要的支持文件。这些组件通常被打包到一个预编译的二进制文件中,使得软件的安装过程变得简单化和自动化。 

        RPM包有如下特点:

        预编译的二进制文件:包含软件的可执行程序、库文件和其他必要文件。

        标准化:尽管最初由Red Hat Linux开发,但RPM的设计理念是开放的,已经被多个Linux发行版所采纳,成为公认的标准。

        软件包分类:RPM包分为二进制包(Binary)、源代码包(Source)和Delta包三种类型。

        安装方式:可以通过离线和在线两种方式安装RPM包,具体取决于是否有网络连接以及如何获取所需的软件包。

        总结:RPM包是一种重要的软件分发和管理工具,尤其在Linux生态系统中扮演者重要角色。

1.2 为什么要使用RPM?

        使用rpm,有如下优点:

        安装、重新安装、删除、升级和验证软件包

        用户可以使用标准包管理工具(例如yum或PackageKit)来安装、重新安装、删除、升级和验证RPM软件包。

        使用已安装包的数据库查询和验证包

        因为RPM维护着一个已安装的软件包及其文件的数据库,所以用户可以轻松的查询和验证其系统上的软件包。

        使用元数据来描述包、安装说明等

        每个RPM都包含描述包组件的元数据,版本、大小、项目URL、安装说明等。

        将软件源码打包到源码包和二进制包中

        RPM允许你获取软件源码并将它们打包到源码包和二进制包。在源码包中,你拥有源代码以及使用的任何补丁,和完整的构建说明。随着软件的新版本发布,这种设计简化了软件包的维护。

        将软件包添加到yum仓库

        你可以将软件包添加到yum仓库中,使客户端能够轻松找到并部署你的软件。

        对包进行数字签名

        使用GPG签名秘钥,你可以对包进行数字签名,以便用户能够验证包的真实性。

1.3 RPM包构建原理

        RPM包是一个压缩文件,其中包含了软件程序的二进制文件、配置文件、文档等资源文件以及安装脚本等元数据信息。在RPM中,每个文件都有一个唯一的标识符,称为RPM标识符。RPM标识符由三个部分组成:软件包名、版本号和发行号。例如:

wget-1.21.2-3.oe2203sp3.x86_64.rpm

        其中:wget是软件包名,1.21.2是版本号,3.oe2203sp3是发行版号,x86_64表示该软件包适用于x86_64的硬件架构。

        rpm包构建的原理并不复杂,可以理解为按照标准的格式整理一下信息,包括软件基础信息、安装、卸载前后执行的脚本,对源码包解压、打补丁、编译,安装路径和文件等,这些都是写在.spec文件中的。

1.4 RPM包构建步骤

        RPM包构建步骤如下:

        1)创建RPM构建的工作目录(以下都简称工作目录)

        2)安装构建包需要用到的相关工具

        3)下载或拉取软件源码到工作目录的对应路径下

        4)编写或获取spec文件,并放置到工作目录的对应路径下

        5)使用rpmbuild命令构建rpm包

        6)对构建好的rpm进行安装、测试

1.5 RPM构建4要素

        进行rpm构建,必须要有以下4个要素:

        1)工作目录(有特定的构建工作目录)

        2)rpmbuild等相关工具

        3)软件源码

        4)SPEC文件

注意:

  1. 如果能获取到软件的源码包(XXX.src.rpm这种包),则解压该包后即可获取到软件的源码和spec文件。
  2. 需要构建的RPM需要在openEuler哪个版本上面安装,则需要在哪个版本上面构建RPM包。

1.6 创建工作目录

1.6.1 创建工作目录的方法

        工作目录可以手工创建,也可以使用命令进行创建,创建方法如下:

(1)手动创建工作目录

# 手动创建以下目录

$ mkdir -p /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

# 查看创建得目录

$ tree /root/rpmbuild/

/root/rpmbuild/

├── BUILD

├── BUILDROOT

├── RPMS

├── SOURCES

├── SPECS

└── SRPMS

(2)使用命令生成工作目录

# 安装 rpmdevtools 工具包

$ yum install -y rpmdevtools

# 在 /root 目录下执行以下命令,生成工作目录

$ rpmdev-setuptree

# 运行此命令后在当前用户$HOME目录下会自动创建一个rpmbuild的文件夹。

# 查看命令生成的工作目录

$ tree /root/rpmbuild/

/root/rpmbuild/

├── BUILD

├── RPMS

├── SOURCES

├── SPECS

└── SRPMS

1.6.2 工作目录简介

目录

宏代码

名称

用途

~/rpmbuild/BUILD

%_builddir

构建目录

源码包解压至此,在其子目录完成编译

~/rpmbuild/RPMS

%_rpmdir

标准RPM包目录

生成/保存二进制 RPM 包

~/rpmbuild/SOURCES

%_sourcedir

源代码目录

用于存放所有源代码和补丁文件

~/rpmbuild/SPECS

%_specdir

Spec 文件目录

保存 RPM 包配置(.spec)文件

~/rpmbuild/SRPMS

%_srcrpmdir

源码RPM包目录

保存源码 RPM 包(SRPM)

~/rpmbuild/BUILDROOT

%_buildrootdir

最终安装目录

保存 %install 阶段安装的文件

1.7 构建RPM需要用到的工具

工具

需要安装的包

用途

rpmbuild(必须安装)

rpm-build

RPM构建工具

git(选择性安装)

git

源代码克隆工具

rpmdev-setuptree(选择性安装)

rpmdevtools

用于创建工作目录

rpmdev-newspec(选择性安装)

rpmdevtools

用于生成SPEC模板文件

rpmlint(选择性安装)

rpmlint

用于检查spec文件语法

yum-builddep(选择性安装)

dnf-plugins-core

安装生成rpm包所需依赖包的工具

1.8 软件源码

      软件源码可以从以下途径进行获取:

  1. 从软件官网获取
  2. 从openEuler社区gitee仓库获取

比如src-oepkgs - ISRC - Gitee.com 或 src-openEuler - openEuler - Gitee.com 

  1. 从源码包(XXX.src.rpm)获取

常用的获取源码包网址有:

RPM Search/

Rpmfind mirror/

        openEuler社区repo仓库中的source仓库,比如https://repo.openeuler.org/openEuler-20.03-LTS/source/Packages/

1.9 SPEC 文件

1.9.1 SPEC文件介绍

        spec 文件用于制作 rpm 包,包含了软件包的诸多信息,如软件包的名字、版本、类别、说明摘要、创建时要执行什么指令、安装时要执行什么操作、以及软件包所要包含的文件列表等等。

        SPEC文件获取的途径有以下几种:

        1)自己按照规范编写SPEC文件

        2)生成SPEC模板文件

        3)从openEuler社区gitee仓库获取

        4)从源码包(XXX.src.rpm)获取

1.9.2 SPEC文件范例

        例如 pam 命令的 sepc 文件:

        原始spec文件参见:pam.spec · src-oepkgs/pam - Gitee.com

 %define _pamlibdir %{_libdir}

%define _moduledir %{_libdir}/security

%define _secconfdir %{_sysconfdir}/security

%define _pamconfdir %{_sysconfdir}/pam.d

Name: pam

Version: 1.5.2

Release: 3

Summary: Pluggable Authentication Modules for Linux

License: BSD and GPLv2+

URL: http://www.linux-pam.org/

Source0: http://github.com/linux-pam/linux-pam/releases/download/v%{version}/Linux-PAM-%{version}.tar.xz

Source1: http://github.com/linux-pam/linux-pam/releases/download/v%{version}/Linux-PAM-%{version}.tar.xz.asc

Source5: other.pamd

Source6: system-auth.pamd

Source7: password-auth.pamd

Source10: config-util.pamd

Source15: pamtmp.conf

Source16: postlogin.pamd

Source18: http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt

Provides: %{name}-sm3 = %{version}-%{release}

Patch1: bugfix-pam-1.1.8-faillock-systemtime.patch

Patch9000:openEuler-change-ndbm-to-gdbm.patch

Patch9001:0001-bugfix-cannot-open-database-file.patch

Patch9002:add-sm3-crypt-support.patch

Patch9003:1003-Change-chinese-translation.patch

BuildRequires: autoconf automake libtool bison flex sed cracklib-devel gdbm-devel

BuildRequires: perl-interpreter pkgconfig gettext-devel libtirpc-devel libnsl2-devel

BuildRequires: audit-libs-devel libselinux-devel

Requires: cracklib libpwquality coreutils glibc audit-libs libselinux libxcrypt-sm3

%desc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高小了兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值