Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

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

Аннотация

Для организации локального доступа к репозиториям 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.X/ (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 Замените URL на подходящий для соответствующей версии.
    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 на актуальную для ваших репозиториев.
    Данный шаг не актуален для версии zVirt 5.0.
  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.

Для версии zVirt 5.0 удалите строку 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 из планировщика.
Способ 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 main
      baseurl=file:///var/zvirt-repo/repo/zvirt-4/4.X/ (1)
      gpgcheck=0
      enabled=1
      
      [offline_zvirt_extras]
      name=zvirt extras
      baseurl=file:///var/zvirt-repo/repo/zvirt-4/extras (1)
      gpgcheck=0
      enabled=1
      1 Замените URL на подходящий для соответствующей версии.

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

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

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

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

    mount -o loop ./repos_zvirt_44_202508181913.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 Каталог, в котором находятся локальные репозитории

1.3. Обновление локальных репозиториев

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

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

  1. Обновите конфигурацию репозиториев:

    cat /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.X/ (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 Замените URL на подходящий для соответствующей версии.
    2 Имя пользователя для доступа к официальным репозиториям.
    3 Пароль для доступа к официальным репозиториям.
  2. Обновите локальную копию zvirt-main и выполните синхронизацию с новым репозиторием:

    rm -rf /local-repo/zvirt-main
    reposync --refresh --delete --download-metadata --repoid=zvirt-main -p /local-repo
  3. Обновить кэш:

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

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

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

    wget https://repo-zvirt.orionsoft.ru/repository/zvirt-4/4.5/iso/repos_zvirt_45_202601211912.iso
  2. Отмонтируйте старый репозиторий:

    umount /mnt/repo
  3. Смонтируйте образ в новый репозиторий:

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

    mkdir -p /var/zvirt-repo
    ln -s /mnt/repo /var/zvirt-repo
  5. Проверьте структуру каталогов:

    ls -la /mnt/repo/
    cat /etc/yum.repos.d/offline_zvirt.repo
    
    [offline_zvirt_main]
    name=zvirt main
    baseurl=file:///var/zvirt-repo/repo/4.5/ (1)
    gpgcheck=0
    enabled=1
    
    [offline_zvirt_extras]
    name=zvirt extras
    baseurl=file:///var/zvirt-repo/repo/extras-4.5/ (1)
    gpgcheck=0
    enabled=1
    1 Замените URL на путь до директории repodata.
  6. Обновите кэш:

    dnf makecache

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 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 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