README.md

Установка сервера централизованных обновлений

  • Система работает в Docker контейнерах (не является частью решения, устанавливается и настраивается самостоятельно) и организует Repository Mirror Tools (RMT) сервер в режиме AirGap (disconnected setup), т.е. в изолированной среде.
  • Система автоматически синхронизирует новые пакеты с удаленного сервера по расписанию и импортирует их в локальную базу RMT
  • Требуется доступ по ssh (для rsync) к хосту RMT_REMOTE_HOST по порту RMT_REMOTE_PORT (значения предоставляются по электронной почте)
  • Особенностью airgap установки является синхронизация всех находящихся на поддержке версий продуктов Product Support Lifecycle и всех Non-Mandatory репозиториев (например, Debuginfo, Sources, PackageHub+Backports, Developments Tools и пр.), что существенно увеличивает требования к размеру раздела.
  • Доступ предоставляется только для поддерживаемых (General Support, LTSS, ESPOS) продуктов из действующей подписки
  • Исходя из названия решения и особенностей реализации, весь online функционал rmt-cli, требующий доступа к SCC, отсутствует. (rmt-cli synс, export, mirror и пр. не работает). Решение не нуждается в SCC Credentials и работает без них.

1. Установка linux с docker-compose

  • Рекомендованные (протестированные) дистрибутивы: openSUSE Leap 15.4+, openSUSE Tumbleweed, SLES 15.4+

1.1 файловая система

  • Файловая система ext4, единственный корневой раздел /
  • Размер раздела зависит от количества подписок и варьируется для продуктов SLES, в среднем, от 500Gb до 1Tb (примерно 200Gb на продукт)
  • Для уменьшения начального размера данных для скачивания и ускорения процесса первичного запуска RMT сервера, некоторые дополнительные продукты исключены из синхронизации (через список ./rsync/exclude.list). Для включения/исключения дополнительных репозиториев см п.5.3.1, п.5.4.1

1.2 имя хоста

Имя хоста дожно содержать FQDN (пример: rmt-airgap.acme.com)

openSUSE: # hostnamectl hostname rmt-airgap.acme.com
SLES: # hostnamectl set-hostname rmt-airgap.acme.com

1.3 обязательные пакеты для установки

  • docker-compose (уже есть в openSUSE Tumbleweed)
    или
  • python3-docker-compose

Пример для opensuse:15.5 (для репозитория Virtualization)

 # zypper ar -f https://download.opensuse.org/repositories/Virtualization:/containers/15.5/ containers
 # zypper ref
 # zypper install docker-compose

Наличие пакетов в репозиториях, поддерживаемых сообществом opensource, не гарантируется, как и самих репозиториев, следует самостоятельно установить и настроить docker и docker-compose

  • В некоторых случаях рекомендуется указать сеть для docker. Для opensuse (пример): # echo 'DOCKER_OPTS="--bip=192.168.187.1/24"' >> /etc/sysconfig/docker

2. Настройка хоста Docker

2.1 Разрешить и запустить сервис docker

 #systemctl enable docker --now

3. Запуск системы RMT

3.1 получить из git (или развернуть из предоставленного архива файлы настройки контейнеров)

 # cd
 # git clone https://gitflic.ru/project/stman/rmt-docker-airgap.git
 # cd rmt-docker-airgap

Если служба безопасности не предоставляет доступа к gitflic.ru (и/или к hub.docker.com), текущий проект и актуальные образы можно скачать с удаленного сервера из каталога /var/lib/rmt/project/

3.2 Изменение (ОБЯЗАТЕЛЬНО) файл .env

Файл содержит значения переменных для работы контейнеров

3.2.1 персональные значения RSYNC_USER и USER_PASS предоставляются по электронной почте ответственному контакту

  • RSYNC_USER=“ИМЯ ПОЛЬЗОВАТЕЛЯ ДЛЯ СИНХРОНИЗАЦИИ”
  • USER_PASS=“ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ ДЛЯ СИНХРОНИЗАЦИИ”
  • RMT_REMOTE_HOST=“FQDN удаленного сервера”
  • RMT_REMOTE_PORT=“Порт удаленного сервера синхронизации”

