由一次构建 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 年,其中内容差异的距离,足足有从天津到乌鲁木齐的距离那么大......

相关推荐
米高梅狮子7 小时前
Ceph 分布式存储 部署
linux·运维·数据库·分布式·ceph·docker·华为云
WUYOUGYLU7 小时前
云服务器怎么选、怎么用,才不花冤枉钱
运维·服务器
曹牧7 小时前
Nginx 504
运维·nginx
小明同学017 小时前
C++后端项目:统一大模型接入 SDK(四)
服务器·开发语言·c++·计算机网络·chatgpt
曦夜日长7 小时前
Linux系统篇,开发工具(五):git的基本使用和浅层认识
linux·运维·服务器
Harm灬小海7 小时前
【云计算学习之路】学习Centos7系统-ROOT密码重置方法
linux·运维·服务器·学习·云计算
IT瑞先生7 小时前
企业云服务器选型分析
运维·服务器
weixin_453639597 小时前
Docker Redis 本地能 Ping 通但 6379 端口连不上?排查记录与解决
linux·redis
志栋智能7 小时前
超自动化巡检:保障数字化转型的“底座工程”
运维·自动化