Как создать RPM-зеркало по запросу

Вопрос или проблема

Я бы хотел создать RPM репозиторий для пакетов Fedora в моей локальной сети. Из-за ограничений по объему хранилища я хочу, чтобы репозиторий изначально был пустым и загружал пакеты только после их обращения.

Предпосылки

Я много работаю с локальными виртуальными машинами. Каждый раз, когда я создаю новую виртуальную машину и устанавливаю Fedora, множество пакетов загружаются из интернета, и большинство загруженных пакетов одни и те же. Чтобы ускорить процесс, я хочу, чтобы RPM кэшировались на сервере, расположенном в той же сети.

На похожие вопросы отвечали с использованием комбинации createrepo и reposync. Мне не нравится часть с reposync, потому что я не хочу клонировать весь репозиторий заранее, когда мне нужно только некоторые из пакетов.

Идеальное решение

Я бы хотел, чтобы сервер в моей локальной сети выступал в роли RPM репозитория для моих установок Fedora. Он должен пропускать метаданные от того, что настроено в /etc/yum.repo.d/*. Сервер должен выдавать запрашиваемый RPM, если он есть в локальном кэше, или же загружать его и затем выдавать.

Менее амбициозный подход заключался бы в настройке единственного RPM репозитория вместо https://mirrors.fedoraproject.org/... и просто использовании http proxy.

Обновление: 2 ноября 2015

У меня уже есть работающий nginx в сети, поэтому я пробовал комбинацию proxy_pass и proxy_cache. Вроде работает, но, на мой взгляд, у него больше минусов, чем плюсов:

  • отдельная конфигурация для каждого репозитория, настроенного в /etc/yum.repo.d/*.
  • нельзя использовать metadata с https://mirrors.fedoraproject.org/ из-за альтернативных зеркал.

Я отказался от nginx варианта и установил squid, как было предложено в комментариях. squid отлично работает для меня. С помощью конфигурации store_id_program я могу использовать альтернативные зеркала и все равно попадать в кэш, независимо от того, откуда изначально пришел RPM.

Здесь вы можете найти настроенный squid.conf для кэширования rpm:

https://github.com/spacewalkproject/spacewalk/blob/master/proxy/installer/squid.conf

Вам нужно только изменить память и настройки порта.

Я не уверен, нашли ли вы хорошее решение для этого, но я написал небольшую программу на Go. Она работает как кэширующий прокси и сохраняет вокруг RPM, но проксирует вверх до файлов базы данных, так что всегда корректно. Сейчас она настроена для CentOS, Fedora EPEL и Arch Linux.

Вы можете увидеть ее https://github.com/yobert/remirror

apt-cacher-ng отлично работает. Мы используем его уже некоторое время, и он работает хорошо. И помните, что нужно использовать только http зеркала (а не https), чтобы сделать его более эффективным (естественно, он не может видеть и кэшировать https трафик):

Чтобы настроить официальные репозитории fedora на использование только http зеркал, можно добавить &protocol=http в конец URL конфигурации metalink, например, для репозитория fedora это станет:

metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch&protocol=http

https://www.unix-ag.uni-kl.de/~bloch/acng/

Кэширующий прокси. Специализирован для файлов пакетов от дистрибьюторов Linux, в основном для Debian (и основанных на Debian), но не ограничен ими. См. документацию Apt-Cacher, чтобы узнать, для чего он полезен.

На wiki Yum содержится страница с обзором решений для кэширования

Некоторые из них по теме:

  • Установите “IntelligentMirror“, и зарегистрируйтесь с MirrorManager.

    Плюсы
        Нулевая конфигурация на клиентской стороне.
        После настройки в основном все работает и все должно быть немедленно.
        Загружает только то, что требуется пользователям.
        Полностью автоматизированная серверная сторона, после настройки/работы. 
    Минусы
        Требует настройки локального Squid + Apache-httpd + IntelligentMirror для обслуживания данных.
        Если сервер не работает, metalinks/MM направит вас на внешнее зеркало.
        Интеллектуально кэширует только пакеты, а не метаданные. 
    
  • (бета) avahi-packages-server.py и поддержка yum avahi (см.: http://james.fedorapeople.org/yum/avahi)

    Плюсы
        Клиент без конфигурации.
        Сервер без конфигурации.
        Загружает только то, что требуется пользователям. 
    Минусы
        Пока не доступно в основной ветке (все еще в бета-версии).
        Клиент, который не запускает серверную часть avahi, не делится своими загрузками (поэтому всем клиентам нужно запускать "сервер").
        Требует работающего avahi в сети. 
    

Я написал скрипт, который запускается через cron. Он перемещает файлы rpm из /var/cache/dnf на общий путь (например, NFS-поделиться или другая общая файловая система). После этого он заменяет оригинальный файл rpm на символическую ссылку на файл rpm в общем пути.

Скрипт и некоторая документация размещены в моем блоге.

Полное раскрытие: это мой блог/вебсайт, и я написал скрипт. Не стесняйтесь использовать его.

.

Ответ или решение

Создание RPM-репозитория, который действует на условиях on-demand, является важной задачей для оптимизации работы в IT-средах, особенно когда ресурсы ограничены. В данном контексте речь идет о создании локального репозитория Fedora, который первоначально пуст, загружая пакеты только по мере необходимости. Этот подход может значительно ускорить процессы установки и обновления пакетов в среде с виртуальными машинами (VM), снижая нагрузку на внешние интернет-каналы и улучшая общую производительность системы.

Теория

Основная цель состоит в том, чтобы сервер в локальной сети выступал в роли прокси-репозитория для Fedora. Это позволяет использовать пасс-тру метаданные из уже настроенных репозиториев в /etc/yum.repo.d/*. Идеально, если сервер сможет доставлять RPM-пакеты из локального кэша, а в случае их отсутствия — сначала загружать их из внешнего источника, а затем доставлять.

Пример решения

Рассмотрим несколько подходов для достижения данной цели:

  1. Squid Proxy: Один из наиболее простых методов — настроить кэширующий прокси-сервер Squid, который будет кешировать доступ к RPM-пакетам. Конфигурация Squid может быть настроена для хранения пакетов, что позволяет избежать повторных загрузок одних и тех же файлов. Важным преимуществом использования Squid является возможность использования store_id_program, что позволяет работать с альтернативными зеркалами.

  2. Intelligent Mirror: Данный инструмент включает в себя установку комплекта из Apache HTTPD, Squid и IntelligentMirror, который позволяет автоматизировать процесс кеширования пакетов. Недостаток заключается в необходимости более сложной серверной конфигурации, но это компенсируется эффективной автоматизацией.

  3. apt-cacher-ng: Хотя исходно этот инструмент разрабатывался для дистрибутивов на базе Debian, он также может использоваться для Fedora при условии использования HTTP-зеркал. Этот инструмент служит прокси-кэшем для пакетных файлов и помогает минимизировать нагрузку на сеть.

  4. Go-приложения: Существуют программные решения, написанные на Go, которые выполняют функции кэширующего прокси, будто бы неподдерживаются прямо разработчиками LTS-дистрибутива. Например, remirror — перспективный инструмент, специализирующийся на обсурсе RPM пакетов через прокси. Он позволяет прозрачно кешировать RPM-файлы и при этом актуализировать метаданные с внешнего источника.

  5. Скрипты для автоматического переноса кэша: Простой скрипт, выполняемый через cron, который перемещает файлы из кеша DNF (например, из /var/cache/dnf) в общую директорию. Это может быть NFS, которая доступна для всех VMs, что позволяет избежать повторного скачивания одних и тех же пакетов.

Применение

Для реализации указанной архитектуры, можно следовать следующему плану:

  1. Установка и настройка Squid:

    • Обновите и установите Squid на вашем сервере (sudo dnf install squid).
    • Настройте конфигурационный файл /etc/squid/squid.conf, чтобы включить кэширование RPM файлов. Обратите особое внимание на параметры cache_dir и refresh_pattern.
    • Перезагрузите службу Squid для применения изменений (sudo systemctl restart squid).
  2. Развертывание Intelligent Mirror:

    • Установите необходимые компоненты (Apache HTTPD и Squid).
    • Настройте Intelligent Mirror для автоматического кэширования файлов в соответствии с запросами клиентов вашей сети.
  3. Использование apt-cacher-ng (при необходимости):

    • Захватите конфигурацию, чтобы убедиться, что все запросы проходят через apt-cacher-ng.
    • Проверьте работу сервиса, загрузив несколько пакетов и удостоверившись, что они сохраняются и повторно используются при последующих обращениях.
  4. Организация скриптов для Freelancer-style кэша:

    • Ознакомьтесь с документацией и образцами скриптов, доступными в интернете и на специально созданных блогах, таких как https://www.jbitc.de/2025/02/10/poor-mans-rpm-cache/.

Придерживаясь этих шагов и решений, можно добиться значительного повышения производительности и экономии ресурсов в процессе управления пакетами в распределенной среде разработки. Таким образом, создание on-demand RPM-репозитория становится эффективным инструментом для администраторов, работающих с Fedora и другими RPM-базированными системами.

Оцените материал
Добавить комментарий

Капча загружается...