Умный rsync
Точнее, обёртка для него и ещё чего-то, которая бы решала задачу синхронизации пакетных репозиториев разумно минимальным трафиком.
Предполагается такой механизм:
- получаем список файлов с удалённого сервера (учитывая заданные фильтры, например --exclude='*SRPMS*')
- смотрим на локальный репозитарий
- выделяем пакеты, которые есть в обоих репозитариях, но в разных версиях (update – скорее не в разных версиях, а в разных сборках, потому что из-за использования сжатия дельты между версиями получаются весьма большие, тогда как в сборках меняется только спек и патчи).
- переименовываем каждый такой локальный файл сообразно удалённому
- запускаем rsync -Pav --delete --delete-after, как в существующих скриптах (см. ниже)
- возможно, ещё что-то придумываем про contents_index и возможно — base/ вообще (тогда отлетают подписи хэшей, но экономится трафик на неуникальную информацию — бишь отдельный режим)
Да, сюда же: ещё хорошо делать cp -al во временное место, а уже его синхронизировать; после успешного (sic!) завершения — перекидывать ссылку или делать mv && rm -rf.
Еще вариант — облегчить работу на клиентской стороне за счет некоторой работы на сервере:
- (в случае сизифа) на сервере где-нить рядом с основным репозиторием иметь отдельную структуру хотя бы для files/, в которой будут располагатсья симлинки на реальные пакеты из Sisyphus/files/, только имена ссылок будут иметь вид %{NAME}.%{ARCH}.rpm.
- на клиенте синхронизировать полученную структуру вместо Sisyphus/files/, не забыв добавить -L к опциям rsync
Ссылки
Ссылок на эту страницу нет