libsolvext.so.1 undefined symbol: rpmdbFStat

yum.repos.d/openEuler-22.03-LTS.repo

[openEuler-everything]
name=openEuler-everything
baseurl=https://mirrors.ustc.edu.cn/openeuler/openEuler-22.03-LTS/everything/aarch64/
enabled=1
gpgcheck=0
gpgkey=https://mirrors.ustc.edu.cn/openeuler/openEuler-22.03-LTS/everything/aarch64/RPM-GPG-KEY-openEuler

[openEuler-EPOL]
name=openEuler-epol
baseurl=https://mirrors.ustc.edu.cn/openeuler/openEuler-22.03-LTS/EPOL/main/aarch64/
enabled=1
gpgcheck=0

[openEuler-update]
name=openEuler-update
baseurl=https://mirrors.ustc.edu.cn/openeuler/openEuler-22.03-LTS/update/aarch64/
enabled=1
gpgcheck=0

按照 升级指南 | 文档 | openEuler社区的2.2节--skip-broken -x,在dnf update中出现的冲突包全部skip,使用如下命令更新:

sudo dnf update --skip-broken -x libconfig-1.4.9-5.el7.aarch64 --skip-broken -x openssh-7.8p1-8.oe1.aarch64 --skip-broken -x perl-4:5.16.3-297.el7.aarch64 --skip-broken -x perl-4:5.16.3-299.el7_9.aarch64 --skip-broken -x readline-6.2-11.el7.aarch64 --skip-broken -x openssl-libs-1:1.0.2k-19.el7.aarch64  --skip-broken -x openssl-libs-1:1.0.2k-21.el7_9.aarch64 --skip-broken -x openssl-libs-1:1.0.2k-22.el7_9.aarch64 --skip-broken -x openssl-libs-1:1.0.2k-24.el7_9.aarch64 --skip-broken -x openssl-libs-1:1.0.2k-25.el7_9.aarch64 --skip-broken -x openssl-libs-1:1.0.2k-26.el7_9.aarch64 --skip-broken -x subscription-manager-rhsm-certificates-1.23.3-6.oe1.aarch64 --skip-broken -x subscription-manager-1.23.3-6.oe1.aarch64 --skip-broken -x NetworkManager-libnm-1:1.16.0-7.oe1.aarch64 --skip-broken -x NetworkManager-libnm-1:1.18.8-1.el7.aarch64 --nobest

下载了很多22.03的包,下载完再使用sudo dnf update遇到如下报错

Traceback (most recent call last):
  File "/usr/lib64/python3.7/site-packages/libdnf/common_types.py", line 14, in swig_import_helper
    return importlib.import_module(mname)
  File "/usr/lib64/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 670, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 583, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 1043, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: /usr/lib64/libsolvext.so.1: undefined symbol: rpmdbFStat

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/dnf", line 57, in <module>
    from dnf.cli import main
  File "/usr/lib/python3.7/site-packages/dnf/__init__.py", line 30, in <module>
    import dnf.base
  File "/usr/lib/python3.7/site-packages/dnf/base.py", line 29, in <module>
    import libdnf.transaction
  File "/usr/lib64/python3.7/site-packages/libdnf/__init__.py", line 3, in <module>
    from . import common_types
  File "/usr/lib64/python3.7/site-packages/libdnf/common_types.py", line 17, in <module>
    _common_types = swig_import_helper()
  File "/usr/lib64/python3.7/site-packages/libdnf/common_types.py", line 16, in swig_import_helper
    return importlib.import_module('_common_types')
  File "/usr/lib64/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_common_types'

Index of /openeuler/openEuler-22.03-LTS/OS/aarch64/Packages/ 镜像站中下载以下包:

  • libsolv-*.rpm
  • rpm-*.rpm (包括 rpm-libs, rpm-common)
  • python3-*.rpm
  • 关键缺失库libffi-*.rpmlua-*.rpm (提供 liblua-5.4.so)

下载python3-*.rpm的脚本如下:

#!/bin/bash

# 1. 定义镜像站地址 (针对 22.03 LTS aarch64)
REPO_URL="https://mirrors.ustc.edu.cn/openeuler/openEuler-22.03-LTS/OS/aarch64/Packages/"

# 2. 定义匹配模式 (例如 python3- 开头的包)
PATTERN="python3-[^\"]*?\\.rpm"

# 3. 创建下载目录
DOWNLOAD_DIR="./python3-rpms"
mkdir -p $DOWNLOAD_DIR && cd $DOWNLOAD_DIR

echo "--- 正在从镜像站获取文件列表 ---"

# 4. 获取网页内容并利用正则提取文件名
# grep -oP 提取匹配模式的部分,sort -u 去重
curl -s $REPO_URL | grep -oP "$PATTERN" | sort -u > pkg_list.txt

PKG_COUNT=$(wc -l < pkg_list.txt)
echo "发现符合条件的软件包数量: $PKG_COUNT"

# 5. 循环下载
echo "--- 开始批量下载 ---"
while read -r pkg; do
    if [ ! -f "$pkg" ]; then
        echo "正在下载: $pkg"
        wget -c "${REPO_URL}${pkg}"
    else
        echo "跳过已存在文件: $pkg"
    fi
done < pkg_list.txt

echo "--- 下载完成 ---"

然后执行 sudo rpm -Uvh --nodeps --force *.rpm不检查依赖安装包。然后缺什么包补什么包解决了(问gemini)。

中间如果包安装的不对还有可能涉及到libffi版本不对导致wget跑不了,lib…版本不对导致rpm跑不了。