LINUX.ORG.RU

Сообщения gobot

 

Как убить соединение mysql после «upstream timed out»

В настройках nginx стоит
fastcgi_read_timeout 3s;

fpm соединение принудительно закрывается, но mysql запросы, которые были отправлены ранее, продолжают выполняться, потому что соединение не было закрыто в конце скрипта как положено. Я как понимаю в коде никак нельзя определить что тебя грохнул nginx? Хотелось бы закрывать соединение, прежде чем... Или в самом mysql что подкрутить? Пока что на ум приходят всякие wait_timeout...max_execution_time(которое не работает в сессии и глобально)

 ,

gobot
()

Тестирование сайта с разных IP

Хочу потестировать сайт на дос-атаку. Нужно как то симулировать много запросов с разных IP(для проверки всяких limit модулей ngix, iptables и самого сайта). Пока что делаю черех ab(apache bench).

Сейчас на ум приходит только добавить на интерфейс много (ну, хотелось бы хотя бы 5000) IP, но как потом заставить ab брать случайные IP...

Да, делаю это с той же машины с которой тестирую... Хотя идеально с удаленной, но тогда нужны реальные IP

 , ,

gobot
()

Как сделать чтобы php|c|node не запускал оболочку в новом процессе

Стартую процесс exec, proc_open или через Symfony\Process, но пых запускает его всегда через оболочку (в моем случае это sh -с ffmpeg). Собственно проблема в том, что когда сам пых процесс завершается или убивается через kill, то дочерний процесс (если он работает), не убивается. Да, можно определять дочерний ПИД и гасить его, но хотелось бы без лишнего гемора. Помню на 7.0 версии, оболочка эта не создавалась, запускался напрмяую, но обновил до 7.4 и снова стало такое. хочу понять зачем пых запускает оболочку. Гугление ничего не дало, тема давняя

По теме
https://github.com/symfony/symfony/issues/5030

Если перез командой написать exec(«exec ffmreg») то оболочка не создается и все нормально завершается. Как бы такое сделать по умолчанию

 , , , ,

gobot
()

Слетел IP на интерфейсе

Внезапно пропал доступ к серверу по сети. Зашел через KVM, смотрю ifconfig, а адреса то нет IPv4. Просто пропал, исчез сам по себе. Остался только IPv6. Ничего не пойму куда копать. Ну первое что на ум приходит это dhcp. Но такого никогда не было на других серверах у этого провайдера(OVH). Что может быть ещё?


Debian 11

Помогло только
/etc/init.d/network restart

Но боюсь ещё раз слетит

/etc/network/interfaces.d

auto lo
iface lo inet loopback

auto eno1
iface eno1 inet dhcp
    accept_ra 0

 , ,

gobot
()

Определение температуры в бане

Хочу измерять температуру в бане, пока что просто воздуха, а в дальнейшем хотелось бы в самой топке, чтобы можно было бы узнать когда подкидывать дрова, ну типа топка остыла, подан звуковой сигнал, пошел подкинул

Сейчас хочу просто получить температуру воздуха, с помощью термистора (NTC MF52 10K). Подключаю в аналоговый порт arduino (verba), делаю как написано тут. Подключаю по схеме делителя напряжения

Фото схема (желтый +5, корич. - GRN, зеленый - анал. вход)
https://ibb.co/1ZCS6kK

// к какому аналоговому пину мы подключены
#define THERMISTORPIN A0
// сопротивление при 25 градусах по Цельсию
#define THERMISTORNOMINAL 10000
// temp. для номинального сопротивления (практически всегда равна 25 C)
#define TEMPERATURENOMINAL 25
// сколько показаний используем для определения среднего значения
#define NUMSAMPLES 5
// бета коэффициент термистора (обычно 3000-4000)
#define BCOEFFICIENT 3950
// сопротивление второго резистора
#define SERIESRESISTOR 10000
int samples[NUMSAMPLES];

void setup(void) {

  Serial.begin(9600);
  analogReference(EXTERNAL);

}

