我们有一个内部yum服务器,包含几个repos(RHEL repo的副本,内部创建的程序,等等).我们的内部系统是从互联网上防火墙的,所以他们只能使用我们的内部服务器.
为了在将它们一直推入生产之前测试补丁,我们有一个默认启用的稳定仓库.任何更新都会放在-latest repo中.当我们修补服务器时,我们将使用-latest-repo来构建新的基线并在几台服务器上进行测试.经过测试,我们将该基线作为新的稳定基准.默认情况下禁用-latest repos.
其中一个repos用于我们从epel,rpmforge等获取的一些包.我们有一个脚本,它只将我们想要的包与他们需要的任何依赖项同步.在同步包之后,每晚使用createrepo重建repo.由于这些软件包未经测试,因此它们最终会出现在通常被禁用的int-optional-latest repo中.如果服务器需要来自该repo的包,我们将使用enable-repo = int-optional-latest安装它.
今天,一位同事试图在服务器上安装perl-Excel-Writer-XLSX.服务器找不到包.我尝试使用createrepo重建存储库,并grepped repodata文件以确保文件存在.它是.我还验证了该文件存在于存储库中
repoquery -q --repoid=int-optional-latest -l perl-Excel-Writer-XLSX
我还使用了清除客户端的元数据缓存
sudo yum clean expire-cache
尽管如此,客户端仍然声称服务器上不存在该软件包.
我认为问题不在服务器端,因为当我尝试从另一台机器进行搜索时,它找到了包.我验证了repo文件是正确的,并且名称yum.example.com在两台服务器上解析为相同的IP地址 – 但其中一个可以找到包,而另一个则不能.
解决方法
我开始深入研究yum服务器上的webserver日志,并且没有找到来自IP的无法找到文件的客户端.我起初并不理解这一点,因为我已经清除了客户端上的缓存.所以我做了另一个缓存清理,这次使用
sudo yum -v clean expire-cache
当使用-v运行时,它会列出它清理哪个repos – 并且int-optional-latest不在列表中.我认为这是由于默认情况下repo被禁用.我做了另一次缓存清理,这次使用
sudo yum -v enable-repo=int-optional-latest clean expire-cache
在那之后,我尝试了另一个
sudo yum enable-repo=int-optional-latest install perl-Excel-Writer-XLSX
哪个工作得很好.