# Отчёт для поддержки Wiren Board: wb-mqtt-serial не запускается после apt upgrade (symbol lookup error)

## Кратко

После планового `apt upgrade` 2026-07-11 пакет `wb-mqtt-serial` обновился до
`2.248.1-wb101`, но требуемая им версия символа из `libwbmqtt1-5` не
установилась (репозиторий предложил для установки `libwbmqtt1-5 5.6.0-wb100`,
но у неё неудовлетворимые зависимости на bullseye). В результате
`wb-mqtt-serial` не может запуститься вообще — падает сразу при старте с
`symbol lookup error`, systemd уходит в бесконечный цикл перезапуска.

## Окружение

- Контроллер: Wiren Board 8, arm64
- ОС: Debian GNU/Linux 11 (bullseye)
- `wb-release-info`: `1.0-stable~wb8+bullseye~20260710165214`
- Репозиторий: `http://deb.wirenboard.com/wb8/bullseye stable/main arm64`
- `wb-mqtt-serial`: было `2.180.2-wb106`, стало `2.248.1-wb101`
- `libwbmqtt1-5`: установлена `5.3.4`, кандидат в репозитории — `5.6.0-wb100`

## Когда произошло

`apt upgrade` выполнен 2026-07-11 в 12:37 UTC (в рамках планового
обновления системы, ~150 пакетов, включая `wb-mqtt-serial`,
`wb-mqtt-confed`, `wb-homeui-backend`, `wb-mqtt-db`, `wb-mqtt-gpio`,
`wb-mqtt-adc`, `wb-mqtt-w1` и др.). `wb-mqtt-serial` начал падать сразу
после этого, в 12:42 UTC, и находился в цикле перезапуска (рестарт каждые
~4 секунды) до 16:40 UTC, когда мы принудительно остановили сервис
(`systemctl stop wb-mqtt-serial`), чтобы прекратить бесполезные попытки
перезапуска и не засорять логи — count перезапусков к этому моменту
превысил 1500.

## Точный текст ошибки

Из `journalctl -u wb-mqtt-serial`:

```
/usr/bin/wb-mqtt-serial: symbol lookup error: /usr/bin/wb-mqtt-serial: undefined symbol: _ZN6WBMQTT12TControlArgs9SetHiddenEb
wb-mqtt-serial.service: Main process exited, code=exited, status=127/n/a
wb-mqtt-serial.service: Failed with result 'exit-code'.
```

`_ZN6WBMQTT12TControlArgs9SetHiddenEb` демаглируется в
`WBMQTT::TControlArgs::SetHidden(bool)` — то есть бинарник
`wb-mqtt-serial 2.248.1-wb101` слинкован/собран в расчёте на более новую
`libwbmqtt1-5`, где этот метод есть, а установленная `5.3.4` его не
содержит.

## Попытка исправить обновлением libwbmqtt1-5

Мы попытались поставить предложенную репозиторием версию библиотеки:

```
apt install libwbmqtt1-5
```

Получили отказ apt из-за неудовлетворимых зависимостей на bullseye:

```
The following packages have unmet dependencies:
 libwbmqtt1-5 : Depends: libc6 (>= 2.38) but 2.31-13+deb11u14 is to be installed
                Depends: libdb5.3++t64 but it is not installable
                Depends: libext2fs2t64 (>= 1.37) but it is not installable
                Depends: libssl3t64 (>= 3.0.0) but it is not installable
                Depends: libstdc++6 (>= 14) but 10.2.1-6 is to be installed
E: Unable to correct problems, you have held broken packages.
```

Судя по требуемым версиям (`libc6 >= 2.38`, `libstdc++6 >= 14`,
пакеты с суффиксом `t64`), пакет `libwbmqtt1-5 5.6.0-wb100`, который сейчас
раздаётся из ветки `wb8/bullseye`, на самом деле собран под Debian
12/13 (bookworm/trixie), а не под bullseye. То есть, похоже, в
bullseye-репозиторий по ошибке попал пакет `libwbmqtt1-5` для другой ОС —
и при этом `wb-mqtt-serial 2.248.1-wb101` для bullseye уже требует
символ именно из этой (недоступной на bullseye) версии библиотеки.

