Организация локального репозитория
Аннотация
Для организации локального доступа к репозиториям zVirt существует два варианта: использование протокола NFS или веб-сервера NGINX.
Независимо от выбранного способа, общая процедура состоит из следующих шагов:
-
Создание локальных репозиториев на выбранном сервере путем синхронизации с официальными репозиториями Orionsoft.
-
Настройка доступа к локальным репозиториям:
-
с помощью NFS или
-
с помощью NGINX.
-
-
Настройка клиентских машин для работы с локальными репозиториями.
1. Организация локального репозитория
-
RedHat-подобная операционная система.
-
Утилита
reposync
из состава пакетаyum-utils
. -
Установленный пакет
nfs-utils
; -
Наличие доступа в интернет;
-
Действующие логин и пароль от репозиториев zVirt;
-
Наличие свободного дискового пространства объемом не менее 20Гб;
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 Пароль для доступа к официальным репозиториям Имя пользователя и пароль для доступа к репозиториям берутся из лицензионного сертификата, выданного при покупке продукта. -
Создайте директорию для локального репозитория, например: /local-repo
mkdir /local-repo
-
Установите (в том случае, если он не установлен ранее) пакет
dnf-utils
:dnf install -y dnf-utils
-
Выполните синхронизацию локального каталога с официальными репозиториями Orionsoft:
reposync --refresh --delete --download-metadata --repoid=zvirt-main,zvirt-extras -p /local-repo
-
Скачайте из официального репозитория 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 на актуальную для ваших репозиториев. -
Настройте задание для автоматической синхронизации:
-
Откройте редактор планировщика:
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 и выше. |
Описанную ниже процедуру можно выполнить:
|
Для организации локальных репозиториев с помощью ISO-образа, хранящегося в репозиториях zVirt, выполните следующие действия:
-
Скачайте ISO-образ, содержащий актуальные версии репозиториев из каталога iso в ветке нужной версии. Например, для zVirt 4.1:
wget https://repo-zvirt.orionsoft.ru/repository/zvirt-4/4.1/iso/repos_zvirt_41_202404181833.iso
-
Создайте каталог, в который будет смонтирован образ, например:
mkdir /mnt/repo
-
Смонтируйте образ в созданный каталог:
mount -o loop ./repos_zvirt_41_202404181833.iso /mnt/repo
-
Создайте каталог с символической ссылкой на каталог с репозиториями. Данный каталог будет использоваться для предоставления доступа к репозиториям.
mkdir -p /var/zvirt-repo ln -s /mnt/repo /var/zvirt-repo
Перейдите к настройке сетевого доступа к репозиториям или настройте локальный доступ, как указано в примечании выше.
1.2. Настройка сетевого доступа к локальным репозиториям
Доступ к локальным репозиториям можно настроить двумя способами:
Описанные ниже способы организации доступа подходят для обоих вариантов. |
Организация доступа через NFS
На сервере, к которому будут подключаться клиенты для доступа к репозиториям выполните следующие действия:
-
Установите пакет для создания и настройки NFS-хранилища:
dnf install nfs-utils -y
-
Если установлен firewalld, то необходимо открыть порты и перечитать конфигурацию:
firewall-cmd --permanent --zone=public --add-service=nfs firewall-cmd --reload
-
Запустите службу NFS сервера:
systemctl enable --now nfs-server
-
Опубликуйте каталог с репозиториями и назначьте права доступа в файле
/etc/exports
. Например:/local-repo 192.168.1.0/24(ro) (1)
1 В этом примере разрешается доступ только для чтения (ro) для устройств с адресами из подсети 192.168.1.0/24. -
Применить новые настройки NFS каталогов:
exportfs -ra
Если доступ к репозиториям настраивается на изолированном сервере, необходимо синхронизированные репозитории скопировать в каталог, настроенный для экспорта (п.4). |
Организация доступа через HTTP(S) с помощью Nginx
На сервере, к которому будут подключаться клиенты для доступа к репозиториям выполните следующие действия:
-
Установите веб-сервер
nginx
в соответствии с инструкцией согласно своей операционной системе. -
Настройте секцию server конфигурационного файла /etc/nginx/nginx.conf (см. пример ниже).
-
Проверьте конфигурацию на отсутствие ошибок:
nginx -t
-
Если установлен firewalld, то необходимо открыть порты (в примере открыт только http порт) и перечитать конфигурацию:
firewall-cmd --permanent --add-service=http firewall-cmd --reload
-
Активируйте и запустите сервис:
systemctl enable --now nginx.service
Если доступ к репозиториям настраивается на изолированном сервере, необходимо синхронизированные репозитории скопировать в каталог, указанный для публикации в файле /etc/nginx/nginx.conf (см. пример ниже). По умолчанию, для nginx это каталог /usr/share/nginx/html. |
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
-
На клиенте установите пакет nfs-utils:
dnf install nfs-utils -y
В zVirt Node установлен по умолчанию, но не будет лишним убедиться в его наличии. -
На клиенте создайте директорию, в которую будет смонтирован nfs-каталог, например:
mkdir /repo
-
Смонтируйте удаленное NFS-хранилище в созданный каталог:
mount -t nfs <IPADDRESS>:/local-repo /repo` (1)
1 <IPADDRESS> - IP адрес сервера с NFS-хранилищем -
Настроите клиента на использование локального репозитория указав данные для подключения в файле /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. Во время использования локального репозитория не скачиваются файлы большого объема
-
Добавьте в секцию http конфигурационного файла /etc/nginx/nginx.conf строку
client_max_body_size 2G;
-
Проверьте конфигурацию на отсутствие ошибок:
nginx -t
-
Перезапустите сервис:
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.
Необходимо:
-
Создать каталог /var/run/nginx.
-
Выполнить команду
restorecon -R -v /var/run/nginx*
-
Попробовать запустить 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