Когда сидел на даче, вспомнил рассказы Dzin Dzin о том, как он пробрасывал видеокарту в Windows в Proxmoxе, и решил попробовать то же самое в обычном QEMU под Debian, когда вернусь в Москву. И вот вчера вечером выдалась возможность приступить. С самого начала всё шло криво. Сначала оказалось, что недостаточно просто переключить HDMI-кабель в порт встроенной видеокарты, нужно залезть в BIOS и поменять порядок их инициализации. Причём чтобы залезть в BIOS, нужно снова переключить кабель. Потом никак не запускалась виртуальная машина через virt-manager. Пытался запустить напрямую через qemu-system-x86_64, но поймал ошибку, что нет доступа к какому-то файлу, которого на самом деле даже в системе не было.
Сегодня попытался ещё раз. Нашёл подходящую статью (правда, для NVidia карт, но не важно), а с правами решил вопрос так, как по-хорошему делать не надо: запустил virt-manager через sudo, а потом на нужные файлы просто поставил 0666. В итоге виртуальная машина вроде запустилась, и Windows даже показал, что видит видеокарту. Но когда я переключил кабель, на экране так ничего и не появилось.
Потом решил поставить в Windows официальный драйвер от AMD, но и тут вылезла проблема: я под диск с Windows выделил всего 30 Гб места. И оказалось, что свободного осталось всего 4 Гб, и для установки драйвера и приложения Adrenaline этого не хватает! Пришлось увеличивать диск (кстати, только сейчас узнал, что в qemu это вообще возможно). Под Windows это место, естественно, появилось как неразмеченное, пришлось делать отдельный раздел и выносить туда swap и временные файлы. После этого драйвер установился. И тут я сообразил, что ничего не видно может быть ещё потому, что Windows видит эту видеокарту как вторую. И когда включил режим «расширить» рабочий стол, наконец-то изображение появилось!
Но увы, на этом всё и закончилось. Один раз как-то у меня получилось завести туда курсор мыши, но он сильно тормозил, и я толком на этом рабочем столе ничего не смог сделать. В итоге пришёл к выводу, что без монитора, у которого есть и DP и HDMI-входы (или два HDMI), чтобы можно было подключить обе видеокарты сразу, дальнейшие эксперименты не имеют смысла, хотя до этого я надеялся найти вариант с пробросом изображения через какой-нибудь RustDesk или Parsec, как это был в те времена, когда я экспериментировал с облачным геймингом.
В общем, потратил на все эти эксперименты почти целый день, и теперь сижу очень недовольный и задаюсь вопросом: почему вместо того, чтобы спокойно заниматься либо движком для личного архива, либо доделками этого сайта, либо ещё чем-то подобным, меня периодически тянет на подобные «приключения»?

- Перово, Москва, Россия
- me@4xpro.ru
- x4_pro
- XXXXPro
Новости сайта в Telegram
t.me/4x_proЛог жизни
Лог моей жизни, где я фиксирую наиболее эмоционально значимые для меня события и текущее настроение. Является продолжением блога, который я вел в ЖЖ с ноября 2004 по апрель 2018 года.
Попытка пробросить видеокарту в QEMU

Вернулся к идее сайта-персонального архива

