361 просмотров
от (290 баллов) в категории Установка
Сегодня наткнулась на весёлый баг в версии 2021.2.194 :

1) логинимся по ssh рутом,

2) меню PBX console,

3) выбираем [3] Reboot the system

4) потом [1] Reboot MikoPBX.

Результат: вместо ребута - потеря доступа к хосту, реального ребута не происходит, хост продолжает пинговаться по IP, но доступ по https(s) пропадает, и по ssh - тоже.

Лог терминала после нажатия "1":

Waiting for a reboot (/sbin/mikopbx_init)
 |   - kill process 10441 with option: -KILL return: 0
 |   - kill process 8498 with option: -KILL return: 0
 |   - kill process 8313 with option: -KILL return: 0
 |   - kill process 5700 with option: -TERM return: 0
 |   - kill process 8400 with option: -TERM return: 0
 |   - kill process 8433 with option: -TERM return: 0
 |   - kill process 8555 with option: -TERM return: 0
 |   - kill process 8779 with option: -TERM return: 0
 |   - kill process 8827 with option: -TERM return: 0
 |   - kill process 8848 with option: -TERM return: 0
 |   - umount swap /storage/usbdisk1/mikopbx/tmp/swapfile return 0
 |   - try umount device=/dev/vda4, mount point=/storage/usbdisk1
 |   - kill process 8756 with option: -KILL return: 0
 |   - kill process 8758 with option: -KILL return: 0
 |   - kill process 8759 with option: -KILL return: 0
Connection to 1.2.3.4 closed by remote host.
Connection to 1.2.3.4 closed.

arche@orchid:~$ ping 1.2.3.4
PING 1.2.3.4 (1.2.3.4) 56(84) bytes of data.
64 bytes from 1.2.3.4: icmp_seq=1 ttl=53 time=85.2 ms

arche@orchid:~$ ssh root@1.2.3.4
ssh: connect to host 1.2.3.4 port 22: Connection refused

В моём случае помог только ребут виртуалки средствами гипервизора.

Из особенностей этой установки mikopbx: в  /var/spool/cron/crontabs/root перед описанным ребутом закинула такую задачу:

@reboot /bin/cp /storage/usbdisk1/fixandpatch/cdr*.conf /etc/asterisk/ && /usr/sbin/asterisk -rx "module load cdr_csv.so"

если это имеет значение (модуль cdr_csv.so в /offload/asterisk/modules уже есть,  и работоспособен).

Ребут из ssh - консоли командой reboot происходит нормально, но вот захотелось воспользоваться фирменной функций, и ...

1 Ответ

от (122 тыс. баллов)
выбран от
 
Лучший ответ

Как я понял задачу, "необходимо при старте подгрузить модуль cdr_csv.so".

Попробуйте через кастомизацию системных файлов поправить /etc/asterisk/modules.conf

Ну а чтобы описать корректно конфиг опишите аналог класса:

/offload/rootfs/usr/www/src/Core/Asterisk/Configs/CdrSqlite3CustomConf.php

По пути:

/offload/rootfs/usr/www/src/Core/Asterisk/Configs/CdrCsv.php

Перед созданием файла выполните команду remount-offload

В идеале, чтобы не потерять данные при обновлении / восстановлении из бекапа разместите свои файлы в каталоге:

/storage/usbdisk1/mikopbx/custom_modules/CustomModuleCsv

Владелец файлов должен быть "www". 

В "/offload/rootfs" создайте только symlink

ln -s /storage/usbdisk1/mikopbx/custom_modules/CustomModuleCsv/cdr_csv.so /offload/asterisk/modules/cdr_csv.so

ln -s /storage/usbdisk1/mikopbx/custom_modules/CustomModuleCsv/CdrSqlite3CustomConf.php  /offload/rootfs/usr/www/src/Core/Asterisk/Configs/CdrSqlite3CustomConf.php

Ну а "баг" без модификации cron не воспроизводится. 

от (290 баллов)
редактировать от

Спасибо за ответ и по "багу", и на незаданный вопрос!

1) Очень хорошо, что бага воспроизводится только при очень специфичных условиях.

2) "Попробуйте через кастомизацию системных файлов поправить /etc/asterisk/modules.conf" - этим озадачилась же в первую очередь, и получилось, что: модуль cdr_custom.so подгружается, но не работает без уже подгруженного cdr_csv.so, а вот cdr_csv.so хоть и прописан в автозагрузку, но - не загружается почему-то, пришлось городить "костыль" с @reboot в кроне.

3) Спасибо за наводку на /offload/rootfs/usr/www/src/Core/Asterisk/Configs , попробую. Мне придётся ещё и CdrConf.php дописать, добавить секцию [csv].

DISCLAIMER для пользователей MikoPBX! Всё означенное ниже - нужно только мне для тестовых целей, не делайте этого на продакшене! Всё , что вы сделаете из нижеперечисленного - последствия на Ваш страх и риск!

