github mikopbx/Core 2026.3.20-dev
MikoPBX 2026.3.20-dev

latest release: 2026.3.22-dev
pre-release6 hours ago

Nightly DEV build. Not recommended for production use.

Ночная DEV-сборка. Не рекомендуется для продуктивного использования.

Nightly DEV build. Not recommended for production use.

Ночная DEV-сборка. Не рекомендуется для продуктивного использования.

MikoPBX 2026.3.20-dev — Nightly DEV

Дата: 2026-07-09 · База: 2026.2.118 · Коммитов: 47 · Файлов: 270

Кратко

Устранена системная нестабильность после перезагрузки диалплана, исправлен рост памяти при простое, добавлен проброс SRV-записей провайдеров. Безопасность: усилена защита установщика модулей, исправлена уязвимость в обработке архивов. Входящая маршрутизация и аутентификация по физическим ключам (YubiKey) теперь работают надёжно. Мониторинг провайдеров показывает реальное состояние: отличает отключение от недоступности, отображает корректную историю без ложных событий. Настройки SSH и пароли применяются без перезагрузки сервера. Ограниченные пользователи могут создавать учётные записи с надёжными паролями. Выключенные провайдеры снимают регистрацию на стороне оператора связи сразу, без ожидания истечения таймаута.

🆕 Новое

  • Резолвер провайдеров теперь распознаёт SRV-записи: автоматическое переключение на резервные адреса вместо ручного перечисления IP.
  • Мониторинг провайдеров различает регистрацию и доступность: зарегистрированный транк, до которого недоступна сеть, показывается жёлтым, а не зелёным — отражает реальную возможность дозвона.
  • При ошибке сохранения галочки «Отключён» у модуля (например, заблокированная база данных) система больше не сбрасывает счётчик аварийных перезапусков — модуль будет отключён повторно при следующей попытке, а не зациклится бесконечно.
  • Свежие установки получают современный набор кодеков: включены по умолчанию opus, g722, alaw, ulaw, g729 (аудио) и h265, h264, vp9, vp8 (видео) вместо устаревшего списка, создававшегося миграциями с версий 2020 года.

