У нас есть репозиторий 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"
Затем вы можете удалить старый каталог, когда захотите. Время, в течение которого репо будет недоступным / несогласованным, будет минимизировано.