由一次构建 OpenEuler 22.03 dnf源所了解到的

零、说在前面

今天在安装 Milvus 的时候,因为部分插件下载过慢,需要重建国内 yum/dnf 源,按照常规的方式重建后报出了一些奇怪的报错。通过这些报错让我了解到了 OpenEuler 22.03 的不同版本在构建 yum/dnf 源的时候是存在区别的。因此将我的处理过程记录下来,用以避坑。

一、第一次重建yum/dnf源

bash 复制代码
## 确认版本和架构 。我在执行下面命令时明明看到版本是 LTS-SP4 ,但没有引起重视,导致了后续的踩坑
[root@euler ~]# cat /etc/openEuler-release

## 备份当前 yum/dnf 源配置
[root@euler ~]# sudo mkdir -p /etc/yum.repos.d/bak
[root@euler ~]# sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/

## 使用国内华为镜像重建 openEuler 22.03 源
[root@euler ~]# sudo tee /etc/yum.repos.d/openEuler.repo << 'EOF'
[openEuler-everything]
name=openEuler-everything
baseurl=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS/everything/x86_64/
enabled=1
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS/everything/x86_64/RPM-GPG-KEY-openEuler

[openEuler-EPOL]
name=openEuler-EPOL
baseurl=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS/EPOL/main/x86_64/
enabled=1
gpgcheck=0

[openEuler-update]
name=openEuler-update
baseurl=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS/update/x86_64/
enabled=1
gpgcheck=0
EOF

## 清理缓存并重建索引
[root@euler ~]# sudo dnf clean all
[root@euler ~]# sudo dnf makecache
## 如果习惯用 yum,也可以:
[root@euler ~]# sudo yum clean all
[root@euler ~]# sudo yum makecache

## 更新dnf 源
[root@euler ~]# sudo dnf update -y

二、问题出现及原因

当我执行了 sudo dnf update -y 命令后,问题出现,报错信息如下

bash 复制代码
Last metadata expiration check: 0:00:40 ago on 2026年05月22日 星期五 16时27分31秒.
Error: 
 Problem 1: 无法同时安装 NetworkManager-1:1.32.12-12.oe2203.x86_64 和 NetworkManager-1:1.32.12-20.oe2203sp4.x86_64
  - 无法为软件包安装最佳更新候选 NetworkManager-team-1:1.32.12-20.oe2203sp4.x86_64
  - 安装的软件包的问题 NetworkManager-1:1.32.12-20.oe2203sp4.x86_64
 Problem 2: 无法同时安装 git-2.33.0-10.oe2203.x86_64 和 git-2.33.0-20.oe2203sp4.x86_64
  - 无法为软件包安装最佳更新候选 git-core-2.33.0-20.oe2203sp4.x86_64
  - 安装的软件包的问题 git-2.33.0-20.oe2203sp4.x86_64
 Problem 3: 无法同时安装 nfs-utils-1:2.5.4-4.oe2203.x86_64 和 nfs-utils-2:2.5.4-15.oe2203sp4.x86_64
  - 无法为软件包安装最佳更新候选 libnfsidmap-2:2.5.4-15.oe2203sp4.x86_64
  - 安装的软件包的问题 nfs-utils-2:2.5.4-15.oe2203sp4.x86_64
 Problem 4: 软件包 samba-client-4.15.3-20.oe2203.x86_64 取代了 samba-client-libs(由 samba-client-libs-4.17.5-12.oe2203sp4.x86_64 提供)
  - 软件包 libsmbclient-4.17.5-12.oe2203sp4.x86_64 需要 libgenrand-samba4.so(SAMBA_4.17.5_SAMBA4)(64bit),但没有提供者可以被安装
  - 软件包 libsmbclient-4.17.5-12.oe2203sp4.x86_64 需要 libreplace-samba4.so(SAMBA_4.17.5_SAMBA4)(64bit),但没有提供者可以被安装
  - 软件包 libsmbclient-4.17.5-12.oe2203sp4.x86_64 需要 libsamba-debug-samba4.so(SAMBA_4.17.5_SAMBA4)(64bit),但没有提供者可以被安装
  - 软件包 libsmbclient-4.17.5-12.oe2203sp4.x86_64 需要 libsamba-security-samba4.so(SAMBA_4.17.5_SAMBA4)(64bit),但没有提供者可以被安装
  - 软件包 libsmbclient-4.17.5-12.oe2203sp4.x86_64 需要 libsamba3-util-samba4.so(SAMBA_4.17.5_SAMBA4)(64bit),但没有提供者可以被安装
  - 软件包 libsmbclient-4.17.5-12.oe2203sp4.x86_64 需要 libsecrets3-samba4.so(SAMBA_4.17.5_SAMBA4)(64bit),但没有提供者可以被安装
  - 软件包 libsmbclient-4.17.5-12.oe2203sp4.x86_64 需要 libcli-smb-common-samba4.so(SAMBA_4.17.5_SAMBA4)(64bit),但没有提供者可以被安装
  - 软件包 libsmbclient-4.17.5-12.oe2203sp4.x86_64 需要 libdcerpc-samba-samba4.so(SAMBA_4.17.5_SAMBA4)(64bit),但没有提供者可以被安装
  - 软件包 libsmbclient-4.17.5-12.oe2203sp4.x86_64 需要 libgse-samba4.so(SAMBA_4.17.5_SAMBA4)(64bit),但没有提供者可以被安装
  - 软件包 libsmbclient-4.17.5-12.oe2203sp4.x86_64 需要 liblibcli-lsa3-samba4.so(SAMBA_4.17.5_SAMBA4)(64bit),但没有提供者可以被安装
  - 软件包 libsmbclient-4.17.5-12.oe2203sp4.x86_64 需要 liblibsmb-samba4.so(SAMBA_4.17.5_SAMBA4)(64bit),但没有提供者可以被安装
  - 软件包 libsmbclient-4.17.5-12.oe2203sp4.x86_64 需要 libmsrpc3-samba4.so(SAMBA_4.17.5_SAMBA4)(64bit),但没有提供者可以被安装
  - 软件包 libsmbclient-4.17.5-12.oe2203sp4.x86_64 需要 libndr.so.3()(64bit),但没有提供者可以被安装
  - 软件包 libsmbclient-4.17.5-12.oe2203sp4.x86_64 需要 libndr.so.3(NDR_0.0.1)(64bit),但没有提供者可以被安装
  - 无法为软件包安装最佳更新候选 samba-client-libs-4.17.5-12.oe2203sp4.x86_64
  - 安装的软件包的问题 libsmbclient-4.17.5-12.oe2203sp4.x86_64
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