🐛 Исправлено

  • Аутентификация по физическим ключам (YubiKey) теперь работает для входа без имени пользователя — система запрашивает от ключа запоминаемые учётные данные, которые раньше создавались незапоминаемыми и не предлагались браузером.
  • Обновление firmware больше не стирает раздел Storage на однодисковых установках — сохраняется исходное смещение раздела, данные остаются в безопасности при переустановке системного образа.
  • Изменения настроек SSH (отключение пароля, смена порта) и пароля пользователя теперь применяются немедленно, без перезагрузки сервера.
  • Сервисные процессы больше не блокируются в ожидании несуществующего последовательного порта на виртуальных машинах — обнаружение портов стало неблокирующим.
  • Активация купона лицензии больше не выдаёт ложную ошибку о повторном использовании при успехе — устранена отправка дублирующих запросов при одном клике.
  • Провайдеры: отключение или удаление транка с исходящей регистрацией теперь немедленно снимает регистрацию на стороне оператора связи — раньше привязка оставалась активной до истечения таймаута, и входящие звонки продолжали поступать на выключенный транк.
  • Провайдеры: мониторинг больше не показывает ложные отключения после перезапуска служб — переходные состояния регистрации не создают событий об инциденте, а история правильно наследует последнее известное состояние.
  • Провайдеры: временная таблица истории за 24 часа теперь показывает восстановление зелёным цветом, а не красным на весь промежуток после кратковременного отключения.
  • Провайдеры: на холодном старте (пустой кеш DNS) входящие звонки на общие для нескольких транков адреса больше не отклоняются — диалплан содержит постоянный алиас по имени хоста, указывающий на канонический контекст по IP-адресу.
  • Сеть: включение и выключение файрвола сразу устанавливает или снимает блокировки на регистрацию SIP, AMI и IAX — раньше требовалась перезагрузка Asterisk.
  • Сеть: блокировка узла только для AMI больше не попадает в список запрета SIP — регистрации по SIP с этого адреса не блокируются случайно.
  • Сеть: изменения правил фильтрации в Docker-окружении теперь применяются немедленно — раньше действовали только после перезагрузки сервера.
  • Пароли: ограниченные пользователи могут создавать учётные записи сотрудников с надёжными паролями — виджет проверки силы пароля получил доступ к конечной точке проверки для всех ролей.
  • Галочка «Не записывать разговоры» для сотрудника снова работает на PHP 8.1+ — звонки сотрудника, для которого запись отключена, действительно не записываются.
  • Входящий номер и CallerID на принимающей стороне определяются корректно — исправлена ошибка в парсере регулярных выражений, вызывавшая неправильную маршрутизацию звонков.
  • Список доступных обновлений модулей теперь показывается в веб-интерфейсе — раньше таблица оставалась пустой из-за ошибки в обработке ответа сервера.
  • Выпадающий список «Выберите группу меню» при настройке модуля теперь кликабелен и отображает выбранные значения.
  • Короткие внутренние номера (5–7 цифр) сохраняются в поле мобильного телефона сотрудника без преобразования в международный формат.
  • При смене мобильного номера пользовательская строка дозвона больше не затирается — система перезаписывает только пустое поле или совпадающее со старым номером.
  • Продолжение записи разговора после неудачного перевода теперь пишет в те же дорожки, что и начало — финальная запись больше не теряет аудио второй половины вызова.
  • Закрытие записи звонка при параллельном обзвоне агентов очереди: теперь случайно не закрывается запись только что ответившего оператора (раньше финал разговора помечался как «нет ответа» и терялась его запись).
  • Бесконечная перезагрузка диалплана при изменении порядка маршрутов устранена — маршруты сортируются по номерной позиции, а не лексикографически, и система больше не отправляет лавину перекрывающихся команд перезагрузки.
  • Пропавшие из списка активных подсказки по активным вызовам (hints) при застрявшей перезагрузке диалплана: мониторинг здоровья Asterisk дополнен проверкой hints, так что зависший процесс будет перезапущен автоматически.
  • Отключенный модуль больше не воскресает через перезапущенные служебные процессы — супервизор теперь прекращает мониторинг и убивает остаточные процессы модуля сразу после его отключения, даже если супервизор ещё не перезапустился сам.
  • Логотипы модулей в маркетплейсе снова отображаются — разрешён новый российский зеркальный хост для статики модулей в политике безопасности браузера.

⚙️ Улучшения

  • Защита от утечки памяти при простое: на VPS и больших серверах потребление памяти Asterisk перестаёт расти без нагрузки (64 МБ вместо прежних 350+ МБ за сутки).
  • Усилена защита установщика модулей: проверка архивов на абсолютные пути, backslash-разделители и символические ссылки до распаковки — дополнение к прежней проверке после распаковки.
  • Сообщения об ошибках модулей: теперь всегда включают идентификатор модуля, даже когда тот не предоставил текста ошибки.
  • Лог установщика модулей содержит название используемого распределителя памяти (jemalloc или glibc), что ускоряет диагностику проблем памяти на разных конфигурациях серверов.
  • При массовой смене приоритета маршрутов система теперь отправляет одно событие вместо десятков — быстрее для оператора и меньше нагрузка на конфигурацию.
  • Временные файлы больших ответов REST API теряются при сбое реже — добавлена автоматическая очистка забытых файлов старше их времени жизни.
  • Счётчик аварийных перезапусков модуля теперь атомарно сбрасывается с его временем жизни, что предотвращает бессрочный счётчик после падения процесса между командами.
  • Журналы модулей теперь сохраняются корректно после ротации — служебные процессы продолжают писать в свой файл вместо потерянных в переименованном дескрипторе записей.

