03.27.10

postfix debug

Posted in mail at 2:56 pm by viliar

Иногда требуется что-то в почтовой системе отдебажить прямо на рабочем сервере. Логи у postfix при дебаге откровенно говоря адские по размеру. Если включить дебаг обычным способом (master.cf smtpd -v), то при выской нагрузке почтовый сервер либо сразу уйдет в торпор, либо система будет медленно задыхаться под тяжестью логов.

Кроме использования debug_peer_list (который включает дебаг только для smtpd) можно еще запустить отдельного демона smtpd на нестандартном порту или другом ip и только для него включить дебаг. Помимо клевого баннера для него можно использовать по-моему вобще всю отдельную цепочку сервисов через указание в опциях *_service_name. Я проверял только для cleanup.
/etc/postfix/master.cf:

0.0.0.0:2025 inet  n         -       n       -       10      smtpd -v
-o smtpd_banner=$debug_banner
-o cleanup_service_name=debug_cleanup

debug_cleanup  unix n       -       n       -       0       cleanup -v

/etc/postfix/main.cf:

debug_banner = $myhostname ESMTP ready. Welcome to Debug Hell.

03.19.10

asterisk transfer hook

Posted in pbx at 2:16 pm by viliar

Задача специфическая. У меня на работе при поступлении внешнего звонка нужно диффиренцировать, откуда он поступил и давать соответствующее сообщение тому, на кого попадает звонок. В этом приближении задача решается довольно просто, при помощи разных входящих контекстов или через анализ  ${SIP_HEADER(Record-Route)}. Но вот понадобилось диффиренцировать те звонки, которые идут через трансфер, не важно, blind или attended. Если опустить все сложности с поиском, то мне как и в прошлый раз помогла переменная TRANSFER_CONTEXТ, при помощи которой, в частности, сотрудники с мобильных телефонов могут безопасно переводить звонки на тех, кто в офисе. Вместо использования общего контекста для привилегированных пользователей создается отдельный контекст именно для трансфера с catch-all экстеншеном и вуаля:
[authxfer]
; Special hook on transfer
; include => authusers
exten => _.,1,NoOp(transfer)
exten => _.,n,Set(WARN=”ON”)
exten => _.,n,Set(WARNMSG=”msg/msg_transfer”)
exten => _.,n,Goto(authusers,${EXTEN},1)

Дальше звонок перебрасывается по назначению. Так что для трансфера можно не только свое сообщение забить, но и при необходимости выполнить еще какие-то действия. Судя по всему решений > 1, но меня вполне устраивает это.

P.S. Ну и да, это болванка, неплохо бы фильтровать символы и все такое, согласно README-SERIOUSLY.bestpractices.txt

03.18.10

ubunutu gdm login freeze.

Posted in linux at 12:51 pm by viliar

Иногда случается, что при попытке разблокировать экран процесс логина зависает. Можно, конечно, перезагрузиться, но бывает, что слишком много окон открыто и жалко терять сессию. Мне в этом случае помогала отправка сигнала SIGHUP gdm’у.  А точнее kill -1 `pidof gdm-binary`после логина рутом на первой консоли (Ctrl-Alt-F1)

14 queries. 0.265 seconds