Организация локального репозитория

Аннотация

Для организации локального доступа к репозиториям zVirt существует два варианта: использование протокола NFS или веб-сервера NGINX.

Независимо от выбранного способа, общая процедура состоит из следующих шагов:

  1. Создание локальных репозиториев на выбранном сервере путем синхронизации с официальными репозиториями Orionsoft.

  2. Настройка доступа к локальным репозиториям:

    • с помощью NFS или

    • с помощью NGINX.

  3. Настройка клиентских машин для работы с локальными репозиториями.

1. Организация локального репозитория

Предварительные требования к серверу с локальными репозиториями:
  • RedHat-подобная операционная система.

  • Утилита reposync из состава пакета yum-utils.

  • Установленный пакет nfs-utils;

  • Наличие доступа в интернет;

  • Действующие логин и пароль от репозиториев zVirt;

  • Наличие свободного дискового пространства объемом не менее 20Гб;

1.1. Создание локальных репозиториев

Способ 1. С помощью синхронизации с онлайн-репозиториями.

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

  1. В каталоге /etc/yum.repos.d/ создайте файл конфигурации репозиториев zVirt, например, /etc/yum.repos.d/zvirt-local.repo со следующим содержимым:

    [zvirt-main]
    # Настройки для доступа к официальному репозиторию zvirt-main
    name = zVirt main repository
    baseurl = https://repo-zvirt.orionsoft.ru/repository/zvirt-4/4.1/ (1)
    enabled = 0
    skip_if_unavailable = 1
    gpgcheck = 0
    username=USERNAME (2)
    password=PASSWORD (3)
    
    [zvirt-extras]
    # Настройки для доступа к официальному репозиторию zvirt-extras
    name = zVirt extra repository
    baseurl = https://repo-zvirt.orionsoft.ru/repository/zvirt-4/extras/ (1)
    enabled = 0
    skip_if_unavailable = 1
    gpgcheck = 0
    username=USERNAME (2)
    password=PASSWORD (3)
    1 Пути к соответствующим официальным репозиториям. В примере описаны пути для версии zVirt 4.1.
    2 Имя пользователя для доступа к официальным репозиториям
    3 Пароль для доступа к официальным репозиториям
    Имя пользователя и пароль для доступа к репозиториям берутся из лицензионного сертификата, выданного при покупке продукта.
  2. Создайте директорию для локального репозитория, например: /local-repo

    mkdir /local-repo
  3. Установите (в том случае, если он не установлен ранее) пакет dnf-utils:

    dnf install -y dnf-utils
  4. Выполните синхронизацию локального каталога с официальными репозиториями Orionsoft:

    reposync --refresh --delete --download-metadata --repoid=zvirt-main,zvirt-extras -p /local-repo
  5. Скачайте из официального репозитория zvirt-extras в каталог /local-repo/zvirt-extras файл modules.yaml, содержащий описания модулей.

    wget --user=USERNAME --password=PASSWORD -P /local-repo/zvirt-extras/ https://repo-zvirt.orionsoft.ru/repository/zvirt-4/extras/modules.yaml
    Имя пользователя и пароль для доступа к репозиториям берутся из лицензионного сертификата, выданного при покупке продукта.
    При необходимости замените ссылку на файл modules.yaml на актуальную для ваших репозиториев.
  6. Настройте задание для автоматической синхронизации:

    • Откройте редактор планировщика:

      crontab -e
    • Внесите параметры заданий (в примере синхронизация настроена на выполнение в 00:00 каждую субботу):

      0 0 * * 6 /usr/bin/wget --user=USERNAME --password=PASSWORD -P /local-repo/zvirt-extras/ https://repo-zvirt.orionsoft.ru/repository/zvirt-4/extras/modules.yaml >> /local-repo/sync.log 2>&1
      0 1 * * 6 reposync --refresh --delete --download-metadata --repoid=zvirt-main,zvirt-extras -p /local-repo >> /local-repo/sync.log 2>&1

      Журнал событий синхронизации при данной настройке будет сохраняться в /local-repo/sync.log.

Способ 2. С помощью ISO-образа с актуальными репозиториями.
Данный способ организации поддерживается для zVirt 3.3 и выше.