void loop(void) {

uint8_t i;
float average;

// сводим показания в вектор с небольшой задержкой между снятием показаний

for (i=0; i< NUMSAMPLES; i++) {

  samples[i] = analogRead(THERMISTORPIN);
  delay(10);

}

// рассчитываем среднее значение

average = 0;

for (i=0; i< NUMSAMPLES; i++) {
  average += samples[i];

}

average /= NUMSAMPLES;
Serial.print("Average analog reading ");
Serial.println(average);
// конвертируем значение в сопротивление
average = 1023 / average - 1;
average = SERIESRESISTOR / average;
Serial.print("Thermistor resistance ");
Serial.println(average);
float steinhart;

steinhart = average / THERMISTORNOMINAL; // (R/Ro)

steinhart = log(steinhart); // ln(R/Ro)
steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro)
steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
steinhart = 1.0 / steinhart; // инвертируем
steinhart -= 273.15; // конвертируем в градусы по Цельсию
Serial.print("Temperature ");
Serial.print(steinhart);
Serial.println(" *C");
delay(1000);

}


Первый баг - температура определялась минусовая, то есть -27..-23 и при нагревании росла к 0, о есть -20..-10. Исправил я это скобочками

вместо
average = 1023 / average - 1;

написал
average = 1023.0f / (average -  1.0);


Не где ошибка, но температура стала положительная и корректная

Большая погрешность в температуре, больше на 4 градуса, чем показания спиртового термометра и термопары (почти совпадают). Резистор выпаял со схемы старой, замерял прибор показывает 9.7K, ну номинал 10K. С теристором тоже вроде все ясно 10K. До платы тянется провод метровый, но он не должен влиять на рассчеты вроде как, сопротивления килоомные а провод по замерам 0.5 ома. Подлючал и через 3 вольта AREF(типа убрать шумы от USB питания) и через 5 на результат никак не влияет.

Можно конечно тупо сгладить, вычитанием из результата - 4 градусов, но возможно это не линейно все и вообще...хз

Такими делами впервые занимаюсь, даже не знаю куда копать. Может сам теристор плохого качества, может резистор не тот, провода, сам АЦП, либо в рассчетах ошибка. Вообще может погрешность в 4 гр. это норма? Помогите понять

 , ,

gobot
()

Как подать напряжение на LPT

Хочу сделать, чтобы автоматически включался обогреватель, теплый пол и может быть ещё кое-что. Управление удаленное, через интернет. По расписанию, например в 5 утра каждый день, либо вручную через команду. Ну купил arduino платку (verba) за 800 руб.На выход подключил реле 5 вольтовое 10 ампер. На плате нет сети и даже часов, поэтому накидал программку на c++, в которой вся логика (http сервер для удаленных команд, включение по расписанию и т.д.). Общатся программа с arduino через serial порт.

В общем то все работает, но чувствую, что есть лишнее звено. По сути, ардуино нужно только для включения реле, логики там никакой нет. Хочу выкинуть плату и сделать все через комп.

Как я могу в компе активировать какую-либо ножку на плате, чтобы на ней появилось напряжение 5 вольт? LPT порт? Там есть DATA ножки, их можно использовать для подключения нагрузки (реле)? Или ещё как?

 , , ,

gobot
()

Просмотр памяти процесса \ Найти строку в памяти

У меня есть nodejs-скрипт, запущенный около месяца и он в один момент начал «течь» (rss ~ 6GB). Хочу понять что там за данные накопились в нем. Возможно какой то массив\объект растет или ещё что-то.

Вытащил (gdb --pid 343 ... dump memory...) для начала через GDB сырые данные запущеного процесса в папку.

Что теперь с ними делать не понимаю. Погрепал эти файлы, ничего от этого не получил.

Каким образом код в скрипте трансформируется в память, в байты\биты?

Например есть в коде

class Abc{
  constructor() {
     this.prop = "abc"
  }
}


Можно ли потом в памяти найти строку «abc»?

 ,

gobot
()

Как узнать реальный размер памяти процесса

У меня на сервере 32 гига памяти. Хочу подсчитать какие процессы занимают память

Делаю сначала

ps -o pid,user,rss,comm ax |  sort  -k3 -n | awk '{sum+=$3; } END{print "Total mem usage: " sum;}'
34218336

Итого процессы занимают 34GB RSS. Иногда выдавал 42GB. Читал про этот RSS, так и не понял. Мне кажется, что никак точно нельзя определить сколько же памяти реально занимает процес?

 , ,

