Обновление LCM ks2025.1.x → ks2026.2.1

Важно

Все команды на LCM-узле выполняются под пользователем root.

Убедитесь, что в точке монтирования / имеется более 200 Гб свободного пространства. Это необходимо для успешного выполнения обновления.

Здесь и далее вместо x в версии ks2025.1.x указывайте фактическую версию патча, установленную на LCM-узле.

Убедитесь в наличии архива инсталлятора installer-ks2025.1.x-{sberlinux|ubuntu}-offline.tgz. Данный архив необходим для восстановления шаблонов переменных окружения для NetBox installer/netbox-docker/env/*.env.

Убедитесь, что версия ОС LCM-узла соответствует требованиям целевого релиза: Ubuntu 24.04 LTS / SberLinux 9.7.2 (см. Программные требования). При необходимости обновите ОС перед началом обновления.

Загрузите, подготовьте пакет обновления и запустите пайплайн обновления:

  1. Зайдите на LCM-узел по SSH.

  2. Загрузите архив upgrade-ks2026.2-{sberlinux|ubuntu}.tgz в папку /installer/update.

  3. Убедитесь, что в этой папке нет других файлов или папок, при необходимости удалите их.

  4. Замените в файле /installer/config/settings строку export RELEASE=ks2025.1.x-{sberlinux|ubuntu} на export RELEASE=ks2026.2.1-{sberlinux|ubuntu}.

  5. Откройте веб-интерфейс развёрнутого GitLab.

  6. Перейдите в репозиторий project_k / services / upgrade.

  7. Перейдите в раздел Settings > CI/CD > General pipelines.

  8. Установите значение Timeout5h.

  9. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  10. Запустите пайплайн New pipeline.

  11. Запустите задачу update.

  12. Дождитесь завершения выполнения операции.

Если пайплайн завершается с ошибкой, выполните следующие действия:

  1. Повторно загрузите архив upgrade-ks2026.2.1-{sberlinux|ubuntu}.tgz в папку /installer/update.

  2. При повторном запуске необходимо убедиться, что значение переменной KEYSTACK_RELEASE равно ks2025.1.x.

  3. Если повторный запуск вызывает ошибку на этапе setup:

    Turn off this advice by setting config variable advice.detachedHead to false
    $ source ci/keystack/scripts/keystack.sh
    $ vault_read job_key value > job_key
    Cleaning up project directory and file based variables
    00:00
    ERROR: Job failed: exit code 1
    

    Откройте и измените файл /installer/data/gitlab-runner/config.toml:

    1. В секции [runners.docker] измените значение параметра network_mode с installer на host и в параметрах helper_image, image замените значение на ks2026.2.1.

    2. В секции [[runners]] добавьте параметр pre_build_script = "  cp /etc/gitlab-runner/certs/ca.crt /usr/local/share/ca-certificates/ca.crt || true\n  update-ca-certificates --fresh > /dev/null || true\n  ".

    3. Перезапустите gitlab-runner, выполнив команду:

      # docker restart gitlab-runner
      
  4. Откройте веб-интерфейс развёрнутого GitLab.

  5. Перейдите в репозиторий project_k / services / upgrade.

  6. Создайте новый пайплайн: Build > Pipelines > New Pipeline.

  7. Запустите пайплайн New pipeline.

  8. Запустите задачу update.

  9. Дождитесь завершения выполнения операции.

В Vault появится новый пароль gitlab_ks_admin_password по пути secret_v2 / deployments / <LCM FQDN> / secrets / accounts. В случае использования клиентского Vault перенесите новый пароль gitlab_ks_admin_password по тому же пути.

Восстановите пароли доступа NetBox перед проведением обновления:

  1. Зайдите на LCM-узел по SSH.

  2. Перейдите в директорию с архивом инсталлятора.

  3. Извлеките из архива инсталлятора installer-ks2025.1.x-{sberlinux|ubuntu}-offline.tgz файлы installer/netbox-docker/env/*.env:

    # tar -xzvf installer-ks2025.1.x-{sberlinux|ubuntu}-offline.tgz installer/netbox-docker/env/*.env
    
  4. Если пароли для сервисов были изменены, то укажите актуальные значения в этих файлах.

  5. Переместите эти файлы в /installer/data/netbox/env/ на LCM-узле, заменив существующие.

Обновите файлы Docker и перезапустите сервисы:

  1. Зайдите на LCM-узел по SSH и выполните команды, приведённые ниже.

    # cd /installer/config
    # source settings
    
    # docker compose -f $CFG_HOME/compose.yaml up -d nexus nginx vault
    
    # docker compose -f $CFG_HOME/compose.yaml exec vault /bin/sh -c "cat /vault/config/chain-ca.pem >> /etc/ssl/certs/ca-certificates.crt"
    
    # docker restart vault
    # docker compose -f $CFG_HOME/compose.yaml exec vault /bin/sh -c "vault operator unseal"
    # docker compose -f $CFG_HOME/compose.yaml exec vault /bin/sh -c "vault login"
    

Обновите NetBox. Обновление до образа версии 4.6.0 требует создания резервной копии базы данных, правки файла netbox-compose.yml под новый образ и пересоздания тома PostgreSQL.

Важно

Резервная копия базы данных — единственная точка отката в случае ошибки. Не пропускайте этот шаг.

  1. Зайдите на LCM-узел по SSH.

  2. Подготовьте окружение и создайте резервную копию базы данных NetBox:

    # source /installer/config/settings
    # docker exec netbox-postgres pg_dumpall -U netbox > /root/dump-pre46-$(date +%F).sql
    
  3. Убедитесь, что резервная копия создана и не пустая:

    # ls -lh /root/dump-pre46-*.sql && head -3 /root/dump-pre46-*.sql
    
  4. Сохраните резервную копию файла netbox-compose.yml и уберите из него параметр user: 'unit:root' — в образе NetBox 4.6.0 такого пользователя нет:

    # cp $CFG_HOME/netbox-compose.yml $CFG_HOME/netbox-compose.yml.pre46.bak
    # sed -i -E "s|^([[:space:]]*)user:[[:space:]]*'unit:root'.*|\1# user: 'unit:root'|" $CFG_HOME/netbox-compose.yml
    
  5. Проверьте, что правки применились и файл compose корректен:

    # grep -nE 'user:' $CFG_HOME/netbox-compose.yml
    # docker compose -f $CFG_HOME/netbox-compose.yml config >/dev/null && echo "YAML OK"
    
  6. Пересоздайте том PostgreSQL.

    Важно

    Порядок команд важен: сначала создаётся каталог (mkdir), затем меняется его владелец (chown), и только после этого запускается контейнер (up). Деструктивные шаги объединены через &&, чтобы ни один из них не выполнился после ошибки предыдущего.

    # docker exec netbox-postgres pg_dumpall -U netbox > dump.sql \
    && docker compose -f $CFG_HOME/netbox-compose.yml down \
    && mv $NETBOX_HOME/postgres $NETBOX_HOME/postgres-old \
    && mkdir $NETBOX_HOME/postgres \
    && chown -R 994:994 $NETBOX_HOME/{postgres,redis,redis-cache}
    
  7. Убедитесь, что владелец каталога — 994:994. Если это не так, не продолжайте выполнение и разберитесь в причине:

    # ls -lan $NETBOX_HOME/postgres
    
  8. Запустите контейнер PostgreSQL и дождитесь его готовности:

    # docker compose -f $CFG_HOME/netbox-compose.yml up -d postgres
    # until docker exec netbox-postgres pg_isready -U netbox 2>/dev/null; do sleep 2; done
    # echo "postgres READY"
    
  9. Восстановите данные из резервной копии:

    # docker exec -i netbox-postgres psql -U netbox < dump.sql
    

    Примечание

    Сообщения ERROR: role "netbox" already exists и database "netbox" already exists — норма: роль и базу данных создаёт сам PostgreSQL при старте контейнера, а резервная копия повторно пытается создать их же. Данные при этом успешно восстанавливаются.

  10. Запустите весь стек NetBox и дождитесь готовности PostgreSQL:

    # docker compose -f $CFG_HOME/netbox-compose.yml up -d
    # until docker exec netbox-postgres pg_isready -U netbox 2>/dev/null; do sleep 2; done
    
  11. Проверьте результат обновления:

    # docker compose -f $CFG_HOME/netbox-compose.yml ps
    # curl -sk "https://${NETBOX_NAME}.${DOMAIN}/login/" | grep -o 'data-netbox-version="[^"]*"'
    # docker exec netbox-postgres psql -U netbox -d netbox -c "select count(*) from dcim_device;"
    

    Обновление прошло успешно, если все контейнеры находятся в состоянии Up (healthy), версия NetBox — 4.6.0-Docker-5.0.1, а данные на месте.

  12. После успешной проверки удалите резервные файлы:

    # rm -rf $NETBOX_HOME/postgres-old
    # rm -f dump.sql
    

Обновление GitLab необходимо делать в несколько этапов. Сначала обновите GitLab до версии 17.8.7-ce.0:

  1. Зайдите на LCM-узел по SSH.

  2. Выполните команды:

    # source /installer/config/settings
    # sed -i "s|\$NEXUS_FQDN/project_k/lcm/gitlab:\$RELEASE|\$NEXUS_FQDN/project_k/lcm/gitlab:\$RELEASE-17.8.7-ce.0|" $CFG_HOME/compose.yaml
    
  3. Выполните команду:

    # docker compose -f $CFG_HOME/compose.yaml up -d gitlab
    
  4. Обновите разрешения на доступ к файлам выполнив команду:

    # docker exec -it gitlab update-permissions
    
  5. Дождитесь открытия страницы https://<LCM FQDN>/admin/background_migrations.

  6. Дождитесь завершения всех задач на этой странице. Если задач нет, можете приступать к следующему шагу.

Обновите GitLab до версии 17.11.7-ce.0:

  1. Зайдите на LCM-узел по SSH.

  2. Выполните команды:

    # source /installer/config/settings
    # sed -i "s|\$NEXUS_FQDN/project_k/lcm/gitlab:\$RELEASE-17.8.7-ce.0|\$NEXUS_FQDN/project_k/lcm/gitlab:\$RELEASE-17.11.7-ce.0|" $CFG_HOME/compose.yaml
    # docker compose -f $CFG_HOME/compose.yaml up -d gitlab
    
  3. Дождитесь открытия страницы https://<LCM FQDN>/admin/background_migrations.

  4. Дождитесь завершения всех задач на этой странице. Если задач нет, можете приступать к следующему шагу.

Обновите GitLab до версии 18.2.8-ce.0:

  1. Зайдите на LCM-узел по SSH.

  2. Выполните команды:

    # source /installer/config/settings
    # sed -i "s|\$NEXUS_FQDN/project_k/lcm/gitlab:\$RELEASE-17.11.7-ce.0|\$NEXUS_FQDN/project_k/lcm/gitlab:\$RELEASE-18.2.8-ce.0|" $CFG_HOME/compose.yaml
    # docker compose -f $CFG_HOME/compose.yaml up -d gitlab
    
  3. Дождитесь открытия страницы https://<LCM FQDN>/admin/background_migrations.

  4. Дождитесь завершения всех задач на этой странице. Если задач нет, можете приступать к следующему шагу.

Обновите GitLab до версии 18.5.7-ce.0:

  1. Зайдите на LCM-узел по SSH.

  2. Выполните команды:

    # source /installer/config/settings
    # sed -i "s|\$NEXUS_FQDN/project_k/lcm/gitlab:\$RELEASE-18.2.8-ce.0|\$NEXUS_FQDN/project_k/lcm/gitlab:\$RELEASE-18.5.7-ce.0|" $CFG_HOME/compose.yaml
    # docker compose -f $CFG_HOME/compose.yaml up -d gitlab
    
  3. Дождитесь открытия страницы https://<LCM FQDN>/admin/background_migrations.

  4. Дождитесь завершения всех задач на этой странице. Если задач нет, можете приступать к следующему шагу.

Обновите GitLab до версии 18.8.10-ce.0:

  1. Зайдите на LCM-узел по SSH.

  2. Выполните команды:

    # source /installer/config/settings
    # sed -i "s|\$NEXUS_FQDN/project_k/lcm/gitlab:\$RELEASE-18.5.7-ce.0|\$NEXUS_FQDN/project_k/lcm/gitlab:\$RELEASE-18.8.10-ce.0|" $CFG_HOME/compose.yaml
    # docker compose -f $CFG_HOME/compose.yaml up -d gitlab
    
  3. Дождитесь открытия страницы https://<LCM FQDN>/admin/background_migrations.

  4. Дождитесь завершения всех задач на этой странице. Если задач нет, можете приступать к следующему шагу.

Обновите GitLab до версии ks2026.2.1 (18.11.5-ce.0):

  1. Зайдите на LCM-узел по SSH.

  2. Выполните команду:

    # sed -i "s|\$NEXUS_FQDN/project_k/lcm/gitlab:\$RELEASE-18.8.10-ce.0|\$NEXUS_FQDN/project_k/lcm/gitlab:\$RELEASE|" $CFG_HOME/compose.yaml
    
  3. Откройте и измените файл /installer/data/gitlab-runner/config.toml.

    1. В секции [runners.docker] измените значение параметра network_mode с installer на host и в параметрах helper_image, image замените значение на ks2026.2.1.

    2. В секции [[runners]] добавьте параметр pre_build_script = "  cp /etc/gitlab-runner/certs/ca.crt /usr/local/share/ca-certificates/ca.crt || true\n  update-ca-certificates --fresh > /dev/null || true\n  ".

    3. Перезапустите gitlab-runner, выполнив команду:

      # docker restart gitlab-runner
      
  4. Выполните команду:

    # docker compose -f $CFG_HOME/compose.yaml up -d gitlab gitlab-runner
    
  5. В случае ошибок доступа к файлам выполните команду:

    # docker exec -it gitlab update-permissions
    
  6. Контейнер с GitLab запускается очень долго. Проверить состояние запуска контейнера можно с помощью команды:

    # docker logs gitlab -f -n 100
    
  7. Дождитесь открытия страницы https://<LCM FQDN>/admin/background_migrations.

  8. Дождитесь завершения всех задач на этой странице. Если задач нет, можете приступать к следующему шагу.

  9. (Опционально) Удалите образ Docker LCM старого релиза, выполнив команду:

    # docker image prune -a
    

В случае если подключен внутренний Vault, дополнительно понадобится изменить значение параметра vault_addr. Для этого:

  1. Зайдите в веб-интерфейс GitLab.

  2. Перейдите в группу project_k.

  3. Перейдите в раздел Settings > CI/CD > Variables.

  4. Измените значения параметра vault_addr на https://vault.<DOMAIN>.

В новой версии GitLab по умолчанию доступ с использованием токена между проектами запрещен. Обновите настройку доступа между проектами GitLab, выполнив перечисленные действия для каждого региона:

  1. Зайдите в веб-интерфейс GitLab.

  2. Для каждого репозитория (project_k/etc) в разделе Settings > CI/CD > Job token permissions нажмите кнопку Add > Group or Project и добавьте группу project_k.

Выполните команды на узле LCM:

  1. Зайдите на LCM-узел по SSH и выполните команды:

    # cd /installer/config
    # source settings
    # sed -i "s|DB_PASSWORD=.*|DB_PASSWORD=netbox_db_password|" $NETBOX_HOME/env/netbox.env
    # sed -i "s|REDIS_CACHE_PASSWORD=.*|REDIS_CACHE_PASSWORD=netbox_redis_cache_password|" $NETBOX_HOME/env/netbox.env
    # sed -i "s|REDIS_PASSWORD=.*|REDIS_PASSWORD=netbox_redis_password|" $NETBOX_HOME/env/netbox.env
    # sed -i "s|SUPERUSER_PASSWORD=.*|SUPERUSER_PASSWORD=netbox_admin_password|" $NETBOX_HOME/env/netbox.env
    # sed -i "s|AUTH_LDAP_BIND_PASSWORD: .*|AUTH_LDAP_BIND_PASSWORD: \"LDAP-BIND-PASSWORD\"|" $NETBOX_HOME/env/netbox.env
    # sed -i "s|POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=netbox_db_password|" $NETBOX_HOME/env/postgres.env
    # sed -i "s|REDIS_PASSWORD=.*|REDIS_PASSWORD=netbox_redis_password|" $NETBOX_HOME/env/redis.env
    # sed -i "s|REDIS_PASSWORD=.*|REDIS_PASSWORD=netbox_redis_cache_password|" $NETBOX_HOME/env/redis-cache.env