RPM包的概念以及制作过程

RPM包的概念以及制作过程

    • 1. 软件包管理工具的背景介绍
    • 2. RPM(Red-Hat Package Manager)
      • 2.1 rpm包的命名规范
      • 2.2 rpm的基础命令
      • 2.3 安装与卸载
    • 3. RPM包的制作
      • 3.1 源码包的制作
      • 3.2 .spec配置文件的构建
      • 3.3 rpmbuild命令编译验证
    • 4. 软件仓库制作
      • 4.1 安装createrepo_c工具
      • 4.2 构建仓库
      • 4.3 配置仓库
      • 4.4 配置yum源
      • 4.5 软件安装与验证
    • 5. 使用场景

1. 软件包管理工具的背景介绍

早期,人们需要通过下载软件源码,然后进行编译、安装等操作,这一系列过程十分繁琐。

为了方便用户能够在Linux系统中更加方便地安装软件,因此便又了软件包管理工具。

  • rpm:CentOS/Red Hat/Fedora均采用rpm工具,其对应的软件安装包后缀为.rpm
  • dpkg:Ubuntu/debian均采用dpkg工具,其对应的软件安装包后缀为.deb

当然,还有更高级的软件管理工具yum和apt,相比于前者,yum和apt能够自动解决安装软件包的直接依赖,能够极大程度地降低用户安装软件的难度和安装细节。

2. RPM(Red-Hat Package Manager)

2.1 rpm包的命名规范

标准的rpm包需要按照一定的规范来组织:

{name}-{version}-{release}.aarch64.rpm		# arm架构的二进制包
{name}-{version}-{release}.noarch.rpm		# 没有架构要求的二进制包
{name}-{version}-{release}.src.rpm			# 未编码的源码包

2.2 rpm的基础命令

rpm -qpi xxx 	# 查看指定rpm包的相关信息
rpm -Uvh xxx	# 如果该软件没有安装过则直接安装,如果已经安装,则升级到最新版本

RPM包的概念以及制作过程_第1张图片

  • 如果 xxx-1.8.rpm 这个软件包已经存在,并且版本号比当前已安装的 1.5 版本要新,那么 rpm 命令将会执行升级操作。这意味着它会卸载旧版本的 xxx,然后安装新的 1.8 版本。
    如果 xxx-1.8.rpm 这个软件包之前没有安装过,那么 rpm 命令会直接安装 1.8 版本的 xxx。

2.3 安装与卸载

# 1. rpm包的安装
rpm -ivh xxxxx.rpm
  • i:表示安装模式,告诉 rpm 命令要执行安装操作。
  • v:表示启用详细模式(verbose),在安装过程中显示更多的信息。
  • h:表示显示进度条(hash),在安装过程中显示进度条,以便你可以看到安装进度。
# 2. 卸载
rpm -e xxx		# -e 表示卸载指定软件

ps:命令会根据软件包的名称查找并卸载相应的软件包,不需要包含 .rpm 后缀
如果提供了完整的软件包文件名(包括 .rpm 后缀),rpm 命令可能会提示找不到该软件包,因为它会尝试查找与提供的完整文件名匹配的软件包名称。
所以,简单地提供软件包的名称即可。

ps:由于某些软件在安装的时候存在一定的依赖关系,比如安装A,需要提前安装B,安装B需要提前安装C。因此想要直接卸载C的话是不允许的,因为C已经被B所依赖。必须逐层卸载A,B,才会被允许卸载C。

RPM包的概念以及制作过程_第2张图片

3. RPM包的制作

3.1 源码包的制作

# 1. 创建源码文件夹mypkg-0.1
mkdir mypkg-0.1
# 2. 进入文件夹并创建源码文件main.c和编译文件Makefile
vim main.c
// 3. 随便写一段C程序
#include 
	int main(){
	printf(“Hello China! GOGOGO!);
	return 0;
}
# 4. 定义源码的编译方式
vim Makefile

# 5. 下面内容主要是定义对源程序代码的编译方式
all:
		gcc -g -o mypkg main.c
install:
		install -m 0755 -D mypkg $(DESTDIR)/usr/bin/mypkg
clean:
		rm -rf *.o
mkdir rpmbuild		# 6. 在~目录下创建rpmbuild文件,并进入该目录;
rpmdev-setuptree	# 7. 在该目录生产标准的rpm打包目录结构

将生成以下6个文件夹(如果有的目录没有,那么自己手动创建即可):

  • BUILD:源码解压后存放的目录;
  • BUILDROOT:一个临时仓库。在打包的过程中,会先将软件文件复制进来,然后进行编译、安装、打包操作生产rpm文件,随后分发到RPMS和SPRMS文件夹下,随后被清空准备下一个软件的打包工作;
    • 好处:能够提供一种有效、可靠且一致的方式来创建、分发和安装软件。
  • RPMS:制作完成后的rpm包存放目录;
  • SOURCES:用于存放软件包的源代码、补丁文件以及其他构建所需的文件。
    在.spec文件中,通常使用 %setup 命令将软件包的源代码解压到 BUILD 目录,而这些源代码通常存放在 SOURCES 目录下。
  • SPECS:存放RPM规范文件(.spec文件)。.spec文件其中包含了构建RPM包的详细信息,包括软件包名称、版本、依赖关系、安装目录等等。
  • SRPMS:src格式的rpm文件。
btar -czvf mypkg-1.0.tar.gz mypkg-1.0/		# 8. 打包mypkg-1.0

3.2 .spec配置文件的构建

# 9. 进入/rpmbuild/SPECS/ ,生成.spec文件模版
rpmdev-newspec mypkg.spec
# 10. 对.spec文件进行内容补充(请灵活替换):
	# - URL随便写的
	# -  黄色字体的Name、Version需要对应外面的文件夹

RPM包的概念以及制作过程_第3张图片

3.3 rpmbuild命令编译验证

# 11. 同时生产二进制和src格式的rpm文件
rpmbuild -ba mypkg.spec
# 分别进入RPMS和SRPMS查看,可以发现rpm成功创建:
sudo rpm -ivh mypkg-0.1-1.el8.aarch64.rpm  # 12. 安装mypkg
mypkg			# 13. 执行程序

4. 软件仓库制作

4.1 安装createrepo_c工具

# 1. 工具安装
yum install createrepo_c

RPM包的概念以及制作过程_第4张图片

4.2 构建仓库

sudo mkdir /opt/myrepo 				# 2. 创建仓库文件夹
mv aarch64/ /opt/myrepo/aarch64		# 3. 将rpm文件都移入仓库

RPM包的概念以及制作过程_第5张图片

4.3 配置仓库

# 4. 
sudo createrepo /etc/myrepo

在该目录下创建一个repodata文件夹,是关于已有aarch64软件包的元数据,以便 yum 能够正确地识别和管理它们。

RPM包的概念以及制作过程_第6张图片

4.4 配置yum源

sudo vim /etc/yum.repo.d/myrepo.repo    # 5. 新建myrepo.repo配置文件

RPM包的概念以及制作过程_第7张图片

# 6. 重新生成 yum 软件包仓库的元数据缓存。
# 这个命令会从配置文件中指定的所有仓库中下载软件包的元数据,
# 并将这些元数据保存在本地,以加速后续的软件包查询和安装操作。
yum makecache 

RPM包的概念以及制作过程_第8张图片

4.5 软件安装与验证

sudo yum install mypkg		# 7. 使用yum install安装mypkg

RPM包的概念以及制作过程_第9张图片

mypkg					# 8. 执行软件

5. 使用场景

RPM(Red Hat Package Manager)包是一种常见的软件包管理格式,主要用于在基于 RPM 的 Linux 发行版中(如 Red Hat Enterprise Linux、Fedora、CentOS等)进行软件安装、升级和管理。RPM 包在多种场景下都有用武之地:

  • 软件安装和管理: RPM 包是一种用于分发、安装和管理软件的标准格式。通过使用 RPM 包,用户可以轻松地安装新软件,升级现有软件,或者卸载不再需要的软件。这种包管理方式简化了软件部署和维护过程。

  • 系统配置和工具: RPM 包不仅可以用于安装应用程序,还可以用于分发系统配置文件、工具和实用程序。这有助于在不同系统上保持一致的配置和工具集。

  • 库和依赖管理: 在开发中,RPM 包常用于分发共享库(动态链接库)以及它们的开发文件。它们还能够自动管理软件包之间的依赖关系,确保所需的库和工具能够正确地安装和链接。

  • 定制化分发: RPM 包可以被用于创建定制化的 Linux 发行版或系统映像。系统管理员可以将他们自己的软件和配置打包为 RPM 包,以便在不同系统上进行一致的部署。

  • 系统更新: RPM 包也用于分发系统更新、安全补丁和错误修复。系统管理员可以使用 RPM 包管理工具来升级系统中的软件包,以保持系统的安全性和稳定性。

  • 自动化和部署: 在自动化部署和配置管理方面,RPM 包可以通过脚本和配置文件进行批量安装和配置,从而简化大规模环境中的软件管理。

总之,RPM 包在 Linux 系统中扮演着关键的角色,用于分发和管理各种类型的软件和资源。无论是用于开发、系统管理还是定制化分发,RPM 包都是一个重要的工具。

你可能感兴趣的:(centos,linux)