Несколько дней назад опять задумался о переделке личного сайта. Вспомнил, как расписывал информационные потоки, и пришла в голову неожиданная мысль растащить всё по поддоменам:
me.4xpro.ru или about — минималистичная статическая страница с краткой информацией о себе,
blog.4pro.ru — блог с чем-то Zulip-подобным (куда перенести ещё часть форумных разделов),
links.4xpro.ru — раздел со ссылками на понравившиеся статьи, чем-то похожий на Lobste.rs или HackerNews,
catalog.4xpro.ru — каталог для софта и бесплатностей,
ask.4xpro.ru — аналог личного ask.fm или sprashivai.ru для анонимных вопросов,
walks.4xpro.ru и travels.4xpro.ru — для рассказов о прогулках и дальних поездках (скорее всего, на статике, сгенерированной Astro),
git.4xpro.ru и gists.4xpro.ru — для self-hosted копий репозиториев своих проектов,
lytdybr.4xpro.ru — а сюда вынести «Лог жизни» и развернуть информационный поток: сделать так, чтобы данные шли с ЖЖ на сайт, а не наоборот, как сейчас.
Правда, плохо представляю, что тогда должно быть на главной. Да и вообще, как всё это реализовывать — то ли отступать от своего принципа «на своём сайте — только свой код» и собирать из готовых решений, как-то прикручивая к ним единую систему входа, то ли писать всё самому, но тогда нужно решать, возвращаться к своему frameworkу или всё же использовать Symfony.
Тем не менее, решил попробовать начать с lytdybr и сделать автоимпорт из ЖЖ. Интереса ради попросил DeepSeek написать скрипт импорта, и, к моему большому удивлению, тот справился — написал код, использующий ЖЖшный XML-RPC API. Правда, кое-чего не учёл из-за неполной документации, и пришлось дорабатывать вручную. Но тем не менее, я получил работающий скрипт через час с небольшим, а не через несколько дней, которые бы ушли на то, чтобы разобраться с нуля и заставить себя что-то сделать.
А когда этот скрипт заработал, я вспомнил свою идею сайта-личного архива, и вдруг загорелся идеей сделать движок для него. Видимо, в голове сложилась та самая целостная картина, о которой я недавно писал. И вот уже второй день занимаюсь исключительно им. На данный момент более-менее готов импорт из ЖЖ и RSS-лент (в частности, ленты комментариев с Хабра). Завтра, наверное, займусь импортом из ВК и Instagram. Правда, пока готова только парсинговая часть, которая сохраняет данные в формат FrontMatter, а ещё нужно интерфейсную, хотя с ней проще — за основу можно взять Preambula.
Поставил Lineage OS на планшет!

Ещё раз убеждаюсь в том, что я — человек, который всё делает со второго раза. Вот и с планшетом получилось именно так: сегодня без особых проблем разблокировал планшет DC-Unlocker, прошил TWRP и установил Lineage OS 21. Причём на этот раз всё прошло на удивление легко и просто, только в какой-то момент не сразу сообразил, как закинуть образ LineageOS на SD-карточку, сидя в TWRP. Так что теперь у меня планшет обгоняет по новизне все остальные устройства! По всей видимости, вчера планшет некорректно определился из-за старого шнурка, который болтается в разъёме и иногда отходит.
Интерфейс Lineage мне сначала сильно не понравился — сильно напоминает Android 6 с его безумной минималистичностью. Потом кое-что понастроил, в частности, шрифты и форму значков, стало поприятнее. Теперь бы только найти ещё ту фирменную картинку Huawei, которая стояла на фоне раньше. Ещё очень непривычно выглядит верхняя область, где включается/отключается WiFi, Bluetooth и прочее: вместо круглых значков теперь используются вытянутые.
Сейчас занимаюсь тем, что переустанавливаю все необходимые приложения. (И просто голова пухнет от необходимости вспоминить всё.) А также устанавливаю то, чего раньше не было, но решил поставить для жизни с планшета. Ещё решил сделать из него «островок тишины», и не стал ставить Telegram (но на в случае острой необходимости залогинился в Web-интерфейсе), и сейчас думаю, ставить ли ВК, или ограничиться только ВК Видео. И конечно же, по-максимуму ограничу уведомления!
Ещё столкнулся с тем, что последние версии Android блокируют доступ к некоторым каталогам. Например, нельзя настроить SyncThing на каталог Download, что я раньше делал для выгрузки всего, что накачал с планшета, на компьютер.
Поднял свой Gemini-сервер

