Я уже неоднократно писал, что мне казалось, что я нашел “змеиное масло”, то есть универсальный способ коимпиляции GNU/Linux исходников для Винды – это cygwin. Это оказалось вовсе не так и в использовании cygwin есть куча тонкостей.
1. Компилятор cygwin делает Windows executable files, но чтобы они запустились не внутри cygwin, а в шелле Виндовс или скажем в FAR, им нужны всякие dll, например cygwin1.dll
2. Но при этом в процессе отладки надо помнить, если в каталоге с exe будет лежать dll, то из Винды это запустится, а из cygwin уже нет. Для отладочных экспериментов надо удалять dll из текущего каталога.
3. Если программа работает с файлами, надо помнить, что пути внутри cygwin указываются в UNIX-формате, например bin/circle, а для запуска из среды Windows надо перекомпилировать, меняя косую черту на обратную косую. С учетом экранирования путь будет выглядеть так
“bin\\circle.exe”
Но и на этом пути у меня бывали проблемы. Лучше (проще) вызывать исполнимый файл из текущего каталога и лучше использовать не системный вызов system(), а нечто типа execl (execv).
Новости Virtustan MUD
Последнее время муд стал падать со странными сообщениями
crash here: *** buffer overflow detected ***: terminated
Я погуглил, пишут что это ошибка в модуле EPOLL, я решил его выключить. Залез в код, а он выключен, причем очень давно, когда я добавлял в код поддержку нескольких портов. Тогда надо включить, может ошибка пропадет – по-ламерски подумал я. Стал пытаться включить, не компилируется, из-за моих изменений по многопортовости. Возился, возился, бросил, подумал, что это знак перейти на свежий код.
И Виртустан перешел на свежую версию кода Былин. В результате все мои новые команды и модификации пропали, но они сохранены в старой версии кода, постепенно я их внесу.
Но зато я сделал патч до внесению протокола MSSP в свежий код Былин.
Патч вот.
Приложения.
1. Почему эти ошибки стали возникать только в последнее время? Я постоянно обновляю свой сервер, это общие правила безопасности, без этого нельзя. Но с обновлениями приходят не только новые фичи, но и новые баги. Или как другая версия, мир изменился (я чувствую это в земле, я чувствую это в воде) и появился новый тип интернет-атак с длинным запросом. А атаки в интернете постоянно развиватся, например последние дни я начал замечать в логах nginx запросы на файлы типа backup.sql (к мудам это не имеет никакого отношения, но подобных запросов раньше не было)
2. Что такое EPOLL. Работа с периферийными устройствами может быть по прерыванию или по запросу. Муды обычно работают по запросу (httpd и Майнкрафт тоже). Но есть несколько версий библиотек для этого. Первая, это старый классический poll/select, вторая EPOLL, а есть еще EPOLL2. Код Былин может унаследовал от своего отца Circle два способа – poll и EPOLL (см. в коде операторы #ifdef EPOLL). В Линуксе можно и так и так, а в cygwin и macOS компилируется тольков варианте без EPOLL.
3. Поддержка доступа к маду по нескольким портам в самом маде необязательна. Ее можно сделать снаружи мада, например, средствами iptable. Но пока Виртустан работает только на порту 3000 (хост мой стандарный, mud.kharkov.org)
Release tintin++ 2.02.31
https://github.com/scandum/tintin
Update. 15-Mar-2023, 11:21.
My build for Windows x64. With SSL support. (Original Windows binaryes not have #SSL)
http://files.mud.kharkov.org/tintin/tintin-2.02-31-win64.zip
Свежие сборки для 64 разрядной Виндовс
Зеркало http://files.mud.kharkov.org/zerkalo/zerkalo-win64-13-feb-2023.zip
Виртустан http://files.mud.kharkov.org/virtustan-mud/vmud-windows/vmud-b-win64-13-feb-2023.zip
И снова сборки
Вот
http://mud.kharkov.org/files/towers_win64_v2.tgz
это бинарники для 64-разрядной Виндовс первой версии мада Towers of Aladon. Это 1997 год, по сути это очень частично русифицированный ROM. Игра имеет архивное и музейное значение, я думаю.
Updated 26 jan 2023
Цікаві досліди
14 января 2023 года, Харьков, в 15 ч 38 мин пропал свет из-за российского обстрела. Российская армия сейчас придерживается такой тактики: бить по электростанциям, чтобы украинцы вымерзли от холода.
Сейчас 18 ч 23 мин. Мобильного интернета почти нет, я экспериментировал с соединением смартфона (ОС Андроид) и Макбука (смартфон в режиме раздачи вайфай, то есть точки доступа).
На смартфоне в среде termux запустил tbamud, а с Макбука подключался к нему при помощи MUD клиента tintin++. Вначале не работало из-за тайм-аутов при соединении. Таймауты вызвались отсутствием интернета, то есть отсутствием доступа к DNS и таймаутами вызова gethostbyaddr. Оказалось, авторы MUDа о похожей ситуации уже позаботились и если в конфиге указать опцию nameserver slow, то всё заработает (для редактирования конфига команда cedit). То же самое происходит и при обратной ситуации: мад-сервер tbamud на Макбуке, а tt++ на смартфоне.
Похожий случай был у меня в конце февраля. Тогда мы сбежали из Харькова от обстрелов и пару недель жили в селе Ульяновка Харьковской области. Свет там был, но мобильного интернета практически не было. Я взял с собой два ноутбука и пытался наладить внукам возможность поиграть в Майнкрафт по сети. Еще из железа я взял обычный wi-fi роутер. Я включил роутер, он начал раздавать вайфай без интернета. Я подключил к нему оба ноутбука. Ноутбуки могли пингать друг друга. Запустил на обоих Майнкрафт, java версию. На одном создал локальный мир и расшарил мир по сети. Второй ноут увидел этот мир. Увидеть-то он его увидел, но соединиться не смог. Возможно, ситуация была связана с чем-то похожим на мои эксперименты с MUD. Скорее всего при старте майнкрафты что-то пытались резольвить или получить со своего сервера.
Свет починили к часу ночу 15 января.
Вообще, из-за российских обстрелов отключения света бывают у нас частенько, поэтому хочешь не хочешь, а приходится как-то занимать себя в темноте. У меня Макбук, относительно новый, по крайней мере аккумулятор держит заряд несколько часов, часов пять так точно. Можно программировать, можно читать заранее скачанные электронные книги, можно играть в локальный MUD. В локальный Майнкрафт или Майнтест тоже можно играть, но они сильно жрут энергию, особенно Майнкрафт, написанный на джаве. Майнтест это клон Майнкрафта, написан на С++ и более экономен. Надо, кстати, подучить теорию, почему процессор под нагрузкой тратит больше энергии. Ведь и когда компьютер ничего не считает, через микросхему процессора все равно идет ток, то есть он все равно потребляет энергию.
Еще одна тонкость: при авариях с электричеством почти сразу пропадет мобильная связь. Видимо, генераторы и аккумуляторы стоят не на всех сотах или их хватает очень ненадолго. Иногда в моей квартире авосеть не ловится, а если выйти с фонариком и пройтись в темноте в сторону торгово-развлекательного центра “Украина”, то там иногда можно найти места, где ловит. Почему в темноте, потому что зима, рано темнеет. Летом будет проще, будет длинный день и будет тепло и можно будет гулять вечерами, хотя хотелось бы, чтобы к лету мы победили.
Shadow Realms MUD
Внезапно я занялся этим мудом. Его исходники в виде архива были очень давно выложены на сайте этого муда (сайт сейчас не работает). Я их причесал, они стали у меня запускаться. Вот они https://gitlab.com/prool/shadow_realms_mud
А теперь я адаптировал исходный код к cygwin и сделал виндовую сборку этого муда:
http://mud.kharkov.org/files/srmud_win64.zip
Кроме того, я запустил этот муд на своем сервере (порт 4444, хост mud.kharkov.org). А оригинальный муд не работает, как и его сайт
Release 2.02.30 TinTin++
https://github.com/scandum/tintin/releases/tag/2.02.30
Мои результаты компиляции этой версии будут описаны в коментах
О локалке Граней Мира
Вначале краткий отчет о моих попытках сделать виндовые бинарники (“локалки”) Дримленда и Граней мира: не получилось.
Я консультировался с Руффиной и другими программистами этих миров, они ничем помочь мне не смогли. Большинство мад-серверов базируется на серверах с ОС Linux, чаще всего Ubuntu, и разработка идет под них, под их компиляторы, библиотеки, особенности сетевой архитектуры. Совместимость типа “этот код компилируется везде” бывает очень редко. А в случае Дрима и Граней у их команды есть свой метод, они берут обычный мад и оборачивают вокруг него обертку из своего кода со скриптовым языком Fenia. И вот эта обертка, написанная на С++ очень чувствительна к версии компилятора и у меня на Винде в cygwin не собирается или собирается с проблемами, не позволяющими маду запускаться. Кстати, метод Дрима чем-то похож на то, как из обычного (ванильного) сервера Майнкрафт делается сервер Forge или Fabric, только в случае Майнкрафта обертка делается не на уровне исходника, а на уровне бинарного кода, потому что Майн – закрытое проприетарное программное обеспечение. И если вернуться к мадам, еще существует встраивание в мад-сервер скриптового языка lua, тоже вроде по похожей схеме, как и в Дриме. Лично я как смиренный программист восьмидесятых скриптовые языки не люблю и у меня мад-сервера монолитные, и многие возможности я вношу на уровне кода ядра, то есть они hardcoded. Мне так проще, но с точки зрения правильного подхода к архитектуре это не совсем правильно.
Стаття про Метавсесвіт
Тут згадується і MUD