Мы не стали форсировать установку (обход зависимостей, ручная установка
рантайма из bookworm и т.п.) — это реальный контроллер, управляющий
жилой квартирой, и попытка "протащить" библиотеки от другого релиза
Debian может сломать систему сильнее, чем не работающий на текущий
момент serial-драйвер.

## Проверка отката

- В индексе пакетов репозитория для `wb-mqtt-serial` сейчас доступна
  только `2.248.1-wb101` — предыдущая версия `2.180.2-wb106` из
  Packages-листинга уже пропала, откатиться штатным `apt install
  wb-mqtt-serial=2.180.2-wb106` нельзя.
- Локального кэша `.deb` с версией `2.180.2-wb106` тоже не осталось
  (`/var/cache/apt/archives` содержит только новую версию).

## Влияние на работу системы

- `wb-mqtt-serial` — драйвер serial/RS-485 (Modbus) устройств, то есть
  большинства реле, диммеров и датчиков в квартире, подключённых по
  этой шине. С 12:42 UTC 2026-07-11 эти устройства не опрашиваются и не
  управляются вживую — интерфейсы показывают только последние retained
  MQTT-значения.
- Другие MQTT-драйверы, тоже обновлённые в этом апдейте и линкующиеся с
  `libwbmqtt1-5` (`wb-mqtt-gpio`, `wb-mqtt-adc`, `wb-mqtt-db`,
  `wb-mqtt-w1`, `wb-mqtt-logs`), продолжают нормально работать — похоже,
  символ `TControlArgs::SetHidden` используется только в
  `wb-mqtt-serial`.
- Сейчас (после нашей остановки) сервис просто выключен
  (`systemctl stop wb-mqtt-serial`), без цикла перезапуска.

## Проверка канала testing

Проверили и `testing`-канал (`wb-release -t testing`, файл
`/etc/apt/sources.list.d/wirenboard.list` сам подсказывает эту команду) —
запросили индекс пакетов напрямую
(`https://deb.wirenboard.com/wb8/bullseye/dists/testing/main/binary-arm64/Packages.gz`),
не переключая сам контроллер. В `testing` находится **точно та же пара
версий**: `libwbmqtt1-5 5.6.0-wb100` (с теми же неудовлетворимыми на
bullseye зависимостями — `libc6 >= 2.38`, `libdb5.3++t64`,
`libext2fs2t64`, `libssl3t64`, `libstdc++6 >= 14`) и `wb-mqtt-serial
2.248.1-wb101`. То есть переключение на testing не поможет — проблема не
специфична для stable, она в обоих каналах.

Дата `Release`-файла канала testing — `Fri, 10 Jul 2026 16:52:33 UTC`,
то есть сборка появилась в репозитории меньше суток назад. Возможно,
поэтому в чате поддержки её пока никто не упоминал.

Отдельно: в метаданных `wb-mqtt-serial` зависимость на библиотеку указана
без нижней границы версии — `Depends: ..., libwbmqtt1-5, ...` (без
`(>= 5.6.0)`), поэтому apt в принципе не может отследить, что установленной
версии библиотеки не хватает для этого бинарника — с точки зрения apt всё
корректно, несовместимость проявляется только в рантайме.

## Поиск последней совместимой версии wb-mqtt-serial

Посмотрели changelog.Debian из уже скачанного `.deb` (`/usr/share/doc/wb-mqtt-serial/changelog.Debian.gz`,
767 записей) в поисках места, где появилась зависимость от нового символа.
Нашли точную границу:

```
wb-mqtt-serial (2.239.0) stable; urgency=medium
  * Add device_id parameter to port/Load RPC
  [ Radmir Khakimov ]
  * Add WB-MDALI support
  * Add hidden channels support
 -- Petr Krasnoshchekov <petr.krasnoshchekov@wirenboard.com>  Wed, 22 Apr 2026 14:37:25 +0500
```