🧪 Фокус тестирования

  • Область: Вход по физическому ключу (YubiKey) без имени пользователя; однодисковая установка — обновление firmware без потери Storage; провайдеры с SRV-записями; отключение и удаление провайдеров с исходящей регистрацией (проверить мгновенную отмену регистрации на стороне оператора); мониторинг провайдеров при перезапуске служб (отсутствие ложных инцидентов, правильное отображение истории); провайдеры на общем IP-адресе при холодном старте; включение и выключение файрвола при активных звонках (проверить немедленное действие, отсутствие разрывов); блокировка только по AMI (SIP-регистрация должна работать); изменение правил фильтрации в Docker-окружении; создание сотрудника ограниченным пользователем с надёжным паролем; изменение настроек SSH (отключение пароля, смена порта, смена пароля) без перезагрузки; активация купона лицензии (одна попытка, успех без ошибок); запись с переводом на очередь с параллельным обзвоном; продолжение записи после неудачного перевода; настройка записи отдельных сотрудников; установка и обновление модулей при дисковой/памятной нагрузке; массовое изменение порядка маршрутов (10+ строк); короткие внутренние номера в поле мобильного телефона; включение и немедленное отключение модуля (проверить отсутствие остаточных процессов); просмотр логотипов модулей в маркетплейсе; входящие звонки с нестандартными номерами, регулярными выражениями в маршрутизации DID/CallerID.
  • Регрессии: Проверить, что счётчик памяти Asterisk стабилен при длительном простое (несколько часов). Убедиться, что модули, однажды отключённые оператором, не включаются сами и их процессы не появляются вновь. Проверить корректность финальных записей при переводе на очередь с отклонениями агентов. Воспроизвести установку модуля при исчерпании места на диске и убедиться, что процессы не уходят в бесконечный перезапуск. Проверить, что быстрое отключение нескольких модулей подряд не оставляет висящих процессов. На виртуальных машинах убедиться, что служебные процессы не блокируются при загрузке. Проверить стабильность диалплана при быстрых массовых изменениях маршрутов. На однодисковых установках проверить сохранность Storage при установке firmware.

MikoPBX 2026.3.20-dev — Nightly DEV (English)

Date: 2026-07-09 · Base: 2026.2.118 · Commits: 47 · Files: 270

TL;DR

Eliminated system instability after dialplan reload, fixed idle memory growth, added provider SRV resolution. Security: hardened module installer, fixed archive vulnerability. Inbound routing and physical key (YubiKey) authentication now reliable. Provider monitoring shows real state: distinguishes disable from unreachable, correct history without false events. SSH settings and passwords apply without reboot. Restricted users can create accounts with strong passwords. Disabled providers immediately unregister upstream instead of waiting for timeout expiry.

🆕 New

  • Provider resolver now honors SRV records: automatic failover to backup addresses instead of manually enumerating IPs.
  • Provider monitoring distinguishes registration from reachability: a registered trunk with network unreachable now shows yellow, not green—reflects real ability to place calls.
  • When saving a module's "Disabled" flag fails (e.g. locked database), the system no longer resets the crash-loop counter—the module will be retried for disable on the next pass instead of looping indefinitely.
  • Fresh installs receive a modern codec set: opus, g722, alaw, ulaw, g729 (audio) and h265, h264, vp9, vp8 (video) enabled by default, replacing the obsolete list created by migrations from 2020 versions.