С подачи Zvezdo4ёtiя вновь заинтересовался протоколом Gemini. Сначала поставил пару нормальных gemini-броузеров, поизучал сам протокол, посмотрел несколько сайтов. Реально то, что я хотел: максимально простой и лёгкий аналог Интернета. Причём оказалось, что на нём можно делать даже почти полноценные форумы! В итоге пришёл к выводу, что нужно начинать его использовать и решил для начала поднять одностраничный сайт (в Gemini их называют капсулами) для idealists.su — просто страницу с информацией о том, кто такие идеалисты.
Но с сервером дело пошло очень тяжело. На localhostе всё запустилось быстро, а вот на VDSах — проблемы лезли буквально отовсюду. Сначала в качестве сервера решил использовать molly-brown, так как это — единственный сервер, который есть в репозиториях Debian. И тут меня ждала первая неприятность. На localhostе у меня Debian testing, где более новая версия molly-brown, в которой можно запустить его от имени root, прочитать файлы сертификатов, а потом переключиться на нужного обычного пользователя. А на серверах — обычный Debian, где гораздо более старая версия, и пользователя сменить нельзя. Не додумался ни до чего лучше, кроме как забросить новый бинарный файл в /usr/local/bin, и запускать его.
Потом выяснилось, что всё напрасно: я забыл о том, что для HTTP у меня настроено проксирование, и адрес idealists.su ведёт не на второй VDS, где висит akkoma, а на первый, откуда пробрасывается на второй через nginx. И я поднял molly-brown не на том VDSе! Пришлось перебираться на первый. Тут я вдруг решил, что вариант с загруженным бинарником — плохая идея, и нужно искать другой путь. В итоге нашёл — разрешить доступ к нужным сертификатам через ACL. Вроде бы всё сделал правильно, но почему-то доступ получить не мог. Сначала думал, что нужно включить поддержку ACL при монтировании файловой системы, ради этого даже перезагрузил сервер, потерял uptime в несколько месяцев. Потом оказалось, что поддержка была включена, просто я не сообразил дать доступ пользователю на вышестоящие каталоги, поэтому он и не мог достучаться до файла.
Когда это решилось, вылезла новая проблема: на самом сервере вроде всё работает, а при попытках подключиться извне — ошибка соединения. Поизучал вывод netstat и обнаружил, что он пишет, что сервер висит только на IPv6. Чуть не сломал мозг, пытаясь понять, как такое получается. В какой-то момент даже сдался, и решил вместо molly-brown поднять Agate, который написан на Rust и потребляет меньше памяти. Но там обнаружилась та же самая проблема: он писал предупреждение, что не может прослушивать IPv4. И это несмотря на то, что в нём в настройках можно явно указать адрес, который слушать!
Я понял, что тут что-то не так, и стал проверять, в чём ещё может быть дело. Очень быстро выяснилось, что на самом деле проблему создаёт firewall (хотя я вообще думал, что он у меня выключен). После этого всё заработало!
Оставалось сделать последний выбор: что всё-таки использовать: molly-brown или Agate. В итоге остановился на первом, так как Agate поддерживает только сертификаты в формате der, а Hestia, наоборот, всё держит в pem. И пришлось бы либо делать автоматическую конвертацию, либо переходить на self-signed.
А вообще, всё больше и больше думаю о том, что мне нужно позиционировать себя как «знатока альтернативных Сетевых технологий и малого Web». По сути, это единственное, что мне по-настоящему интересно… Видимо, так проявляется соционическая ЧИ: а что, можно сделать привычное как-то иначе?
Продолжаю экспериментировать с Zulip

Продолжаю экспериментировать с Zulip. Создал своё тестовое сообщество на zulipchat.com. Первые восторги стихли, но впечатление всё равно остаётся положительным. Пожалуй, из недостатков — только отсутствие возможности закрепить первое сообщение в теме (что было бы удобно для комментирования статей), поддержки хеш-тегов и тега description. А также отсутствия активных и отмеченных как ценные сообщения для всех (есть возможность отметить сообщения звёздочкой, но у каждого пользователя подборка отмеченных — своя). Но в целом как selfhosted-замена Telegram-канала — вполне приемлемое решение. К тому же обнаружилось, что в профиле есть задаваемые поля (при желании можно предусмотреть возможность указывать социотип, ПЙ-тип и т.п.)
Задумался даже о том, не перевести ли на Zulip socionics.me. Но не уверен, во-первых, есть ли в этом смысл, а во-вторых, оценят ли это Keynol и другие участники. Если была бы поддержка ActivityPub, однозначно перевёл бы на него сообщество Идеалистов. А не будь у меня принципа «на своём сайте — свой код», может быть, и этот сайт перенёс.
Ещё недавно подходил к концу оплаченный период хостинга для старых сайтов (openproj, socioclub и тому подобные). В какой-то момент пришла в голову мысль поступить так: перенести их на этот VDS и устроить из него кладбище старых сайтов. А живые проекты — этот сайт, сайт IntB и сообщество идеалистов — перенести на ещё один VDS (взятый на сэкономленные деньги), причём в качестве базы данных для всего перечисленного использовать Postgres. Правда, этот план провалился из-за того, что оказалось, что сюда уже штатными средствами Hestia PHP 5.x не установить, даже самый последний. Его уже удалили из репозиториев. А искать обходные пути как-то не хотелось… Так и пришлось продлевать старый хостинг.
Эксперименты с броузерами

