Назад | Перейти на главную страницу

Атомарно синхронизировать репозиторий RPM

У нас есть репозиторий RPM (на машине Centos 6), который нам нужно перенести на другую машину. До сих пор мы использовали rsync -av --delete просто протолкнуть каталог репо по сети. Это делает удаленный репозиторий непригодным для использования во время синхронизации - до rsync отделка, repodata не совпадают с текущими пакетами rpm и синхронизацией repodata тоже не атомарен.

Как я могу атомарно синхронизировать два репозитория по ssh?

Я хотел бы, чтобы удаленный репозиторий можно было использовать в любое время, даже во время передачи данных. Я знаю, что могу добиться этого, скопировав репо во временный каталог, а затем переместив / связав его, но похоже, что должно быть лучшее решение.

Использовать репосинхронизация из пакета yum-utils. страница руководства. Я думаю, что это все еще работает с dnf если ваша ням была заменена этим.

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, что может быть не тем, что вам нужно.

Близкий способ - выполнить rsync с другим именем каталога, а затем выполнить пару быстрых mv:

rsync -avP repo remote-machine:/dir/repo.new
ssh remote-machine "mv /dir/repo /dir/repo.old; mv /dir/repo.new /dir/repo"

Затем вы можете удалить старый каталог, когда захотите. Время, в течение которого репо будет недоступным / несогласованным, будет минимизировано.