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内容

              的问题。