Zapret: обсуждение

стоит

Спойлер

image

image

отмечу что я просматриваю дебаглог и ранее такого не замечал
либо это вот прям на днях стало либо хз

Вот код для получения даты/времени в логе. Тут четко localtime используется.

int fprint_localtime(FILE *F)
{
	struct tm t;
	time_t now;

	time(&now);
	localtime_r(&now,&t);
	return fprintf(F, "%02d.%02d.%04d %02d:%02d:%02d", t.tm_mday, t.tm_mon + 1, t.tm_year + 1900, t.tm_hour, t.tm_min, t.tm_sec);
}

Проверил у себя. Время нормальное.
Что говорит команда date ? Там пишется часовой пояс

image
странная фигня, за послед неделю в запрете ничего не менял
на роутере только с форвард днс игрался для пары сайтов
PS
–debug=syslog пишет нормальное время

Мог localtime_r по какой-то причине вернуть ошибку, и она не проверяется.
Но по какой - это вопрос. Вроде оно не зависит от файлов таймзоны в системе.

## ERRORS

The *localtime*() function shall fail if:

**EOVERFLOW**
The result cannot be represented.

Если левый 64-битный time_t туда подсунуть, который +миллиарды лет. Но этого нет, тк там time() используется

syslog свое время пишет, с zapret никак не связано

Сейчас если убрать что-то из аутолиста и подергать проблема все еще есть ?
Может это была кратковременная ситуация неправильного пояса при обновлении времени или еще по какой-то причине ?

проблема всё еще есть
поставил таити option timezone ‘<-10>10’
root@RT-AX59U:~# /etc/init.d/sysntpd restart
root@RT-AX59U:~# date
Sat Nov 16 20:47:56 -10 2024

в дебаг логе всё равно -3 от мск
17.11.2024 06:49:01 : rutor.info : profile 4 : client 192.168.1.8:50022 : proto tls : adding to /opt/zapret/ipset/zapret-hosts-auto.txt
PS
роутер рибутнул
PSS
не критично конечно если это не на что не влияет, но интерено с фига ли так стало

strace показывает, что при каждом логировании записи идет обращение к файлу /etc/TZ

open("/opt/zapret/ipset/zapret-hosts-auto-debug.log", O_WRONLY|O_CREAT|O_APPEND|O_LARGEFILE, 0666) = 6
open("/etc/TZ", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_CLOEXEC) = 7

он есть ? что в нем ?

Вообще такой формат лучше не использовать.
Либо YYYY-MM-DD (ISO)
Либо 17 Nov 2024 (WEB/HTTP)

ls -l /etc/TZ
lrwxrwxrwx 1 root root 7 Jul 16 01:14 /etc/TZ → /tmp/TZ

MSK-3

Все ясно. Дело в сборке на github.
В openwrt используется такой патч для musl

--- a/src/time/__tz.c
+++ b/src/time/__tz.c
@@ -32,6 +32,9 @@ static int r0[5], r1[5];
 static const unsigned char *zi, *trans, *index, *types, *abbrevs, *abbrevs_end;
 static size_t map_size;
 
+static const char *tzfile;
+static size_t tzfile_size;
+
 static char old_tz_buf[32];
 static char *old_tz = old_tz_buf;
 static size_t old_tz_size = sizeof old_tz_buf;
@@ -133,6 +136,15 @@ static void do_tzset()
 		"/usr/share/zoneinfo/\0/share/zoneinfo/\0/etc/zoneinfo/\0";
 
 	s = getenv("TZ");
+
+	/* if TZ is empty try to read it from /etc/TZ */
+	if (!s || !*s) {
+		if (tzfile)
+			__munmap((void*)tzfile, tzfile_size);
+
+		s = tzfile = (void *)__map_file("/etc/TZ", &tzfile_size);
+	}
+
 	if (!s) s = "/etc/localtime";
 	if (!*s) s = __utc;

без него под openwrt не ставится таймзона и в логах время GMT
Тут вопрос решается только пересборкой тулчейна с этим патчем
или подвезти с классического linux файл /etc/localtime
или пересобрать самому бинарики по docs/compile
или установить env variable /etc/TZ. для nfqws получается нужно лезть в юнит procd или скрипты запуска.
или ln -f /etc/TZ /etc/localtime

отлично что нашли причину
с этой проблемой столкнуться все кто на openwrt и её надо фиксить только самостоятельно?

Все не так просто.
В openwrt этот патч был сделан, чтобы не тянуть за собой сложную структуру классического файла /etc/localtime. Он был заменен на простой текстовик.
И его классический musl не понимает.
Если подтянуть /etc/localtime с классического linux, сделать export TZ=/etc/localtime
то начинает работать.
По хорошему тут надо собирать патченым тулчейном

к сожалению не помогло, роутер рибутал

root@RT-AX59U:~# ls -l /etc/localtime
lrwxr-xr-x 2 root root 7 Jul 16 01:14 /etc/localtime → /tmp/TZ
root@RT-AX59U:~#

тоесть лучше не делать export TZ=/etc/localtime с линукс файла?
не хочется навредить, с учётом не серьёзности проблемы

Выдать для этого сайта другой IP, который не в блоке ) Прикиньте, так можно было

Правда, нужен еще перезапуск браузера, чтобы заблоченный IP из кэша DNS стерся, а то браузер так и будет в заблоченный долбиться

Если сайт за cf или у него один айпишник то не выдаст ничего все равно

Для кимоно - выдаст

Достаточно подтянуть /etc/localtime с классического. Это работает.

а с чего оно началось то?
Раньше точно было нормальное время да и ты сам говоришь у тебя нормально

У меня самосборка. До гитхаба оно собиралось в тулчейне openwrt

а как скомпилировать запрет для опенврт? это надо компилировать на самом роутере чтобы получился бинарник который запустится именно там? мне вебморда пишет что у роутера архитектура ARMv8 Processor rev 4, для такой архитектуры можно сделать бинарник на обычном x64 компе?