Будни админа
Dec. 15th, 2005 09:06 amВчера снова был укушен в чувствительное место - вручную скомпилированный софт после апгрейда системы перестал работать.
Расскажу подробно (раз уж вы не поленились заглянуть сюда):
для аутентификации, авторизации и учета звонков VoIP у нас на одном из серверов запущен вручную скомпилированный (--with-experimental-modules с поддержкой embedded perl interpreter) сервер freeradius. Встроенный Перл (rlm_perl) позволяет самописной perl-программе иметь полный доступ к атрибутам RADIUS - для проверки пин-кода звонящего, для записи в базу длительности и стоимости звонка в зависимости от направления, etc. База на Mysql - даже и не спрашивайте, legacy code, сейчас бы я все написал на Python+PostgreSQL+PL/pgSQL.
И вот вчера, после добавления очередной voip-железяки в /etc/raddb/clients и рестарта freeradius эта конструкция перестала взлетать.
Ничто не предвещало беды: апгрейд с Debian Woody на Sarge произошел еще летом, без перезагрузки, все про него уже забыли, аптайм сервера - 469 дней, винты здоровы и RAID is clean...
Оказывается, в процессе апгрейда был обновлен perl с версии 5.6 до 5.8.x, а радиус продолжал использовать версию 5.6. После рестарта вкомпиленный в радиус интерпретатор не смог найти нужные модули типа strict и Mysql от старого перла. Катастрофа! Срочная перекомпиляция свежескаченного freeradius 1.0.5 порадовала ошибками другого рода: мол mysql handle не может быть использован несколькими threads одновременно, и вообще, ребята, не буду я с вами работать.
После нескольких часов ужимок и прыжков удалось исправить перловый код под новый rlm_perl, клонировать для каждой нити отдельное соединение с mysql, оттестировать звонки и задокументировать подробности инцидента.
Пообещал себе впредь собирать всё в виде пекеджей, с соблюдением зависимостей и тэдэ. Мультик-стайл™ это здорово, но грамотно собранный .deb - лучше :-)
Расскажу подробно (раз уж вы не поленились заглянуть сюда):
для аутентификации, авторизации и учета звонков VoIP у нас на одном из серверов запущен вручную скомпилированный (--with-experimental-modules с поддержкой embedded perl interpreter) сервер freeradius. Встроенный Перл (rlm_perl) позволяет самописной perl-программе иметь полный доступ к атрибутам RADIUS - для проверки пин-кода звонящего, для записи в базу длительности и стоимости звонка в зависимости от направления, etc. База на Mysql - даже и не спрашивайте, legacy code, сейчас бы я все написал на Python+PostgreSQL+PL/pgSQL.
И вот вчера, после добавления очередной voip-железяки в /etc/raddb/clients и рестарта freeradius эта конструкция перестала взлетать.
Ничто не предвещало беды: апгрейд с Debian Woody на Sarge произошел еще летом, без перезагрузки, все про него уже забыли, аптайм сервера - 469 дней, винты здоровы и RAID is clean...
Оказывается, в процессе апгрейда был обновлен perl с версии 5.6 до 5.8.x, а радиус продолжал использовать версию 5.6. После рестарта вкомпиленный в радиус интерпретатор не смог найти нужные модули типа strict и Mysql от старого перла. Катастрофа! Срочная перекомпиляция свежескаченного freeradius 1.0.5 порадовала ошибками другого рода: мол mysql handle не может быть использован несколькими threads одновременно, и вообще, ребята, не буду я с вами работать.
После нескольких часов ужимок и прыжков удалось исправить перловый код под новый rlm_perl, клонировать для каждой нити отдельное соединение с mysql, оттестировать звонки и задокументировать подробности инцидента.
Пообещал себе впредь собирать всё в виде пекеджей, с соблюдением зависимостей и тэдэ. Мультик-стайл™ это здорово, но грамотно собранный .deb - лучше :-)