# RedHat9.7用iso创建本地仓库

你这个报错本质上不是 `dnf download` 的问题，而是：

你的机器没有可用的软件仓库（repo）。

关键报错：

```text
No package dnf-plugins-core available

```

以及：

```text
This system is not registered with an entitlement server

```

说明当前：

- 没注册 Red Hat Subscription
- 或没有配置本地/镜像仓库
- 所以 `dnf` 根本找不到包

---

# 先确认仓库状态

执行：

```bash
dnf repolist all

```

如果看到：

```text
repo status: disabled

```

或者压根没 repo。

那就需要先配置仓库。

---

# 最简单方案（推荐）

# 使用 RHEL 9.7 ISO 作为本地仓库

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

---

# 第一步：挂载 ISO

假设 ISO 文件：

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

```

执行：

```bash
mkdir -p /mnt/rhel9

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

```

确认：

```bash
ls /mnt/rhel9

```

应该看到：

```text
AppStream
BaseOS
EFI
images
isolinux
...

```

---

# 第二步：创建本地 repo

创建：

```bash
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

```

---

# 第三步：清理缓存

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

```

---

# 第四步：重新生成缓存

```bash
dnf makecache

```

正常会看到：

```text
Metadata cache created.

```

---

# 第五步：安装

现在再执行：

```bash
dnf install -y dnf-plugins-core

```

就可以了。

---

# 如果还是报错

执行：

```bash
dnf list available | grep dnf-plugins-core

```

正常应该能看到：

```text
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 是否成功

执行：

```bash
dnf repolist

```

应该看到：

```text
repo id        repo name
AppStream      RHEL9 AppStream
BaseOS         RHEL9 BaseOS

```

这就正常了。

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

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

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

---

先直接查一下：

```bash
dnf search dnf-plugins-core

```

再查：

```bash
dnf list available | grep dnf-plugin

```

---

# 很大概率原因

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

很多人用的是：

- boot.iso
- minimal.iso

这些里面：

- 没有 AppStream 完整包
- 没有 dnf-plugins-core

---

# 验证 ISO 是否完整

执行：

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

```

如果没输出。

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

---

# 正确 ISO

你需要的是：

```text
rhel-9.7-x86_64-dvd.iso

```

不是：

```text
boot.iso
minimal.iso

```

---

# 还有一种情况（RHEL9 常见）

RHEL9 有些插件已经拆分。

你真正需要的可能只是：

```bash
dnf config-manager

```

这个命令来自：

```text
dnf-plugins-core

```

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

直接试：

```bash
dnf config-manager --help

```

如果能执行：

说明你根本不需要安装。

---

# 再进一步检查

查看命令来自哪个包：

```bash
rpm -qf $(which dnf)

```

以及：

```bash
rpm -qa | grep dnf

```

---

# 在 RHEL9 更推荐的安装方式

你其实可以直接安装：

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

```

因为 RHEL9 支持 command provides。

执行：

```bash
dnf provides */config-manager

```

会告诉你真正包名。

---

# 最可能的最终解决方案

直接执行：

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

的问题。