Skip to main content

RedHat9.7用iso创建本地仓库

你这个报错本质上不是 dnf download 的问题,而是:

你的机器没有可用的软件仓库(repo)。

关键报错:

No package dnf-plugins-core available

以及:

This system is not registered with an entitlement server

说明当前:

  • 没注册 Red Hat Subscription

  • 或没有配置本地/镜像仓库

  • 所以 dnf 根本找不到包


先确认仓库状态

执行:

dnf repolist all

如果看到:

repo status: disabled

或者压根没 repo。

那就需要先配置仓库。


最简单方案(推荐)

使用 RHEL 9.7 ISO 作为本地仓库

这是企业离线环境最常见做法。


第一步:挂载 ISO

假设 ISO 文件:

/root/rhel-9.7-x86_64-dvd.iso

执行:

mkdir -p /mnt/rhel9

mount -o loop /root/rhel-9.7-x86_64-dvd.iso /mnt/rhel9

确认:

ls /mnt/rhel9

应该看到:

AppStream
BaseOS
EFI
images
isolinux
...

第二步:创建本地 repo

创建:

cat >/etc/yum.repos.d/rhel9-local.repo <<EOF
[BaseOS]
name=RHEL9 BaseOS
baseurl=file:///mnt/rhel9/BaseOS
enabled=1
gpgcheck=0

[AppStream]
name=RHEL9 AppStream
baseurl=file:///mnt/rhel9/AppStream
enabled=1
gpgcheck=0
EOF

第三步:清理缓存

dnf clean all
rm -rf /var/cache/dnf

第四步:重新生成缓存

dnf makecache

正常会看到:

Metadata cache created.

第五步:安装

现在再执行:

dnf install -y dnf-plugins-core

就可以了。


如果还是报错

执行:

dnf list available | grep dnf-plugins-core

正常应该能看到:

dnf-plugins-core.noarch

额外说明

在 RHEL 9:

  • dnf-plugins-core
    通常位于:

  • AppStream 仓库

所以:

  • BaseOS 开了

  • AppStream 没开

也会报你这个错误。


企业里更常见情况

很多公司:

  • 不注册 Red Hat

  • 使用:

    • Satellite

    • Nexus

    • Harbor

    • 本地 YUM 源

    • ISO repo

所以:
“Unable to read consumer identity”
通常可以忽略,不是致命错误。

真正的问题是:
没有可用 repo。


一条命令快速验证 ISO repo 是否成功

执行:

dnf repolist

应该看到:

repo id        repo name
AppStream      RHEL9 AppStream
BaseOS         RHEL9 BaseOS

这就正常了。

 

现在你的 repo 已经正常了。
问题变成:

dnf-plugins-core 包不存在于当前启用仓库的 metadata 里。

但在 RHEL 9 里,这个包通常应该存在。


先直接查一下:

dnf search dnf-plugins-core

再查:

dnf list available | grep dnf-plugin

很大概率原因

你当前挂载的 ISO 不是完整 DVD ISO。

很多人用的是:

  • boot.iso

  • minimal.iso

这些里面:

  • 没有 AppStream 完整包

  • 没有 dnf-plugins-core


验证 ISO 是否完整

执行:

find /mnt/rhel9/AppStream/Packages | grep dnf-plugins-core

如果没输出。

说明:
你的 ISO 里根本没有这个包。


正确 ISO

你需要的是:

rhel-9.7-x86_64-dvd.iso

不是:

boot.iso
minimal.iso

还有一种情况(RHEL9 常见)

RHEL9 有些插件已经拆分。

你真正需要的可能只是:

dnf config-manager

这个命令来自:

dnf-plugins-core

但部分环境可能已经内置。

直接试:

dnf config-manager --help

如果能执行:

说明你根本不需要安装。


再进一步检查

查看命令来自哪个包:

rpm -qf $(which dnf)

以及:

rpm -qa | grep dnf

在 RHEL9 更推荐的安装方式

你其实可以直接安装:

dnf install 'dnf-command(config-manager)'

因为 RHEL9 支持 command provides。

执行:

dnf provides */config-manager

会告诉你真正包名。


最可能的最终解决方案

直接执行:

dnf install 'dnf-command(config-manager)'

通常就成功了。

因为:

  • RHEL8/9 很多教程还是旧写法

  • 老教程写:
    dnf install dnf-plugins-core

  • 新系统更推荐:
    dnf install 'dnf-command(xxx)'


你当前系统其实已经不是“完全离线”

因为你有:

  • docker-ce-stable

  • epel

说明:

  • repo 已经工作

  • metadata 正常

所以现在不是离线问题。

而是:

  • 包名

  • ISO内容

  • repo内容

的问题。