3.2.2 изменить временную зону TZ на локальное значение

  • TZ=“Таймзона”
    обновления будут автоматически стартовать зеркалироваться в случайное время в период с 00:00 до 06:59, указание локальной зоны необходимо, чтобы диапазон не смещался
    Example:
 RSYNC_USER=Z27248579
 USER_PASS=i3EC%ia3E'iABo:^g8N
 TZ=Europe/Moscow
 RMT_REMOTE_HOST=updates.remoteserver.com
 RMT_REMOTE_PORT=165589

3.3 При необходимости изменить пароль CA в файле certgen.sh

   export CA_PWD="PASSWORD" (например, export CA_PWD="_rmt")

3.4 Создание сертификатов для работы RMT

Выполнить скрипт создания сертификатов

 # sh certgen.sh

в результате работы в каталоге ./ssl должны быть файлы:

  • rmt-ca.cnf - присутствует изначально
  • rmt-ca.crt
  • rmt-ca.key
  • rmt-ca.srl
  • rmt-server.cnf - присутствует изначально
  • rmt-server.crt
  • rmt-server.csr
  • rmt-server.key

3.5 Проверка соединения и запуск контейнеров

  • Перед запуском контейнеров обязательно проверить возможность соединения системы с удаленным сервером RMT_REMOTE_HOST по порту RMT_REMOTE_PORT
    Например:
 # ssh -p RMT_REMOTE_PORT RSYNC_USER@RMT_REMOTE_HOST

Если используется прокси-сервер, см. п. 8.1
Скачивание/обновление образов (выполнять необязательно, отсутствующие образы будут скачаны при старте автоматически с DockerHub):

 # docker-compose pull

Если служба безопасности не предоставляет доступа к hub.docker.com (и/или к gitflic.ru), актуальные образы и проект можно скачать с сервера из каталога /var/lib/rmt/project/
Запуск контейнеров:

 # docker-compose up -d

3.6 Проверка работоспособности контейнеров

 # docker-compose ps
------------
NAME                    COMMAND                  SERVICE             STATUS              PORTS
rmt-docker-airgap-db-1      "/entrypoint.sh mysq…"   db                  running             3306/tcp
rmt-docker-airgap-nginx-1   "/usr/local/bin/entr…"   nginx               running             0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp
rmt-docker-airgap-rmt-1     "/bin/bash /usr/loca…"   rmt                 running   
------------
  • Контейнеры могут иметь именование с “_” вместо “-” в зависимости от версии docker-compose

3.7 Проверка синхронизации данных

  • !ВНИМАНИЕ!
  • При каждом старте контейнера rmt будет запущена | возобновлена синхронизация пакетов с удаленного сервера
  • Не предпринимайте никаких действий до успешного завершения синхронизации
    Время ожидания зависит от количества подписок и скорости канала (в среднем, процесс занимает около 3-6 часов)
    При старте контейнера производится четыре действия:
  • формирование пары ключей ssh и передача публичного ключа на удаленный сервер (см. каталог .ssh)
  • получение файлов json с удаленного сервера для первичной настройки базы данных RMT и системы в соответствие с подписками (./public/settings)
  • синхронизация пакетов с удаленного сервера (./public/repo/SUSE)
  • импорт (rmt-cli import) полученных пакетов в базу данных локального RMT сервера

При старте контейнера rmt и начале синхронизации данных с удаленного сервера в каталоге ./pubic/log создается журнал утилиты rsync в формате data_start_год-месяц-день_час:мин.log
Настройки локального сервера RMT скачиваются с удаленного сервера в каталог ./public/settings

Посмотреть текущий статус синхронизации:

 # tail -f ./public/log/data_start_[DATE].log

После завершения процесса файл будет сжат gzip, посмотреть его можно zcat ./public/log/data_start_[DATE].gz

  • Синхронизация завершится, когда в каталоге ./public/ будет присутствовать файл data_start_[DATE].log.gz с текущей датой, соответствующей дате и времени запуска контейнера.
  • !!! Наберитесь терпения. Все последующие действия не будут иметь никакого значения до тех пор, пока синхронизация не завершится !!!

3.8 Проверка наполнения RMT данными

