История моей программы

Несколько лет назад однажды мне пришлось столкнуться с оптимизацией работы компьютеров в интернет-кафе. Правда по большей части в разрезе оптимизации самих ПК. (Тогда я еще не знал, что виндоус будет «летать» на них раз в несколько месяцев). Но в результате этого общения пришлось в той или иной мере обратить внимание на ужасной неудобный и постоянно выпадающий пиратский Локер.
Одним из наиболее «приятных» аспектов его использования были постоянные зависания самой программы и потери компов в сетке. Прикол в том, что Локер управлял компами по протоколу УДП, который работает без постоянного коннекта, и из-за огромной загрузки planet'овских switch'ей, компьютеры постоянно пропадали, напрягая меня, владельцев и манагеров игрового клуба. Именно тот момент родилась идея написать программу, которая работала бы по протоколу TCP, и вместо неуклюжего локеровского рабочего стола управляла обычным виндовым десктопом (отправляя при надобности процессы в заморозку или убивая их вообще).
После нескольких месяцев общения с С++билдером был написан собственно IPGuard — так называлась моя программа. Первоначально я его собирался продавать по сравнительно небольшой цене порядка 40$. И помимо клуба, для которого он первоначально разрабатывался, даже был продан еще другим покупателям. Но вот только унивеситет и другие «прелести» жизни помешали в то время вывести софтину на рынок — т.к. нужно было писать мануалы, организовывать саппорт и т.п., а на все это нужно было огромное количество времени.
В результата, до прошлого года в течение 4-х лет эта программа для администрирования интернет-кафе и компьютерных клубов банально лежала в загашнике и ждала своего времени. За это время появилось много конкурентов, и при том вполне приличных, но при этом весьма платных. Нарисовались и глючные, но фриварные решения. К сожалению, задача организации т.п., Стояла все так же ребром. А в ракурсе недостатка времени, было решено на него подзабить и вместо этого опубликовать программу в фриварный доступ и подготовить краткий фак. — Так и случилось в сентябре 2009-го.
Многие пользователи быстро разобрались с программой и даже разработали дополнения. Чем подтвердили, что, несмотря ни на что, программа очень и очень жива. И при этом ощутимо удобнее в обращении многих исключительно платных (и глючных) конкурентов. Для тех, кто желает ознакомиться с творением — адрес сайта бесплатной программы компьютерных клубов IPGuard ipguard.org.ua/.

Веб-камера на Азове

Не так давно нашел интересный сайтец — вэбкамеру прямо на берегу Азовского моря — в с. Кириловка. Удивительно, но «наши» прижимистые ребята расщедрились на установку бесплатной вебки для людей. К тому же на берегу, где интернет дорогой. Но в целом получилось интересно — рекомендую глянуть как-нибудь при свете дня (ночью темнота — ничего не видно). Кирилловка Азовское море вэбкамера

Кризис рейтингов в зоне KG

Де-факто, у нас в стране есть один счетчик. Это top.kg.
Он поддерживается абы-как. Зарегистрироваться нормально уже нельзя. Администрация на письма не отвечает.

Видя это безобразие, Айбек пошел на героическое усилие и попробовал занять нишу со своим проектом top.iz.kg.

К сожалению, он пока не смог покорить эту вершину. На сегодня «В связи с тем, что нагрузки на сервер коллосально увеличиваются, наших ресурсов не хватает».

Кто на новенького?

Краткая памятка для настройки superslave в pdns

Краткая памятка для настройки superslave в powerdns.

Указываем следующие опции в файле /etc/powerdns/pdns.conf:
superslave=yes
launch=gmysql
gmysql-host=localhost
gmysql-user=pdns
gmysql-dbname=pdns
gmysql-password=123456


Создаём базу данных, пользователя и даём ему права на эту БД:
create database pdns DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE = utf8_unicode_ci;
create user pdns@localhost IDENTIFIED BY '123456';
grant all on pdns.* to pdns@localhost;
flush privileges;


Создаём таблицы в БД из файла, который должен был быть установлен в комплекте с pdns:
mysql -u pdns -p pdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql


