在运行 createrepo 的同时运行 yum update 会导致竞争条件吗?

在运行 createrepo 的同时运行 yum update 会导致竞争条件吗?

我们的团队有一个本地托管的 yum 存储库。在构建过程结束时,Jenkins:

  • 创建新的 RPM
  • 将新 RPM 移动到 yum 服务器包含 rpm 的目录
  • 在我们的 yum 存储库上运行 createrepo

如果有人yum update在执行上述任何步骤时跑步,会发生什么?进一步来说:

  • 如果在 createrepo 更新存储库时运行 yum update 会发生什么?
  • 如果 yum update 在旧版本的 RPM 上运行,但 createrepo 删除并添加了新的 RPM 版本,会发生什么情况?

我很感激任何帮助。谢谢!

答案1

不,不是竞争条件,而是由于数据不一致而导致的客户端错误。

存储库有一个文件,其中包含其中包含的项目/包的列表。该文件是在存储库创建/更新结束时创建/更新的。

如果客户端在写入时打开存储库并读取内容文件,他们yum将因错误而退出。

如果未写入文件但您正在更改存储库内容,则数据可能会不一致。客户yum端将退出,因为内容文件中的文件引用不可读。

如果您希望最大程度地减少问题,您可以处理存储库的副本(取决于其大小);

# rm -fr newrepo oldrepo
# rsync -ua repo/ newrepo/
# cd newrepo
(then update this copy or the repository)
# cd ..
# mv repo oldrepo; mv newrepo repo
# rm -fr oldrepo

这将使转换时间更短,但不能完全避免客户端错误。

相关内容