报错截图如下

经过了解得知,上面报错的原因是由于我从 OpenEuler 22.03 LTS版本仓库获取内容并构建yum源,但我的操作系统上应该使用 22.03 LTS SP4 的仓库。这就导致 dnf 试图把一些核心包(NetworkManager、git、nfs-utils、samba 等)从 oe2203 升级到 oe2203sp4,结果依赖不完整,导致问题发生。

三、第二次重建yum/dnf 源

知道了问题,就好解决了。操作步骤如下

bash 复制代码
## 移除当前 yum/dnf 源配置
[root@euler ~]# sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/

## 重写 22.03 LTS SP4 的国内华为源
[root@euler ~]# sudo tee /etc/yum.repos.d/openEuler-sp4.repo << 'EOF'
[openEuler-SP4-os]
name=openEuler-22.03-LTS-SP4 OS
baseurl=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP4/OS/x86_64/
enabled=1
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP4/OS/x86_64/RPM-GPG-KEY-openEuler

[openEuler-SP4-everything]
name=openEuler-22.03-LTS-SP4 everything
baseurl=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP4/everything/x86_64/
enabled=1
gpgcheck=0

[openEuler-SP4-EPOL]
name=openEuler-22.03-LTS-SP4 EPOL
baseurl=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP4/EPOL/main/x86_64/
enabled=1
gpgcheck=0

[openEuler-SP4-update]
name=openEuler-22.03-LTS-SP4 update
baseurl=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP4/update/x86_64/
enabled=1
gpgcheck=0
EOF

## 清理缓存并重建索引
[root@euler ~]# sudo dnf clean all
[root@euler ~]# sudo dnf makecache
## 如果习惯用 yum,也可以:
[root@euler ~]# sudo yum clean all
[root@euler ~]# sudo yum makecache

## 更新dnf 源
## 其中 --nobest:不强制选「最高版本」组合,避免少数包依赖不完整时卡死;
## --allowerasing:允许 dnf 一些旧包被新包替代或卸载,以解决类似 "无法同时安装 xxx-oe2203 和 xxx-oe2203sp4" 的冲突
## --skip-broken 如果下面命令在执行时,仍有个别包报错,可以加上这个参数
[root@euler ~]# sudo dnf update --nobest --allowerasing 

## 验证源版本统一
## 正常情况下,这些包的版本号应该都是形如 xxx.oe2203sp4,而不是 xxx.oe2203,表示系统和仓库都处于 SP4 这一档
[root@euler ~]# dnf list installed | egrep "NetworkManager|git|nfs-utils|samba"

至此,问题解决。

四、感悟

最大的收获,是知道了 LTS-SP4 版本是 22.03 LTS 的最终累积更新版,所有新部署和生产环境都应该直接用 SP4,不要用基础 LTS 版。虽然LTS和LTS-SP4 都属于OpenEuler 22.03,但是前者的出版时间是2022 年,后者是2024 年,其中内容差异的距离,足足有从天津到乌鲁木齐的距离那么大......

相关推荐
凡人叶枫21 分钟前
Effective C++ 条款28:避免使用 handles 指向对象内部
linux·服务器·开发语言·c++·嵌入式开发
AI帮小忙23 分钟前
Debian系linux操作系统里安装OpenClaw
linux·运维·debian
极创信息25 分钟前
Linux挖矿病毒深度清理实战教程,从进程隐藏、Rootkit驻留到彻底根除
java·大数据·linux·运维·安全·tomcat·健康医疗
志栋智能2 小时前
超自动化巡检剧本(Playbook):运维经验的数字化封装
运维·自动化
风味蘑菇干2 小时前
WTomcat服务器
java·服务器
ElevenS_it1882 小时前
Nginx日志监控告警实战:access_log解析+5xx突增+慢请求+异常IP自动告警完整方案(Filebeat+Zabbix)
运维·网络·tcp/ip·nginx·zabbix
weixin_307779132 小时前
Python写入Shell文件使用Linux系统的换行符
linux·开发语言·python·自动化
liulilittle2 小时前
Linux Swap 文件配置与持久化(虚拟内存)
linux·运维·服务器
未若君雅裁2 小时前
日志采集与ELK:从本地日志到集中检索分析
运维·elk·jenkins
青梅橘子皮3 小时前
Linux---进程控制(2)(进程程序替换)
linux·c++·算法