В очередной раз задумывался о том, что нужно меньше сидеть за компьютером, и больше выходить в Сеть с мобильных устройств. И при этом желательно иметь возможность лёгкой синхронизации вкладок. На мобильнике я уже давно использую Edge, поэтому решил, что и на компьютере нужно переходить на него же.
Но я не был бы собой, если бы просто перенёс нужные настройки, вкладки и залогинился на нужных сайтах. Вместо этого я стал гонять benchmarks, и искать советы по оптимизации. В частности, узнал про то, что в Edge есть встроенная возможность разместить вкладки сбоку, а любой сайт сделать системным приложением, которое можно даже вынести в quicklaunch bar. Потом залез в about:gpu, увидел там, что использование Vulkan API и Skia по умолчанию выключено, и стал экспериментировать, как их включение/выключение повлияет на производительность.
Вечером, наконец-то определился, что всё же перейду на Edge с IronSW, которым пользовался до этого, даже несмотря на то, что Edge не является СПО.
Написал об этом у себя на сайте Идеалистов, кратко перечислил, что понравилось, и тут получил комментарий от пользователя gleb.zhulik комментарий на тему того, что всё то же самое есть в открытом броузере Vivaldi. Решил протестировать, скачал, поставил, понравилось. Почти всё то же, что и в Edge (только режима чтения не нашёл), но при этом это идеологически верный open source! И всё повторилось: опять прогон нескольких benchmarkов и перенос вкладок, настройка синхронизации и т.п. В итоге засиделся до глубокой ночи, тормозил весь следующий день, теперь Vivaldi стал моим браузером по умолчанию везде.
Узнал про Zulip