gobot
()

Перестало работать бесплатное обновление. Где, как обновлять?

Пришло письмо от maxmind

Dear GeoLite User,

In order to maintain compliance with US sanctions against certain Russian entities, MaxMind is exercising its right to terminate your free access to the GeoLite2 Databases or Web Services per Section 10.(b) of the GeoLite2 End User License Agreement.

Пишут, что бесплатное обновление для «определенных российских организаций» прекращено

Вопроса 2
1) Как они определили что я являюсь российской организацией? Я использую базу для своего сайтика
2) Как теперь обновлять базу? Как вы обновляете? Платить 25 бачей в месяц, а главное КАК их платить? VISA\Master не работает.

 ,

gobot
()

Ускорить видео в 100 раз

Хочу уменьшить в размерах и ускорить в 100 раз исходный mp4(h264) 640x480. Собственно хочу сделать версию для быстрого предосмотра всего файла.

Делаю по офф. инструкции | Speeding up/slowing down video


Делаю так

ffmpeg -i input.mp4 -vcodec libx264 -vf "scale=300:-2,setpts=0.01*PTS" -an xxx.mp4

[mp4 @ 0x4d04a80] Frame rate very high for a muxer not efficiently supporting it.

Please consider specifying a lower framerate, a different muxer or -vsync 2

[libx264 @ 0x4ce7e80] MB rate (25650000) > level limit (16711680)

[libx264 @ 0x4ce7e80] profile High, level 6.2




Все хорошо, файлы размером получаются порядка 20K и быстро проигрываются

Но на некоторых исходных файлах (ещё пока не понял закономерности) пооучается огромный FPS 90090 (90K) и размер какой то аномальный получается большой. Плееры на таких файлах виснут

Отчего такое может быть? Может какой-нибудь другой способ, более эффективный есть ускорить?

 

gobot
()

Взаимный require A из B и B из A

Есть файл A.js и есть B.js

В A require(«B»)
В B require(«A»)

Получается бред. Что делать? Разве A не может пользоваться функциями из B и наоборот?

 ,

gobot
()

Как определить сколько сервер передал байтов в месяц

Нужна инфа о том, сколько сервер отдал\принял байтов за месяц. Есть статистика Zabbix, но там данные собираолись только по скорости (bits per sec), а вот в абсолютных величинах нет. Где бы мне взять из ifconfig строки (RX bytes, TX bytes), с датой месяц назад? В логах может каких или из /proc? Или не реал уже?

 ,

gobot
()

Аренда сервер в рф. Отказ от европы

Подскажите где найти сервер в рф по нормальной цене. Основное требование безлим скорость 1gbps, на крайняк можно 500mbps. Пока что нашел 100mbps безлим и 1gbps, но там 30 терабайт лимит в мес. потом 200р за каждый тер. Выходит от 30 000р. в моей конфигурации, самой простецкой. Это очень дорого. Сейчас арендую в европе, там безлим гигабит. Выходит 50-80 евро, но вот настала полная ж%%%па с оплатой. Сервер невозможно продлить с картой рф, paypal тоже не работает. Оформлять карту в европе? А как ее пополнять - тоже не понятно.

Может в китае есть какая аренда, кто в курсе?

 , ,

gobot
()

Браузер не открывает больше 6 соединений

Пробую делать HTTPS GET запрос на сервер, асинхронно, сразу 10. Соединение бесконечное, качается mp4 файл бесконечно. Браузер открывает 6 соединений, а остальные 4 находятся в состоянии pending. Если открыть окно браузера в режиме инкогнито или запустить другой браузер (проверял в Chrome|Opera|FF) и там открыть ещё 10 соединений, то откроются также только 6. Если открыать просто новую вкладку, то ни откроется ни одно соединение, т.к. в соседней вкладке уже висят эти 6 соединений. Если закрыть активное соединение, то откроется соединение, которое было в состоянии pending.

Проверял через скрипт node, там все нормально, хоть 20 хоть 30 одновременно открывается

В логах nginx все чисто, вижу только 6 соединений (ну когда завершаются их видно в access.log со статусом 200). Остальные соединения нигде не регистрируются, ни в error.log ни в access.log, нигде их не видно.

