Установка сервера централизованных обновлений
- Система работает в 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)
-
изменить файл 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.ymlcp -f docker-compose-org.yml docker-composer.yml
Запустить контейнеры# docker-compose up -d
Все вопросы принимаются только по работе системы RMT и оформляются заявками на портале технической поддержки с вложением журналов ошибок
Техническая поддержка осуществляется на текущую оригинальную (немодифицированную) версию образа контейнера rmt-airgap
Описание
Docker-compose Repository Mirror Tools for AirGap environment