Friday, April 27, 2012

Учим PHP + Asterisk = Автообзвон

Ввиду некоего стопора в изучении Астериска приходится копать исключительно вглубь. На этот раз мои кривые руки дошли до php.
А так как не раз спрашивали функцию, и вообще это еще тот холивар, то я решил написать систему автозвонилки да так, чтобы из браузера можно было юзать.
Скажу сразу, это первый проект на php, который я пишу. Поэтому говнокод неизбежен.
Также скажу, что использовать его  в продакшене - убийство. Ибо код не факт, что отлажен, так еще и звонит пока только по очереди, никакой мультилинейности. Может, будет потом.


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

Говнокод

upd: Версия 0.02 Добавил мультилинейность. Теперь можно спамить в 30 потоков.

Tuesday, April 24, 2012

Замена r8169 на r8168 или глюки сетевых карт на Linux

Суть в чем - есть сервак с 2мя гигабитными карточками 
Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02).
Нагрузка - порядка 2000 звонков в сутки, в пиковые часы - 10-15 одновременных звонков (alaw). Вроде и немного, просто на нем же лежит FTP на который складываются записи. Так вот, повадился сервер этот пропадать из сети, причем в логах - все отлично, но просто не пингуется и все. Периодичность - где-то раз в 2-3 дня. Помогает только перезагрузка, но при этом локально на консоль попасть можно.
Проблема оказалась известной, просто как-то на сетевую обратили внимание не сразу, искали другие причины. А проблема в кривости реализации драйвера r8169. Падает он под большими нагрузками. Совет один - заменить его на r8168.


Проверить, какой драйвер используется можно через 


lsmod

А заменять его на Debian 6.0 так:

aptitude install build-essential linux-headers-`uname -r`
 
Потом получить исходный код:
http://download.hetzner.de/drivers/r8168-8.028.00.tar.bz2
http://code.google.com/p/r8168/
 
tar xjf r8168-8.ХХХ.00.tar.bz2
cd r8168-8.ХХХ.00
make all
 
depmod -a
echo "blacklist r8169" >> /etc/modprobe.d/blacklist.conf
echo "r8168" >> /etc/initramfs-tools/modules
update-initramfs -v -u -k `uname -r`
 
reboot