尽管服务器已更新,yum 客户端仍未看到新软件包

尽管服务器已更新,yum 客户端仍未看到新软件包

我们有一个内部 yum 服务器,其中包含多个存储库(RHEL 存储库的副本、内部创建的程序等)。我们的内部系统与互联网隔离,因此它们只能使用我们的内部服务器。

为了在将补丁投入生产之前对其进行测试,我们有一个stable默认启用的存储库。任何更新都会放入-latest存储库中。当我们修补服务器时,我们将使用该-latest存储库构建新的基准并在几台服务器上进行测试。测试完成后,我们将该基准设为新的stable-latest默认情况下,存储库是禁用的。

其中一个存储库用于存放我们从 epel、rpmforge 等获取的几个软件包。我们有一个脚本,它只同步我们想要的软件包及其所需的依赖项。在软件包同步后,每晚都会使用 createrepo 重建存储库。由于这些软件包未经测试,因此它们最终会进入int-optional-latest通常被禁用的存储库。如果服务器需要该存储库中的软件包,我们将使用 进行安装enable-repo=int-optional-latest

今天,一位同事试图在服务器上安装 perl-Excel-Writer-XLSX。服务器找不到该包。我尝试使用 createrepo 重建存储库,并 grep 了 repodata 文件以确保该文件存在。确实存在。我还使用以下命令验证了该文件是否存在于存储库中

repoquery -q --repoid=int-optional-latest -l perl-Excel-Writer-XLSX

我还使用以下方法清除了客户端的元数据缓存

sudo yum clean expire-cache

尽管如此,客户端仍声称服务器上不存在该包。

我不认为问题出在服务器端,因为当我尝试从另一台机器上进行搜索时,它找到了该软件包。我验证了 repo 文件是正确的,并且名称yum.example.com在两台服务器上都解析为相同的 IP 地址 - 但其中一台可以找到该软件包,而另一台则找不到。

答案1

我开始深入研究 yum 服务器上的 Web 服务器日志,没有找到任何来自无法找到文件的客户端 IP 的匹配项。一开始我不明白这一点,因为我已经清除了客户端上的缓存。所以我又进行了一次缓存清理,这次使用

sudo yum -v clean expire-cache

使用 运行时-v,它会列出要清理的存储库 - 而 不在int-optional-latest列表中。我认为这是因为默认情况下存储库被禁用。我又进行了一次缓存清除,这次使用

sudo yum -v enable-repo=int-optional-latest clean expire-cache

之后我又尝试了另一种

sudo yum enable-repo=int-optional-latest install perl-Excel-Writer-XLSX

效果非常好。

答案2

sudo yum -v clean expire-cache

对我来说不起作用。不过,我能够让它工作

sudo touch /etc/yum.repos.d/<your_repo_file>

yum repolist

显示已更新。希望这能有所帮助。

相关内容