Описанную ниже процедуру можно выполнить:

  • на выделенном сервере, который будет предоставлять сетевой доступ к репозиториям. Для организации сетевого доступа обратитесь к разделу Настройка сетевого доступа к локальным репозиториям

  • на хостах виртуализации и/или Менеджере управления.

    В этом случае настройка сетевого доступа не потребуется. Достаточно в конфигурации репозиториев на соответствующем хосте (или Менеджере) указать значение параметра baseurl на путь к каталогу со ссылками на смонтированные репозитории(подробнее см. ниже).

    Для этого на соответствующем хосте (где смонтирован ISO-образ):

    1. Отключите онлайн репозитории:

      dnf config-manager --disable "*"
    2. Создайте файл описания offline-репозитория /etc/yum.repos.d/offline_zvirt.repo со следующим содержимым:

      [offline_zvirt_main]
      name=zvirt 4.1 main
      baseurl=file:///var/zvirt-repo/repo/zvirt-4/4.1/
      gpgcheck=0
      enabled=1
      
      [offline_zvirt_extras]
      name=zvirt 4.1 extras
      baseurl=file:///var/zvirt-repo/repo/zvirt-4/extras
      gpgcheck=0
      enabled=1

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

  1. Скачайте ISO-образ, содержащий актуальные версии репозиториев из каталога iso в ветке нужной версии. Например, для zVirt 4.1:

    wget https://repo-zvirt.orionsoft.ru/repository/zvirt-4/4.1/iso/repos_zvirt_41_202404181833.iso
  2. Создайте каталог, в который будет смонтирован образ, например:

    mkdir /mnt/repo
  3. Смонтируйте образ в созданный каталог:

    mount -o loop ./repos_zvirt_41_202404181833.iso /mnt/repo
  4. Создайте каталог с символической ссылкой на каталог с репозиториями. Данный каталог будет использоваться для предоставления доступа к репозиториям.

    mkdir -p /var/zvirt-repo
    ln -s /mnt/repo /var/zvirt-repo

Перейдите к настройке сетевого доступа к репозиториям или настройте локальный доступ, как указано в примечании выше.

1.2. Настройка сетевого доступа к локальным репозиториям

Доступ к локальным репозиториям можно настроить двумя способами:

  • непосредственно на сервере, выполняющем синхронизацию;

  • на сервере, расположенном в изолированном сегменте сети, путем копирования на него синхронизированных репозиториев с помощью, например, внешнего носителя.

Описанные ниже способы организации доступа подходят для обоих вариантов.

Организация доступа через NFS

На сервере, к которому будут подключаться клиенты для доступа к репозиториям выполните следующие действия:

  1. Установите пакет для создания и настройки NFS-хранилища:

    dnf install nfs-utils -y
  2. Если установлен firewalld, то необходимо открыть порты и перечитать конфигурацию:

    firewall-cmd --permanent --zone=public --add-service=nfs
    firewall-cmd --reload
  3. Запустите службу NFS сервера:

    systemctl enable --now nfs-server
  4. Опубликуйте каталог с репозиториями и назначьте права доступа в файле /etc/exports. Например:

    /local-repo 192.168.1.0/24(ro) (1)
    1 В этом примере разрешается доступ только для чтения (ro) для устройств с адресами из подсети 192.168.1.0/24.
  5. Применить новые настройки NFS каталогов:

    exportfs -ra
Если доступ к репозиториям настраивается на изолированном сервере, необходимо синхронизированные репозитории скопировать в каталог, настроенный для экспорта (п.4).
Организация доступа через HTTP(S) с помощью Nginx

На сервере, к которому будут подключаться клиенты для доступа к репозиториям выполните следующие действия:

  1. Установите веб-сервер nginx в соответствии с инструкцией согласно своей операционной системе.

  2. Настройте секцию server конфигурационного файла /etc/nginx/nginx.conf (см. пример ниже).

  3. Проверьте конфигурацию на отсутствие ошибок:

    nginx -t
  4. Если установлен firewalld, то необходимо открыть порты (в примере открыт только http порт) и перечитать конфигурацию:

    firewall-cmd --permanent --add-service=http
    firewall-cmd --reload
  5. Активируйте и запустите сервис:

    systemctl enable --now nginx.service