Процесс синхронизации пакетов журналируется в файл ./pubic/log/data_start_год-месяц-день_час:мин.log (см. п.3.7)
По завершении импорта пакетов в базу RMT в каталоге ./public будет создан пустой файл “Initial Sync and Import DONE”

  • !!! Дождитесь старта контейнера rmt, завершения всех процессов синхронизации и импорта (контролируйте журнал) и создания этого файла !!!

Проверить наличие продуктов в базе данных

 # docker-compose exec rmt rmt-cli products list --all

Пример:


+------+----------------------------------------------------------------------+---------+---------+--------------+-------------------------+
| ID   | Product                                                              | Version | Arch    | Mirror?      | Last mirrored           |
+------+----------------------------------------------------------------------+---------+---------+--------------+-------------------------+
| 1946 | Basesystem Module                                                    | 15 SP2  | x86_64  | Don't Mirror |                         |
|      | sle-module-basesystem/15.2/x86_64                                    |         |         |              |                         |
| 2145 | Basesystem Module                                                    | 15 SP3  | x86_64  | Don'tMirror  |                         |
|      | sle-module-basesystem/15.3/x86_64                                    |         |         |              |                         |
| 2299 | Basesystem Module                                                    | 15 SP4  | x86_64  | Don'tMirror  |                         |
|      | sle-module-basesystem/15.4/x86_64                                    |         |         |              |                         |
| 2474 | Basesystem Module                                                    | 15 SP5  | x86_64  | Don't Mirror |                         |
|      | sle-module-basesystem/15.5/x86_64                                    |         |         |              |                         |
| 2136 | SUSE Linux Enterprise Server for SAP Applications                    | 15 SP3  | x86_64  | Don't Mirror |                         |
|      | SLES_SAP/15.3/x86_64                                                 |         |         |              |                         |
|  ... | ...                                                                  | ...     |  ...    |  ...         |                         |
| 2294 | SUSE Linux Enterprise Server for SAP Applications                    | 15 SP4  | x86_64  | Don't Mirror |                         |
|      | SLES_SAP/15.4/x86_64                                                 |         |         |              |                         |
+------+----------------------------------------------------------------------+---------+---------+--------------+-------------------------+

*В случае отсутствия списка продуктов, проверить каталог ./public/repo/SUSE на наличие структуры каталогов репозиториев (Backports Products Updates) и пакетов .rpm, если таковые отсутствуют, дождаться окончачия автоматической синхронизации см. п.3.7

3.9 Включение (enable) необходимых продуктов и репозиториев

  • По умолчанию в режиме AirGap система не имеет включенных продуктов и репозиториев.
    Список доступных ID продуктов
 # docker-compose exec rmt rmt-cli products list --all

(в примере 2136 - SLES for SAP 15.3)

 # docker-compose exec rmt rmt-cli products enable 2136

Проверить включенные продукты

 # docker-compose exec rmt rmt-cli products list
  • Будут подключены только Mandatory репозитории, соответствующие базовому продукту. Если требуется подключить дополнительные продукты|репозитории, см. п.5.3

3.10 Убедиться, что продукты|репозитории зеркалированы

В колонке “Last Mirrored” должно быть указано время последнего зеркалирования данных
Например:

 # rmt-cli products list

