一、背景<br>openEuler master 分支于8月7日晚间上线 SWIG 4.5 后,SWIG 不再生成<br>Python 2 C-API 兼容宏(PyInt_*/PyString_* 等),而部分包的 python<br>绑定源码仍无条件引用这些符号,导致在 python3 下构建时报<br>"undefined symbols",对应 module 无法在运行时正常引入。本次共修复<br>Everything 工程八个受影响包,均已在src-openeuler 提交合并请求,详情如下。<br><br>二、修复清单(含 MR 链接与所属 SIG)<br>说明:标注 ⚠️ 的为 AI 自研补丁(上游/Fedora 无对应修复可参考),<br>请重点关注符号替换语义;未标注的为对齐上游/Fedora 官方修复的<br>backport。<br><br>1. ⚠️ libnl3(SIG: Networking)<br> MR: https://atomgit.com/src-openeuler/libnl3/merge_requests/66<br> capi.i / genl/capi.i:PyInt_Check/AsLong/FromLong 替换为 PyLong_*,<br> PyString_Check/AsString 替换为 PyBytes_*(nla 属性数据为二进制)。<br><br>2. libselinux(SIG: sig-security-facility)<br> MR: https://atomgit.com/src-openeuler/libselinux/merge_requests/110<br> backport 上游 commit fb518ff:selinuxswig_python.i 中<br> PyString_FromString 替换为 PyUnicode_FromString(文本语义)。<br><br>3. ⚠️ M2Crypto(SIG: Runtime)<br> MR: https://atomgit.com/src-openeuler/M2Crypto/merge_requests/20<br> _ec.i/_lib.i/_rsa.i:PyString_FromString 替换为 PyUnicode_FromString,<br> PyInt_AsLong/PyInt_FromLong 替换为 PyLong_*。<br> 已与 0.48.0 版本升级合并为单个 commit。<br><br>4. openscap(SIG: Programming-language)<br> MR: https://atomgit.com/src-openeuler/openscap/merge_requests/33<br> swig/openscap.i:time_t typemap 与回调的 PyInt_Check/PyInt_AsLong<br> 替换为 PyLong_*,char** 输入与结果转换的 PyString_AsString 替换为<br> PyBytes_AsString。与上游 PR #2391(Fedora backport)对齐;<br><br>5. openwsman(SIG: System-tool)<br> MR: https://atomgit.com/src-openeuler/openwsman/merge_requests/27<br> openwsman.i / plugin.i 的 Target_* 宏、helpers.h、target_python.c<br> 共 4 个文件 19 处:PyInt_*→PyLong_*、PyString_FromString→<br> PyUnicode_FromString、PyString_Check/AsString→PyBytes_Check/AsString。<br> 与 Fedora openwsman-swig45.patch 对齐。<br><br>6. ⚠️ trace-cmd(SIG: Programming-language)<br> MR: https://atomgit.com/src-openeuler/trace-cmd/merge_requests/87<br> python/ctracecmd.i:PyInt_Check 替换为 PyLong_Check(一处)。<br><br>7. unbound(SIG: Networking)<br> MR: https://atomgit.com/src-openeuler/unbound/merge_requests/242<br> pythonmod/interface.i(14 处)与 pythonmod.c(4 处):<br> PyString_FromString→PyUnicode_FromString、PyInt_FromLong/AsLong→<br> PyLong_FromLong/AsLong、PyString_Check/AsString→PyBytes_Check/AsString。<br> 与上游 commit 93a5620(Fix #1489)对齐。<br><br>8. ⚠️ OpenIPMI(SIG: Networking)<br> MR: https://atomgit.com/src-openeuler/OpenIPMI/merge_requests/48<br> swig/python/OpenIPMI_lang.i:16 处无条件 py2 调用(PyInt_Check×3、<br> PyInt_AsLong×2、PyInt_FromLong×7、PyString_FromString×4)替换为<br> PyLong_*/PyUnicode_FromString(IPMI 名称/值为文本数据)。条件编译<br> 宏已正确,未改动。<br><br>三、AI 辅助修复处理过程说明<br>- 替换语义:PyString_* 的去向取决于数据性质——文本数据用<br> PyUnicode_*,二进制数据用 PyBytes_*。<br>- 对齐原则:上游或 Fedora 已有官方修复的逐字对齐(libselinux、<br> openscap、openwsman、unbound);上游未修复的自研补丁<br> (⚠️ libnl3、M2Crypto、trace-cmd、OpenIPMI)建议重点关注。<br>- 所有补丁均已在对应版本源码干净树验证可应用(dry-run + 实打 +<br> 无 py2 符号残留)。<br><br>四、其他良性告警(无需处理)<br>audit、lasso、libcap-ng、libnvme、libpfm、libsemanage、libsolv、marisa、<br>qpid-proton(cproton_ffi)、setools、subversion、tbb 共 12 类包的<br>undefined symbols 告警,经核查均为 python3.11 正常导出的标准 C-API,<br>或属跨模块运行时解析符号(如 subversion 的 SWIG 共享运行时),是<br>brp-check-elf-files 的例行扫描输出,不影响运行。<br><br>EPOL 仓库中的各软件,请 maintainer 或 commiter 积极与上游联系评估修复。<br>python modules 的符号缺失是普遍现象,无法在构建过程中拦截,<br>只能于运行时发现,隐藏较深。<br>
participants (1)
-
Funda Wang