README.md

Оглавление

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

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

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

  • Рекомендованные (протестированные) дистрибутивы: openSUSE Leap 15.6+, openSUSE Tumbleweed, SLES 15.6+
  • Файловая система рекомендуется ext4, единственный корневой раздел /
  • Размер раздела зависит от количества продуктов и варьируется для SUSE, в среднем, от 500Gb до 1Tb (примерно 200Gb на продукт)
  • Для уменьшения начального размера данных для скачивания и ускорения процесса первичного запуска RMT сервера, включены только рекомендованные репозитории продуктов (через список ./rsync/exclude.list). Для включения/исключения дополнительных репозиториев см п.5.3.1, п.5.4.1
    Имя хоста дожно содержать FQDN (пример: rmt-airgap.acme.com)
openSUSE: # hostnamectl hostname rmt-airgap.acme.com
SLES: # hostnamectl set-hostname rmt-airgap.acme.com
  • docker-compose (уже есть в openSUSE Tumbleweed)

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

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

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

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

Включить и запустить сервис docker

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

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

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

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

*Имя папки обязательно должно быть rmt-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=“Порт удаленного сервера синхронизации”
  • PRODUCTS_ID=“ID продуктов, которые необходимо включить после старта, (через пробел)”

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

  • TZ=“Таймзона”
  • По умолчанию установлена зона Москвы обновления будут автоматически зеркалироваться в случайное время в период с 00:00 до 06:59, указание локальной зоны необходимо, чтобы диапазон не смещался

    Пример параметров файла .env
 RSYNC_USER=Z27248579
 USER_PASS=i3EC%ia3E'iABo:^g8N
 TZ=Europe/Moscow
 RMT_REMOTE_HOST=updates.remoteserver.com
 RMT_REMOTE_PORT=16589
 PRODUCTS_ID=2609 2465

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

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

 # 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

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

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

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

  • Перед запуском контейнеров обязательно проверить возможность соединения системы с удаленным сервером RMT_REMOTE_HOST по порту RMT_REMOTE_PORT (т.е. доступность порта для системы)
    Например:
 # ssh -p RMT_REMOTE_POR -o ConnectTimeout=3 -o BatchMode=yes -o StrictHostKeyChecking=no user@RMT_REMOTE_HOST "exit"

Вывод будет что-то вроде Permission denied (publickey,password,keyboard-interactive) - то нормально, это просто проверка доступности (см. п.7)

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

 # docker-compose pull

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

 # docker-compose up -d

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

# docker-compose ps
------------
NAME                 IMAGE                                                                        COMMAND                  SERVICE   CREATED          STATUS                    PORTS
rmt-airgap-db-1      registry.opensuse.org/opensuse/mariadb:latest                                "docker-entrypoint.s…"   db        11 minutes ago   Up 11 minutes (healthy)   3306/tcp
rmt-airgap-nginx-1   registry.opensuse.org/opensuse/rmt-nginx:latest                              "/usr/local/bin/dock…"   nginx     11 minutes ago   Up 11 minutes             0.0.0.0:80->80/tcp, :::80->80/tcp
rmt-airgap-rmt-1     registry.opensuse.org/opensuse/rmt-server:latest                             "/usr/local/bin/entr…"   rmt       11 minutes ago   Up 11 minutes             
rmt-airgap-sync-1    registry.gitflic.ru/project/stman/docker-rmt-airgap-config/rmt-sync:latest   "/usr/local/bin/rmt-…"   sync      11 minutes ago   Up 11 minutes   
------------

Контейнеры должны иметь именование с “-” а, не “_” (как указано в примере выше), иначе синхронизация работать не будет

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

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

При старте контейнера rmt-sync и начале синхронизации данных с удаленного сервера в каталоге ./public/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.7 Проверка наполнения RMT данными

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

  • !!! Дождитесь старта контейнера sync, завершения всех процессов синхронизации и импорта (контролируйте журнал) и создания этого файла !!!
    Посмотреть журнал работы контейнера sync:
 # docker-compose logs --tail=50 sync
