четверг, 17 июля 2008 г.

Разработчик, возлюби RFC

Когда вам попадается в руки инструмент, который очень любит стандарты, вы имеете множество шансов найти глюки в разных программах, авторы которых не так свято чтят разнообразные RFC. С другой стороны если не чтить RFC, то как вообще можно гарантировать работу чего либо от разных производителей?

Глюки обнаружились при переходе на FreeSWITCH.
1. Телефоны Linksys SPA901 и SPA921 неправильно называют кодек g729 в SDP (Session Description Protocol). Для того чтобы поправить это, вам нужно зайти на web интерфейс телефона, переключить в режим Admin+Advanced. Далее на вкладке "SIP" в разделе "SDP Payload Types" ищем пункт "G729a Codec Name:" и приводим к виду "g729", то есть убираем "a" на конце.

2. Вообще в интернете не встречал упоминания, но шлюзы Addpac AP1005 (4xFXO) также страдают забавным глюком - они отдают странный SDP при связи друг с другом: a=rtpmap:18 G729/8000/3

Так как FreeSWITCH свято чтит RFC и документ, который будет указан ниже (а быть может эта любовь от SIP стека Sofia, производства компании Nokia), то он прекрасно знает, что rtpmap с номером 18 может означать только G729/8000/1 Никаких "a" или трех звуковых каналов, что вообще забавно смотрится - 3 канала на моно голос это явный перебор.

Излечить шлюзы удалось только путем двухнедельного общения с техподдержкой Addpac - дали все таки какой то вариант прошивки, по словам инженера просто убрали вообще всякие упоминания числа каналов. И правильно - не можете правильно указывать, лучше вообще не указывать, что вполне соответствует RFC.

В остальном телефоны и шлюзы впечатление оставляют самое приятное - телефоны работают как от них ожидается, шлюзы Addpac чудесно гибкие в настройке. Но все же - чем им так не угодили RFC?

Как я подозреваю, большинство реализаций смотрит только на номер rtpmap, и ничуть не заботится разбором последующих конструкций. А вот это зря - например кодеки g726-xx статического номера не имеют, а шлюзы Addpac для g726-16 другой номер, кроме как 116, не воспринимают. Это противоречит RFC и этому документу.

Вот думаю, мучать техподдержку дальше или плюнуть - все таки когда знаешь подводные камни, то знаешь и как их обходить.

На этом внеочередное заседание любителей RFC объявляю закрытым.

вторник, 15 июля 2008 г.

FreeSWITCH

Тема VoIP стала на данный момент ближе моему сердцу, чем Kerberos, а виной тому, наверное, инструмент. Мне кажется странным, что мало кто слышал о FreeSWITCH (далее FS), ведь этот наследок Asterisk несет в себе куда более продуманную архитектуру. Нет, что вы, это не очередной форк от Asterisk как вы уже было подумали, вовсе нет. Это вынужденный ход одного из бывших разработчиков Asterisk, он просто решил, что из за кривизны изначальной архитектуры Asterisk проще будет переписать все с нуля.

И знаете, я уже давно не смотрю новые версии Asterisk, так как желание отбито давно и крепко (кто скажет что не ловил ни разу segmentation fault, или глюки с памятью, или же третье пусть считает себя везунчиком, FS vs Asterisk на ЛОРе). В общем с той поры как я решил, что Asterisk не стоит моих нервов, я пересмотрел много альтернатив. Был в списке и CallWeaver, но так как это просто форк Asterisk, то ничего нового в мой опыт он не привнес. Работал я с SipXpbx (с названиями и их сменой у данного продукта мне разбираться лень), тут главной сложностью было его собрать, так как SipXConfig тянет за собой тонны зависимостей и все из мира Java, в котором я полный ноль. Но гибкости в нем нет, это красивое решение, хороший конфигуратор, соответствие стандартам, но нельзя крутить его настройку теми адскими способами, что в FS.

FreeSWITCH мне порекомендовали в самарской news конференции (nntp еще кто то помнит? В Самаре отлично помнят : )) ). Я сразу ожидал что соберу его через неделю, как SipX, но я был невероятно удивлен, когда в директории слитой с svn я увидел столь любимую мной папку debian! А самой главное чудо, что debian/rules binary сработали, лишь пару библиотечек вроде бы доставить пришлось.

Итак, я получил deb пакеты, и поставил их используя dpkg -i. Еще я немного покрутил директорию debian для сборки mod_python (ну любимый инструмент, что поделаешь), если кому то будет интересно могу описать.

В итоге получается практически готовый сервер - в поставку входит демонстрационный Dialplan (план нумерации наверное буду его называть), настроены учетные записи пользователей. То есть можно сразу начинать работать с FS. Если вы ставили из пакетов, то установится FS в папку /opt/freeswitch, конфигурация хранится в директории conf.

Для начала можно настроить любой IP телефон на учетку 1000 с паролем 1234 и попробовать поиграться с голосовыми меню, с голосовой почтой, с конференциями (никаких модулей ядра не нужно) - все прекрасно работает, правда, как это водится, без намека на русский язык. Впрочем, если кому то будет интересно, можем попробовать сделать русскую локализацию сообща.

Впечатления - все что заявлено работает, в плане нумерации используются регулярные выражения (наверное сразу представили себе что можно с этим вытворить?), набор команд покрывает практически любые хотелки.

Теперь немного по первичной настройке SIP. Для работы с SIP используется mod_sofia (а он используется open source библиотеку от Nokia), загружен по умолчанию. Для работы нужны профили (conf/sip_profiles). Например если вам нужно чтобы на ваш SIP сервер могли звонить все кому придется без регистрации, то вы создаете профиль, настраиваете его, проставляете ему контекст(context), и перезапускаете FS. Профили должны использовать разные порты.

Контексты это отдельные планы нумерации - у профиля прописан контекст по умолчанию, у пользователей могут быть указаны свои (то есть отличающиеся от профиля по умолчанию). План нумерации хранится в conf/dialplan, очень сильно рекомендуется к изучению - там очень много интересного.

Итак, вы стартовали и вам понравилось? Я на это надеюсь, и поэтому дам совет как изучать FreeSWITCH - идете в wiki проекта. Можно просто походить по разделам, но гораздо лучше взяться за файл conf/dialplan/default.xml и вставлять из него непонятные конструкции в поиск по wiki - так вы можете сразу узнать для чего та или иная команда.

Надеюсь вам понравится FreeSWITCH, приятного изучения.

суббота, 5 июля 2008 г.

NFSv4 vs Samba

Выбор это сложная и важная часть в построении офисно-торговых сетей. Вы выбираете роутеры, свитчи, эникейщиков, и, конечно же, технологии, протоколы, программы. Выбор между Kerberos и чистой LDAP аутентификациями для вас я думаю уже ясен, хотя, к сожаления, не обязательно совпадает с моим.

Теперь я задумался - а нужен ли NFSv4? Он весь такой обновленный, очищенный от лишнего, ускоренный и поддерживает Kerberos. Включен в ядро, в дистрибутивы, и даже местами описана его настройка. А также никоим образом не позволяет побороть umask и различия в кодировках, и совершенно не поддерживается windows.

Samba весьма гибкий инструмент, с огромным количеством документации, не лезет в ядро (только клиент, но ядерный клиент пока не сильно интересен - Samba 3.2 конечно вышла, но когда новый mount.cifs упадет в дистрибутивы не известно), есть кластерные примочки, кодировки поддерживаются, в описаниях шары можно указать маску для новых файлов и не только.

Так зачем мне тогда NFSv4, судьба которого еще года два проходить в бетах, так и оставить неразрешенной проблему cross realm, и вообще существовать в отрыве от реальности. У меня постоянно вылезает с ней проблема umask - ну нельзя же делать umask 000! Это в конце концов не только к шарам относится, но и к домашней папке, а системы у нас, как известно, многопользовательские.

Насколько все таки мудро в AFS раздавались права на папки, жаль вот только с кодировками там также полный облом.

В общем Samba на сегодняшний день лучшая сетевая FS для бизнеса/офиса и не только.