+------+---------------------------------------------------+---------+--------+---------+-------------------------+
| ID   | Product                                           | Version | Arch   | Mirror? | Last mirrored           |
+------+---------------------------------------------------+---------+--------+---------+-------------------------+
| 2145 | Basesystem Module                                 | 15 SP3  | x86_64 | Mirror  | 2022-10-17 23:43:54 UTC |
|      | sle-module-basesystem/15.3/x86_64                 |         |        |         |                         |
| 2299 | Basesystem Module                                 | 15 SP4  | x86_64 | Mirror  | 2022-10-17 23:44:35 UTC |
|      | sle-module-basesystem/15.4/x86_64                 |         |        |         |                         |
| 2149 | Desktop Applications Module                       | 15 SP3  | x86_64 | Mirror  | 2022-10-17 23:44:05 UTC |
|      | sle-module-desktop-applications/15.3/x86_64       |         |        |         |                         |
| 2198 | SAP Applications Module                           | 15 SP3  | x86_64 | Mirror  | 2022-10-17 23:44:17 UTC |
|      | sle-module-sap-applications/15.3/x86_64           |         |        |         |                         |
| 2153 | Server Applications Module                        | 15 SP3  | x86_64 | Mirror  | 2022-10-17 23:44:11 UTC |
|      | sle-module-server-applications/15.3/x86_64        |         |        |         |                         |
| 2307 | Server Applications Module                        | 15 SP4  | x86_64 | Mirror  | 2022-10-17 23:44:38 UTC |
|      | sle-module-server-applications/15.4/x86_64        |         |        |         |                         |
| 2195 | SUSE Linux Enterprise High Availability Extension | 15 SP3  | x86_64 | Mirror  | 2022-10-17 23:44:14 UTC |
|      | sle-ha/15.3/x86_64                                |         |        |         |                         |
| 2292 | SUSE Linux Enterprise Server                      | 15 SP4  | x86_64 | Mirror  | 2022-10-17 23:44:21 UTC |
|      | SLES/15.4/x86_64                                  |         |        |         |                         |
| 2136 | SUSE Linux Enterprise Server for SAP Applications | 15 SP3  | x86_64 | Mirror  | 2022-10-17 23:43:16 UTC |
|      | SLES_SAP/15.3/x86_64                              |         |        |         |                         |
+------+---------------------------------------------------+---------+--------+---------+-------------------------+

Если дата последнего зеркалирования отсутствует, см. п.6.4

4. Регистрация систем в RMT

Все системы организации с поддерживаемым ПО (в период действия General Support) могут быть зарегистрированы непосредственно на сервере RMT для получения патчей и обновлений встроенными средствами.
Это может значительно снизить затраты на обновления множества систем организации.
Как зарегистрировать систему в RMT

  • При регистрации систем на RMT должны быть разрешены (enable) и синхронизированы (mirror) все продукты и модули SUSE, присутствующие на регистрируемой системе

  • При возникновении ошибки: Not all mandatory repositories are mirrored for product проверить наличие необзодимых продуктов на RMT
    Как посмотреть список продуктов/модулей

    • на системе, которая регистрируется в RMT
      # ll /etc/products.d
      
      # zypper se -si | grep release
      

4.1 Зайти на подключаемую систему под root

 > ssh root@${SYSTEM_TO_BE_REGISTER}

4.2 Скачать скрипт регистрации на систему

 # curl http://${RMT_SERVER}/tools/rmt-client-setup --output rmt-client-setup

4.3 Выполнить скрипт для регистрации системы в RMT

Принятые сертификаты будут импортированы в доверенное хранилище

 # sh rmt-client-setup https://${RMT_SERVER}/

4.4 Для клонированных систем

Для клонированных виртуальных систем перед регистрацией на RMT требуется определить уникальные параметры

 # rm /etc/machine-id
 # rm /var/lib/dbus/machine-id
 # rm /var/lib/zypp/AnonymousUniqueId
 # dbus-uuidgen --ensure
 # systemd-machine-id-setup

5. Дополнительные действия

  • Данные действия являются необязательными, сервер работает в автоматическом режиме, приведены для продвинутых пользователей.
 # cd ~/rmt-docker-airgap

5.1 Принудительная синхронизация пакетов

  • !ВНИМАНИЕ! При неполной первичной сихронизации или при добавлении новых продуктов процесс может занять много времени (см. п. 1.1 про особенности)
  • **Не выполняйте этот пункт, пока начальная синхронизация при старте котейнера (см. п.3.7) не завершилась
  • Выполнить принудительную синхронизацию репозиториев с удаленного сервера (используйте параметр -v для получения информации о процессе, будет много текста):
 # docker-compose exec rmt rmt-sync.sh repos [-v или -vv] 

При использовании ключа -v [-vv] каталоге ./pubic/log создается журнал утилиты rsync в формате data_manualv[vv]_год-месяц-день_час:мин.log

5.2 В случае изменения | добавления списка продуктов

  • Выполнить принудительную синхронизацию списка продуктов с удаленного сервера:
 # docker-compose exec rmt rmt-sync.sh settings [-v или -vv] [&> rmt-sync-settings.log]

При использовании ключа -v [-vv] каталоге ./pubic/log создается журнал утилиты rsync в формате settings_manualv[vv]_год-месяц-день_час:мин.log

