Mirroring

Материал из ALT Linux Wiki

Что

Эта статья описывает один из наиболее простых способов создания собственного зеркала репозитария пакетов.

Зачем

Держать свое зеркало репозитария полезно прежде всего корпоративным пользователям, использующим наше ПО в офисах и других крупных сетях - это позволяет:

  • существенно снизить нагрузку на внешний интернет-канал, когда все компьютеры хотят обновиться;
  • проводить дополнительное тестирование пакетов силами системных администраторов еще до их массовой установки пользователям (что особенно важно при использовании репозитария 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 - дело в том, что целостность пакетов и метаданных обеспечивается цифровыми подписями файлов, что делает механизм аутентификации сервера избыточным.