在 RHEL/CentOS 8 上下载 RPM 和所有依赖项

Chr*_*jer 3 yum rpm rhel centos dnf

我有一个场景,我需要在没有网络连接的服务器上安装任意 RPM 包列表(通常大约 5-10 个包)。有些包来自 EPEL,我想避免同步所有存储库,因为我需要经常这样做。

我已经通过执行以下操作为 RHEL/CentOS 7 解决了这个问题:

$ yum -y install epel-release createrepo
$ repotrack $PACKAGE_NAME
$ createrepo --database .
Run Code Online (Sandbox Code Playgroud)

然后,我只是将此文件夹移动到使用USB驱动器的服务器并创建一个库文件/etc/yum.repos.d,让我安装包yum --disablerepo="*" --enablerepo="my-custom-repo" install $PACKAGE_NAME

现在我将其移至 RHEL/CentOS 8,虽然它适用于我的一半软件包,但当我dnf install在隔离服务器上执行此操作时,另一半出现以下错误:

模块化软件包 'podman-1.6.4-2.module_el8.1.0+272+3e64ee36.x86_64' 没有可用的模块化元数据,它无法安装在系统上

我认为这是由于新的模块化系统,我的仓库没有所有必要的信息。我试图阅读两者的手册repotrackcreaterepo但他们似乎都没有提到模块。搜索互联网只是给了我 7 的解决方案,我已经有了,但我没有找到任何 8 和特别属于模块的包。

那么我如何将属于模块的 RHEL/CentOS 8 包及其所有依赖项提取到磁盘,以便我可以将它们移动到另一台服务器并安装在那里?

谢谢!

小智 6

查看modulemd-tools项目。您可以在 EPEL 中找到预编译的二进制文件

假设您有几个模块化的 rpm ./my-custom-repo/Packages

模块化 rpm 名称,如 python36-3.6.8-2。module_el8 .1.0 + 245 + c39af44f.x86_64.rpm

跑:

cd my-custom-repo
# create traditional rpm repo
createrepo_c .
# generate modules meta info
repo2module  -s stable -d . modules.yaml
# adjust modules meta info to traditional rpm repo
modifyrepo_c --mdtype=modules modules.yaml repodata/
Run Code Online (Sandbox Code Playgroud)

完成所有这些工作后,您可以在 repodata 目录中找到类似 xxxx-modules.yaml.gz 的文件名。

回购现在应该可以工作了。