Вывод синхронизации при включенных продуктах 2609 и 2465
sync-1  | Sync initial rmt settings
sync-1  | Sync repos (first time maybe too long). Be patience...
sync-1  | Initial sync amd import done. Try to run 'docker-compose exec rmt rmt-cli product list --all'
sync-1  | Found product by target 2609: SUSE Linux Enterprise Server 15 SP6 x86_64.
sync-1  | Enabling SUSE Linux Enterprise Server 15 SP6 x86_64:
sync-1  |   SUSE Linux Enterprise Server 15 SP6 x86_64:
sync-1  |     Enabled repository SLE-Product-SLES15-SP6-Pool.
sync-1  |     Enabled repository SLE-Product-SLES15-SP6-Updates.
sync-1  |     Enabled repository SLE15-SP6-Installer-Updates.
sync-1  |   Basesystem Module 15 SP6 x86_64:
sync-1  |     Enabled repository SLE-Module-Basesystem15-SP6-Pool.
sync-1  |     Enabled repository SLE-Module-Basesystem15-SP6-Updates.
sync-1  |   Server Applications Module 15 SP6 x86_64:
sync-1  |     Enabled repository SLE-Module-Server-Applications15-SP6-Pool.
sync-1  |     Enabled repository SLE-Module-Server-Applications15-SP6-Updates.
sync-1  |   Python 3 Module 15 SP6 x86_64:
sync-1  |     Enabled repository SLE-Module-Python3-15-SP6-Pool.
sync-1  |     Enabled repository SLE-Module-Python3-15-SP6-Updates.
sync-1  | Found product by target 2465: SUSE Linux Enterprise Server 15 SP5 x86_64.
sync-1  | Enabling SUSE Linux Enterprise Server 15 SP5 x86_64:
sync-1  |   SUSE Linux Enterprise Server 15 SP5 x86_64:
sync-1  |     Enabled repository SLE-Product-SLES15-SP5-Pool.
sync-1  |     Enabled repository SLE-Product-SLES15-SP5-Updates.
sync-1  |     Enabled repository SLE15-SP5-Installer-Updates.
sync-1  |   Basesystem Module 15 SP5 x86_64:
sync-1  |     Enabled repository SLE-Module-Basesystem15-SP5-Pool.
sync-1  |     Enabled repository SLE-Module-Basesystem15-SP5-Updates.
sync-1  |   Server Applications Module 15 SP5 x86_64:
sync-1  |     Enabled repository SLE-Module-Server-Applications15-SP5-Pool.
sync-1  |     Enabled repository SLE-Module-Server-Applications15-SP5-Updates.
sync-1  |   Python 3 Module 15 SP5 x86_64:
sync-1  |     Enabled repository SLE-Module-Python3-15-SP5-Pool.
sync-1  |     Enabled repository SLE-Module-Python3-15-SP5-Updates.

Проверить наличие списка продуктов в базе данныx
# docker-compose exec rmt rmt-cli products list --all
+------+----------------------------------------------------------------------+---------+---------+--------------+---------------+
| ID   | Product                                                              | Version | Arch    | Mirror?      | Last mirrored |
+------+----------------------------------------------------------------------+---------+---------+--------------+---------------+
| 1763 | SUSE Linux Enterprise Server                                         | 15 SP1  | x86_64  | Don't Mirror |               |
|      | SLES/15.1/x86_64                                                     |         |         |              |               |
| 1939 | SUSE Linux Enterprise Server                                         | 15 SP2  | x86_64  | Don't Mirror |               |
|      | SLES/15.2/x86_64                                                     |         |         |              |               |
| 2140 | SUSE Linux Enterprise Server                                         | 15 SP3  | x86_64  | Don't Mirror |               |
|      | SLES/15.3/x86_64                                                     |         |         |              |               |
| 2292 | SUSE Linux Enterprise Server                                         | 15 SP4  | x86_64  | Don't Mirror |               |
|      | SLES/15.4/x86_64                                                     |         |         |              |               |
| 2465 | SUSE Linux Enterprise Server                                         | 15 SP5  | x86_64  | Don't Mirror |               |
|      | SLES/15.5/x86_64                                                     |         |         |              |               |
| 2609 | SUSE Linux Enterprise Server                                         | 15 SP6  | x86_64  | Don't Mirror |               |
|      | SLES/15.6/x86_64                                                     |         |         |              |               |
| 2793 | SUSE Linux Enterprise Server                                         | 15 SP7  | x86_64  | Don't Mirror |               |
|  ... | ...                                                                  | ...     |  ...    |  ...         |               |
| 2494 | Web and Scripting Module                                             | 15 SP5  | x86_64  | Don't Mirror |               |
|      | sle-module-web-scripting/15.5/x86_64                                 |         |         |              |               |
| 2646 | Web and Scripting Module                                             | 15 SP6  | x86_64  | Don't Mirror |               |
|      | sle-module-web-scripting/15.6/x86_64                                 |         |         |              |               |
| 2820 | Web and Scripting Module                                             | 15 SP7  | x86_64  | Don't Mirror |               |
|      | sle-module-web-scripting/15.7/x86_64                                 |         |         |              |               |
+------+----------------------------------------------------------------------+---------+---------+--------------+---------------+
**В случае отсутствия списка продуктов, проверить каталог `./public/repo/SUSE` на наличие структуры каталогов репозиториев (Backports Products Updates) и пакетов *.rpm, если таковые отсутствуют, дождаться окончачия автоматической синхронизации см. п.3.5**

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

  • По умолчанию rmt-airgap включает продукты из $ (по умолчанию 2609: SUSE Linux Enterprise Server 15 SP6 x86_6) и рекомендуемые репозитории.
    Список всех ID продуктов
 # docker-compose exec rmt rmt-cli products list --all

(в примере 2609 - SLES 15 SP6)

 # docker-compose exec rmt rmt-cli product show 2609
Пример вывода списка репозиториев продукта 2609
Product: SUSE Linux Enterprise Server 15 SP6 x86_64 (ID: 2609)
Description: SUSE Linux Enterprise offers a comprehensive suite of products built on a single code base. The platform addresses business needs from the smallest thin-client devices to the world's most powerful high-performance computing and mainframe servers. SUSE Linux Enterprise offers common management tools and technology certifications across the platform, and each product is enterprise-class.
Repositories:
* SLE-Product-SLES15-SP6-Updates (id: 6298) (mandatory, enabled, mirrored at 2025-02-11 06:08:08 UTC)
* SLE-Product-SLES15-SP6-Debuginfo-Updates (id: 6299) (non-mandatory, not enabled, not mirrored)
* SLE15-SP6-Installer-Updates (id: 6300) (non-mandatory, enabled, mirrored at 2025-02-11 06:08:08 UTC)
* SLE-Product-SLES15-SP6-Pool (id: 6301) (mandatory, enabled, mirrored at 2025-02-11 06:08:09 UTC)
* SLE-Product-SLES15-SP6-Debuginfo-Pool (id: 6302) (non-mandatory, not enabled, not mirrored)
* SLE-Product-SLES15-SP6-Source-Pool (id: 6303) (non-mandatory, not enabled, not mirrored)

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

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

# docker-compose exec rmt rmt-cli products list
+------+--------------------------------------------+---------+--------+---------+-------------------------+
| ID   | Product                                    | Version | Arch   | Mirror? | Last mirrored           |
+------+--------------------------------------------+---------+--------+---------+-------------------------+
| 2618 | Basesystem Module                          | 15 SP6  | x86_64 | Mirror  | 2025-02-10 18:14:55 UTC |
|      | sle-module-basesystem/15.6/x86_64          |         |        |         |                         |
| 2683 | Python 3 Module                            | 15 SP6  | x86_64 | Mirror  | 2025-02-10 18:15:02 UTC |
|      | sle-module-python3/15.6/x86_64             |         |        |         |                         |
| 2626 | Server Applications Module                 | 15 SP6  | x86_64 | Mirror  | 2025-02-10 18:15:00 UTC |
|      | sle-module-server-applications/15.6/x86_64 |         |        |         |                         |
| 2609 | SUSE Linux Enterprise Server               | 15 SP6  | x86_64 | Mirror  | 2025-02-10 18:14:32 UTC |
|      | SLES/15.6/x86_64                           |         |        |         |                         |
+------+--------------------------------------------+---------+--------+---------+-------------------------+
Only enabled products are shown by default. Use the '--all' option to see all products.

  • Будут подключены только Mandatory репозитории, соответствующие базовому продукту (2609). Если требуется подключить дополнительные продукты|репозитории, см. п.5.3
    Если дата последнего зеркалирования отсутствует, см. п.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 Зайти на подключаемую систему по ssh и выполнить регистрацию в RMT

 > sudo /usr/sbin/SUSEConnect --write-config --url http://{RMT_AirGap_Server}

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

Для клонированных виртуальных систем перед регистрацией на 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-airgap

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

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

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

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

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

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

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

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

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

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

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

 # man rsync

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

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

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

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

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

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

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

 # docker-compose exec rmt rmt-cli products list --all
 # docker-compose exec rmt rmt-cli products enable ${PRODUCT_ID}
 # docker-compose exec sync 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 sync 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) (уже синхронизированные пакеты, попадающие под исключения, будут удалены с локального храниища)
  • проверить отсутствие пакетов, при необходимости удалить вручную

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-compose (особенно, если обнаружилась ошибка или проблема), а также время от времени производить обновление
    Для хоста:
 # zypper dup

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

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

Для проекта:

 # git pull

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

5.6 Работа с SUSE Manager Server

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

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 sync rmt-sync.sh repos [-v или -vv]

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

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

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

