Зеркалирование AUR зеркала

Что: 6e86425441b195a915048fc71a4a50898e73a54e

Когда: 2023-06-13 11:08:46+03:00

Темы: git tip

Зеркалирование AUR зеркала

https://github.com/archlinux/aur
Есть Git-репозиторий со всеми AUR пакетами. Каждый находится в своей
ветке, а это почти 115k штук. Просто так сделать git clone не выходит
из-за этого. Но можно доставать все эти данные частями, просто получив
список веток, а дальше по тысяче (например) штук их запрашивать:

    git ls-remote https://github.com/archlinux/aur.git |
    cut -f2 | sed -n "s/^refs.heads.//p" |
    xargs -L1000 | while read pkgs ; do
        for pkg in $pkgs ; do echo ${pkg}:${pkg} ; done | git fetch --stdin origin
    done

А ещё стоит сделать "git config gc.auto 0", так как Git упорно запускает
gc при всём этом, сильно тормозя весь процесс. gc можно вызвать руками потом.

оставить комментарий

комментарий 0:

From: kmeaw
Date: 2023-06-15 22:48:38Z

А почему не делалось зеркалирование из первоисточника в исходном
формате? Кажется, тогда не было бы проблемы с выкачиваниеем огромного
репозитория, а скачивание по частям получилось бы естественным образом.

Примерно так (сам не провеерял, пишу по памяти):

curl https://aur.archlinux.org/packages.gz | zcat |
xargs -I{} -P10 git clone https://aur.archlinux.org/{}.git

А ещё у aur.archlinux.org есть IPv6 (в отличие от github.com).

комментарий 1:

From: Sergey Matveev
Date: 2023-06-15 23:19:47Z


>А почему не делалось зеркалирование из первоисточника в исходном формате?
>curl https://aur.archlinux.org/packages.gz | zcat |

Потому что я нисколько не пользователь Arch-а и не в курсе как там у них
чего устроено и совершенно не хочется разбираться (не интересен этот
дистрибутив). Но знания о пакетах, где они (URL) и контрольные суммы
могут рано или поздно где-нибудь да пригодится, а также возможно
какие-то патчи. Зеркало AUR я просто мельком где-то увидел и решил вот
склонировать. Но да, предложенный вариант явно получше, спасибо!

комментарий 2:

From: Sergey Matveev
Date: 2023-06-16 08:21:11Z


>А почему не делалось зеркалирование из первоисточника в исходном формате?

Первоисточник через несколько десятков запросов выдаёт 429 HTTP код.
Вставил sleep 1 между git запросами -- тоже быстро отлупливает меня.
И это происходит не только на clone, но и на fetch.

комментарий 3:

From: kmeaw
Date: 2023-06-17 08:23:35Z

Фрагмент из /etc/nginx/nginx.d/aurweb.conf:

# limit Git requests to block Git DoS attempts.
# # grep aurwebgitlimit /var/log/nginx/aur.archlinux.org/error.log | awk '{ print $14 }' | sort | uniq | sort
limit_req_zone $binary_remote_addr zone=aurwebgitlimit:10m rate=30r/m;
limit_req_status 429;

server {
    …
    location ~ "^/([a-z0-9][a-z0-9.+_-]*?)(\.git)?/(git-(receive|upload)-pack|HEAD|info/refs|objects/(info/(http-)?alternates|packs)|[0-9a-f]{2}/[0-9a-f]{38}|pack/pack-[0-9a-f]{40}\.(pack|idx))$" {
    limit_req zone=aurwebgitlimit burst=300 nodelay;
        …
        uwsgi_pass   smartgit;
        …
    }
}

Похоже, что git fetch делает много запросов, даже если с другой стороны
отвечают по smart protocol.

Если история не нужна, могу предложить ещё забирать snapshot, для них
(location ~ ^/cgit) настроен limit_req zone=aurwebgitlimit burst=900
nodelay:

https://aur.archlinux.org/cgit/aur.git/snapshot/clickhouse.tar.gz

Или можно попробовать скачать по SSH (что, правда, потребует регистрации
для загрузки публичного ключа):

git clone aur@aur.archlinux.org:clickhouse

комментарий 4:

From: Sergey Matveev
Date: 2023-06-17 08:45:21Z


>Похоже, что git fetch делает много запросов

А я ведь его даже через tofuproxy пускал, чтобы тут keep-alive TLS
соединение удерживал. Правда это усугублялось запуском под parallel,
который восемь процессов плодил.

>[...]могу предложить[...]

Спасибо большое! Но мне это прям вообще не горит, не критично всё и это
скорее просто проходя мимо я решил сделать копию на всякий пожарный,
авось пригодится.

Сгенерирован: SGBlog 0.34.0