28 сентября 2011 г.

Libcurl + c-ares (установка из сорцов)

c-ares дают возможность делать асинхронные DNS запросы через pycurl (биндинги для libcurl). Мне это понадобилось для скоростного краба на питоне.
Под Windows все уже в порядке (.exe сетапник уже включает в себя скомпилированную поддержку 'c-ares').
На сервере же (Linux/FreeBSD) приходится ставить ручками (О_о). Далее приложу инструкцию для линуксы.

Для начала ставим сами c-ares:
wget http://c-ares.haxx.se/download/c-ares-1.7.5.tar.gz
tar zxvf c-ares-1.7.5.tar.gz
cd c-ares-1.7.5
./configure
make
make install

Следом ставим последний libcurl:
wget http://curl.haxx.se/download/curl-7.22.0.tar.gz
tar zxvf curl-7.22.0.tar.gz
cd curl-7.22.0
./configure --enable-ares --with-ssl --enable-ipv6 --with-libidn
make
make install


Если всё успешно собралось, на линухе правим ручками пути:
rm -rf /usr/lib/libcurl*
ln -s /usr/local/lib/libcurl.so.4 /usr/lib/libcurl.so.4
ln -s /usr/local/lib/libcurl.so.4 /usr/lib/libcurl.so
ldconfig

Проверить, что c-ares прицепились, можно так (в моём случае для pycurl):
python -c "import pycurl;print pycurl.version" 
Успешный результат:
libcurl/7.22.0 OpenSSL/0.9.8g zlib/1.2.3.3 c-ares/1.7.5

Ну и обоснование, для тех кто не понял "зачем столько проблем":
Упомянутый в самом начале краб на питоне выкачивает множество страниц одновременно.
до поддержки c-ares 30.795 урлов в секунду
после 285.396 урлов в секунду

3 комментария:

Bombero комментирует...

если, после вышепроделанного, питон при import pycurl ругается ImportError: libcares.so.2: cannot open shared object file: No such file or directory

нужно сделать
ln -s /usr/local/lib/libcares.so.2.0.0 /usr/lib/libcares.so.2
ldconfig

Bilete de avion комментирует...

Привет.

Не получается установить c-ares. На шаге ./configure --enable-ares выдает ошибку Permission denied.

Пожалуйста помоги! Спасибо

esemi комментирует...

sudo, не?