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内容
的问题。
No Comments