Lighttpd и mod_deflate
Делал несколько попыток использовать mod_deflate и всегда возникали проблемы. Или вообще не отображается страничка, или отображается, но не не завершается. В логе появляется запись:
XXXX-XX-XX YY:YY:YY (error) (mod_deflate.c:1021) flush error XXXX-XX-XX YY:YY:YY (server.c:763) NOTE: a request for /readme.txt timed out after writing 10837 bytes. We waited 360 seconds. If this a problem increase server.max-write-idle XXXX-XX-XX YY:YY:YY (trace) (server.c:772) (timeout)
Включаем режим отладки в модуле и видим интересную информацию:
XXXX-XX-XX YY:YY:YY (trace) (mod_deflate.c:929) compress: in_queue len=0 XXXX-XX-XX YY:YY:YY (trace) (mod_deflate.c:1003) compressed bytes: 0 XXXX-XX-XX YY:YY:YY (trace) (mod_deflate.c:1014) end: 1 - 0 - 7927 XXXX-XX-XX YY:YY:YY (error) (mod_deflate.c:1021) flush error
Строка с end расшифровывается: флаг окончания - размер на входе - размер на выходе.
А внутри стоит проверка на равенство размеров :(
Вот патчик:
--- src/mod_deflate.c.orig 2009-06-21 16:44:57.000000000 +0300 +++ src/mod_deflate.c 2009-06-28 10:02:12.715453990 +0300 @@ -1008,7 +1008,7 @@ } /* check if we finished compressing all the content. */ - end = (hctx->in->is_closed && hctx->in->bytes_in == hctx->in->bytes_out); + end = (hctx->in->is_closed && (hctx->in->bytes_in == hctx->in->bytes_out || hctx->in->bytes_in == 0)); if (p->conf.debug) { TRACE("end: %d - %jd - %jd", hctx->in->is_closed, (intmax_t) hctx->in->bytes_in, (intmax_t) hctx->in->bytes_out);
Вроде бы проблема ушла. Надо тестировать.
Теги: Lighttpd mod_deflate "flush error" "timed out after writing"
Скрипт для multilog
Расположение сервисов для daemontools обычно не удобно для хранения логов. Для этого написан маленький скрипт run, который располагает их в стандартном каталоге /var/log
#!/bin/sh USER=syslog SRV=you_service DIR=/var/log/$SRV mkdir -p $DIR chown $USER $DIR ln -s $DIR ../$SRV"-log" sleep 2 exec setuidgid $USER multilog t s10000000 $DIR
Теги: daemontools multilog script
Синхронизация времени в спутниковых ресиверах
В спутниковых ресиверах предусматривается синхронизация времени только со спутника и очень часто в “ручном” режиме. Аппаратные часы могут напрочь отсутствовать. Для ресиверов на базе Linux с сетевыми картами этот вопрос можно решить сравнительно легко. Обычно всегда присутствует утилитка rdate. Одно но! Должен присутствовать сервер с протоколом time.
Команду rdate -s <ip> нужно вставить в стартовый скрипт (это зависит от версии ресивера).
Проверено, что команда присутствует в ipbox и dreambox.
Теги: ipbox dreambox time rdate linux
dbhub и bind к ip
История повторяется, как и для opendchub.
Патч dbhub-bind добавляет ключ -b <ip> в командной строке. К указанному адресу прицепляется как tcp, так и udp сокет. Пока в стадии проверки, но думаю проблем не должно быть.
Еще один патч no_dunaloader нужен, если требуются perl-скрипты, а версия perl >=5.10 . Убирается проверка на наличие DynaLoader.a , т.к. эта часть встроена в libperl.
Теги: dbhub patch bind ip address perl dynaloader.a
Мои пакеты для archlinux
В репозиторий AUR archlinux выложены мои пакеты (локальная копия):
- geoip-update - простой скрипт для обновления баз geoip
- mpcs - сервер кардшаринга с моими патчами
- policyd-weight - демон политик для postfix с geoip патчем
- libpcap-any - libpcap с debian патчем для поддержки ключа -i any
- perl-shared - perl с поддержкой shared библиотеки (нужно, например для rlm_perl в freeradius)
- perl-sendmail-pmilter - milter написанный полностью на perl
- dbhub-ip - хаб сетей directconnect + мои патчи
- libperl - сборка только libperl.so (отменяет пакет perl-shared)
- perl-cyrillic - перекодирование русского текста
- ss5 - socks сервер
Список пакетов будет пополняться.
Теги: archlinux aur package geoip mpcs policyd-weight postfix, libperl dbhub, perl shared library rlm_perl libpcap any interface pmilter milter, ss5 socks cyrillic