Добавить первичные ДНС-серверы для ваших доменов в таблицу supermasters (один раз, а не для каждого домена):
INSERT INTO `supermasters` VALUES ('10.1.1.1','ns1.domain.tld','internal');
INSERT INTO `supermasters` VALUES ('10.1.1.2','ns2.domain.tld','internal');


На этих серверах должен быть разрешён трансфер доменов для вашего superslave-сервера. Проверить можно как-то так:
dig -t axfr @ns1.domain.tld domain2.tld


Superslave-сервер откачает домен после получения notify — уведомления про изменения в домене, так что первичный сервер должен отправлять эти самые уведомления. Обычно, это надо настроить явным образом, т.к. по-умолчанию ДНС-сервер отправляет уведомления только серверам, указанным как авторитетные серверы для этого домена. В bind указать кому ещё отправлять уведомления можно при помощи опции also-notify.
На сервере с bind можно вручную, не производя изменения в домене, отправить уведомления командой rndc:
rndc notify domain2.tld


Если доменов много, то можно отправить уведомления однострочным скриптом типа такого:
grep "^zone " bind-zones-file.conf | sed -e's/zone "//' -e's/" {//' | while read i;do echo $i;rndc notify $i;sleep 2;done


Это работает если домены в файле bind-zones-file.conf описаны как-то вот так:
zone "domain2.tld" {
...
};


К сожалению, логи pdns указывают на причину проблемы не прямо, а какими-то намёками. Например, вот это, если не ошибаюсь, говорит о том, что нет прав на трансфер домена с мастера:
pdns_server[282496]: Error resolving SOA or NS for domain2.tld at: 10.1.1.1: Query to '10.1.1.1' for SOA of 'domain2.tld' produced a NS record


А вот это говорит о том, что нет подходящего мастера в таблице supermasters:
pdns_server[284836]: Unable to find backend willing to host domain2.tld for potential supermaster 10.1.1.1. Remote nameservers:
pdns_server[284836]: ns1.domain.tld
pdns_server[284836]: ns2.domain.tld

Северный Кипр и университет CIU

Недавно побывал на Северном Кипре, а точнее в Турецкой Республике Северного Кипра (ТРСК), по делам (даже моря не видел). Поделюсь впечатлениями.

Читать дальше →

Уведомления с iPhone на Mi Smart Band 5

Купил я себе iPhone 13 mini, но об этом отдельно.
Как ни странно, на iPhone нет функции Always-on-Display, которая позволяет видеть полезную информацию на экране телефона, находящегося в спокойном состоянии. Несмотря на то, что едва ли не все Андроид-телефоны имеют эту функцию iPhone в спокойном состоянии показывает полное ничего. Глядя на него непонятно в каком он состоянии, есть ли пропущенные события и, вообще, не отключился ли он.
Кто знает по какой причине у iPhone нет этой функции, но, зная Apple, можно предположить шкурный интерес — чтобы у людей был ещё один стимул покупать часы Apple Watch.
Понятно, что я знал об этом особенности и надеялся, что фитнес-браслет Mi Smart Band 5 частично поможет мне не пропустить какие-либо события. Однако, подключив браслет к телефону я обнаружил, что уведомления на него не приходят. Всё остальное работает: данные передаются, циферблаты загружаются, а никакой информации о новых сообщениях или звонках нет.
Поиск в Интернете давал только стандартные инструкции о включении уведомлений. После некоторых логических умозаключений я предположил в чём может быть проблема и не ошибся :-)
Когда на телефоне происходит какое-либо событие, в частности приходит сообщение в мессенджере или SMS, то на экране даже не разблокированного телефона появляется уведомление с текстом сообщения. Получается, что посторонний человек может подсмотреть сообщение на вашем телефоне. Это может быть критично для SMS, т.к. у многих сервисов через SMS приходит код для двухфакторной авторизации и сброса пароля, а ещё банк может присылать коды подтверждения по SMS. В настройках телефона, и на Андроиде, и на iPhone есть опция, которая позволяет скрывать текст сообщения на экране блокировки — отображается уведомление только о том, что пришло сообщение. На Андроиде несмотря на включенную опцию текст сообщения передавался на браслет и я, как раз, думал про то, что это утечка информации, т.к. браслет никак не защищён. Но с учётом того, что браслет получает информацию с телефона по блютуф в относительной близости от телефона слишком большой опасности эта утечка не представляет. Если я потеряю браслет или его украдут, то как только он выйдет за пределы зоны действия блютуф на него перестанут приходить уведомления.
Так вот, подобная опция на iPhone, как раз, работает правильно и не позволяет передавать уведомления на браслет.
Я включил отображение уведомлений от мессенджеров, телефона и календаря, но оставил отключенным для SMS.
Кстати, эта опция на iPhone названа не совсем интуитивно понятно — «Показ миниатюр» (Настройки — Уведомления), как и её значения: Всегда, Без блокировки, Никогда. Чтобы текст сообщения не отображался надо выбрать «Никогда». Зато эту опцию можно регулировать отдельно для каждого приложения.

