Перейти к содержанию

Навигация

WB 6: Errata: различия между версиями

6346 байт добавлено ,  10 месяцев назад
Строка 895: Строка 895:


Вышедшие из строя контроллеры подлежат гарантийной замене на свежие Wiren Board 7.
Вышедшие из строя контроллеры подлежат гарантийной замене на свежие Wiren Board 7.
<!--== ERRWB600021: Разрастается файл /var/lib/mosquitto/mosquitto.db и не запускается сервис mosquitto ==
{{Anchor|ERRWB600021}}
'''Подверженные устройства'''
Контроллеры Wiren Board 6, работающие под управлением ОС Debian 9 «stretch».
'''Описание'''
Перестаёт работать веб-интерфейс, перестают приходить MQTT-сообщения. Также может рваться связь по VPN, медленно работать консоль, контроллер может самопроизвольно перезагружаться.
'''Причины и подробное описание'''
Проблема вызвана не оборудованием или программным обеспечением, разработанным компанией Wiren Board, а является следствием бага в MQTT-брокере mosquitto, используемом [[MQTT]] в контроллере: [https://github.com/eclipse/mosquitto/issues/389 Unexpected growth in the .db file].
Эта проблема связана с так называемым persistence file. Брокер mosquitto, если не может отправить сообщение кому-то из подключенных клиентов, сохраняет сообщение в оперативной памяти. Например, это может случиться, когда настроена пересылка сообщений на другой брокер, подключенный через bridge, но внезапно пропала связь. Когда связь восстановится, сообщения из оперативной памяти будут отправлены. Однако если за время отсутствия связи сервис mosquitto был перезапущен (например, если выключался контроллер), то эти данные будут утеряны. Чтобы не допустить утерю данных, брокер mosquitto может сохранять такие сообщения не только в оперативную память, но и на накопитель в persistence file, откуда потом загрузит информацию при следующем запуске. Подробнее в статье [https://pagefault.blog/2020/02/05/how-to-set-up-persistent-storage-for-mosquitto-mqtt-broker/ How to set up persistent storage for Mosquitto MQTT broker].
Persistence file можно включать или выключать в настройках mosquitto. На контроллерах Wiren Board он по умолчанию включен.
Из-за ошибки в коде mosquitto persistence file может вырастать до размера 50 и более МБ, хотя при нормальной работе он обычно меньше 25 МБ. При следующем запуске mosquitto не может обработать такой большой файл и в итоге не запускается. Из-за этого в том числе перестаёт работать веб-интерфейс и отправка MQTT-сообщений. Также persistence file большого размера может занять всё свободное место на разделе, из-за чего может перестать работать другой софт контроллера, в том числе VPN и SSH. Также в некоторых версиях ПО контроллера за статусом сервиса mosquitto следил watchdog, и из-за того, что сервис не запускался, watchdog перезапускал контроллер.
Проверить размер persistence file можно командой <code>du -h /var/lib/mosquitto/mosquitto.db</code>.
Этот баг исправлен в mosquitto версии 1.5.6. В Debian 9 «stretch» включен только mosquitto до версии 1.4.10-3+deb9u4, в котором баг всё ещё есть. В Debian 11 «bullseye» включен mosquitto версии 2.0.7-3 и старше, поэтому там этого бага никогда не было.
'''Пути обхода'''
Чтобы вернуть контроллер в рабочее состояние:
# Удалите persistence file. Это можно сделать любым способом, но так как ПО контроллера, включая SSH, может работать медленно из-за недостатка свободного места, удобнее всего это сделать с помощью [[WB_Debug_Console |отладочной консоли]]: <code>rm /var/lib/mosquitto/mosquitto.db</code>. Если из-за проблем в работе контроллера у вас не получается удалить persistence file, можете [[Wiren_Board_6_Firmware_Update | выполнить factory reset]].
# В <code>/etc/mosquitto/mosquitto.conf</code> поменяйте persistence true на persistence false.
# Перезапустите контроллер.
# Ещё раз удалите persistence file.
С отключенным persistence file данная проблема не будет возникать, однако в редких случаях, описанных в разделе «Причины и подробное описание», некоторые MQTT-сообщения могут быть не доставлены. Поэтому лучше после этого сразу обновить контроллер до Debian 11 «bullseye» ([[Wiren_Board_Firmware_Update |инструкция]]) и вернуть параметр persistence true в <code>/etc/mosquitto/mosquitto.conf</code>.
'''Исправление'''
На всех контроллерах Wiren Board, выпущенных после марта 2023, установлена прошивка с ‎ОС Debian 11 Bullseye, в которой этой проблемы нет.-->