1) Кастомизация системного файла /var/spool/cron/crontabs/root вида "@reboot /path/to/some/script"

2) Правка и создание новых файлов /offload/rootfs/usr/www/src/Core/Asterisk/Configs*.php

3) Сборка и затаскивание в /offload/asterisk/modules/ самосборных модулей, особенно с подгрузкой их через конфиг /etc/asterisk/modules.conf

P.S. Создание нового файла с новым классом в /offload/rootfs/usr/www/src/Core/Asterisk/Configs/CdrCustomConf.php не сработало (то есть файл есть, симлинк как вы советовали). в отличие от правки существующего CdrConf.php 

~# ls -l /offload/rootfs/usr/www/src/Core/Asterisk/Configs/CdrConf.php /offload/rootfs/usr/www/src/Core/Asterisk/Configs/CdrCustomConf.php
lrwxrwxrwx 1 www www 68 Jul  8 12:02 /offload/rootfs/usr/www/src/Core/Asterisk/Configs/CdrConf.php -> /storage/usbdisk1/mikopbx/custom_modules/CustomModuleCsv/CdrConf.php
lrwxrwxrwx 1 www www 74 Jul  8 12:23 /offload/rootfs/usr/www/src/Core/Asterisk/Configs/CdrCustomConf.php -> /storage/usbdisk1/mikopbx/custom_modules/CustomModuleCsv/CdrCustomConf.php

Содержание CdrCustomConf.php
<?php
namespace MikoPBX\Core\Asterisk\Configs;
class CdrCustomConf extends CoreConfigClass
{
    protected string $description = 'cdr_custom.conf';
    protected function generateConfigProtected(): void
    {
        $cal     = 'clid, src, dst, dcontext, channel, dstchannel, lastapp, lastdata, start, answer, end, duration, billsec, disposition, amaflags, accountcode, uniqueid, userfield, sequence, linkedid';
        $columns = explode(', ', $cal);
        $values  = '';
        foreach ($columns as $key => $value) {
            $values .= ($values == '') ? "" : ",";
            $values .= "\${CSV_QUOTE(\${CDR($value)})}";
        }

        $conf = "[mappings]\n" .
            "Simple.csv => \${CSV_QUOTE(\${EPOCH})},\${CSV_QUOTE(\${CDR(src)})},\${CSV_QUOTE(\${CDR(dst)})} \n";
            "Master.csv => $values \n";
        file_put_contents($this->config->path('asterisk.astetcdir') . "/cdr_custom.conf", $conf);
    }
}

Не создается файл /etc/asterisk/cdr_custom.conf

от (290 баллов)

Уважаемые экспериментаторы! :)
Пожалуйста, не запихивайте 2-й экземпляр "класса" в существующие файлы движка типа "/offload/rootfs/usr/www/src/Core/Asterisk/Configs/CdrConf.php". У меня это закончилось "окирпичиванием" тестовой виртуалки после ребута командой reboot из shell-а. Да, строки "@reboot" из кронтаба - уже были убраны.

Симптомы: IP виртуалки продолжает пинговаться, 
но по ssh и http(s) доступа нет, в веб-консоли гипервизора - 
показывает меню "PBX console" и IP-адрес. 
Дальше не вижу смысла копаться восстанавливать, "доигрались" называется.
На этом сайте можно бесплатно задать вопрос разработчикам MikoPBX и другим членам сообщества. Время ответа не регламентированно, но мы стараемся несколько раз в день заглядывать сюда. Для срочного решения проблем обращайтесь на платную линию поддержки

Популярные теги

askozia входящие-вызовы настройка исходящие маршрутизация провайдер запись-разговоров входящие ivr исходящие-звонки обновление ошибка очередь провайдеры битрикс24 очередь-вызовов переадресация запись установка маршрут история-звонков mikopbx транк панель-телефонии-1с перевод-вызова перевод askozia7 askozia6 битрикс callerid интеграция голосовая-почта логи перехват-вызова ростелеком нерабочее-время факс модуль nat docker запись-разговора веб-интерфейс bitrix24 goip настройка-провайдер история диалплан почта журнал-звонков релиз gsm вызовы звонок внешние-номера web-интерфейс zabbix маршруты cdr sip панель pjsip переадресация-мобильный voicemail ascozia телефонная-книга аон мобильный звонков лицензирование вызовов редактор номер asterisk лицензия ami регистрация оповещения провайдеров время голосовая fax trunk разговоров группы-пользователей #mikopbx пропущенные-звонки донабор beeline monitoring тишина smtp cisco мобильные мультифон мегафон шлюз не-работает электронная-почта не-слышно-звук

2.8 тыс. вопросов

2.4 тыс. ответов

6.7 тыс. комментариев

465 тыс. пользователей

...