Вопрос или проблема
Я бы хотел создать 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-пакеты из локального кэша, а в случае их отсутствия — сначала загружать их из внешнего источника, а затем доставлять.
Пример решения
Рассмотрим несколько подходов для достижения данной цели:
-
Squid Proxy: Один из наиболее простых методов — настроить кэширующий прокси-сервер Squid, который будет кешировать доступ к RPM-пакетам. Конфигурация Squid может быть настроена для хранения пакетов, что позволяет избежать повторных загрузок одних и тех же файлов. Важным преимуществом использования Squid является возможность использования
store_id_program
, что позволяет работать с альтернативными зеркалами. -
Intelligent Mirror: Данный инструмент включает в себя установку комплекта из Apache HTTPD, Squid и IntelligentMirror, который позволяет автоматизировать процесс кеширования пакетов. Недостаток заключается в необходимости более сложной серверной конфигурации, но это компенсируется эффективной автоматизацией.
-
apt-cacher-ng: Хотя исходно этот инструмент разрабатывался для дистрибутивов на базе Debian, он также может использоваться для Fedora при условии использования HTTP-зеркал. Этот инструмент служит прокси-кэшем для пакетных файлов и помогает минимизировать нагрузку на сеть.
-
Go-приложения: Существуют программные решения, написанные на Go, которые выполняют функции кэширующего прокси, будто бы неподдерживаются прямо разработчиками LTS-дистрибутива. Например,
remirror
— перспективный инструмент, специализирующийся на обсурсе RPM пакетов через прокси. Он позволяет прозрачно кешировать RPM-файлы и при этом актуализировать метаданные с внешнего источника. -
Скрипты для автоматического переноса кэша: Простой скрипт, выполняемый через cron, который перемещает файлы из кеша DNF (например, из
/var/cache/dnf
) в общую директорию. Это может быть NFS, которая доступна для всех VMs, что позволяет избежать повторного скачивания одних и тех же пакетов.
Применение
Для реализации указанной архитектуры, можно следовать следующему плану:
-
Установка и настройка Squid:
- Обновите и установите Squid на вашем сервере (
sudo dnf install squid
). - Настройте конфигурационный файл
/etc/squid/squid.conf
, чтобы включить кэширование RPM файлов. Обратите особое внимание на параметрыcache_dir
иrefresh_pattern
. - Перезагрузите службу Squid для применения изменений (
sudo systemctl restart squid
).
- Обновите и установите Squid на вашем сервере (
-
Развертывание Intelligent Mirror:
- Установите необходимые компоненты (Apache HTTPD и Squid).
- Настройте Intelligent Mirror для автоматического кэширования файлов в соответствии с запросами клиентов вашей сети.
-
Использование apt-cacher-ng (при необходимости):
- Захватите конфигурацию, чтобы убедиться, что все запросы проходят через apt-cacher-ng.
- Проверьте работу сервиса, загрузив несколько пакетов и удостоверившись, что они сохраняются и повторно используются при последующих обращениях.
-
Организация скриптов для Freelancer-style кэша:
- Ознакомьтесь с документацией и образцами скриптов, доступными в интернете и на специально созданных блогах, таких как
https://www.jbitc.de/2025/02/10/poor-mans-rpm-cache/
.
- Ознакомьтесь с документацией и образцами скриптов, доступными в интернете и на специально созданных блогах, таких как
Придерживаясь этих шагов и решений, можно добиться значительного повышения производительности и экономии ресурсов в процессе управления пакетами в распределенной среде разработки. Таким образом, создание on-demand RPM-репозитория становится эффективным инструментом для администраторов, работающих с Fedora и другими RPM-базированными системами.