"Add hidden channels support" в `2.239.0` (22 апреля 2026) — судя по всему,
именно эта фича добавила вызов `TControlArgs::SetHidden`, которого нет в
`libwbmqtt1-5 5.3.4`. Версия `2.238.1` (21 апреля 2026, запись прямо перед
этой) должна быть последней версией, ещё не требующей нового символа.

Проверили и версионные ограничения уже установленных пакетов, которые
зависят от `wb-mqtt-serial`:

- `wb-mqtt-homeui 2.208.1-wb101`: `Breaks: wb-mqtt-serial (<< 2.232.1~~)`
- `wb-device-manager 1.25.4`: `Depends: wb-mqtt-serial (>= 2.184.3~~)`

`2.238.1` формально удовлетворяет обоим ограничениям (2.238.1 больше
2.232.1 и больше 2.184.3) — то есть теоретически идеальный кандидат:
достаточно новый, чтобы не ломать уже обновлённые `wb-mqtt-homeui`/
`wb-device-manager`, и достаточно старый, чтобы не требовать новый символ
из библиотеки.

Однако **в пуле репозитория версии `2.238.1` (и вообще ничего между
`2.184.3` и `2.248.0`) уже нет** — проверили `.deb` для 15 версий/сборок
в этом диапазоне (`2.230.0`…`2.238.1`, с суффиксами `-wb100` и без),
все вернули `404`. Также проверили `by-hash` в `dists/stable/Release` —
там всего одно поколение индекса `Packages`, старые версии индекса не
хранятся. Судя по всему, пул хранит только текущий `stable`-снепшот плюс
(случайно) `2.180.2-wb106` — версию, которая была установлена на этом
контроллере до вчерашнего обновления.

Ставить обратно `2.180.2-wb106` в одиночку не вариант — она нарушает оба
вышеупомянутых ограничения (`< 2.184.3` и `< 2.232.1~~`) и тянет за собой
каскадное удаление `wb-mqtt-homeui`, `wb-device-manager` и т.д. (мы уже
случайно словили это на своей практике). Вернуть их тоже до совместимых
версий — значит откатывать весь вчерашний апдейт целиком, включая базовые
системные/security-пакеты (`openssh-server`, `libc6`, `systemd` и т.д.) —
это уже не точечная правка, а полноценный откат прошивки, которую не
стоит делать вручную дёрганьем dpkg на боевом контроллере.

**Вопрос**: не могли бы вы вернуть в пул (или прислать) `.deb`-сборку
`wb-mqtt-serial` версии `2.238.1` под bullseye/arm64 — она, по нашим
расчётам, должна быть совместима и с уже обновлёнными
`wb-mqtt-homeui`/`wb-device-manager`, и со старой `libwbmqtt1-5 5.3.4`?

## Вопрос к поддержке

1. Это известная проблема с публикацией `libwbmqtt1-5 5.6.0-wb100`,
   собранной не под тот релиз Debian (нужен `glibc >= 2.38`,
   `libstdc++6 >= 14`, пакеты `*t64` — похоже на bookworm/trixie), в обе
   ветки `wb8/bullseye` (`stable` и `testing`)?
2. Планируется ли исправление в репозитории (либо откат
   `libwbmqtt1-5`/`wb-mqtt-serial` до совместимых версий, либо публикация
   корректной bullseye-сборки `5.6.0`)?
3. Есть ли безопасный способ вручную вернуть `wb-mqtt-serial` к рабочей
   версии `2.180.2-wb106` на bullseye, пока проблема не решена на стороне
   репозитория?
4. Стоит ли по этой же причине ожидать проблем при следующем `apt
   upgrade`/`apt full-upgrade` у других пакетов, зависящих от
   `libwbmqtt1-5` (`wb-mqtt-gpio`, `wb-mqtt-adc`, `wb-mqtt-db`,
   `wb-mqtt-w1`, `wb-mqtt-logs`, `wb-mqtt-opcua`, `wb-mqtt-mbgate`,
   `wb-mqtt-iec104`) — пока что они работают на старой `libwbmqtt1-5
   5.3.4`, но при следующем обновлении этих пакетов может повториться та
   же история.