5.3 Подключить продукт | репозиторий для получения обновлений

Подключение состоит из двух пунктов:

  • Подключение продукта | репозитория для синхронизации данных с удаленного сервера
  • Подключение продукта | репозитория для получения обновлений присоединенных систем

5.3.1 Подключить продукт | репозиторий для синхронизации пакетов с удаленного сервера

Для уменьшения данных синхронизации и ускорения процесса, необязательные продукты исключены из передачи путем добавления в список ./rsync/exclude.list
все действия, выполняемые со списком исключений, производятся под ответственность пользователя
Список соответствует правилам директивы –exclude-from от утилиты rsync

 # man rsync

Как это работает:

Например, ./rsync/exclude.list содержит строку

# The SUSE Cloud Application Platform ...
SLE-Module-CAP-Tools/

Это означает, что из процесса синхронизации данных с удаленного сервера будет исключен каталог SLE-Module-CAP-Tool, который содержит в себе соответствующий продукт и репозитории.
Если этот продукт действительно необходим, закомментировать ‘#’ и выполнить п 5.1 (или дождатся автоматической ежедневной синхронизации)
!Внимание!
Не изменяйте этот файл без необходимости и понимания последствий
После внесения изменений в файл может потребоваться перезагрузка контейнера rmt
Проверьте наличие внесенных изменений внутри контейнера docker-compose exec rmt cat /root/exclude.list и, в случае их отсутствия, перезагрузите docker-compose restart rmt
Если Вы не знаете, что нужно сделать, обратитесь в техподдержку за консультацией. Это поможет предотвратить скачивание огромного количества данных (например, только один Backports “весит” около 150Gb)

5.3.2 Подключить продукт | репозиторий для получения обновлений зарегистрированных клиентов

  • Убедиться, что данные не попадают в список исключений для синхронизации (см п.5.3.1)
  • Убедиться, что синхронизация успешно завершилась (см п.3.7 и п.5.1)

Для доступных продуктов:

 # docker-compose exec rmt rmt-cli products list --all
 # docker-compose exec rmt rmt-cli products enable ${PRODUCT_ID}
 # docker-compose exec rmt rmt-sync.sh import

Для доступных репозиториев:

 # docker-compose exec rmt rmt-cli repos list --all
 # docker-compose exec rmt rmt-cli repos enable ${REPO_ID}
 # docker-compose exec rmt rmt-sync.sh import

Формат команды rmt-cli products enable:

Usage:
  rmt-cli products enable TARGETS
Options:
  [--all-modules], [--no-all-modules]  # Enables all free modules for a product
Description:
  Enable mirroring of product repositories by a list of product IDs or product strings.

5.4 Отключить продукт | репозиторий

Отключить продукт | репозиторий можно в двух местах

  • Исключить из синхронизации данных с удаленного сервера (например, в случае отсутствия места на локальной системе)
  • Отключить на локальном RMT из базы данных, чтобы зарегистрированные системы не могли его использовать (например, в случае миграции систем на новую версию OS и старая больше не нужна)

5.4.1 Исключить продукт | репозиторий из синхронизации пакетов с удаленного сервера

Для уменьшения данных синхронизации и ускорения процесса, необязательные продукты исключены из передачи путем добавления в спискок ./rsync/exclude.list Все действия, выполняемые со списком исключений, производятся под ответственность пользователя
Список соответствует правилам директивы –exclude-from от утилиты rsync

 # man rsync

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

  • внести изменения в файл ./rsync/exclude.list (в соответствие с правилами исключения rsync)
  • выполнить принудительную синхронизацию (см. п.5.1) (как правило, уже синхронизированные пакеты будут удалены с локального храниища)
  • проверить отсутствие пакетов, при необходимости удалить вручную

Пример: В компании используется OS SLES15 SP3 (срок основной технической поддержки истёк) и планируется переход на OC SLES15 SP4. По умолчанию синхронизация SLES15 SP3 отключена (файл ./rsync/exclude.list)

Для получения обновлений SP3 до периода окончания основной поддержки (31 января 2023г), необходимо:
  • изменить файл exclude.list
    # SUSE Linux Enterprise Server 15 SPx Family (only General Support products enable by default)
    # If you've the SAP subscription(s) and use SLES15 SP1-SP3 (still in ESPOS support), you must add # before product line 
    # See https://www.suse.com/lifecycle/#suse-linux-enterprise-server-15 or https://www.suse.com/lifecycle/#suse-linux-enterprise-server-for-sap-applications-15 for details
    15-SP1/
    15-SP2/
    #15-SP3/
    #15-SP4/
    15-SP5
    
    Для уменьшения объёма данных также можно:
  • отключить синхронизацию SLES12 SP5 в exclude.list
    # SUSE Linux Enterprise Server 12 SPx Family (only General Support products enable by default)
    # See https://www.suse.com/lifecycle/#suse-linux-enterprise-server-for-sap-applications-12 for General Support Ends details
    12-SP1/
    12-SP2/
    12-SP3/
    12-SP4/
    12-SP5/
    

5.4.2 Отключить продукт | репозиторий в базе даных локального RMT

  • Если продукт | репозиторий действительно не нужен, рекомендуется его исключить из синхронизации (см. п.5.4.1) Для включенных продуктов:
 # docker-compose exec rmt rmt-cli products list
 # docker-compose exec rmt rmt-cli products disable ${PRODUCT_ID}
 # docker-compose exec rmt rmt-cli repos clean

Для включенных репозиториев:

 # docker-compose exec rmt rmt-cli repos list 
 # docker-compose exec rmt rmt-cli repos disable ${REPO_ID}
 # docker-compose exec rmt rmt-cli repos clean

5.5 Обновление сервера

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

  • Рекомендуется перед каждым перезапуском docker (особенно, если обнаружилась ошибка или проблема), а также время от времени производить обновление
    Для хоста:
 # zypper dup

Для контейнеров:

 # docker-compose pull
 # docker-compose down
 # docker-compose up -d

Для проекта:

 # git pull

Для проекта рекомендуется сохранить измененные вручную файлы и внести эти изменения в уже новые данные из проекта послн обновления (например .env и ./rsync/exclude.list). Не заменять, а исправить

  • Настоятельно рекомендуется сделать резервную копию базы данных - п.5.7 (вариант2: остановить контейнеры и скопировать папку mariadb “в сторону”)

5.6 Работа с SUSE Manager Server

В настоящее время поддерживаемой версией SUSE Manager является 4.3.1х
Работоспособность с SUSE Manager v5.0 временно не гарантируется
Инструкция по настройке сервера в режиме Disconnected
Читать следует именно с раздела 4:
Синхронизция данных RMT для работы сервера SUSE Manager

Mount your removable media device to the SUSE Manager server. In this example, the mount point is /media/disk.

Данные для removable media находятся в каталоге ./public

5.7 Создание резервной копии

 # mkdir ./mariadb/backup
 # docker-compose exec db mysqldump -u rmt -p rmt > ./mariadb/backup/rmt_backup_$(date +"%d-%m-%Y_%H:%M").sql

Пароль по умолчанию rmt
Результирующий файл ./mariadb/backup/rmt_backup_[date].sql является резервной копией базы данных и может быть использован для восстановления

5.8 Принудительная синхронизация с одновременным удалением каталогов от отключенных продуктов

В случае внесения в список исключений (запрета синхронизации) ранее синхронизированного продукта | репозитория, освободить место на диске:

 # docker-compose exec rmt rmt-sync.sh repos [-v или -vv]

с ключом “-v” одновременно поддерживается опция “-ni”, исключающая импорт в базу данных RMT
При использовании ключа -v [-vv] каталоге ./pubic/log создается журнал утилиты rsync в формате data_manualv[vv]_год-месяц-день_час:мин.log
Для отключения ранее используемого продукта | репозитория см. п.5.4.2
Принципиальные различия заключаются в том, что продукт может|будет синхронизироваться, но не использоваться для систем.
Например, SLES12SP5 (ID 1878) входит в список синхронизации по умолчанию и будет скачан локально при запуске контейнера и автоматически обновляться. Но, если продукт не включить (rmt-cli products enable 1878), он не будет доступен зарегистрированным системам.

5.9 Принудительная синхронизация репозитория

В случаях, когда продукт синхронизирован (соответствущий каталог продукта, как минимум, не пуст), а отдельные обязательные репозитории от него нет, следует удалить репозитории и пакеты от них и принудительно синхронизировать (вручную или автоматически)

docker-compose exec rmt rmt-cli products show 2562
Product: SUSE Package Hub 15 SP5 x86_64 (ID: 2562)
Repositories:

  • SUSE-PackageHub-15-SP5-Backports-Pool (id: 6113) (mandatory, enabled, not mirrored)
  • SUSE-PackageHub-15-SP5-Backports-Debuginfo (id: 6114) (non-mandatory, not enabled, not mirrored)
  • SLE-Module-Packagehub-Subpackages15-SP5-Updates (id: 6115) (mandatory, enabled, mirrored at 2023-10-20 12:00:26 UTC)
  • SLE-Module-Packagehub-Subpackages15-SP5-Debuginfo-Updates (id: 6116) (non-mandatory, not enabled, not mirrored)
  • SUSE-PackageHub-15-SP5-Pool (id: 6117) (mandatory, enabled, mirrored at 2023-10-20 12:00:26 UTC)
  • SLE-Module-Packagehub-Subpackages15-SP5-Pool (id: 6118) (mandatory, enabled, not mirrored)
  • SLE-Module-Packagehub-Subpackages15-SP5-Debuginfo-Pool (id: 6119) (non-mandatory, not enabled, not mirrored)
  • SLE-Module-Packagehub-Subpackages15-SP5-Source-Pool (id: 6120) (non-mandatory, not enabled, not mirrored)
 # docker-compose exec rmt rmt-cli disable repos 6113 6118
 # docker-compose exec rmt rmt-cli repos clean (yes)
 # docker-compose exec rmt rmt-sync.sh repos [-v | -vv]

с ключом “-v” одновременно поддерживается опция “-ni”, исключающая импорт в базу данных RMT
При использовании ключа -v [-vv] каталоге ./pubic/log создается журнал утилиты rsync в формате data_manualv[vv]_год-месяц-день_час:мин.log
Для отключения ранее используемого продукта | репозитория см. п.5.4.2
Принципиальные различия заключаются в том, что продукт может синхронизироваться, но не использоваться.
Например, SLES12SP5 (ID 1878) входит в список синхронизации по умолчанию и будет скачан локально при запуске контейнера и автоматически обновляться. Но, если продукт не включить (rmt-cli products enable 1878), он не будет доступен зарегистрированным системам и просто будет занимать место на диске.

5.10 Синхронизация отдельных файлов

В случае нобходимости получить отдельный файл, отсутствующий локально (например, файлы debuginfo или версии пакетов от поддерживаемых релизов SLE, не входящих в синхронизацию).. Например:

 # docker-compose exec rmt file-request.sh udev-debuginfo-228-157.24.1.x86_64.rpm
  • Допускается использование ‘*’ (с осторожностью и пониманием работы параметров "find -name ")
  • Запрошенный файл(ы) ищется сначала в локальном хранилище (./public/repo/), если что-то было найдено локально, предлагается поиск на удаленном сервере и потом предлагается загрузка, если файл(ы) был(и) найден(ы).
    Поскольку дополнительно запрошенные файлы не входят в список по умолчанию, они не импортируются в базу данных, недоступны зарегистрированным в RMT системам и могуть быть удалены при следующей синхронизации

6. Диагностика и устранение проблем:

Перед началом диагностики проблем необходимо проверить из контейнера rmt возможность соединения с удаленным сервером RMT_REMOTE_HOST по порту RMT_REMOTE_PORT

Обновить образы контейнеров - п. 5.5
!!!имена образов контейнеров mariadb и nginx изменились!!!
Следует внести изменения (или скачать с проекта) в файл docker-compose.yml

db:
image: suseru/rmt-mariadb:latest


nginx:
image: suseru/rmt-nginx:latest

Для контроля за первоначальной синхронизацией:

  • Проверить наличие файлов json в ./public/settings и ./public/repo/ (копия) - если файлов нет, проверить доступность сервера RMT_REMOTE_HOST по порту RMT_REMOTE_HOST из контейнера rmt
  • Проверить каталоги ./public/repo/SUSE/Products и ./public/repo/SUSE/Updates - размер должен увеличиваться по мере наполнения данными

6.1 Контейнеры не запускаются или запускаются не все

  • Проверить правильность выполнения пп. 3.2 - 3.4
  • Перезапустить контейнеры
 # docker-compose down
 # docker-compose up -d
  • Обновить образ (возможно, проблема уже решена) Выполнить п.5.5
  • Посмотреть журнал работы контейнера (пример для rmt, 50 строк):
 # docker logs --tail=50 rmt-docker-airgap-rmt-1

6.2 В каталоге ./public/repo/SUSE отсутствуют папки и файлы

  • Проверить правильность выполнения пп. 3.2 - 3.4
  • Проверить журнал синхронизации п.3.7
  • Выполнить п.5.1
  • Выполнить п.5.5
  • Посмотреть журнал работы контейнера (пример для rmt, 50 строк):
 # docker logs --tail=50 rmt-docker-airgap-rmt-1
  • Если проблема не решилась, создать заявку на портале технической поддержки, приложить к заявке файл журнала работы контейнера rmt

6.3 В списках продуктов | репозиториев отсутствуют необходимые

  • Проверить наличие действующей подписки на продукт
  • Выполнить действия из п.5.2
    Список продуктов и репозиториев будет обновлен
  • Проверить доступность продукта | репозитория, см. п.5.3
  • Если проблема не решилась, обратиться в техническую поддержку, предоставить с заявкой результат команд и последние файлы журналов из ./public/log

Для продукта:

 # docker-compose exec rmt rmt-cli products list --all > ~/products-list-all.txt

Для репозитория:

 # docker-compose exec rmt rmt-cli repos list --all > ~/repos-list-all.txt

результат также можно сохранить в формате csv, указав ключ –csv

6.4 В списках продуктов | репозиториев отсутствует дата последнего зеркалирования

При выполнении п.3.9 в колонке “Last Mirrored” отсутствует значение даты

  • Проверить наличие действующей подписки на продукт и синхронизацию данных с удаленного сервера
  • Выполнить принудительный импорт данных в базу данных RMT:
 # docker-compose exec rmt rmt-sync.sh import [-v или -vv]

7. Описание данных

В проекте используются:

  • /var/lib/rmt/public/repo - стандартный путь RMT для хранения данных
  • $HOME/rmt - каталог для хранения файлов json (настройки базы продуктов и подписов)
  • /var/lib/rmt/project/ - содержит копию docker образов и данный проект для тех, у кого запрещены dockerhub и gitflic (читайте README.txt)

Доступ разрешен *только с одного хоста и только через команды rsync over ssh
Если хост Docker изменился и система обновлений не работает, создайте обращение на портале техподдержки

8. Экспериментальные функции

Как правило, используют образы с тегом :test

8.1 Настроить работу через Proxy

8.1.1 Включить Proxy

  • Остановить контейнеры
 # docker-compose down
  • Переименовать файл docker-compose-pxy.yml в docker-compose.yml
 # mv docker-compose.yml docker-composer-org.yml
 # cp docker-compose-pxy.yml docker-composer.yml
  • Указать значения PROXY_HOST и PROXY_PORT в файле .env (если есть авторизация, указать также PROXY_USER и PROXY_PASS, тип прокси по умолчанию указан http)
    возможно, потребуется обновить файл .env из проекта, или добавить нужные поля вручную
  • Запустить контейнеры
 # docker-compose up -d

8.1.2 Выключить Proxy

  • Остановить контейнеры
    # docker-compose down
    Установить значение PROXY_HOST в файле .env на пустое
    PROXY_HOST=
    При необходимости, вернуть оригинальный docker-compose.yml
    cp -f docker-compose-org.yml docker-composer.yml
    Запустить контейнеры
    # docker-compose up -d

Все вопросы принимаются только по работе системы RMT и оформляются заявками на портале технической поддержки с вложением журналов ошибок

Техническая поддержка осуществляется на текущую оригинальную (немодифицированную) версию образа контейнера rmt-airgap

Описание

Docker-compose Repository Mirror Tools for AirGap environment

Конвейеры
0 успешных
0 с ошибкой