如何修补位于断开连接的环境中的 Linux 计算机
如果 Linux 客户端计算机位于断开连接的环境中,则代理将无法使用 YUM 从 Internet 下载 RPM 程序包。 您将需要执行以下操作:
- 设置并填充一个或多个包含整个可用 RPM 库的“本地部署”存储库
- 配置客户端计算机,查看正确的本地存储库(而不是 Internet)以查找丢失的 RPM
以下信息可作为设置和使用本地存储库的一般指南。 如有特定的问题或疑问,请与您的 Linux 操作系统供应商联系。
如何设置本地存储库
要求
您可以将所有支持的 Linux 服务器计算机用作本地存储库。 唯一的要求是其必须拥有足够的可用磁盘空间以存放整个清单的可用 RPM 程序包。 有很多不同的公共存储库都包含 RPM 程序包。 例如,有一个公共存储库用于 RHEL 9 RPM,另有一个公共存储库用于 RHEL 8 RPM 等。 一般情况下,您的本地存储库计算机应至少拥有 100GB 的磁盘空间,以存放您将下载的公共存储库。
您可能需要两台或更多 Linux 服务器计算机来完成此过程。
- 情况 1:您可以选择使用一台计算机,将其作为本地存储库,存放所有不同版本的 RPM。 在此情况下,作为存储库使用的计算机可以下载存储库计算机上使用的相同分发版本的 RPM。 但是,您需要一台单独的计算机来下载组织中使用的每个分发的每个不同版本的 RPM。
- 情况 2:您可以选择维护三个不同的本地存储库,一个用于所有 RHEL 9 RPM,另一个用于所有 RHEL 8 RPM,第三个用于所有 CentOS 7 RPM。 在此情况中,需要三台专用计算机来充当存储库,但这种方案可以免去额外的传输步骤以及维护联合存储库带来的麻烦。
例如,如果您的组织拥有 RHEL 9 x64、RHEL 8 x64 和 CentOS 7 x64 客户端计算机,便可将 RHEL 9 x64 服务器计算机用作本地存储库,并将其用来为 RHEL 9 服务器、工作站、台式机等设备下载所有相关 RPM。 您可以单独使用 RHEL 8 x64 和 CentOS 7 x64 计算机为 RHEL 8 和 CentOS 服务器、工作站、台式机等设备下载所有相关 RPM。 然后,将这些 RPM 传输到本地存储库计算机。
配置进程
将整个库的可用 RPM 程序包下载到本地存储库可能需要几个小时,因此建议在两个不同阶段执行配置过程。 在第 1 阶段,应下载所有可用的 RPM,并且应在工作日结束时执行,以便下载过程可以连夜运行。 然后,可在第二天执行第 2 阶段。
您必须拥有 root 权限才能执行以下命令。
第 1 阶段
- 创建要作为存储库使用的目录。
例如,用以下命令创建用于存放 Red Hat 9 RPM 的目录。 - 显示可用于填充本地存储库的公共存储库列表。
可使用的公共存储库取决于对 RHEL 的订阅情况。 - 使用 YUM,安装包含 reposync 的程序包。
- 从所选公共存储库下载所有可用的程序包。
例如,以下命令可从 rhel-9-for-x86_64-baseos-rpms 公共存储库下载 RPM。 - 对每个所需的公共存储库变体重复步骤 3。
mkdir –p /repos/redhat/9
yum repolist
yum install yum-utils
reposync –-gpgcheck –l –-repoid=rhel-9-for-x86_64-baseos-rpms –-download_path=/repos/redhat/9
下载过程需要很长时间,因此请相应做出计划。 -gpgcheck 选项可删除下载期间未通过签名检查的程序包。
例如,如果您的组织在 Intel 和 ARM 上都有 RHEL 9,则需要从两个关联的公共存储库下载 RPM。 您可能需要几天时间才能执行所有必需的下载。
请勿尝试为不同版本的 Red Hat 或 CentOS 下载 RPM。 例如,RHEL 9 计算机不能用于为 RHEL 8 x64 计算机或 RHEL 7 x64 计算机下载 RPM。
第 2 阶段
此处描述的过程可创建一个通过 HTTP 访问的存储库。 也可以使用其他一些方法来创建存储库。 请使用最熟悉的方法。
- 使用 YUM,安装提供创建存储库功能的程序。
- 创建存储库。
- 安装 Apache Web 服务。
该服务可提供使用 HTTP 协议访问本地存储库的功能。 - 在本地防火墙中打开端口 80。
这是因为我们正在设置存储库以使用 HTTP。 HTTPS 也是一个选项,但这里使用 HTTP 来简化示例。 - 编辑 httpd.conf 文件并添加所有缺失的以下条目。
- 将新存储库链接到默认网站位置。
- 验证 Apache Web 服务的语法。
- 启动 Apache Web 服务。
- 获取 updateinfo.xml.gz zip 文件。
- 将 *updateinfo.xml.gz 文件从默认位置复制到 /repodata 文件夹。
- 解压缩 *updateinfo.xml.gz 文件。
- 重命名 *updateinfo.xml 文件,消除不必要的首字符。
- 修改存储库,确认其包含 updateinfo.xml 文件。
- (仅适用于启用 SELinux 的计算机)为 www/html/redhat 提供存取 /repos/redhat 的权限。
yum install createrepo
createrepo /repos/redhat/9
如果收到无法打开* .rpm 文件的错误消息,请确认磁盘空间是否不足。 如果空间没有问题,请重复下载步骤(第 1 阶段中的步骤 3)。 第一次执行下载时可能会遗漏某些文件。
yum install httpd
vi /etc/httpd/conf/httpd.conf
ServerAdmin root@localhost
DocumentRoot /var/www/html
ServerName <machinename>
ln -s /repos/redhat /var/www/html/redhat
httpd -t
systemctl start httpd
每次重新启动服务器时,都可能需要重复执行此命令。 您可以使用以下命令在服务器重新启动时自动启动上述服务:systemctl enable httpd
。
步骤 9 到 13 仅适用于 Red Hat 计算机。
yum list-sec
cp /var/cache/yum/x86_64/9rhServer/rhel-9-for-x86_64-baseos-rpms/*updateinfo.xml.gz /repos/redhat/9/repodata/
gzip –d /repos/redhat/9/repodata/*updateinfo.xml.gz
mv /repos/redhat/9/repodata/*updateinfo.xml /repos/redhat/9/repodata/updateinfo.xml
modifyrepo /repos/redhat/9/repodata/updateinfo.xml /repos/redhat/9/repodata/
cd /var/www/html
chcon -R -t httpd_sys_content_t redhat/
对其他 Linux 版本和分发重复配置过程
您需要为组织中支持的每个 Linux 分发的每个不同版本重复部分或全部配置过程。 例如,您必须使用 RHEL 9 计算机下载 RHEL 9 RPM,使用 CentOS 7 x64 计算机下载 CentOS 7 x64 RPM,使用 RHEL 8 x64 计算机下载 RHEL 8 x64 RPM 等。 根据每个独特 Linux 版本的需要更改命令。
情况 1:如果对所有不同的 Linux 版本使用同一个存储库
假设您使用一台 Red Hat 9 计算机作为存储库,以下是您检索 Red Hat 8 RPM 的内容需要重复的步骤:
- 在 Red Hat 9 存储库计算机上,重复第 1 阶段步骤 1,但指定 /repos/redhat/8 除外。
- 在 Red Hat 8 计算机上,执行第 1 阶段步骤 3 和步骤 4。
在步骤 3 中,Red Hat 8 计算机上不存在 repos/redhat/9 目录,因此要么删除 -download_path 选项并将其转到默认位置,要么指定其他位置。 - 下载完 RPM 后,应将其传输到本地存储库上的 repos/redhat/8 目录。
完成上述操作后,您将为每台计算机创建一个存储库,其中存放所有支持的 Red Hat 版本的 RPM 软件包。
情况 2:如果要为每个不同的 Linux 版本维护单独的存储库
对于组织支持的每个不同版本的 Linux,需要重复整个配置过程。
将 Linux 客户端计算机指向本地存储库
您必须在每个 Linux 客户端上修改 YUM,以便其在本地存储库中而不是在 Internet 上搜索 RPM。
如果选择为每个版本的 Linux 维护不同的本地存储库,请确保将每个客户端指向正确的本地存储库。
- 登录到客户端计算机。
- 切换到列出存储库所在位置的目录。
- 创建名为 local.repo 的文件,然后将其配置为指向新的本地存储库。
- 指定如果本地存储库中缺少 RPM,则客户端不应尝试在 Internet 上进行查找(断开客户端计算机的连接)。
cd /etc/yum.repos.d
nano local.repo
[mylocalrepo]
name=Local Rhel9 Server Repo
baseurl=http://es-nxt-rhel9-repo.example.com/redhat/9
gpgcheck=0
ls
vi any file other than local.repo (example redhat.repo)
Look for your repoid (example rhel-9-for-x86_64-baseos-rpms)
Set enabled = 0
定期维护您的存储库
您需要定期将本地存储库与公共存储库进行重新同步,以保持本地存储库的最新状态。 执行以下命令时,只会将新 RPM 程序包下载到本地存储库。
reposync –gpgcheck –l –repoid=rhel-9-for-x86_64-baseos-rpms –download_path=/repos/redhat/9
createrepo --update /repos/redhat/9
气隙网络
如果您的组织拥有“气隙”网络,则意味着禁止客户端计算机连接到任何拥有 Internet 访问权限的计算机,您必须配置和维护第二个存储库。 请参阅下图说明。
在这种情况下,在按照上述方式设置和配置连接的存储库后,您应在断开连接的计算机上设置第二个存储库,然后使用可移动介质手动将文件从连接的存储库传输到断开连接的存储库。 然后,您应对 Linux 客户端计算机进行配置,使其指向已断开连接的存储库,而不是指向已连接的存储库。