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);

Вроде бы проблема ушла. Надо тестировать.

Патч в виде файла

Теги:

Скрипт для 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

Теги:

Синхронизация времени в спутниковых ресиверах

В спутниковых ресиверах предусматривается синхронизация времени только со спутника и очень часто в “ручном” режиме. Аппаратные часы могут напрочь отсутствовать. Для ресиверов на базе Linux с сетевыми картами этот вопрос можно решить сравнительно легко. Обычно всегда присутствует утилитка rdate. Одно но! Должен присутствовать сервер с протоколом time.
Команду rdate -s <ip> нужно вставить в стартовый скрипт (это зависит от версии ресивера).
Проверено, что команда присутствует в ipbox и dreambox.

Теги:

dbhub и bind к ip

История повторяется, как и для opendchub.

Патч dbhub-bind добавляет ключ -b <ip> в командной строке. К указанному адресу прицепляется как tcp, так и udp сокет. Пока в стадии проверки, но думаю проблем не должно быть.

Еще один патч no_dunaloader нужен, если требуются perl-скрипты, а версия perl >=5.10 . Убирается проверка на наличие DynaLoader.a , т.к. эта часть встроена в libperl.

Теги:

Мои пакеты для 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 сервер

Список пакетов будет пополняться.

Теги: , , ,