Commit e27dce06 authored by Vitaly Lipatov's avatar Vitaly Lipatov

plans: add bugzilla upgrade plan and PVE SPNEGO notes

parent 4c1ba069
---
name: bugzilla-5.9-deps
description: "Зависимости для Bugzilla 5.9.1 на ALT: что есть в репо, что нужно собрать. 3 модуля отсутствуют в ALT."
metadata:
type: plan
created: 2026-07-26
---
# Зависимости Bugzilla 5.9.1 на ALT p10
## Контейнер CT 944 (bugzilla-test), 192.168.0.251
## Установлено через epm (~230 пакетов)
Список основных (полный в логе `epm install`):
```
perl-Class-XSAccessor perl-Crypt-CBC perl-Crypt-DES perl-Crypt-DES_EDE3
perl-DBIx-Class perl-HTML-Escape perl-Mojolicious perl-JSON-Validator
perl-Net-DNS perl-Regexp-Common perl-Type-Tiny perl-IPC-System-Simple
perl-Text-Diff perl-Tie-IxHash perl-Scope-Guard perl-Mozilla-CA
perl-File-MimeInfo perl-LWP-Protocol-https perl-LWP-UserAgent-Determined
perl-PerlX-Maybe perl-Sereal perl-URI-Escape-XS perl-Devel-NYTProf
perl-Daemon-Generic perl-Future perl-IO-Async
```
Также установлено ранее для 5.2:
```
perl-Memoize perl-DBIx-Connector perl-GD perl-Chart perl-Template
perl-Email-Sender perl-Email-Address-XS perl-ldap perl-Cache-Memcached
perl-File-Copy-Recursive perl-DBD-MariaDB perl-CPAN perl-autodie
```
## НЕТ в ALT — нужно собрать (3 модуля)
| Модуль | Версия | Где используется | Примечание |
|---|---|---|---|
| **perl-DBIx-Class-Helpers** | ≥2.034002 | DBIx::Class хелперы | Нет в ALT |
| **perl-FFI-Platypus** | any | Bugzilla::Markdown::GFM (GitHub Flavored Markdown) | Нет в ALT |
| **perl-MojoX-Log-Log4perl** | ≥0.04 | Bugzilla::App (логирование Mojolicious) | Нет в ALT |
## Установлено из Sisyphus
| Пакет | Версия | Примечание |
|---|---|---|
| perl-MooX-StrictConstructor | 0.013 | Из Sisyphus |
| perl-Mojo-JWT | 0.12 | Из Sisyphus (обновил Perl 5.34→5.38!) |
| perl-DBIx-Class | 0.082843 | **p10** версия (pin), Sisyphus blocked на DBD/Pg dep chain |
⚠️ **Важно:** установка из Sisyphus обновила Perl с 5.34 до 5.38. Пришлось переустанавливать все perl-* пакеты.
## Также были проблемы (но решены)
- `perl-Text-CSV-XS` — был `perl-Text-CSV_XS` (подчёркивание вместо дефиса)
- `perl-DBIx-Class` из Sisyphus требует `perl-DBD-Pg` (нет в p10) — **РЕШЕНО**: `epm install perl-DBIx-Class=0.082843-alt1` (p10 версия)
## Для сборки пакетов
3 модуля — стандартные CPAN-дистрибутивы. Собрать через gear:
```bash
gear-perl2rpm DBIx-Class-Helpers
gear-perl2rpm FFI-Platypus
gear-perl2rpm MojoX-Log-Log4perl
```
## Статус тестового стенда
- Контейнер CT 944 на gefest, 192.168.0.251, ALT p10 (→Sisyphus после установки пакетов)
- БД MariaDB 10.6.27 локально, копия прод `eter_bugs` (19140 багов)
- Bugzilla 5.9.1 код в `/var/www/bugs.etersoft.ru-test/` (обновлён поверх 5.2)
- Apache на http://bugs.pr.etersoft.ru/ (DocumentRoot = `/var/www/bugs.etersoft.ru-test/`)
- Ветка `version-5.9` на gitlab: `git@gitlab.eterfund.ru:etersoft/bugzilla.git`
- **Блокер:** 3 пакета не собраны → `checksetup.pl` не проходит
## Правила (запомнить!)
- **Пакеты** — только `epm install`, не `apt-get`
- **Sisyphus**`epm install sisyphus/perl-PackageName`
- **CPAN** — никогда напрямую
- **Прод** — только чтение, без изменений без команды
---
name: bugzilla-upgrade
description: "План обновления Bugzilla 5.2.0 5.9.1: тестовый стенд, миграция БД, проверка фич. Уроки RT: runtime-зависимости, неинтерактивный DB upgrade, кэш-очистка."
metadata:
type: plan
created: 2026-07-24
---
# План обновления Bugzilla (bugs.etersoft.ru)
## Текущее состояние
- **Bugzilla 5.2.0** (ручная установка, НЕ rpm)
- **Сервер:** bugs.etersoft.ru (91.232.225.24), nginx → Apache httpd2 (mod_perl) на 127.0.0.1:8080
- **БД:** MySQL 8.0 на mysql.office.etersoft.ru (10.20.30.191), БД `eter_bugs`, юзер `eter_bugs`
- **Каталог:** `/var/www/bugs.etersoft.ru` (root:apache2, 0750)
- **Расширения:** BmpConvert, Example, MoreBugUrl, OldBugMove, Voting
- **Кастомизация:** etersoft-layer (шаблоны, JS: bugsWatcher.js, timer.js, focusManager.js)
- **Кэш:** memcached 192.168.3.188:11211
## Целевая версия
**Bugzilla 5.9.1** (Trunk, активная разработка). Альтернатива — 5.3.3 (Deprecated Trunk, стабильнее).
⚠️ 5.2 → 5.9.1 — мажорный апгрейд (DB schema changes, новые фичи, изменения в шаблонах).
## Уроки из обновления RT (применить!)
1. **Тестовый стенд ОБЯЗАТЕЛЕН** — клон контейнера, отдельная БД, не трогать прод
2. **Runtime-зависимости**`checksetup.pl` может не проверить все Perl-модули; тестировать КАЖДУЮ фичу end-to-end
3. **Неинтерактивный DB upgrade** —避免 `yes|` зацикливания; использовать `--noninteractive` если есть
4. **Кэш-очистка** — после мажорного апгрейда чистить все кэши (модели, шаблоны, memcached)
5. **Снапшоты** — перед каждым шагом `pct snapshot`, чтобы откатиться
6. **Логи** — проверять `error.log`, `rt.log` (для Bugzilla — apache error log + bugzilla logs)
## Шаги
### 1. Подготовка тестового контейнера
- Клонировать существующий CT (или создать новый ALT p11)
- Установить зависимости Bugzilla 5.9.1 (Perl, Apache, модули)
- Сеть: 10.20.30.x (DMZ), тестовый домен `bugs-test.office.etersoft.ru`
```bash
# На PVE (border или gefest)
pct clone <DONOR_VMID> --name bugzilla-test --pool Testing
# Или создать новый
pct create <VMID> local:vztmpl/alt-p11-x86_64.tar.gz --hostname bugzilla-test --storage local-lvm
```
### 2. Установка Bugzilla 5.9.1
```bash
# Скачать Bugzilla 5.9.1
cd /var/www
wget https://github.com/bugzilla/bugzilla/archive/refs/heads/5.9.tar.gz
tar xzf 5.9.tar.gz
mv bugzilla-5.9 bugs.etersoft.ru-test
# Установить зависимости
cd bugs.etersoft.ru-test
./checksetup.pl --check-modules
# Установить недостающие Perl-модули через epm
```
### 3. Миграция БД
- Дамп прод-БД: `mysqldump -h mysql.office.etersoft.ru -u eter_bugs -p eter_bugs > bugzilla_dump.sql`
- Создать тестовую БД на mysql.office.etersoft.ru (или локально)
- Залить дамп: `mysql -u eter_bugs -p eter_bugs_test < bugzilla_dump.sql`
- Настроить `localconfig` на тестовую БД
```bash
# Дамп прод-БД (ОСТОРОЖНО, только чтение!)
ssh root@bugs.etersoft.ru "mysqldump -h 10.20.30.191 -u eter_bugs -p$(grep '\$db_pass' /var/www/bugs.etersoft.ru/data/localconfig | cut -d\" -f2) eter_bugs > /tmp/bugzilla_dump.sql"
# Создать тестовую БД
ssh root@mysql.office.etersoft.ru "mysql -e 'CREATE DATABASE eter_bugs_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'"
ssh root@mysql.office.etersoft.ru "mysql eter_bugs_test < /tmp/bugzilla_dump.sql"
```
### 4. Конфигурация тестового экземпляра
- Скопировать `data/params.json` из прод-версии
- Обновить `localconfig`:
- `$db_name = 'eter_bugs_test'`
- `$webservergroup = 'apache2'`
- `$index_html = 0`
- Скопировать расширения и кастомные шаблоны
### 5. Запуск checksetup.pl (DB schema upgrade)
```bash
cd /var/www/bugs.etersoft.ru-test
./checksetup.pl
```
⚠️ **Ожидаемые проблемы:**
- DB schema changes между 5.2 и 5.9.1
- Новые обязательные поля
- Изменения в таблицах
- checksetup.pl может потребовать интерактивного ввода
**Неинтерактивный запуск (если поддерживает):**
```bash
./checksetup.pl --noninteractive
```
### 6. Проверка фич (чек-лист из уроков RT)
Прокачать end-to-end каждую фичу:
- [ ] **Web UI** — логин, просмотр бага, создание, редактирование
- [ ] **REST API**`/rest/bug?id=X` с token и без
- [ ] **Расширения** — каждое расширение отдельно:
- [ ] BmpConvert
- [ ] MoreBugUrl
- [ ] OldBugMove
- [ ] Voting
- [ ] **Кастомные шаблоны** — etersoft-layer (bugswatcher.html.tmpl, timersplash.html.tmpl)
- [ ] **bugsWatcher.js** — worker-клиент
- [ ] **Почта** — отправка уведомлений
- [ ] **Поиск** — buglist.cgi, saved searches
- [ ] **Вложения** — загрузка, просмотр
- [ ] **Группы** — Etersoft insider group, права доступа
### 7. Проверка логов
```bash
# Apache error log
tail -f /var/log/httpd2/error_log
# Bugzilla logs
tail -f /var/www/bugs.etersoft.ru-test/data/errorlog
# nginx logs
tail -f /var/log/nginx/error.log
```
### 8. Сравнение с продом
- Сравнить количество багов в тестовой и продовой БД
- Проверить ключевые баги (примеры из bugs-watcher)
- Проверить REST API ответы (сравнить формат JSON)
## Риски и митигация
| Риск | Митигация |
|---|---|
| Несовместимость Perl-модулей | Проверить `checksetup.pl --check-modules` заранее |
| Изменения в REST API формате | Сравнить ответы 5.2 и 5.9.1 |
| Потеря кастомных шаблонов | Бэкап etersoft-layer перед обновлением |
| Новые зависимости | `epm search` для ALT-пакетов, girar-сборка при необходимости |
| Долгий DB upgrade | Терпение, мониторить `SHOW PROCESSLIST` |
## Откат
- Снапшот контейнера перед каждым шагом
- Дамп БД перед миграцией
- Бэкап `/var/www/bugs.etersoft.ru` (data/, extensions/, template/en/default/etersoft/)
## Следующие шаги (после успешного теста)
1. Запланировать окно обслуживания для прод-обновления
2. Дамп прод-БД
3. Обновить Bugzilla на прод-сервере
4. Проверить все фичи
5. Обновить документацию в bugzilla.md
## Связанные
- [[reference_mysql_servers]] — MySQL серверы
- [[bugzilla.md]] — текущая документация
- [[lesson_rt6_runtime_deps_missed]] — урок: runtime-зависимости
- [[lesson_rt_setup_database_noninteractive]] — урок: неинтерактивный DB upgrade
- [[lesson_rt_upgrade_clear_mason_cache]] — урок: кэш-очистка
---
name: plans-rt-6.0
description: "RT 4.4 6.0: оценка готовности тестового контура (rt-test CT 183). Что готово, что блокирует, чек-лист перед прогоном. Сводка текущего состояния RT (прод 4.4.9 на CT 412)."
metadata:
type: project
---
# RT 4.4 → 6.0: готовность тестового контура
Заметка по запросу «на тестовом сервере для rt мы готовы проверять обновление до 6.0?» (2026-07-17).
Связанные: [[reference-rt-etersoft-ru]] (прод), [[plans/rt-update]] (миграция 4.4.x — ВЫПОЛНЕНА),
[[lesson_rt_condition_perl538]], [[lesson_rt_mail_pickup_test]], бага Etersoft #12480.
## Текущее состояние (кратко)
- **Прод:** CT 412 (border, 10.20.30.196), RT **4.4.9-alt1** (girar 425521, test-only; схема 4.4.7→4.4.9 не менялась).
DB `eter_rt` → MariaDB 11 на **mariadb.dmz = CT 369** (10.20.30.195). Cutover с CT 233 — 2026-07-16. См. [[reference-rt-etersoft-ru]].
- **Тестовый контур `rt-test` = CT 183** на ноде **gefest** (PVE, 192.168.0.13), IP **192.168.0.191** (vmbr0 office LAN).
ALT **Starterkit 11 (p11) x86_64**, RT **4.4.7-alt1**, **локальная MariaDB** (DatabaseHost=localhost,
переопределяет устаревшую строку mysql.auth.dmz). Дамп боевой `eter_rt` (~67k тикетов / 940k tx) от ~2026-07-13.
`ssh root@192.168.0.191` — WORKS, но первый коннект иногда отваливается по таймауту (rc=124); помогает
`-o BatchMode=yes -o GSSAPIAuthentication=no`, либо просто повторить. Веб: http://rt.pr.etersoft.ru/
## Что говорит апстрим про RT 6.0
- **RT 6.0.0 released May 2025** (requesttracker.com). К июлю 2026 уже есть точечные 6.0.x релизы.
- **Скачок 4.4 → 6.0 через 5.x делать НЕ надо:** DB-апдейтеры RT умеют апгрейдить «с очень старых версий
до последней» одним прогоном `rt-setup-database --upgrade`. (Подтверждено в анонсе 6.0.0.)
- **БД-бэкенд в 6.0 всё ещё поддерживается широкий список:** MySQL 8.0.31+, **MariaDB 10.6+**,
PostgreSQL 13+, Oracle 18c+, SQLite 3.0+ (GitHub README rt-6.0). ⇒ наша локальная MariaDB 12.3.2 (rt-test на Sisyphus; прод CT 369 = 11.x на p11)
**подходит по версии**, миграция на PostgreSQL для теста НЕ обязательна (старый план rt-update
перестраховался — это была неверная посылка).
- **Главное новое в 6.0:** htmx + система **Page Layouts** (Bootstrap-grid, кастомизация без кода).
Влияет на кастомный Mason/UI (см. риски).
## ⚠️ баг 7693 (unquoted identifiers vs MySQL 8) — ради чего и стоит тестировать
- На 4.4.x RT генерирует SQL с незаквотенными идентификаторами → MySQL 8 ломается (бага 7693),
поэтому прод сидит на MariaDB. Раз RT 6.0 официально поддерживает **MySQL 8.0.31+**, апстрим
квочивание починил ⇒ 6.0 на нашей MariaDB 11 **должен заработать**. Но это presumption —
именно прогон на rt-test и подтвердит, что 6.0 чисто работает на MariaDB 12.3.2 (это №1 ценность теста).
## Готовность: что есть ✅
- Тест-контур поднят и жив: CT 183 running, **Sisyphus**/x86_64 (release-upgraded с p11), RT **6.0.3-alt1**, локальная MariaDB **12.3.2**, копия прод-БД. Схема 4.4.6→6.0.3 — **0 ошибок**.
- **Runtime-deps собраны (girar 426095 TESTED, 2026-07-19):** perl-CSS-Inliner + perl-GraphViz2 (+ perl-Badger/Test-Snapshot/HTML-Query) — отсутствовали в Сизифе,
подключаются **runtime-условно** (`require` в RT/Util.pm:326, RT/Graph/Tickets.pm), поэтому `make testdeps` их не видел.
Поставлены на rt-test (`epm install 426095`), верифицированы: тикет #69737 (HTML+CSS, падал на `Can't locate CSS/Inliner.pm`) теперь рендерится. Kanban git-alt #297. Ждёт публикации `gita commit 426095`.
- **Secure-cookie фикс применён (2026-07-19):** RT 6.0 дефолтит `WebSecureCookies=1` → на голом HTTP (rt-test) логин не прилипал. `Set($WebSecureCookies,0)` в local.pm. См. [[lesson_rt6_secure_cookies_http]]. Прод за HTTPS — дефолт ок.
- БД-бэкенд удовлетворяет требованиям 6.0 (MariaDB ≥ 10.6).
- Путь апгрейда 4.4 → 6.0 — штатный, одной командой rt-setup-database.
- Контур изолирован (копия БД) — можно ломать.
- ALT p11 = Perl 5.38 (версия Perl для 6.0 достаточна).
## Готовность: что блокирует / риски 🔴
1. **Нет ALT-пакета rt-6.0.** В Sisyphus только `rt 4.4.5-alt1_4`; 5.x/6.x нет вообще
(4.4.7/4.4.9 существуют лишь как girar-задачи 425459/425521). ⇒ ставить **из upstream-тарболла**
(`make install` + сборка Perl-зависимостей, часть может отсутствовать в ALT-репах),
**ЛИБО** оформлять сборку пакета через Kanban/alt-packaging-agents (git-alt).
2. **Нет снапшота CT 183** (`pct listsnapshot 183` → только `current`, без rollback-точки).
**Перед любым прогоном 6.0 обязательно:** `pct snapshot 183 pre-rt60` (на gefest). + свежий
дамп прод-БД залить в rt-test, т.к. тестовый дамп от 2026-07-13 уже устарел.
3. **Кастомный код под htmx/Page Layouts:** проверить/портировать
- **Kaiten-виджет** (см. ниже) — Mason-override карточки тикета;
- локальные scrip-условия/расширения (напр. AnyTransactionSource) — сверить с API 6.0;
- autoreply-шаблоны `Автоответ.<QUEUE>` (Type=Perl) — должны пережить апгрейд, но проверить.
## Kaiten-виджет (детали) — Kaiten #66499560
- **Status:** НЕ построен нигде (на проде CT 412 и rt-test — `@Plugins` пуст, override'ов нет). Pending.
Карточка #66499560 «ТП: интеграция с RT (Scrip + iframe + shared secret)», борд Etersales 2.0,
колонка «Очередь», owner Konstantin Kondratyuk. Бэкенд-виджет `/api/support/widget` **готов на test**
(карта #66499557, `http://newsales.office.etersoft.ru/api/support/widget`).
- **Что делает RT:** Mason/Perl-override карточки тикета — из темы регэкспом `\b[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}\b`
достаёт license→UPPER+сорт+дедуп, берёт email requestor→lower, `exp`=now+900, считает
`sig`=HMAC-SHA256 над каноном `support-widget:v1\nlicense:..\nfrom:..\nexp:..`, втыкает
`<iframe src="<signed URL>">` в правую панель тикета. Shared secret в RT_SiteConfig/файле.
- **Зависимость от версии RT:** override = Mason-шаблон карточки. Мажор 4.4→6.0 переписывает шаблоны
(htmx + Page Layouts) → override под 4.4 сломается на 6.0. **Виджет строить на финальной версии RT.**
- Контракт: `docs/plans/rt-support-widget-integration.md` (сторона Etersales). От RT нужно: домен(ы) для
CSP `frame-ancestors`, канал секрета, dev-RT контур, Perl/Mason-компетенция. Сеть: запрос с браузера ТП
`/api/support/*` corp-allowlist → места ТП в корп-сети/VPN (иначе 403 в iframe).
4. **Perl-зависимости 6.0:** точный список新版 модулей надо сверить (`rt-setup-database`/`make testdeps`
из тарболла покажет недостающее). Риск — тянуть CPAN-модули вне системных пакетов (нельзя на проде
из pip/CPAN — см. [[feedback_install_from_package_not_pip]]; но для теста терпимо).
5. rt-test стоит на 192.168.0.191 (office LAN) — нарушение [[feedback_test_servers_on_dmz]]
(должно быть 10.20.30.x). Не блокирует сам тест, но при пересоздании контура — переносить в DMZ.
## Вердикт
**Контуры готовы концептуально** (ОС/БД/путь апгрейда/изоляция — всё на месте), но **запускать прогон 6.0
ещё рано:** сначала (1) снапшот CT 183 + свежий дамп прод-БД; (2) решить, как ставить 6.0 — тарболл на тесте
(быстро, но «грязно») или собрать ALT-пакет через Kanban (правильно, но дольше); (3) быть готовым
переработать Kaiten-виджет и сверить кастомные scrips. Главная практическая ценность прогона —
подтвердить, что RT 6.0 наконец чисто работает на MariaDB 12.3.2 (закрыть баг 7693), что разблокирует
будущий переезд прода на поддерживаемый современный RT.
## Чек-лист перед прогоном 6.0 на rt-test
1. `pct snapshot 183 pre-rt60` на gefest (rollback!).
2. Свежий дамп `eter_rt` с mariadb.dmz (CT 369) → залить в rt-test local MariaDB; `mariadb-check --analyze`.
3. Скачать RT 6.0.x тарболл, прогнать `make testdeps`, доустановить недостающие Perl-модули (epm/CPAN).
4. Бэкап `/etc/rt`, `/usr/share/rt/html` overlays, `RT_SiteConfig*.pm`.
5. `make install` + `rt-setup-database --upgrade --from 4.4.x --to 6.0.x`, следить за ошибками схемы
(особенно MariaDB-специфика типа `objectcustomfields1`).
6. Рестарт rt-fcgi: воркеры **socket-activated**`serv restart rt-fcgi@1..4` работает
только когда сокеты active; из failed → `reset-failed` + `serv start rt-fcgi@1.socket ... 4.socket`
(см. [[lesson_rt6_secure_cookies_http]]). Проверить http://rt.pr.etersoft.ru/ — версия 6.0,
тикеты открываются, autoreply работает, Kaiten-виджет не упал.
7. **Secure-cookie:** проверить TLS контура. Если HTTP-only (как rt-test) — обязательно
`Set($WebSecureCookies,0)` в RT_SiteConfig **до** отдачи юзерам, иначе логин не прилипает
([[lesson_rt6_secure_cookies_http]]). Прод за HTTPS — не трогать.
8. **Runtime-deps (3 всплыло, см. [[lesson_rt6_runtime_deps_missed]]):** после установки 6.0
прокачать энд-до-энд: (а) HTML+CSS-тикет #69737 → CSS::Inliner; (б) граф связей → GraphViz2+`dot`;
(в) **calendar display-mode** (`/Search/Calendar.html` + query) → `DateTime::Set` (RT/Search/Calendar.pm:64).
CSS-Inliner+GraphViz2: girar **426095**, `epm install 426095` (Kanban git-alt #297).
**DateTime::Set+Event-Recurrence уже в Сизифе**`epm install perl-DateTime-Set perl-DateTime-Event-Recurrence`.
⚠️ пакетный баг: `rt` не декларирует `Requires: perl(DateTime/Set.pm)` — добавить при переиздании.
9. Отписаться в багу Etersoft #12480 с вердиктом по MariaDB (баг 7693) + планом по прод-переезду.
---
name: rt-update
description: "План обновления RT (Request Tracker) rt.etersoft.ru: p9/i686 p11/x86_64. girar task 425459 (rt 4.4.7-alt1) проверен на rt-test 2026-07-15 Condition.pm:201 починен в пакете. Целевая версия 4.4.7 (не 4.4.5). Прод-БД: отдельный MySQL (не в контейнере). Бага: 12480; поддержка 7693. Kaiten #66499560 (виджет)"
metadata:
type: plan
created: 2026-07-13
---
# План обновления RT (rt.etersoft.ru)
## Текущее состояние (исследование 2026-07-13)
- **Контейнер:** PVE CT 233 (`rt.etersoft.ru`), нода **enceladus**, pool Infrastructure.
- Внутр. IP **10.20.30.53**, публичный **91.232.225.23** (TLS терминирует фронтенд azbykar = CT 102).
- SSH: `ssh root@10.20.30.53` (публичные алиасы :32/5322/6722 НЕ работают).
- **ОС:** ALT **p9** (VERSION_ID=9) — **EOL!** Архитектура **i686 (32-bit)**.
- **RT:** `rt-4.4.4-alt1_2` (сборка июня 2019) + `rt-mailgate`. Конфиг `/etc/rt/RT_SiteConfig.pm`.
- **Веб:** nginx → `rt-fcgi@1..4.service` (systemd socket-activated, 4 unix-сокета `/run/rt[1-4].socket`). Контейнер слушает только :80 (HTTPS нет).
- **БД:** `eter_rt` на **mysql.auth.dmz.etersoft.ru** (CT 219, **MySQL 5.5.43**, x86_64). Юзер `eter_rt`.
- ⚠️ **RT принципиально не работает с MySQL 8** (RT не использует quoted identifiers → SQL syntax error на `Groups`/`Principals` — см. баг 7693#c51-53). База сидит на древнем MySQL 5.5 именно поэтому.
- **Почта:** fetchmail (`support@office.etersoft.ru``mail.etersoft.ru`), лог `/var/log/rt/fetchmail_rt.log`.
- **Крон:** `rt-clean-sessions --older 30D` (28 числа). rt-count/escalate/remind — **отключены** (со времён апгрейда 2019, см. 12480#c2).
- **Ресурсы:** 3 ГБ RAM, 1 vCPU, rootfs 234 ГБ (занято 2.5 ГБ).
- Подробнее: [reference_rt_etersoft_ru.md](../reference_rt_etersoft_ru.md).
## Поддержка RT в репозиториях ALT — ПЛОХАЯ
| Источник | Версия RT |
|---|---|
| Установлено (p9) | **4.4.4** |
| ALT p11 | **4.4.5-alt1_4** |
| ALT Sisyphus | **4.4.5-alt1_4** |
| Апстрим (Best Practical) | **6.0.x** (5.0.9 — последний 5.x) |
- **RT 4.4.x — EOL** (последний 4.4 был 4.4.7). Наш 4.4.4 — 2019 год.
- **Непатченые CVE** на 4.4.4+: ALT bug 49420 (CVE-2022-25802, CVE-2023-41259, CVE-2023-41260) — статус **NEW**, не чинят.
- Мейнтейнер ALT-пакета (`hiddenman@`) давно не трогал.
- **Вывод:** `epm`-обновление даёт лишь косметику 4.4.4→4.4.5, CVE остаются. Актуальный RT (5.x/6.x) в ALT **отсутствует** — нужна собственная упаковка из апстрима или tarball-инсталляция.
## Ключевые риски и ограничения
1. **i686 → x86_64 нельзя через `epm release-upgrade`** (ALT release-upgrade не меняет архитектуру). Уход с 32-bit = **пересоздание контейнера**. Подтверждает гипотезу: recreate, а не релиз-апгрейд.
2. **БД.** На mysql.auth живёт **MySQL 5.5.43** (сама по себе EOL), RT держится на ней именно из-за несовместимости с MySQL 8. Решено: остаться на MySQL. Для тест-контура поднять отдельную инстансу (MariaDB 10.x из p11 — RT 4.4.5 с ней работает) и залить туда дамп боевой `eter_rt`. На проде БД-хост не меняется (CT 219 не трогаем).
3. **RT 4.4.4→4.4.5 — минорный бамп**, миграция схемы тривиальна/отсутствует (в отличие от мажорного 4→5). Но сохраняются исторические грабли окружения: исчезающие perl-модули (Data::GUID, Plack::FCGI, Locale::Maketext), пакет `rt` тянет apache, кастомные scrip/condition (`AnyTransactionSource`).
4. **Фронтенд TLS на azbykar (CT 102)** — отдельный хост, при переносе домена rt.pr надо отдельный server-блок (или wildcard). Корневой диск azbykar 16 ГБ — следить за логами.
## ✅ РЕШЕНО (2026-07-13)
- **Версия RT: остаёмся на 4.4.5** (4.4.4 → 4.4.5 через `epm` из p11/Sisyphus). Мажорного апгрейда на 5.x/6.x **нет** — их нет в репозитории ALT, а собственная упаковка признана нерациональной.
- ✏️ **Уточнение 2026-07-15:** целевая версия поднята до **4.4.7** (girar task [425459](#-проверка-girar-task-425459-rt-447--2026-07-15) проверен на rt-test). 4.4.7 лучше 4.4.5 тем, что чинит блокер `RT/Condition.pm:201` (см. ниже) — пересборка ALT-пакета / локальный патч больше не нужны. Цель — 4.4.7, как только попадёт в p11/Sisyphus.
- **БД: остаёмся на MySQL.** Миграции на PostgreSQL **нет**. RT 4.4.x работает с MySQL 5.5/5.7 и MariaDB 10.x.
- **Главный выигрыш обновления — не фичи RT** (бамп 4.4.4→4.4.5 косметический), а **уход с EOL-системы p9 + 32-bit i686** на актуальный p11/x86_64.
- Развилки «версия RT» и «MySQL vs PostgreSQL» (этап 2) — **закрыты**.
## 🚀 Боевой переезд (2026-07-16, в процессе)
План заказа: «доготовить всё кроме БД+аттачей, потом перенести, мигрировать схему, переключить nginx». Girar-таск с rt 4.4.7 — **425459** (НЕ 425450, исправлено заказчиком). Ставить избирательно: `epm install 425459/rt 425459/rt-mailgate` (не тянуть test-ветку).
**Новые объекты:**
- **CT 412** (`rt`, нода **border**, **10.20.30.196**) — новый app-контейнер. p11/x86_64, **systemd-networkd** (etcnet замаскирован). DNS `rt.dmz.etersoft.ru`. RT **4.4.7-alt1** + rt-mailgate (из task 425459), perl-Plack-FCGI/perl-FCGI. nginx 1.30 + postfix 3.8 + fetchmail 6.4 + mutt. U root — login-shell **fish** (ходить через `ssh root@... 'bash -c ...'` или `bash -s` heredoc).
- **CT 369** (`mariadb.dmz.etersoft.ru`, border, **10.20.30.195**) — новый выделенный БД-хост, **MariaDB 11.8.8**. Юзеры = как на mysql.auth: `root` (`6f1XQPLsfd`), `eter_rt`@% (`Veegi9sh`), `phpmyadmin` controluser. В phpMyAdmin (CT 240). Подробности: [reference_mysql_servers.md](../reference_mysql_servers.md).
**Prep CT 412 (завершено, сервисы disabled):** RT_SiteConfig (DatabaseHost→mariadb.dmz.etersoft.ru), AnyTransactionSource.pm, rt-fcgi@.{service,socket}+logging.conf, nginx rt server-block + `/etc/nginx/RT-fcgi` + `include/stat.conf`, postfix×5 (postmap canonical/transport + newaliases), fetchmailrc (600), check_oversize_mails(.list), logrotate.d/rt. `/var/www/webapps/rt` → symlink на `/usr/share/rt/html` (images alias). **cron×3 придержан** в `/root/rt-cron-hold.tar` (деплой в момент старта). Principal.pm — stock 4.4.7 (патч уже в upstream). В `/etc/nginx/sites-enabled.d/` есть чужой `remnawire.conf` (seti.eterfund.ru на :8443/unix-сокете) — с RT :80 не конфликтует, не трогать.
**FREEZE старого RT (CT 233, 18:33 MSK):** веб стоп + disabled (nginx, rt-fcgi@1-5.socket), cron убран в `/root/rt-migration-freeze/` (rt, rt-fetchmail, rtresolve + найденный **live** `rt.bak-20260603` — cronie НЕ пропускает `.bak-*` по расширению!). fetchmail нет, rt-бэкенд остановлен. Контейнер жив. **БД статична.**
**Cutover-шаги:** dump eter_rt с mysql.auth (4.4 ГБ, ✅ 1.6 ГБ gz, 35 таблиц) → import в mariadb.dmz → `rt-setup-database --action upgrade` на CT 412 → rsync attachments (✅ 4728 файлов/7574 каталогов) → старт rt-fcgi+nginx+postfix на CT 412 + деплой cron → repoint `proxy_pass` на **azbykar (CT 102, 10.20.30.23)** 10.20.30.53→10.20.30.196 → verify rt.etersoft.ru. Откат — вернуть proxy_pass; CT 233 держать.
## ✅ ПРОВЕРКА girar task 425459 (rt 4.4.7) — 2026-07-15
Проверено на rt-test (CT 183, gefest, 192.168.0.191, p11/x86_64). Полный отчёт + инвентарь для переноса — в комменте к [баге 12480](https://bugs.etersoft.ru/show_bug.cgi?id=12480) (2026-07-15).
- `epm install 425459`: rt-4.4.5-alt1_4 → **rt-4.4.7-alt1** (+rt-mailgate), встало чисто, sources.list не засорён (task-репо во временном apt-config, убирается сам).
- 🎯 **`RT/Condition.pm:201` — ИСПРАВЛЕНО в пакете 4.4.7** (`= undef;` с `;`). Блокер p11/Perl 5.38 снимается сам собой. Локальный патч/пересборка больше не нужны.
- rt-fcgi@1..4 стартуют без ошибок; логин, тикет #70317 (UTF-8), поиск — работают. Schema upgrade 4.4.5→4.4.6 прошёл (rc=0; один индекс `ObjectCustomFields(ObjectId)` не создался — апстрим-баг RT в именовании индексов на MySQL, некритично).
- task потянул тяжёлую test-ветку (`rt-tests`, `perl-RT-Test`, graphviz, Mojolicious…) — на проде **НЕ ставить** (только `rt rt-mailgate`).
- **Вывод:** целевая версия для прода — **4.4.7**.
## 📋 Инвентарь для переноса (audit прода CT 233, 2026-07-15)
Что есть на проде, но **НЕ перенесено** в тест-контур (потеряется при recreate):
-**Патч ядра Principal.pm — РАЗОБРАН (2026-07-16):** etersoft-патч = **ровно 1 строка** — backtick вокруг `Groups`: `FROM \`Groups\`, Principals...`. Сравнение с upstream (git `bestpractical/rt` tag `rt-4.4.4`, raw `lib/RT/Principal.pm`) дало один-строчный diff. В upstream **4.4.7** тот же фикс сделан лучше через `QuotedTableName('Groups')` (→ backtick на MariaDB). **Портить не надо** — CT 412 оставлен на stock 4.4.7 `Principal.pm`. (`rpm -V` показывал `S.5....T.`, не conffile.)
- 🔴 **postfix** (5 файлов): `main.cf`, `master.cf`, `canonical`, `transport`, `aliases`. `myhostname=rt.etersoft.ru`, `relayhost=[mail.etersoft.ru]:587`, **без** client-side SASL (доверие сети).
- 🔴 **fetchmail:** `/etc/rt/fetchmailrc` (mode 600).
- 🔴 **cron:** `/etc/cron.d/rt`, `/etc/cron.d/rt-fetchmail`, `/etc/cron.daily/rtresolve`.
- 🟡 **кастом-скрипт:** `/etc/rt/check_oversize_mails` + `.list`.
- 🟡 **logrotate:** `/etc/logrotate.d/rt` (модиф.).
- 🟡 **ExternalStorage:** `Set(%ExternalStorage,...)` + ~1.6 ГБ вложений (вытащить путь).
- ✅ Уже в тесте: `RT_SiteConfig.pm`, `AnyTransactionSource.pm` (единств. кастомный condition), rt-fcgi units + `logging.conf`, nginx server-блок.
- ℹ️ Вручную поставленных (CPAN) perl-модулей **нет** — всё из пакетов.
## 🌐 Архитектура (облегчает переезд)
Внешний TLS-nginx — **azbykar (CT 102, 10.20.30.23)**: `listen 443 ssl`, LE-серт `/etc/letsencrypt/live/rt.etersoft.ru/`, `proxy_pass http://10.20.30.53:80`. RT-контейнер слушает только :80 (свой nginx → rt-fcgi).
- **Переключение прода = repoint `proxy_pass`** на новый контейнер (одна строка + reload), мгновенный откат. **Сертификаты мигрировать не надо.**
## Стратегия
Многоэтапно, через **тестовый контур `rt.pr.etersoft.ru`** (подход, предложенный заказчиком):
- клонируем данные, обновляем на копии, проверяем, и только потом трогаем боевой CT 233.
- **Recreate** (новый CT x86_64 p11), а не релиз-апгрейд i686.
- **Изолированная копия БД** — НИКОГДА не подключать тестовый RT к боевой `eter_rt` на mysql.auth (rt-setup-database мигрирует схему → убьёт прод).
- БД-хост (mysql.auth, CT 219) **не трогаем** — recreate касается только app-контейнера CT 233.
## Этапы
### Этап 1 — Тестовый контур rt.pr ✅ ВЫПОЛНЕНО (2026-07-13)
**Контур:** CT `rt-test` на ноде **gefest** (НЕ enceladus — там нет места/шаблона), IP **192.168.0.191** (vmbr0 office LAN — ⚠️ ошибка, тест-серверы должны быть на 10.20.30.x, см. [feedback_test_servers_on_dmz.md](../feedback_test_servers_on_dmz.md); оставлено как есть по указанию). ОС ALT **p11 x86_64**, RT **4.4.5-alt1_4**, MariaDB **11.8.8** (локально в CT, дамп боевой `eter_rt`). Доступ: http://rt.pr.etersoft.ru/ (внутр. зона; root, temp-pass `Rt-test-2026` — тестовая копия БД).
**Что сделано:** MariaDB + дамп (67032 tickets / 939579 tx / 194221 attachments / 1.6 ГБ ExternalStorage); RT 4.4.5 + deps; `RT_SiteConfig.d/local.pm` override (DBHost=localhost, WebDomain=rt.pr); 4× `rt-fcgi@.socket` + nginx (webroot `/usr/share/rt/html`); `rt-setup-database --action upgrade --upgrade-from 4.4.4` (нужен флаг `--upgrade-from`, иначе интерактивный промпт зацикливается); перенесены кастомный scrip-condition `AnyTransactionSource.pm`, юниты, логотип.
**Верификация — всё работает после фикса ниже:** логин (302, сессия), просмотр тикета #70317 (UTF-8 ок), поиск по статусу + FTS-поиск по контенту (<1с), Create+Correspond (write path), scrips (4/5/6/7/24 грузятся и выполняются), ExternalStorage (чтение вложений ок). Данные мигрированы без потерь.
### 🔴 БЛОКЕР: RT/Condition.pm:201 — fatal на Perl 5.38 (p11)
`/usr/share/perl5/RT/Condition.pm` строка **201****пропущена точка с запятой**:
```perl
$self->{'TemplateObj'} =undef # ← НЕТ ';'
$self->{'TicketObj'} = undef;
```
На **Perl 5.28** (p9/прод) это парсится (warn), на **Perl 5.38** (p11) — **fatal compile error** `Can't modify undef operator in scalar assignment` → не грузится базовый `RT::Condition`**падают ВСЕ scrip-условия** (AnyTransaction, OwnerChange, SLA_*, ...). На тесте фикшено одной точкой (`sed -i "201s/=undef$/=undef;/"`), после этого scrips работают. **Тот же баг в боевой RT 4.4.4** — просто скрыт старым Perl.
→ Для прода фикс должен идти через **пересборку ALT-пакета** (апстрим-баг RT + упаковка на p11). См. «Решения». На тесте применён локальный патч (`*.orig-20260713` бэкап).
> ✅ **РЕШЕНО 2026-07-15:** в rt **4.4.7** (girar task 425459) баг исправлен в самом пакете — нормальный `= undef;` с `;`. Переход на 4.4.7 снимает блокер полностью; пересборка ALT-пакета и локальный патч больше **не нужны**. См. [проверку 4.4.7](#-проверка-girar-task-425459-rt-447--2026-07-15).
### ⚙️ Настройки после миграции (обязательно для прода)
- **MariaDB:** после загрузки дампа статистика инода пустая (`data_length=0` для таблиц с сотнями тыс. строк) → full scans, поиск/просмотр висят 30+с. Лечится: `mariadb-check --analyze eter_rt` + `innodb_buffer_pool_size=2G` (`/etc/my.cnf.d/zz-rt-tuning.cnf`). После этого — sub-second.
- **perl-Plack-FCGI + perl-FCGI** — пакет `rt` их НЕ тянет, без них rt-fcgi падает (`Can't locate Plack/Handler/FCGI.pm`).
- **MTA** — на тесте нет sendmail (`Could not send mail`), scrips почту композят, но не отправляют. На проде MTA есть.
### Этап 1 — исходный план (минимум: воспроизвести боевой функционал на новой ОС)
1. **DNS:** завести `rt.pr.etersoft.ru` (внутренняя зона → IP нового тест-CT; позже публичный TLS через azbykar или отдельный server-блок). См. skill `/dns`.
2. **Создать CT** x86_64 **p11** на enceladus (клон template-CT или новый из ostemplate). Имя напр. `rt-test` / `rt.pr`. СНАЧАЛА IP, ПОТОМ старт ([reference_create_lxc_container_pve.md](../reference_create_lxc_container_pve.md)). 2 vCPU / 3–4 ГБ RAM.
3. **Поднять изолированную копию БД:** MariaDB 10.x (из p11) в тест-CT (или отдельный CT), залить туда свежий дамп `eter_rt` с mysql.auth (`mysqldump --single-transaction`, `--routines`). **Не боевой mysql.auth.** RT 4.4.5 с MariaDB 10.x работает.
4. `epm install rt rt-mailgate` (даст 4.4.5) + perl-зависимости по мере вылета (Data::GUID, Plack-FCGI, Locale-Maketext*…).
5. Перенести конфиги: `/etc/rt/RT_SiteConfig.pm` (править `$DatabaseHost`/`$DatabaseUser`/пароль → копия БД, `$WebPath`/`$WebBaseURL` → rt.pr). Кастомные scrip/condition (AnyTransactionSource.pm и т.п.) — из `/usr/lib/rt/lib/RT/...` боевого.
6. systemd `rt-fcgi@.service`/`.socket` (4 сокета) — скопировать юниты с боевого. nginx server-блок rt.pr.
7. `rt-setup-database --action upgrade` на копии БД (4.4.4→4.4.5 — мелко, но прогнать).
8. fetchmail — НЕ подключать к боевой поддержке (тестовая очередь/ящик).
9. **Проверить:** логин, список тикетов, ответ с вложением, поиск, права, кастомные scrips. Смотреть `journalctl -u 'rt-fcgi@*'`, `/var/log/rt/rt.log`.
### Этап 2 — ~~Решение по версии RT~~ ЗАКРЫТ (2026-07-13)
Решено: **остаёмся на RT 4.4.5 + MySQL** (5.x/6.x нет в репозитории ALT, собственная упаковка нерациональна; PostgreSQL-миграция не нужна). Этап 2 как точка выбора — отпал.
### Этап 2b — (опционально) работа с CVE
На 4.4.5 остаются CVE (ALT bug 49420: CVE-2022-25802, CVE-2023-41259, CVE-2023-41260). Если критично — оценить бэкпорты патчей апстрима (4.4.5→4.4.7) вручную поверх пакета. По умолчанию **не делаем** (RT за корпоративным периметром, риск низкий).
### Этап 3 — Боевое обновление CT 233
**Предварительное условие:** ~~зафиксировать блокер Condition.pm:201~~ — ✅ **снято** переходом на rt 4.4.7 (girar task 425459, см. [проверку](#-проверка-girar-task-425459-rt-447--2026-07-15)). Остаётся: дождаться попадания 4.4.7 в p11/Sisyphus (или ставить из task-репо).
**Перед recreate — вытащить из прода весь [инвентарь для переноса](#-инвентарь-для-переноса-audit-прода-ct-233-2026-07-15)** (Principal.pm diff, postfix×5, fetchmailrc, cron×3, check_oversize_mails, logrotate, ExternalStorage path) и сложить в репозиторий для воспроизводимости. На тест-контуре этого нет — потеряется.
По итогам этапов 1–2:
- **Recreate** (i686→x86_64 нельзя release-upgrade): новый CT x86_64 p11 (как rt-test, но боевой конфиг: домен rt.etersoft.ru, postfix, fetchmail, cron, ExternalStorage) → миграция БД+attachments → **переключить `proxy_pass` на azbykar (CT 102)** на новый IP → декомисс CT 233.
- 🔄 **БД — отдельный MySQL, НЕ в контейнере** (решение заказчика 2026-07-15; тест-контур держит MariaDB локально — это только для изоляции теста). **Открытый вопрос:** переиспользовать `mysql.auth` (CT 219, MySQL 5.5.43 — сам EOL, shared с другими сервисами) или поднимать новый выделенный хост. RT 4.4.x работает с MySQL 5.5/5.7 и MariaDB 10/11, но **НЕ с MySQL 8** (баг 7693#c51 — unquoted identifiers).
- **Cutover** = repoint `proxy_pass http://<new-CT>:80` на azbykar + reload; откат — вернуть строку. Сертификаты не трогать.
- Окно работ, согласование с support/ТП (RT — рабочий инструмент, простой критичен).
- ⚠️ **Перед любыми изменениями — PVE snapshot** (на rt-test перед апгрейдом 4.4.7 снимок не делался — упущение).
## Связанные задачи
- **Бага 12480** (REOPENED, «Обновить RT на рабочем сайте», lav@) — исторический контекст апгрейда 3.8→4.4 (2019). Решить: вести работу в ней или завести **новую багу** под текущий масштаб (p9→p11, recreate, RT-версия).
- **Бага 7693** (ASSIGNED, поддержка rt.etersoft.ru) — ongoing.
- **ALT bug 49420** — CVE на RT 4.4.4 (внешний трекер, статус NEW).
- **Kaiten #66499560** — интеграция виджета `/api/support/widget` в карточку тикета (Scrip + iframe + HMAC, Perl/Mason override). Просит dev-RT контур → **этап 1 его даёт**. Но: мажорный апгрейд RT (B) перепишет Mason-шаблоны → override виджета делать на финальной версии RT. Координировать: виджет — после фиксации версии RT.
---
name: project_pve_kerberos_spnego_gefest
description: PVE на gefest — добавить настоящий Kerberos SSO (SPNEGO) для веб-логина; пользователь настраивает сам, потом проверить
metadata:
type: project
---
**Задача:** включить настоящий Kerberos SSO (SPNEGO/GSSAPI) автовход в веб-морду PVE на **gefest** (192.168.0.13, кластер MIAC). Пользователь (Vitaly) настраивает сам; моя роль — **проверить после**.
**Контекст (состояние на 2026-07-24):**
- AD = **ETERSOFT.RU**, DC = dc.etersoft.ru (10.20.30.20), Kerberos :88, LDAP :389 (SRV-записи есть).
- gefest **уже в AD через winbind** (`realm list`: `client-software: winbind`, `login-formats: ETERSOFT\%U`), есть `/etc/krb5.keytab`. sssd тоже active/enabled (гибрид/legacy).
- В PVE сейчас realm только `pam` + `pve`. Доменные юзеры сидят как `user@pam` (aalyaev@pam, lav@pam …) — `pam` уже проверяет пароли по AD (PAM→winbind→Kerberos). Т.е. AD-аутентификация УЖЕ работает, просто не как SSO.
- **Важно:** PVE из коробки НЕ поддерживает SPNEGO в web UI → настоящий SSO требует reverse-proxy (nginx/apache + GSSAPI) спереди PVE, либо иной обвязки. Уточнить у пользователя архитектуру когда скажет «готово».
**Как проверять (когда пользователь попросит):**
1. У клиента валидный TGT: `klist` (на lav/builder64 — `kinit lav@ETERSOFT.RU`).
2. `curl --negotiate -u : http(s)://<pve-proxy-url>/` — должен вернуть ответ без падения в 401/логин-форму.
3. Браузер: `network.negotiate-auth.trusted-uris` (Firefox) / group policy (Chromium) на хост PVE-прокси.
4. Падение в форму ввода пароля = SSO НЕ работает (откат на обычную аутентификацию).
5. Уточнить у пользователя: какой URL/порт прокси, на каком хосте он крутится (gefest? отдельный контейнер?), доступ снаружи или только office-LAN.
Связано: [[reference_create_lxc_container_pve]], [[feedback_test_servers_on_dmz]].
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment