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 # 如果该软件没有安装过则直接安装,如果已经安装,则升级到最新版本
- 如果 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。
3. RPM包的制作
3.1 源码包的制作
# 1. 创建源码文件夹mypkg-0.1
mkdir mypkg-0.1
# 2. 进入文件夹并创建源码文件main.c和编译文件Makefile
vim main.c
// 3. 随便写一段C程序
#include <stdio.h>
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需要对应外面的文件夹
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
4.2 构建仓库
sudo mkdir /opt/myrepo # 2. 创建仓库文件夹
mv aarch64/ /opt/myrepo/aarch64 # 3. 将rpm文件都移入仓库
4.3 配置仓库
# 4.
sudo createrepo /etc/myrepo
在该目录下创建一个repodata文件夹,是关于已有aarch64软件包的元数据,以便 yum 能够正确地识别和管理它们。
4.4 配置yum源
sudo vim /etc/yum.repo.d/myrepo.repo # 5. 新建myrepo.repo配置文件
# 6. 重新生成 yum 软件包仓库的元数据缓存。
# 这个命令会从配置文件中指定的所有仓库中下载软件包的元数据,
# 并将这些元数据保存在本地,以加速后续的软件包查询和安装操作。
yum makecache
4.5 软件安装与验证
sudo yum install mypkg # 7. 使用yum install安装mypkg
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 包都是一个重要的工具。