Локальный репозиторий RHEL: настройка и поддержка
Почему нужен локальный репозиторий
Локальный репозиторий полезен в следующих случаях:
- Экономия полосы пропускания — пакеты скачиваются один раз и распределяются внутри сети.
- Серверы без доступа в Интернет получают обновления из локального источника.
- Тестовые и девелоперские окружения, где нецелесообразно оплачивать отдельные подписки.
Важно: сервер, который выступает репозиторием, лучше использовать только для этой роли — чтобы снизить риск конфликтов и упростить безопасность.
Ключевые термины
- reposync — утилита для синхронизации пакетов из удалённого репозитория в локальную папку.
- createrepo — утилита для создания метаданных yum-репозитория.
- .repo — файл конфигурации репозитория на клиенте в /etc/yum.repos.d.
Установка пакетов, необходимых для репозитория
Выполните на сервере-репозитории:
yum install yum-utils createrepo httpdЭта команда установит утилиты reposync/createrepo и веб-сервер Apache для раздачи репозитория по HTTP.
Создание директорий для репозиториев
Создайте структуру каталогов, в которой будут храниться скачанные пакеты:
mkdir /var/www/html/rhel6
mkdir /var/www/html/rhel6/server
mkdir /var/www/html/rhel6/dts
mkdir /var/www/html/rhel6/dts2
mkdir /var/www/html/rhel6/rhscМожно поместить репозитории в другую директорию, если у вас иная веб-корневая папка — замените пути соответствующим образом.
Полезные команды
Просмотреть все репозитории на машине (включённые и отключённые):
yum repolist allПросмотреть доступные репозитории в подписке:
subscription-manager repos --listВключить репозиторий на машине-источнике (пример):
subscription-manager repos --enable=rhel-6-server-optional-rpmsОтключить репозиторий на машине-источнике (пример):
subscription-manager repos --disable=rhel-6-server-optional-rpmsВ этом примере требуется включить репозитории server, dts и rhsc (software collections) перед синхронизацией.
Синхронизация репозиториев
После включения нужных репозиториев выполните для каждого репо команду reposync, указав уникальный –repoid и директорию –download_path:
reposync --gpgcheck -l --repoid=repoid --download_path=/var/www/html/rhel6/repo_name --downloadcomps --download-metadataПримечания:
- Параметр –gpgcheck включает проверку подписи RPM, если вы хотите её использовать.
- Серверный репозиторий обычно занимает больше времени для синхронизации — это может занять несколько часов или ночь.
Создание метаданных репозитория
Когда пакеты скачаны, создайте или обновите метаданные:
createrepo -v /var/www/html/rhel6/repo_name/ -g comps.xmlПримечание: опция -g comps.xml нужна только для серверного репозитория, если вы используете файл comps для групп пакетов. Для остальных репозиториев можно запускать createrepo без -g или с –update для инкрементального обновления:
createrepo --update /var/www/html/rhel6/repo_name/Настройка клиентских серверов
На каждом сервере-клиенте отключите все внешние репозитории, установив в их .repo файлах enabled=0 в /etc/yum.repos.d. Удалять файлы не обязательно.
Создайте файл .repo, который будет указывать на ваш локальный репозиторий. Например:
vi /etc/yum.repos.d/name_of_repo_file.repoВставьте в файл следующие записи (замените hostname_or_ip_address_of_repository):
[server]
name = rhel-6-server-rpms
baseurl = http://hostname_or_ip_address_of_repository/rhel6/server
gpgcheck = 0
enabled = 1
[dts]
name = rhel-server-dts-6-rpms
baseurl = http://hostname_or_ip_address_of_repository/rhel6/dts
gpgcheck = 0
enabled = 1
[dts2]
name = rhel-server-dts2-6-rpms
baseurl = http://hostname_or_ip_address_of_repository/rhel6/dts2
gpgcheck = 0
enabled = 1
[rhsc]
name = rhel-server-rhsc-6-rpms
baseurl = http://hostname_or_ip_address_of_repository/rhel6/rhsc
gpgcheck = 0
enabled = 1Рекомендации:
- Если вы хотите проверять подписи пакетов, установите gpgcheck = 1 и добавьте gpgkey = URL_ключа.
- Используйте корректные имена секций ([server], [dts] и т. п.), чтобы не было конфликтов с локальными идентификаторами.
Скрипт и cron для автоматического обновления
Создайте скрипт /usr/local/bin/update-repository.sh с содержимым:
#!/bin/bash
echo Update script started at $(date) >> /var/log/update-repository.log
reposync --gpgcheck -l --repoid=rhel-6-server-rpms --download_path=/var/www/html/rhel6/server --downloadcomps --download-metadata
createrepo --update /var/www/html/rhel6/server/
reposync --gpgcheck -l --repoid=rhel-server-dts-6-rpms --download_path=/var/www/html/rhel6/dts --downloadcomps --download-metadata
createrepo --update /var/www/html/rhel6/dts/
reposync --gpgcheck -l --repoid=rhel-server-dts2-6-rpms --download_path=/var/www/html/rhel6/dts2 --downloadcomps --download-metadata
createrepo --update /var/www/html/rhel6/dts2/
reposync --gpgcheck -l --repoid=rhel-server-rhsc-6-rpms --download_path=/var/www/html/rhel6/rhsc --downloadcomps --download-metadata
createrepo --update /var/www/html/rhel6/rhsc/
echo Update script ended at $(date) >> /var/log/update-repository.logСделайте скрипт исполняемым и защищённым:
chmod 700 /usr/local/bin/update-repository.sh
chown root:root /usr/local/bin/update-repository.shДобавьте cron-задание в /etc/cron.d/update-repository:
@weekly root /usr/local/bin/update-repository.shВы можете настроить другой график (ежедневно, по расписанию тестовой среды и т. п.). Лог-файл удобно настраивать с ротацией через logrotate.
SOP: короткий план действий (Playbook)
- Подготовка сервера: установить yum-utils, createrepo, httpd.
- Создать каталоги и настроить права на /var/www/html/rhel6/*.
- Включить нужные репозитории через subscription-manager на сервере-источнике.
- Запустить reposync для каждого repoid в отдельную папку.
- Запустить createrepo (с -g для server при наличии comps.xml).
- Настроить .repo на клиентах с baseurl, gpgcheck и enabled.
- Написать скрипт обновления и настроить cron.
- Тестировать: yum clean all && yum –disablerepo=’*’ –enablerepo=server, dts etc. update
Чек-лист по ролям
Администратор репозитория:
- Установить и обновлять пакетный стек (yum-utils, createrepo, httpd).
- Настроить права и SELinux контексты для /var/www/html.
- Настроить backup метаданных и логов.
- Проверять логи обновлений и ошибки createrepo.
Операционный инженер / DevOps:
- Автоматизировать запуск reposync и createrepo.
- Следить за местом на диске и использовать дедупликацию при необходимости.
- Настроить мониторы доступности HTTP и времени загрузки репозитория.
Разработчик / тестировщик:
- Тестировать обновления в изолированной среде.
- Предоставлять список критичных пакетов/групп для включения в comps.xml.
Технические советы и безопасность
- GPG-подписи: по возможности используйте gpgcheck = 1 и gpgkey, чтобы клиенты проверяли целостность пакетов.
- Ограничение доступа: если репозиторий не предназначен для всего интернета, ограничьте доступ по firewall или через внутреннюю сеть.
- SELinux и права: убедитесь, что Apache может читать директории (/var/www/html) и что контексты установлены верно (restorecon -Rv /var/www/html).
- Автономность: при раздаче по HTTP учтите кэширование и заголовки для контролирования обновлений.
Отладка и распространённые проблемы
Проблема: пакеты не видны на клиенте.
- Проверьте baseurl в .repo, попробуйте открыть URL репозитория из браузера/curl.
- Выполните yum clean all на клиенте, затем yum repolist.
Проблема: createrepo выдаёт ошибку при генерации метаданных.
- Проверьте целостность RPM-файлов и права доступа.
- Повторите createrepo без –update, чтобы перестроить метаданные заново.
Проблема: недостаточно места на диске.
- Очистите старые версии пакетов или перенесите репозиторий на отдельный диск.
- Используйте логику хранения только необходимых репозиториев.
Проблема: ошибка GPG-проверки на клиенте.
- Убедитесь, что в .repo указан корректный gpgkey и он доступен по указанному URL.
Критерии приёмки
- Клиент успешно выполняет yum update с локального репозитория без доступа к внешнему интернету.
- Метаданные репозитория актуальны (createrepo завершился без ошибок).
- Логи обновления показывают успешные синхронизации по расписанию.
- Мониторинг HTTP показывает доступность репозитория для целевых хостов.
Краткий глоссарий
- repoid — идентификатор репозитория в subscription-manager или .repo.
- baseurl — URL, по которому yum ищет пакеты.
- comps.xml — файл групп пакетов, используемый для групповой установки.
Совместимость и миграция
- Проверьте версии RHEL, которые вы собираетесь обслуживать; разные релизы (6, 7, 8 и т. д.) должны жить в отдельных директориях репозитория.
- При миграции на новый релиз создайте новую структуру директорий и обновите клиентов на соответствующие .repo файлы.
Итоговые замечания
Локальный репозиторий упрощает управление обновлениями в закрытых или ограниченных сетях и экономит сетевой трафик. Планируйте диск, безопасность и автоматизацию заранее, документируйте repoid и график синхронизаций.
Важно: существуют разные подходы — rsync, proxy-серверы пакетов и кэширование — выбирайте тот, который проще интегрируется в вашу инфраструктуру.
Источники
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента