Mirroring
Что
Эта статья описывает один из наиболее простых способов создания собственного зеркала репозитария пакетов.
Зачем
Держать свое зеркало репозитария полезно прежде всего корпоративным пользователям, использующим наше ПО в офисах и других крупных сетях - это позволяет:
- существенно снизить нагрузку на внешний интернет-канал, когда все компьютеры хотят обновиться;
- проводить дополнительное тестирование пакетов силами системных администраторов еще до их массовой установки пользователям (что особенно важно при использовании репозитария Sisyphus).
Как...
... качать
Для начала определитесь, какая ветка и какая архитектура вам нужны. В данном примере рассматриваются архитектура x86_64 веток p8 и Sisyphus.
Потом однократно выполните примерно такие команды для создания непривилегированного пользователя и подготовки его домашнего каталога:
useradd -g users -m -N -p x altrepo chmod 711 ~altrepo mkdir -m 755 ~altrepo/mirror chown -R altrepo: ~altrepo
Все дальнейшие действия в данном пункте выполняются от имени этого непривилегированного пользователя.
Попробуем скачать Sisyphus (только собранные пакеты, без исходников и вспомогательной информации) с яндексовского зеркала:
cd ~altrepo/mirror umask 022 wget -np -L -m -nH --cut-dirs=1 https://mirror.yandex.ru/altlinux/Sisyphus/{x86_64,noarch}/{base,RPMS.classic}/
Получилось? И всего полсотни гигабайтов? Ну, тогда можно еще и "восьмую платформу" отзеркалить:
wget -np -L -m -nH --cut-dirs=1 https://mirror.yandex.ru/altlinux/p8/branch/{x86_64,noarch}/{base,RPMS.classic}/
Установка umask 022
обеспечивает корректные права доступа к файлам и каталогам для их последующей раздачи по HTTP (см. далее).
... обновлять
Удивительно, но... теми же командами. Более того: их можно записать в скрипт, который будет запускаться демоном crond
от имени пользователя altrepo, например, ежедневно. Или ежеутренне :-)
... раздавать
Итак, у вас есть каталог со свежескачанной копией репозитария. Теперь надо сделать его доступным для пользователей, а для этого проще всего установить nginx
и настроить его для начала примерно таким образом:
# /etc/nginx/nginx.conf worker_processes 2; error_log /var/log/nginx/error.log; events { worker_connections 1024; } http { proxy_temp_path /tmp/nginx/proxy; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; sendfile on; server_tokens off; keepalive_timeout 15; gzip on; proxy_cache_path /tmp/nginx/cache levels=1:2 keys_zone=my_cache:1024m; proxy_cache_key "$host$request_uri"; proxy_cache_methods GET; proxy_cache_valid 200 30m; proxy_cache my_cache; server { listen 80 default_server; listen [::]:80 ipv6only=on; server_name ""; root /home/altrepo/mirror; location / { autoindex on; } } }
Да, в этом примере не используется HTTPS - дело в том, что целостность пакетов и метаданных обеспечивается цифровыми подписями файлов, что делает механизм аутентификации сервера избыточным.