私有YUM仓库中主包postgresql-myStuff11无法被yum识别的问题咨询
这种情况确实挺闹心的——明明所有包都老老实实放在仓库目录里,其他关联包都能被yum正常识别,唯独主包像“隐身”了一样。我给你梳理几个实用的排查方向,你可以一步步验证:
先确认主包本身的元数据是否正确
先在仓库服务器上,用rpm命令直接检查这个主包的内部元数据,重点看NAME字段是否符合预期:rpm -qp --queryformat "%{NAME}\n%{VERSION}\n%{RELEASE}\n%{ARCH}\n" postgresql-myStuff11-11.7-2.el8.x86_64.rpm注意看输出的第一行,如果NAME字段不是
postgresql-myStuff11(比如少了后缀11、拼写错误),那哪怕文件名是对的,yum也搜不到它——毕竟yum是根据rpm内部的元数据来识别包的。如果确实是元数据不对,你得回到spec文件确认Name字段的拼写,重新构建包后替换仓库里的旧包。检查createrepo是否真的将主包纳入了仓库索引
有时候createrepo会因为权限异常、包损坏等原因跳过某个包。你可以直接查看仓库的索引文件:- 找到repodata目录下的
primary.xml.gz文件(文件名包含一串哈希值,格式类似xxxx-primary.xml.gz) - 解压并搜索主包名称:
zcat repodata/*-primary.xml.gz | grep -A 10 -B 2 "postgresql-myStuff11"
如果搜索不到任何结果,说明createrepo没把这个包加入索引。这时候要排查:
- 主包的文件权限是否和其他包一致?比如其他包是
root:root 644,这个包是不是权限过低/过高? - 主包是否损坏?可以用
rpm -K postgresql-myStuff11-11.7-2.el8.x86_64.rpm检查包的完整性。 - 重新执行createrepo时加-v参数查看日志:
createrepo -v /path/to/your/repo,看输出里有没有处理这个主包的记录,有没有报错提示。
- 找到repodata目录下的
彻底清理yum缓存,重新生成索引
有时候缓存残留会导致识别异常,哪怕你之前清过缓存,再彻底操作一次:yum clean all rm -rf /var/cache/yum yum makecache之后再用
yum search myStuff11试试。确认spec文件的修改是否真正生效
你提到之前spec用了变量后来改成了字符串,但要确认你是重新构建包之后才放到仓库里的?如果只是改了spec但没重新build,仓库里的还是旧包,元数据自然不会有变化。
如果以上步骤都试过还是解决不了,你可以把rpm -qp的输出结果、createrepo的verbose日志贴出来,这样能更精准定位问题。
备注:内容来源于stack exchange,提问作者codenamezero