🐛 Fixed

  • Physical key (YubiKey) authentication now works for usernameless login—the system requests discoverable credentials from the key, which were previously created non-discoverable and never offered by the browser.
  • Firmware update no longer wipes the Storage partition on single-disk installs—the original partition offset is preserved, data stays safe during system image reinstall.
  • SSH setting changes (password disable, port change) and user password changes now apply immediately, without server reboot.
  • Service processes no longer block waiting for a non-existent serial port on virtual machines—port detection is now non-blocking.
  • License coupon activation no longer shows a false reuse error on success—eliminated duplicate request submission on a single click.
  • Providers: disabling or deleting a trunk with outbound registration now immediately unregisters upstream—previously the binding stayed active until timeout expiry and inbound calls kept arriving on the disabled trunk.
  • Providers: monitoring no longer shows false offline events after service restart—transient registration states do not create incident events, and history correctly inherits the last known state.
  • Providers: the 24-hour history timeline now shows recovery in green, not red across the entire span after a brief outage.
  • Providers: on a cold start (empty DNS cache), inbound calls to addresses shared by multiple trunks are no longer rejected—the dialplan contains a permanent hostname alias pointing to the canonical IP-based context.
  • Network: toggling the firewall on or off immediately applies or lifts SIP, AMI and IAX registration blocks—previously required an Asterisk reload.
  • Network: blocking a host for AMI only no longer adds it to the SIP deny list—SIP registrations from that address are not accidentally blocked.
  • Network: changes to filtering rules in Docker environments now apply immediately—previously took effect only after server reboot.
  • Passwords: restricted users can create employee accounts with strong passwords—the password strength widget now has access to the validation endpoint for all roles.
  • The "Do not record calls" checkbox for an employee now works on PHP 8.1+—calls for employees with recording disabled are actually not recorded.
  • Incoming DID and CallerID on the receiving side are now correctly identified—fixed a regex parser bug that caused incorrect call routing.
  • The available module updates list now appears in the web interface—previously the table stayed empty due to a response-parsing error.
  • The "Select menu group" dropdown when configuring a module is now clickable and displays selected values.
  • Short internal numbers (5–7 digits) are saved in the employee's mobile phone field without conversion to international format.
  • Changing the mobile number no longer overwrites a custom dial string—the system only refills an empty field or one matching the old number.
  • Resumed call recording after a failed transfer now writes to the same tracks as the original—the final recording no longer loses the second-half audio.
  • CDR row closure for parallel queue ring: no longer accidentally closes the just-answered agent's row (previously marked "no answer" and lost its recording).
  • Infinite dialplan reload loop when reordering outbound routes eliminated—routes are now sorted by numeric position, not lexicographically, and the system no longer fires overlapping reload commands.
  • Disappeared active call hints during stuck dialplan reload: Asterisk health check now also probes hints, so a deadlocked process is restarted automatically.
  • A disabled module no longer resurrects via respawned service processes—the supervisor now stops monitoring and kills residual module processes immediately after disable, even if the supervisor itself has not yet restarted.
  • Module logos in the marketplace are visible again—the new Russian mirror host for module assets is now allowed in the browser security policy.

⚙️ Improvements

  • Idle memory leak protection: on VPS and large servers Asterisk memory consumption stops growing under no load (64 MB vs previous 350+ MB per day).
  • Hardened module installer: archives are now checked for absolute paths, backslash separators, and symlinks before extraction—in addition to the existing post-extraction check.
  • Module error messages: now always include the module ID, even when the module provided no error text.
  • Module installer log records which memory allocator is in use (jemalloc or glibc), speeding up memory issue diagnosis on different server configurations.
  • Bulk outbound-route priority change now emits one event instead of dozens—faster for the operator and less config load.
  • Orphaned large REST API response files are now less likely after a crash—automatic sweep of files older than their TTL added.
  • Module crash counter is now atomically reset with its TTL, preventing an indefinite counter after process death between commands.
  • Module logs now persist correctly after rotation—service processes continue writing to their file instead of lost entries in a renamed descriptor.

🧪 QA Focus

  • Area: Physical key (YubiKey) login without username; single-disk install — firmware update without Storage loss; providers with SRV records; disabling and deleting providers with outbound registration (verify instant upstream unregister); provider monitoring during service restart (no false incidents, correct history display); providers on shared IP address at cold start; toggling firewall on/off during active calls (verify instant effect, no dropped calls); AMI-only block (SIP registration must work); filtering rule changes in Docker environment; creating employee by restricted user with strong password; SSH settings changes (password disable, port change, password change) without reboot; license coupon activation (single attempt, success without errors); recording with transfer to parallel-ring queue; resume recording after failed transfer; per-employee recording settings; module install and update under disk/memory pressure; bulk outbound-route reorder (10+ rows); short internal numbers in mobile phone field; enable and immediately disable a module (verify no residual processes); view module logos in marketplace; inbound calls with non-standard DIDs, regex-based DID/CallerID routing.
  • Regressions: Verify that Asterisk memory counter is stable during prolonged idle (several hours). Ensure modules disabled by the operator stay disabled, do not self-enable, and their processes do not reappear. Check correctness of final recordings on queue transfer with agent rejections. Reproduce module install when disk is full and verify processes do not enter infinite restart loop. Verify that rapid successive disable of multiple modules leaves no hanging processes. On virtual machines ensure service processes do not block at boot. Verify dialplan stability under rapid bulk route changes. On single-disk installs verify Storage integrity after firmware install.

Docker

Docker Hub: https://hub.docker.com/r/mikopbx/mikopbx

docker pull mikopbx/mikopbx:2026.3.20-dev
docker pull mikopbx/mikopbx:dev

Don't miss a new Core release

NewReleases is sending notifications on new releases.