Mirroring

Материал из ALT Linux Wiki
Перейти к: навигация, поиск

Что[править]

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

Зачем[править]

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

  • существенно снизить нагрузку на внешний интернет-канал, когда все компьютеры хотят обновиться;
  • проводить дополнительное тестирование пакетов силами системных администраторов еще до их массовой установки пользователям (что особенно важно при использовании репозитария Sisyphus).

Как...[править]

... качать[править]

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