Я понимаю, что это всё можно и наконфигурить самому, указав в качестве LIST просто ALTLinux и КУЧУ exclud-ов, но всё же, это не очень удобно (из-за количесва exclud-ов) указывая LIST: Sisyphus 4.0/branch итд теряем некоторое место на там, что отсутствуют хардлинки (между Sisyphus и 4.0/branch) Как фичреквест ставлю. Можно просто указать эту особенность в доку, а можно и подумать над более эффективным способом зеркалирования. (что-то вроде проверки на такие пересечения значений LIST?)
О чём баг-то?
(In reply to comment #1) > О чём баг-то? Хм... как бы это более понятно... А наверное никак. Так и повторю: указывая LIST: Sisyphus 4.0/branch итд теряем некоторое место на том, что отсутствуют хардлинки (между Sisyphus и 4.0/branch) Так понятнее?
А, понятно. Ну, хм, не представляю, как это решать.
Бага вполне понятна. Мы ещё и трафик теряем, т.к. хардлинки не передаются когда мы по-отдельности миррорим 4.0 бранч и сизиф. Есть вариант заexclude-ить всё, и include-ить только то что нужно. Подумаю над реализацией такого режима работы.
(In reply to comment #4) > Есть вариант заexclude-ить всё, и include-ить только то что нужно. Подумаю над > реализацией такого режима работы. Вот вот. Уже теплеет. :-) В самописном скрипте синхронизации я так и делал. и плясял от конрня - ALTLinux/ Сейчас же начал использовать sisyphus-mirror и выходу из положения так. LIST ALTLinux и оооогромный exclude
FYI: Я начал было писать другую утилитку для мирроринга, пересоздающую репозитории по типу dists/pool у debian и качающую каждый файл ровно один раз, вне зависимости от количества его в разных репозиториях, но пока она даже не дышит.
Кажется достаточно добавить --link-dest=. в опции rsync.
Поправка: --link-dest=$DESTROOT
Просьба протестировать версию из http://git.altlinux.org/people/vvk/packages/sisyphus-mirror.git
В общем проверил уже сам, решение с --link-dest работает отлично. Указывать --link-dest=$DESTROOT нельзя, т.к. rsync в таком случае ничего сканировать не будет. Как я понял, нельзя в --link-dest указывать вышележащую директорию. Поэтому я сделал вот что: теперь автоматическим образом формируется множество --link-dest, куда передаются все имеющиеся директории в $DESTROOT. Т.о. мы получаем экономию на хардлинках как будьто бы зеркалили весь ALTLinux. На всякий случай уточню - самостоятельно --link-dest прописывать не надо. Есть одна особенность: уже имеющиеся файлы rsync не будет заменять на хардлинки, но можно сделать так: $ pwd /var/ftp/ALTLinux mv 4.0/branch . sisyphus-mirror -i -l 4.0/branch rm -rf branch
(In reply to comment #3) > А, понятно. > Ну, хм, не представляю, как это решать. (In reply to comment #10) > В общем проверил уже сам, решение с --link-dest работает отлично. Указывать > --link-dest=$DESTROOT нельзя, т.к. rsync в таком случае ничего сканировать не > будет. Как я понял, нельзя в --link-dest указывать вышележащую директорию. > > Поэтому я сделал вот что: теперь автоматическим образом формируется множество > --link-dest, куда передаются все имеющиеся директории в $DESTROOT. > > Т.о. мы получаем экономию на хардлинках как будьто бы зеркалили весь ALTLinux. > > На всякий случай уточню - самостоятельно --link-dest прописывать не надо. > > Есть одна особенность: уже имеющиеся файлы rsync не будет заменять на хардлинки, > но можно сделать так: > $ pwd > /var/ftp/ALTLinux > mv 4.0/branch . > sisyphus-mirror -i -l 4.0/branch > rm -rf branch
Fixed in 0.5-alt1
нет. решение не работает. попробовал сегодня. имеем: ls -i /EXPORT/ftp/pub/ALTLinux/Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm /EXPORT/ftp/pub/ALTLinux/4.0/Desktop/4.0.3/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm 1982526 /EXPORT/ftp/pub/ALTLinux/4.0/Desktop/4.0.3/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm 1982526 /EXPORT/ftp/pub/ALTLinux/Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm стираю rm /EXPORT/ftp/pub/ALTLinux/Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm запуcкаю sisyphus-mirror (на удалённой стороне всё хардлинки) имею в итоге ls -i /EXPORT/ftp/pub/ALTLinux/Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm /EXPORT/ftp/pub/ALTLinux/4.0/Desktop/4.0.3/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm 1982526 /EXPORT/ftp/pub/ALTLinux/4.0/Desktop/4.0.3/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm 991233 /EXPORT/ftp/pub/ALTLinux/Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm пробовалость все версией из git c4953dffc92cf4e6373d0c5d178551d595d695a6
УМВР. $ ls -i ./Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm ./4.0/branch/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm 199622704 ./4.0/branch/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm 199622704 ./Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm У вас похоже local misconfiguration. Нужно посмотреть конфиг, может быть вывод запуска под bash -x.
Created attachment 2578 [details] config config
(In reply to comment #14) > УМВР. > $ ls -i ./Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm > ./4.0/branch/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm > 199622704 ./4.0/branch/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm > 199622704 ./Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm > > У вас похоже local misconfiguration. Нужно посмотреть конфиг, может быть вывод > запуска под bash -x. попробуйте _убить_ ./Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm и запустить sisyphus-mirror и посмотреть на итог
> попробуйте > _убить_ ./Sisyphus/files/noarch/RPMS/alt-docs-genextras-0.3-alt4.noarch.rpm и > запустить sisyphus-mirror и посмотреть на итог > Хотя это плохой пример. этот пакет как раз обновился. но думаю идея ясна: * имеем локальные Sisyphus/file1 и 4.0/branch/file1 (иноды одинаковые.) * убиваем Sisyphus/file1 * запускаем sisyphus-mirror * если sisyphus-mirror достаточно интеллектуален, то Sisyphus/file1 создастся в первозданном виде (с той же инодой, что и 4.0/branch/file1), если нет, то я неверно переоткрыл багу. у меня с моим конфигом Sisyphus/file1 создался как отдельный файл.
Угу, таким образом действительно воспроизводится.
Всё ясно, rsync ищет файлы по пути link-dest + путь/от/корня/синхронизируемой/директории: lstat64("/var/ftp/ALTLinux/4.0/files/noarch/RPMS/update-kernel-0.3-alt4.noarch.rpm", 0xbfd06cc8) = -1 ENOENT (No such file or directory) lstat64("/var/ftp/ALTLinux/archive/files/noarch/RPMS/update-kernel-0.3-alt4.noarch.rpm", 0xbfd06cc8) = -1 ENOENT (No such file or directory) В общем нужно несколько переписать алгоритм вычисления списка для --link-dest.
Для репозиториев, структура которых отличается от Sisyphus, --link-dest вычисляться не будет. В эту категорию попадают updates и backports. Для поддержки --link-dest для не-sisyphus-like репозиториев нужно значительно переделать основной алгоритм синхронизации. А так, fixed in 0.6-alt1.