Если доступ к репозиториям настраивается на изолированном сервере, необходимо синхронизированные репозитории скопировать в каталог, указанный для публикации в файле /etc/nginx/nginx.conf (см. пример ниже). По умолчанию, для nginx это каталог /usr/share/nginx/html.
Пример 1. Параметры секции server в /etc/nginx/nginx.conf
server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /local-repo; (1)

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            autoindex on;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
1 Каталог, в котором находятся локальные репозитории

2. Настройка клиентов для подключения к локальным репозиториям

Для того, чтобы хосты и Менеджер управления (далее, клиенты) могли использовать локальные репозитории, необходимо отредактировать параметр baseurl в конфигурационном файле репозитория, указав корректную ссылку.

Получение доступа через NFS
  1. На клиенте установите пакет nfs-utils:

    dnf install nfs-utils -y
    В zVirt Node установлен по умолчанию, но не будет лишним убедиться в его наличии.
  2. На клиенте создайте директорию, в которую будет смонтирован nfs-каталог, например:

    mkdir /repo
  3. Смонтируйте удаленное NFS-хранилище в созданный каталог:

    mount -t nfs <IPADDRESS>:/local-repo /repo` (1)
    1 <IPADDRESS> - IP адрес сервера с NFS-хранилищем
  4. Настроите клиента на использование локального репозитория указав данные для подключения в файле /etc/yum.repos.d/zvirt-stable.repo:

    [zvirt-main]
    name=zVirt 4.1 main repository
    baseurl=file:///repo/zvirt-main (1)
    enabled=1
    skip_if_unavailable=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-ZVIRT-NODE
    
    [zvirt-extras]
    name=zVirt extras repository
    baseurl=file:///repo/zvirt-extras (2)
    enabled=1
    skip_if_unavailable=1
    gpgcheck=0
    1 Путь к каталогу zvirt-main в смонтированной nfs-шаре
    2 Путь к каталогу zvirt-extras в смонтированной nfs-шаре
Получение доступа через HTTP

Настроите клиента на использование локального репозитория указав данные для подключения в файле /etc/yum.repos.d/zvirt-stable.repo:

+

[zvirt-main]
name=zVirt 4.1 main repository
baseurl=http://<IPADDRESS>/zvirt-main/ (1)
enabled=1
skip_if_unavailable=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-ZVIRT-NODE

[zvirt-extras]
name=zVirt extras repository
baseurl=http://<IPADDRESS>/zvirt-extras/ (1)
enabled=1
skip_if_unavailable=1
gpgcheck=0
1 <IPADDRESS> - IP-адрес сервера Nginx, на котором предоставляется доступ к репозиториям.

3. Возможные проблемы

3.1. Во время выполнения синхронизации происходят ошибки скачивания:

Добавьте в секцию [main] файла /etc/dnf/dnf.conf параметры timeout и max_parallel_downloads:

[main]
...
timeout=60
max_parallel_downloads=1

3.2. Во время использования локального репозитория не скачиваются файлы большого объема

  1. Добавьте в секцию http конфигурационного файла /etc/nginx/nginx.conf строку client_max_body_size 2G;

  2. Проверьте конфигурацию на отсутствие ошибок:

    nginx -t
  3. Перезапустите сервис:

    systemctl restart nginx.service

3.3. Если включен SELinux, то возможны следующие ошибки:

При запуске nginx появляется ошибка:

Job for nginx.service failed because the service did not take the steps required by its unit configuration.
See "systemctl status nginx.service" and "journalctl -xe" for details.

В sealert присутствует следующее:

SELinux is preventing /usr/sbin/nginx from 'read, write' accesses on the file nginx.pid.

Необходимо:

  1. Создать каталог /var/run/nginx.

  2. Выполнить команду

    restorecon -R -v /var/run/nginx*
  3. Попробовать запустить nginx

    systemctl enable --now nginx.service

При доступе в репозиторий через веб браузер каталоги внутри пустые. При попытке подключится к репозиторию выводится ошибка:

Errors during downloading metadata for repository 'zvirt-local':
  - Status code: 404 for http://192.168.1.21/repository/zvirt-local-main/repodata/repomd.xml (IP: 192.168.1.21)
Error: Failed to download metadata for repo 'zvirt-local-main': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
Ignoring repositories: zvirt-local-main

Необходимо проверить SELinux атрибуты каталога репозитория и назначить по необходимости, выполнив команды

semanage fcontext -a -t httpd_sys_content_t '/var/www(/.*)?'
restorecon -Rv /var/www