docker-compose exec rmt rmt-cli products show 2687
Product: SUSE Package Hub 15 SP6 x86_64 (ID: 2687)
Description: SUSE Package Hub is a free of charge module providing access to community maintained packages built to run on SUSE Linux Enterprise Server. Built from the same sources used in the openSUSE distributions, these quality packages provide additional software to what is found in the SUSE Linux Enterprise Server product. Packages from the Package Hub are delivered without L3 support from SUSE. General updates and fixes to the packages in SUSE Package Hub are provided by the openSUSE community based on their discretion, though SUSE will monitor and ensure that any known critical security issues will be addressed. Packages in the Package Hub are approved by SUSE for use with SUSE Linux Enterprise Server 15-SP6 and to not interfere with the supportability of SUSE Linux Enterprise Server, its modules and extensions. For more information about SUSE Package Hub please visit https://packagehub.suse.com.
Repositories:
* SUSE-PackageHub-15-SP6-Backports-Pool (id: 6692) (**mandatory**, enabled, **not mirrored**)
* SUSE-PackageHub-15-SP6-Backports-Debuginfo (id: 6693) (non-mandatory, not enabled, not mirrored)
* SLE-Module-Packagehub-Subpackages15-SP6-Updates (id: 6694) (mandatory, enabled, mirrored at 2025-02-10 12:00:26 UTC)
* SLE-Module-Packagehub-Subpackages15-SP6-Debuginfo-Updates (id: 6695) (non-mandatory, not enabled, not mirrored)
* SUSE-PackageHub-15-SP6-Pool (id: 6696) (mandatory, enabled,  at 2025-02-10 12:04:26 UTC)
* SLE-Module-Packagehub-Subpackages15-SP6-Pool (id: 6697) (**mandatory**, enabled, **not mirrored**)
* SLE-Module-Packagehub-Subpackages15-SP6-Debuginfo-Pool (id: 6698) (non-mandatory, not enabled, not mirrored)
* SLE-Module-Packagehub-Subpackages15-SP6-Source-Pool (id: 6699) (non-mandatory, not enabled, not mirrored)

 # docker-compose exec rmt rmt-cli repos disable 6692 6697
 # docker-compose exec rmt rmt-cli repos clean (yes)
 # docker-compose exec rmt rmt-cli repos enable 6692 6697
 # docker-compose exec sync rmt-sync.sh repos [-v | -vv]

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

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

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

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

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

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

Обновить образы контейнеров - п. 5.5
Для контроля за первоначальной синхронизацией:

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

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

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

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

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

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 sync 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 изменился и система обновлений не работает, создайте обращение на портале техподдержки
В обращении обязательно укажите machine-id от хоста докера, на котором есть проблема:

 # cat /etc/machine-id

7.1 Миграция данных между rmt-airgap

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

  • Перенести сертификаты: для этого перед первым запуском новой версии rmt-airgap необходимо скопировать папку ssl
  • Перенести базу данных mariadb: необходимо сделать резервную базы данных с источника перехода и восстановить базу на сервере назначения (см. п.5.7).
  • [Опционально]Перенести репозитории (для предотвращения повторного скачивания (синхронизации) данных (пакетов) с удаленного сервера): достаточно скопировать папку ./public на сервер назначения
    Проверьте файл exclude.list на соответствие вашим требованиям. Не рекомендуется заменять на предыдущий, поскольку в новом значительно улучшена “читабельность” и оптимизировано использование.
    Если миграция осуществляется с существующего не контейнерного RMT, необходимо обеспечить перенос CA и сертификатов https
/etc/rmt/ssl/rmt-ca.*
/etc/rmt/ssl/rmt-server.*

в папку ./ssl и восстановить базу данных с продуктами и зарегистрированными системами. См. п.5.7

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

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

8.1.1 Включить Proxy

  • Остановить контейнеры
    # docker-compose down
    Установить значения PROXY_HOST, PROXY_PORT (PROXY_USER, PROXY_PASS) в файле .env на правильные значения
    PROXY_HOST=
    PROXY_PORT=
    PROXY_USER=
    PROXY_PASS=
    Применить proxy.patch в папке проекта
    # patch -p0 < proxy.patch
    Запустить контейнеры
    # docker-compose up -d

8.1.2 Выключить Proxy

  • Остановить контейнеры
    # docker-compose down
    Установить значение PROXY_HOST в файле .env на пустое
    PROXY_HOST=
    Запустить контейнеры
    # docker-compose up -d

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

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

Описание

Docker-compose Repository Mirror Tools for full AirGap environment

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