Шаблон соглашения о трансфере на русском языке (версия 5.2)

(Мой перевод на русский язык документа RIPE «Transfer Agreement Template»)

Шаблон соглашения о трансфере (версия 5.2)

[Наименование]

[Юридический адрес]

[Город, страна]

[Регистрационный номер, Наименование регистрирующего органа]
[regID/orgID если применимо]
(Предлагающая сторона)

и

[Наименование]

[Юридический адрес]

[Город, страна]

[Регистрационный номер, Наименование регистрирующего органа]
[regID/orgID если применимо]
(Принимающая сторона)

в дальнейшем именуемые «Обе Стороны»


Читать дальше →

CentOS 8: sftp chroot для пользователя

Ничего сокровенного, просто заметка чтобы вспомнить если понадобится.

В файле /etc/ssh/sshd_config прописываем нужные настройки для группы, в которую включен нужный пользователь:
Match Group rock
        ChrootDirectory /data/%u
        ForceCommand internal-sftp


Мне кажется, вместо конструкции "/data/%u" можно указать просто "~", но я решил использовать более явную.

А также включаем внутренний sftp:
Subsystem       sftp    internal-sftp


Однако, тут есть подводный камень. Чтобы sshd мог сделать chroot папка пользователя должна принадлежать root-у и права на запись ни у кого другого быть не должно, т.е. установить на папку право на запись для группы не получится. Это приводит к тому, что пользователь не может ничего записать в свою папку и остаётся писать во вложенную папку, которую, к тому же, он не может создать. Для данной моей задачи всё это не критично, так что пойдёт.

Ну и попутно можно настроить вход по публичному ключу. А если с какой машинки публичный ключ типа dss (вроде бы устаревший алгоритм), а демон ругается на него примерно вот так:
sshd[8456]: userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes [preauth]


то надо добавить в конфиг sshd вот такой параметр:
PubkeyAcceptedKeyTypes=+ssh-dss

В CentOS 8 нет ntpdate?!

Пипец, в CentOS 8 теперь нельзя установить ntpdate, чтобы синхронизировать время с NTP-серверов. Теперь, блин, надо, видите ли, запускать новый демон чтобы просто синхронизировать время.
А как без ntpdate проверить работает ли какой-либо NTP-сервер вообще непонятно. Это я чтоли должен настроить полноценную синхронизацию и ждать сообщения в логах? А мне, блин, не надо синхронизироваться, мне надо просто посмотреть отвечает ли сервер и прям в данный момент интерактивно!
Кроме матов больше слов нет…

Настройка NTP-клиента на CentOS 8.

Посмотреть настройки времени:
timedatectl

Задать часовой пояс:
timedatectl set-timezone Asia/Bishkek

В конфиге нового демона убрать строку с ненужными серверами и указать нужные серверы — источники времени:
#pool 2.centos.pool.ntp.org iburst
server ntp1.domain.tld.
server ntp2.domain.tld.

Запустить новый демон:
systemctl start chronyd

Включить синхронизацию времени:
timedatectl set-ntp true

Подождать какое-то время пока не обновится время в системе или смотреть за логами и ждать появится ли там запись о подстройке времени.