安装自定义RPM时触发Sqlite异常:no such column: _collapse_libc_requires
关于yum/sqlite抛出
no such column: _collapse_libc_requires异常的成因分析 问题场景
- 执行自定义RPM安装时,Python代码抛出
sqlite3.OperationalError: no such column: _collapse_libc_requires异常 - 该异常并非每次安装都会触发,且不同于常见的SQL插入遗漏值场景,直接出现在yum的sqlite操作逻辑内部
- 暂不采用临时修复掩盖问题,需明确根因
异常成因
_collapse_libc_requires是yum内部用于处理libc依赖折叠的字段,异常核心原因如下:
- yum的sqlite仓库数据库(sqlitesack)中未创建该字段,但代码在生成元数据时尝试访问对应列
- 触发路径:createrepo生成元数据时,调用yum的
xml_dump_primary_metadata()方法,进而检查_collapse_libc_requires属性,而该属性映射的sqlite表列不存在 - 偶发原因:可能是仓库元数据生成过程中断、缓存损坏,或是yum/sqlitesack组件版本更新后数据库结构未同步
完整回溯信息
Sqlite DBs complete ERROR: Traceback (most recent call last): ERROR: File "/usr/lib/python3.7/site-packages/yum/sqlitesack.py", line 46, in newFunc ERROR: return func(*args, **kwargs) ERROR: File "/usr/lib/python3.7/site-packages/yum/sqlitesack.py", line 238, in _sql_MD ERROR: executeSQL(cur, sql, *args) ERROR: File "/usr/lib/python3.7/site-packages/yum/sqlutils.py", line 168, in executeSQLQmark ERROR: return cursor.execute(query, params) ERROR: sqlite3.OperationalError: no such column: _collapse_libc_requires ERROR: During handling of the above exception, another exception occurred: ERROR: Traceback (most recent call last): ERROR: File "/usr/lib/python3.7/site-packages/yum/sqlitesack.py", line 269, in __getattr__ ERROR: (self.pkgId,)).fetchone() ERROR: File "/usr/lib/python3.7/site-packages/yum/sqlitesack.py", line 55, in newFunc ERROR: raise Errors.RepoError(str(e)) ERROR: yum.Errors.RepoError: no such column: _collapse_libc_requires ERROR: During handling of the above exception, another exception occurred: ERROR: Traceback (most recent call last): ERROR: File "/usr/share/createrepo/genpkgmetadata.py", line 308, in <module> ERROR: main(sys.argv[1:]) ERROR: File "/usr/share/createrepo/genpkgmetadata.py", line 276, in main ERROR: mdgen.doPkgMetadata() ERROR: File "/usr/lib/python3.7/site-packages/createrepo/__init__.py", line 424, in doPkgMetadata ERROR: self.writeMetadataDocs(packages) ERROR: File "/usr/lib/python3.7/site-packages/createrepo/__init__.py", line 702, in writeMetadataDocs ERROR: save_keptpkgs(pkg) ERROR: File "/usr/lib/python3.7/site-packages/createrepo/__init__.py", line 621, in save_keptpkgs ERROR: self.primaryfile.write(po.xml_dump_primary_metadata()) ERROR: File "/usr/lib/python3.7/site-packages/yum/packages.py", line 1339, in xml_dump_primary_metadata ERROR: msg += misc.to_unicode(self._dump_format_items()) ERROR: File "/usr/lib/python3.7/site-packages/yum/packages.py", line 1203, in _dump_format_items ERROR: msg += self._dump_requires() ERROR: File "/usr/lib/python3.7/site-packages/yum/packages.py", line 1268, in _dump_requires ERROR: if hasattr(self, '_collapse_libc_requires') and self._collapse_libc_requires: ERROR: File "/usr/lib/python3.7/site-packages/yum/sqlitesack.py", line 273, in __getattr__ ERROR: raise KeyError(str(e)) ERROR: KeyError: 'no such column: _collapse_libc_requires'
补充说明
异常发生在自定义RPM安装流程中,属于偶发现象,并非每次安装都会触发。
内容的提问来源于stack exchange,提问作者Fred
相关产品推荐
相关产品推荐

