Гид по технологиям

Локальный репозиторий RHEL: настройка и поддержка

• 5 min read • Инфраструктура • Обновлено 22 Nov 2025
Локальный репозиторий RHEL — настройка
Локальный репозиторий 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)

  1. Подготовка сервера: установить yum-utils, createrepo, httpd.
  2. Создать каталоги и настроить права на /var/www/html/rhel6/*.
  3. Включить нужные репозитории через subscription-manager на сервере-источнике.
  4. Запустить reposync для каждого repoid в отдельную папку.
  5. Запустить createrepo (с -g для server при наличии comps.xml).
  6. Настроить .repo на клиентах с baseurl, gpgcheck и enabled.
  7. Написать скрипт обновления и настроить cron.
  8. Тестировать: 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-серверы пакетов и кэширование — выбирайте тот, который проще интегрируется в вашу инфраструктуру.

Источники

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро