原子同步 RPM 存储库

原子同步 RPM 存储库

我们有一个 RPM 存储库(在 Centos 6 机器上),需要将其推送到另一台机器。到目前为止,我们一直在使用rsync -av --delete网络简单地推送存储库目录。这会导致远程存储库在同步期间不可用 - 在完成之前rsyncrepodata不匹配当前的 rpm 包,并且同步repodata也不是原子的。

如何通过 ssh 自动同步两个存储库?

我希望远程存储库随时可用,即使在数据传输期间也是如此。我知道我可以通过复制存储库到临时目录,然后移动/符号链接它来实现这一点,但感觉应该有更好的解决方案。

答案1

使用重新同步来自 yum-utils 包。手册页dnf。我认为即使你的 yum 被替换成那个,它仍然有效。

reposync是一个 Python 脚本。我们可以看到它确实

# Lock if they've not given an explicit cachedir
...
my.doLock()

如果我们pydoc yum.YumBase看看

doLock(self, lockfile='/var/run/yum.pid')
  Acquire the yum lock.

因此它似乎锁定了其他 yum 访问,这可能不是您想要的。

答案2

一种接近的方法是 rsync 到另一个目录名,然后执行几个快速的 mv:

rsync -avP repo 远程计算机:/dir/repo.new
ssh 远程机器“mv /dir/repo /dir/repo.old; mv /dir/repo.new /dir/repo”

然后,您可以根据需要删除旧目录。存储库不可用/不一致的时间将最小化。

相关内容