Позавчера, сидя на Идеалистах и листая ленту Fediverse, узнал о существовании такого проекта как Zulip. Решил узнать поподробнее, что это такое. И в очередной раз оказалось, что всё уже придумано для нас! Zulip изначально позиционируется как open source аналог Slack. Но в нём реализованы мои идеи мобильного сообщества как сочетания realtime-общения и асинхронного общения в одном месте! Что-то вроде self-hosted стены ВК или канала в Telegram, только ещё с поддержкой деления на разделы (там их называют каналами) и темы, как на форуме . Хотя, на мой взгляд, то, как это деление там устроено, несколько перегружает интерфейс. К тому же я предполагал мобильное сообщество сбалансированным в плане пользователь-центричности (user centrinc) и темо-центричности (topc centric), тогда как Zulip — это типичное темо-центричное сообщество. Там даже отдельной страницы профиля пользователя нет, только карточка, которая показывается при наведении мыши с минимумом информации: имя, аватар, статус в сообществе, и всё. Ни счётчика сообщений, ни поиска всего, написанного автором.
Но есть и недостатки. Во-первых, Zulip сделан на Django+PostreSQL, из-за чего будет весьма прожорлив в плане памяти. Во-вторых, использует client side rendering, и в принципе не будет работать с выключенным JavaScript. Хотя этим страдают многие проекты, сделанные после где-то 2012 года (Zulip появился в 2013), те же Mastodon и Akkoma, например. Но, справедливости ради, следует заметить, что интерфейс там достаточно быстрый и отзывчивый, а на любое сообщение или тему можно поставить внешнюю ссылку, как на полноценном форуме (но реализованы они в формате #/channtel/topic). Правда, не знаю, поддерживается ли возможность читать и писать сообщения в оффлайне. Для Web-версии поддержки PWA нет, но в то же время есть native apps для всех платформ (надеюсь, не на Electron написанные).
В общем, буду изучать Zulip дальше. Но, в любом случае, теперь количество возможных направлений жизни сократилось вообще до четырёх: блоггерство (и сюда же каталог бесплатного софта), инфобезопасность, написание TextCMS 2.0 на базе Preambula, участие в сторонних open source проектах (в первую очередь, HumHub, хотя кто знает, может и в Zulip вклад сделаю).
Закончил с переносом сайтов

Вчера закончил перенос сайта идеалистов на тот же сервер, где стоит SiteKnockerBot, и сегодня отправил старый сервер в Сетевое небытиё. Так и не придумал, как решить конфликт по порту 443, поэтому в качестве reverse proxy задействовал свой основной VDS. Заодно и разобрался с шаблонами Hestia.
Перенос опять не обошёлся без приключений. На этот раз получилось так: если просто запустить akkoma из терминала, всё работало, а если через systemd unit — нет. Причём не работало очень странно: по логам было видно, что akkoma просто хочет заново установить какие-то зависимости и ждёт подтверждения с консоли. Чуть было не сломал мозг, пытаясь понять, почему он не видит уже установленные зависимости. Потом оказалось, что дело в домашнем каталоге пользователя, от имени которого akkoma запускается. Когда я создавал пользователя при переносе, я указал каталог, куда помещаются файлы самой akkoma — /opt/akkoma. А в документации и на старом сервере почему-то был /var/lib/akkoma, который выглядел пустым, и я решил, что он не нужен. И оказалось, что на самом деле он не пустой, а там в скрытых каталогах как раз и устанавливаются те самые зависимости. Причем в systemd unit устанавливалась переменная HOME, где /var/lib/akkoma был прописан явно (из-за чего и происходили все проблемы). В общем, минус пара часов жизни и все нервов, плюс к работающему сайту и опыту. Эх, было бы сообщество про глупые ошибки в системном администрировании, можно было бы написать туда.
Но увы, перенос всего этого особой радости не принёс. Бот всё ещё даёт иногда ложные срабатывания, хоть и гораздо реже. Похоже, при постоянном создании/удалении большого количества сокетов в Linux истощаются какие-то ресурсы ядра, так как начинает дико тормозить даже обычный DNS resolving. А akkoma сегодня умудрилась упасть по OOM, несмотря на то, что только для неё после переезда оставалось свободным 1.2 Гб памяти! Сейчас, по совету DeepSeek, прописал кое-какие настройки, ограничивающие доступный объём памяти для виртуальной машины Elixir, посмотрим, поможет ли. Кстати, часть настроек вообще не распозналась, то ли у меня не та версия Elixir, то ли ИИ их придумал или бездумно позаимствовал из настроек Java VM.
Ещё возникла мысль, что можно сделать на движке HumHub: тот самый каталог бесплатностей Интернета, который я хочу, но откладываю уже почти три года.
Неудачный перенос сообщества идеалистов

На вчера наметил вторую часть переноса своих проектов. В этот раз на новый VDS должен был отправиться сайт idealists.su. Но на этот раз всё пошло вкривь и вкось. Точнее, перенос файлов прошёл нормально. Сложности начались с дампом базы. Почему-то он не хотел нормально разворачиваться. Я пытался перенести его и в виде SQL, и в бинарном — но без толку: куча каких-то непонятных ошибок. Сначала я думал, что дело в разных версиях PostgreSQL, но нет. Версия была одна и та же с точностью до релиза. Ломал голову почти час, пока не сообразил сделать импорт под системным пользователем Postgres, а не под тем, который был создан для akkoma. Под ним всё отработало нормально.
Оставалось только запустить nginx. Казалось бы, что тут может пойти не так. Однако смогло! Nginx вдруг отказался запускаться, сообщив, что не может повиснуть на 443 порту. Сначала я даже не понял, в чём дело, думал, что-то в настройках не так. И только посмотрев список открытых портов, вспомнил, что у меня же на 443 порту висит одна специфическая программа, и именно из-за этого я когда-то и не стал объединять VDS с ботами с какими-либо из своих сайтов, хотя такие мысли уже приходили в голову.
Потом обнаружилась ещё одна проблема: Akkoma отказалась запускаться. Сначала оказалось, что нет нужных зависимостей. При попытке их поставить средствами elixir (языка, на котором она написана) — непонятная ошибка. (Elixir вообще информативностью сообщений об ошибках не отличается.) Хорошо, что у меня была перед глазами документация по установке, и там было написано, что для установки нужен git. Пришлось поставить его, после этого akkoma вроде бы запустилась, но вскоре упала вновь, и так повторялось и дальше. Оказалось, дать Postgres-пользователю все права на базу akkoma через GRANT ALL недостаточно, нужно было его ещё и ownerом этой базы сделать. Видимо, в Postgres система прав как-то отличается от того, к чему я привык в MySQL.
Но к тому времени, как я в этом разобрался, я уже принял решение отложить переезд и перенацелил домен idealists.su на старый сервер. Так что два часа downtime оказались совершенно напрасными…
Остаток дня я потратил на то, чтобы решить конфликт из-за 443 порта. Первой реакцией было перевесить ту программу на другой порт на localhost, а nginx заставить работать в режиме reverse proxy. Но оказалось, что это не так-то просто сделать из-за того, что там нужен очень специфический ответ на TLS handshake. А чтобы nginx просто проверил домен во входящем TLS-соединении и передал запрос дальше без какого-либо вмешательства в него, нужно, чтобы в нём был модуль ngx_stream_ssl_preread_module. Только вот по умолчанию в debian его нет, и чтобы был, нужно либо из исходников собирать (что для меня — крайняя мера), либо искать репозиторий с альтернативной сборкой. Либо перевешивать программу на другой порт, с правкой кучи настроек в самых разных местах (причём не только у меня, но и у других людей). В итоге я до глубокой ночи экспериментировал, пытаясь найти обходные пути, но не выдержал и так и сдался. И только сегодня утром пришло в голову совершенно неожиданное решение: использовать в качестве reverse proxy мой основной VDS, где висят остальные сайты. Видимо, ночью или завтра попробую…
Перенос SiteKnockerBot состоялся

Вчера наконец-то определился, что делать с серверами. Решил всё же объединять SiteKnockerBot и сайт идеалистов и перейти на VDS с более высоким тарифом. Смущало, правда, что там канал всего 100 Мбит/с вместо 1 Гбит/с, как на прежнем. Но потом выяснилось, что этот 1 Гбит/с — это разделяемый канал между всеми VDSами на сервере, а на новом 100 Мбит/с — выделенный.
В итоге вчера весь день ушёл на то, чтобы переписать SiteKnockerBot на работу с Postgres и протестировать его локально. Сначала я думал, что всё будет предельно просто, исправлять потребуется только PHP-часть. Как оказалось, был неправ! Как раз с PHP-частью (она отвечает за интерфейс бота) всё прошло достаточно легко и быстро, а вот с Go пришлось повозиться. Сказался недостаток опыта. Первая ошибка вылезла из-за того, что для новых сайтов время последнего изменения было равно NULL, а я пытался сохранять его в обычную переменную time.Date. Как выяснилось, в этих случаях нужно использовать специальный тип pq.NullTime. Потом выяснилось, что передача параметризированных запросов тоже иначе сделана: через $1, $2 и т.д. вместо знаков вопроса. Ну и наконец, обнаружилось, что при конвертации таблицы проверок из MySQL в PostgreSQL не прописалось значение по умолчанию NOW() для столбца со временем. В итоге со всем этим просидел весь вечер, и даже не хватило времени поиграть в Heroes III. Ещё была мысль сделать настройки через .env-файл, как полагается, но руки так и не дошли. Ещё искал статьи по оптимизации настроек ядра для большого количества исходящих HTTP-соединений, вычитал про то, что имеет смысл поменять congestion control с cubic на bbr. Интереса ради спросил у ChatGPT и DeepSeek, какой они congestion control порекомендуют для этой ситуации, и они тоже предложили такое! (Эх, надо бы на Хабр или Hashnode статью написать про оптимизацию настроек под такое, но вряд ли соберусь. Какой-то блок в голове мешает, несмотря на то, что есть что сказать.)
А сегодня создал новый сервер и начал перенос. На удивление всё прошло достаточно хорошо и почти без нервов. Возможно, потому что сначала как следует продумал, что и как переносить. Только когда первый раз запустил интерфейсную часть бота, долго не мог понять, почему вроде всё работает, а бот не отвечает на команды. Разгадка оказалась простой: я забыл исправить обратно token Telegram, и он пытался получить запросы для тестового бота, а не основного. Следующий шаг: вроде всё работает, ошибок нигде нет, но время последней проверки не меняется. Вот тут я чуть было не сломал мозг. А разгадка оказалась простой: дело в часовых поясах. На новом сервере по умолчанию UTC+2, а при конвертации лога проверок это не было учтено. Поэтому записи шли с временной меткой 17:20, 17:39, а в логе были уже 18:10.
Но главный сюрприз ждал меня в конце. Когда я решил, что всё, перенос закончен, и собрался было удалить старый сервер, оказалось, что я этого сделать не могу из-за того, что не указал контактный телефон при регистрации. А при попытке его указать возникает ошибка, что не получается отправить проверочный код в SMS. В общем, так и пришлось писать в техподдержку. Но ответят только завтра, и получается лишний проплаченный день.
В целом мне новый сервер понравился! Прогнал бота в тестовом режиме, вроде лавинообразного возникновения ошибок из-за слишком большого количества соединений не наблюдалось. Да и потом, когда запустил уже в обычном режиме, не видел ни одного разрыва ложного срабатывания. (Эх, надо бы прикрутить к боту какой-нибудь анализатор событий, чтобы копить статистику, но всё руки не доходят.)
Сайт Идеалистов пока ещё не переносил, займусь этим завтра.