Потом начал tcpdump смотреть на предмет SYN

tcpdump -i eth0 -n tcp and port 443 and src my_remote_ip and "tcp[tcpflags] & (tcp-syn) != 0"


вижу только 4 SYN от браузера. Если запустить 20 конектов через node, то вижу все 20 SYN. Похоже на то, что браузер использует keep-alive.

Отключил я keep-alive в nginx

keepalive_timeout 0;

Теперь в отвере от сервера заголовок Connection: close. Не помогло!
В iptables нет никаких ограничений

Конфиг nginx

user gobot;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
  worker_connections 768;
}

http {
	server_tokens off;
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 0;
	types_hash_max_size 2048;  
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	#cache off
	add_header Last-Modified $date_gmt;
	add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
	if_modified_since off;
	expires off;
	etag off;

	gzip on;
	gzip_disable "msie6";
}



Походу это ограничение в браузерах. Хм, даже не знал
https://stackoverflow.com/questions/985431/max-parallel-http-connections-in-a...

Чепуха какая то!

 ,

gobot
()

Connection timeout

Как установить timeout(open, connect, read, write, любой) при открытии «файла» в ffmpeg?

тут указано, что

rw_timeout Timeout for IO operations (in microseconds)

В самом rtmp есть timeout, но он влияет только на listen

Перепробовал все параметры уже

const char *in_filename  = "rtmp://8.8.82.8:1939/live/app";
AVDictionary* options = NULL;

//av_dict_set(&options, "stimeout", "1", 0);
//av_dict_set(&options, "open_timeout", "1", 0);
//av_dict_set(&options, "timeout", "1", 0);
av_dict_set(&options, "rw_timeout", "1", NULL);

ret = avio_open2(&ifmt_ctx, in_filename, AVIO_FLAG_WRITE, NULL, &options);


Отрубается с ошибкой через 5 сек. Хотелось бы как то повлиять на
это время

[tcp @ 006AB400] Connection to tcp://8.8.82.8:1939 failed: Error number -138 occurred
[rtmp @ 006AAF00] Cannot open connection tcp://8.8.82.8:1939

 , ,

gobot
()

segmentation fault

Отлаживаю баг в одном проекте, часть которого на писана на С++. Проблема в segmentation fault(SIGSEGV), программа падает. Где падает я узнал

Вот тут, после этого вызова

m_listener->onClose(m_id) //Listener* m_listener


m_listener это virtual метод класса.
class Listener {
public:
	virtual void onData(uint32_t id, TransportData data) = 0;
	virtual void onClose(uint32_t id) = 0;
};




Сам объект класса TransportSession, в котором падает, создается через

m_session = std::make_shared<TransportSession>(0, m_service, std::move(m_socket), this);


Какие могут быть вообще причины возникновения segmentation fault? Удалилась ссылка на m_listener? Проверить указатель как я читал, в С++ никак не возможно.
Делал
if(m_listener != NULL)
if(m_listener != nullprt)

бесполезно

 ,

gobot
()

Запуск node скрипта

Хочу запустить node скрипт

Есть некий проект

/app1/index.js
/app2/index.js
/app3/index.js

index.js - одинаковый во всех директориях. Хочу вынести его в /share/index.js

Далее прописываю в package.json

"main": "../share/index.js"


Потом пытаюсь запустить
cd /app1/
node .


Запускается /share/index.js но с ошибкой Cannot find module ...
Модуль этот находится в /app1/node_modules.

Как запустить скрипт /share/index.js но чтобы он думал что запускается в папке /app1/ ?

И ещё... Если нет в папке /app1/ded.js то файл ищется в /share/
Тобишь какое то наследование нужно на уровне ФС

 

gobot
()

Connection reset by peer

Клиент сбрасывает соединение, посылая tcp Reset (установил это документально, использую tcpdump). Происходит это рэндомно. Раньше закрывал на это глаза, но сейчас уже достало, невозможно работать. Приходится восстанавливать заново все ssh сеансы.


  • Иногда сбрасывается одно соединение через час
  • Иногда через минуту
  • Иногда сбрасываются все соединения одновременно



В sshd установил LogLevel DEBUG:

Read error from remote host x.x.x.x port 36101: Connection reset by peer


Последние пакеты из рваной сессии:
02:20:39.919377 IP server.2223 > client:31700: Flags [.], ack 135397, win 1392, length 0
02:20:42.925453 IP client:31700 > server.2223: Flags [P.], seq 135397:135445, ack 180856, win 16698, length 48
02:20:42.925460 IP server.2223 > client:31700: Flags [.], ack 135445, win 1392, length 0
02:20:45.962412 IP client:31700 > server.2223: Flags [P.], seq 135445:135493, ack 180856, win 16698, length 48
02:20:45.962427 IP server.2223 > client:31700: Flags [.], ack 135493, win 1392, length 0
02:20:48.938635 IP client:31700 > server.2223: Flags [P.], seq 135493:135541, ack 180856, win 16698, length 48
02:20:48.938642 IP server.2223 > client:31700: Flags [.], ack 135541, win 1392, length 0
02:20:51.940647 IP client:31700 > server.2223: Flags [P.], seq 135541:135589, ack 180856, win 16698, length 48
02:20:51.940673 IP server.2223 > client:31700: Flags [.], ack 135589, win 1392, length 0
02:20:54.948644 IP client:31700 > server.2223: Flags [P.], seq 135589:135637, ack 180856, win 16698, length 48
02:20:54.948652 IP server.2223 > client:31700: Flags [.], ack 135637, win 1392, length 0
02:20:57.959927 IP client:31700 > server.2223: Flags [P.], seq 135637:135685, ack 180856, win 16698, length 48
02:20:57.959936 IP server.2223 > client:31700: Flags [.], ack 135685, win 1392, length 0
02:20:58.711937 IP client:31700 > server.2223: Flags [P.], seq 135685:136853, ack 180856, win 16698, length 1168
02:20:58.711946 IP server.2223 > client:31700: Flags [.], ack 136853, win 1391, length 0
02:20:58.712115 IP server.2223 > client:31700: Flags [P.], seq 180856:181976, ack 136853, win 1392, length 1120
02:20:58.838897 IP client:31700 > server.2223: Flags [P.], seq 136853:136933, ack 181976, win 16418, length 80
02:20:58.844690 IP server.2223 > client:31700: Flags [P.], seq 181976:182680, ack 136933, win 1392, length 704
02:20:58.968907 IP client:31700 > server.2223: Flags [P.], seq 136933:136981, ack 182680, win 16698, length 48
02:20:59.012268 IP server.2223 > client:31700: Flags [.], ack 136981, win 1392, length 0
02:21:00.970903 IP client:31700 > server.2223: Flags [P.], seq 136981:137029, ack 182680, win 16698, length 48
02:21:00.970915 IP server.2223 > client:31700: Flags [.], ack 137029, win 1392, length 0
02:21:01.467905 IP client:31700 > server.2223: Flags [P.], seq 136981:137029, ack 182680, win 16698, length 48
02:21:01.467918 IP server.2223 > client:31700: Flags [.], ack 137029, win 1392, options [nop,nop,sack 1 {136981:137029}], length 0
02:21:02.067906 IP client:31700 > server.2223: Flags [P.], seq 136981:137029, ack 182680, win 16698, length 48
02:21:02.067913 IP server.2223 > client:31700: Flags [.], ack 137029, win 1392, options [nop,nop,sack 1 {136981:137029}], length 0
02:21:03.269909 IP client:31700 > server.2223: Flags [P.], seq 136981:137029, ack 182680, win 16698, length 48
02:21:03.269919 IP server.2223 > client:31700: Flags [.], ack 137029, win 1392, options [nop,nop,sack 1 {136981:137029}], length 0
02:21:03.981905 IP client:31700 > server.2223: Flags [P.], seq 137029:137077, ack 182680, win 16698, length 48
02:21:03.981912 IP server.2223 > client:31700: Flags [.], ack 137077, win 1392, length 0
02:21:05.670937 IP client:31700 > server.2223: Flags [P.], seq 136981:137077, ack 182680, win 16698, length 96
02:21:05.670950 IP server.2223 > client:31700: Flags [.], ack 137077, win 1392, options [nop,nop,sack 1 {136981:137077}], length 0
02:21:06.994905 IP client:31700 > server.2223: Flags [P.], seq 137077:137125, ack 182680, win 16698, length 48
02:21:06.994913 IP server.2223 > client:31700: Flags [.], ack 137125, win 1392, length 0
02:21:10.004338 IP client:31700 > server.2223: Flags [P.], seq 137125:137173, ack 182680, win 16698, length 48
02:21:10.004344 IP server.2223 > client:31700: Flags [.], ack 137173, win 1392, length 0
02:21:10.468176 IP client:31700 > server.2223: Flags [P.], seq 136981:137173, ack 182680, win 16698, length 192
02:21:10.468189 IP server.2223 > client:31700: Flags [.], ack 137173, win 1392, options [nop,nop,sack 1 {136981:137173}], length 0
02:21:13.014188 IP client:31700 > server.2223: Flags [P.], seq 137173:137221, ack 182680, win 16698, length 48
02:21:13.014194 IP server.2223 > client:31700: Flags [.], ack 137221, win 1392, length 0
02:21:16.026168 IP client:31700 > server.2223: Flags [P.], seq 137221:137269, ack 182680, win 16698, length 48
02:21:16.026174 IP server.2223 > client:31700: Flags [.], ack 137269, win 1392, length 0
02:21:19.121415 IP client:31700 > server.2223: Flags [P.], seq 137269:137317, ack 182680, win 16698, length 48
02:21:19.121421 IP server.2223 > client:31700: Flags [.], ack 137317, win 1392, length 0
02:21:20.063427 IP client:31700 > server.2223: Flags [R.], seq 137317, ack 182680, win 0, length 0


Конфиг(что менял)
Port 2223
ClientAliveInterval 15
ClientAliveCountMax 3
LogLevel DEBUG
PermitRootLogin yes


Параметры ClientAliveInterval и ClientAliveCountMax никак не влияют, продобовал и по умолчанию и так - бесполезно

На PuTTY установлена посылка пакетов keepalive через каждые 3 сек. Установлены галки TCP_NODELAY & TCP_KEEPALIVE

Ничего не понимаю. Соединение рвется на всех серверах. Использую роутер Asus RT-N11P, соединение обычное через провод (DHCP), оптика через PPPoE. Никаких брандмауров, НАТов и прочих хитростей не настраивал.

Клиент: Windows 7, Putty
Сервер: Debian 9 ну и остальные тоже Debian

Как понять кто и зачем посылает RST пакет? Грешить на провайдера возможно?

Похожая проблема https://superuser.com/questions/294824/putty-network-error-software-caused-co...
Но там retransmissions пакеты какие-то

 , , , ,

gobot
()

Как перехватывать все сообщения

Режиссер(Producer) посылает сообщение Потребителю(Consumer). Потребитель его потребляет, все хорошо. Я сделал ещё одного своего Потребителя и хочу перехватывать все сообщения от Режиссера, которые не предназначались мне. Точнее, я не буду их потреблять (не буду посылать отчет о потреблении), а мне нужно просто их видеть.

Может ли RabbitMQ такое сделать: приходит сообщение в очередь, он берет его и отправляет целевому потребителю и ещё моему потребителю. Вот как его заставить это сделать?

Использую nodejs c либой amqplib, сервер RabbitMQ на Ubuntu...

 ,

gobot
()

Не импортируется класс

Хочу сделать авторизацию через Facebook в своем приложении (java).

Делаю все по инструкции https://github.com/facebook/facebook-android-sdk


import com.facebook.login.LoginManager;
...

LoginManager.getInstance().registerCallback(CallbackManager.Factory.create())

LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));


проблема в том, что Android Studio не видит com.facebook.CallbackManager, и вообще все что находится тут https://github.com/facebook/facebook-android-sdk/tree/main/facebook-core/src/...

В зависимости gradle добавил целиком весь SDK
implementation 'com.facebook.android:facebook-android-sdk:12.2.0'

Во всех их примерах используется CallbackManager, например тут

Возможно потому что там kotlin? Хотя в их примере тоже используется java...

В чем может быть причина?

 , , , ,

gobot
()

RSS подписка на новые темы