在无外网或需要固定版本软件包的环境中,可把 RHEL 安装镜像挂载到本机, 将镜像内的软件包与元数据拷到本地目录,再编写 .repo 文件,即可用 YUM/DNF 从本地仓库安装软件。

挂载系统安装镜像到系统本地

方法一:上传系统镜像文件至系统本地

上传镜像至系统本地的方法很多,这里不展开细节。常见做法例如:

  1. 个人 PC 本地通过 FTP 服务端工具搭建 FTP 服务(非客户端工具,如 Windows 的 IIS、FileZilla Server、Wing FTP Server 等)
  2. RHEL 本机通过 vsftpd 创建 FTP 服务
  3. 使用 OpenSSH 附带的 SFTP 服务

上传镜像文件至系统本地后,用 mount 命令挂载。 例如将 /tmp 目录下的 rhel-server.iso 挂载到 /mnt

mount /tmp/rhel-server.iso /mnt

方法二:虚拟光驱挂载镜像文件

如果使用的是虚拟机,可在虚拟机管理系统上通过虚拟光驱加载 ISO。 虚拟光驱设备默认路径多为 /dev/sr0;若已加载其他设备,路径可能不同。 可用 lsblk 查看块设备信息:如下图 sr0 为约 4.2G 的只读存储(rom), 与所加载镜像大小基本一致,即可确认镜像已被虚拟光驱读取。

lsblk 查看 sr0 虚拟光驱设备
图 1 · 使用 lsblk 确认虚拟光驱设备

之后即可挂载,例如将块设备 /dev/sr0 挂到 /mnt

mount /dev/sr0 /mnt

拷贝 RPM 包和元数据文件

RHEL 7

RHEL 7 镜像中,本地源主要需要 Packagesrepodata 这两个目录: 分别存放 RPM 软件包和元数据。元数据为本地众多 RPM 提供索引,并记录软件包依赖关系。

RHEL 7 镜像目录结构
图 2 · RHEL 7 镜像目录(Packages / repodata)
mkdir -p /pkg/rhel7
cp -r /mnt/Packages /pkg/rhel7
cp -r /mnt/repodata /pkg/rhel7

RHEL 8

RHEL 8 镜像中,本地源主要使用 AppStreamBaseOS 两个目录。 BaseOS 提供安装所需的核心操作系统功能集合;AppStream 提供额外的用户空间应用、运行时语言和数据库等,以支持多种工作负载。

RHEL 8 镜像目录结构
图 3 · RHEL 8 镜像目录(AppStream / BaseOS)
mkdir -p /pkg/rhel8
cp -r /mnt/AppStream /pkg/rhel8
cp -r /mnt/BaseOS /pkg/rhel8

目录名大小以镜像内实际为准。

配置 repo 文件

repo 文件是软件仓库的配置文件,通常记录一个或多个仓库的名称、描述、下载地址等。 自定义仓库需自行编写 repo 文件,统一放在 /etc/yum.repos.d/ 下,并以 .repo 结尾。

vi /etc/yum.repos.d/LOCALYUM.repo

RHEL 7 示例

仓库名 LOCALYUM,描述 LOCALYUM,地址指向本地 /pkg/rhel7, 启用该仓库,且不使用 GPG 对包做完整性校验:

[LOCALYUM]
name=LOCALYUM
baseurl=file:///pkg/rhel7
enabled=1
gpgcheck=0

RHEL 8 示例

需要两个存储库配合使用:

[LOCALYUM_BaseOS]
name=LOCALYUM_BaseOS
baseurl=file:///pkg/rhel8/BaseOS
enabled=1
gpgcheck=0

[LOCALYUM_AppStream]
name=LOCALYUM_AppStream
baseurl=file:///pkg/rhel8/AppStream
enabled=1
gpgcheck=0

测试 YUM

清理 yum 缓存目录中的各类内容:

yum clean all

下载并确保所有已启用仓库的元数据可用:

yum makecache

之后即可使用本地软件仓库安装软件。