我有一个仓库,需要能够向客户提供旧版本的软件包。
但是,当我createrepo
在存在包的旧版本的给定目录中运行时,它只会使用最新版本构建 filelists.xml。
当我运行 createrepo 时,我可以看到它在生成工作程序时考虑了所有包。
例如包含软件包的 repo /var/foo
:
foo-bar-0.1-1.noarch.rpm
foo-bar-0.2-1.i386.rpm
foo-bar-0.3-1.i386.rpm
foo-bar-0.4-1.i386.rpm
运行createrepo
将显示它正在读取所有包
Worker 0: reading foo-bar-0.1-1.noarch.rpm
Worker 0: reading foo-bar-0.2-1.i386.rpm
Worker 0: reading foo-bar-0.3-1.i386.rpm
Worker 0: reading foo-bar-0.4-1.i386.rpm
但filelists.xml的最终结果只有最新版本的i386.rpm和noarch.rpm版本。
我曾尝试将我想要的文件列表传递给 -i 选项createrepo
,但它继续对旧版本进行重复数据删除并仅提供最新版本。
这导致客户端无法看到该包的旧版本。
有人知道如何确保所有软件包的所有版本都显示在 filelists.xml 中,以便 yum 能够提供它吗?
我在 Centos5 上使用 yum-3.2.22-39.el5.centos 和 createrepo-0.4.11-3.el5
答案1
我弄清楚了这里的问题是什么。
我将软件包从一个机器同步到另一个机器,这两个机器使用不同版本的 createrepo。我同步软件包和 repomd 的机器的仓库中没有旧版本的软件包。Centos6 版本对其元数据文件进行 md5sum,而 centos5 版本则没有。Yum 显然更喜欢使用非 md5summed 版本,因此无法在最终机器上看到软件包的所有版本。
我犯了一个愚蠢的错误。希望其他人不会遇到这个问题,并从我的错误中吸取教训。