Миграция ПТС на Linux и MySQL

  • Автор темы Автор темы felex67
  • Дата начала Дата начала
Кому не трудно, скиньте пожалуйста статистику по использованию процедур, буду крайне признателен. Просто чтоб лишние не мигрировать, там всё равно у каждого свои для сайта.
Это запрос T-SQL, ничего такого, просто количество использований =)

SQL:
USE lin2db
GO
SELECT s.name, p.name, p.type_desc, ps.execution_count
FROM sys.dm_exec_procedure_stats AS ps
INNER JOIN sys.procedures AS p ON ps.[object_id] = p.[object_id]
INNER JOIN sys.schemas AS s ON p.[schema_id] = s.[schema_id]
WHERE ps.database_id = DB_ID('lin2db');
GO
 
#ragebait ...вставлю свои 50 копеек
---
Товарищ, хватит слепо верить ИИ в любой бредни что он напишет и выдавать вещи за факт; всегда перепроверяйте и делайте свой research...
AI == Just a Tool )

1. Docker Engine Backend юзает слой трансляции инструкций и все бэйз контйэнеры обычно очень минимальные. Например Alpine. Все это имеет минимальный дополнительный оверхэд на bare metal. Если имаджы билдить как native docker image, (ака GraalVM) там ваще минимальный, думаю даже 0,5-1% больше проца и памяти чем ранить обычно не будет.

2. Ну да есть такое, как и с или без докера, скачайте бинарник MySQL с торрентов с галочкой `✅ Проверено на вирусы администрацией` и молитесль чтоб там небыло 0-day сюрпризов. Те же пакэджы на maven? Log4j hello?

3. Huh?.. `compose.yml`, `docker compose --profile <all | servers | infra | analytics> up -d`? docker swarm? Про K8 говорить не буду, т.к там правдо на разы сложнее.
Если у вас куча сервисов login server, game server, proxy, grafana, prometheus, mariadb, etc ранить и конфигурировать бэш скриптами...ну такое. Добавьте в микс разные машины для login/server/db...заебетесь поднимать инфру. Можно и Portainer или

4. Промолчу...

5. Соглашусь, куча багов и проблем, добавьте WSL2 и их иногда еще больше. Падает бэкэнд, коррупт имаджэй и т.д. Рандомное отключение заранее сконфигурированных WSL2 образов и надо их снова "патчить" для докера. На линуксе, сказка.

6. Что значит по "умолчанию" данные исчезают? Типа сервис без 'volume:`? Ну тогда да, но аргумент такой-себе. А мэпнуть на локальный волюм ваще будут данные прям на файловой системе хоста. Дополнительные сложности эт, сделать бэкап? Или сохранить стэйт контэйнера и загрузить если надо? Не знаю) Слабые аргументы...если писать про длинну строк, да гемор, создайте алиасы и делов...
Bash:
# https://taskfile.dev/ | https://github.com/casey/just | makefile
# task db:bkp 👇
docker exec pg-db pg_dump -U postgres -d postgres -Fc >backup-$(date+%Y-%m-%d).tar.gz
Но да, чууть чуть меньше тут производельность работы с FS будет.

7. Тут все правда.

8. Ну какбы кэп. Для любителей не быть "рабом экосистемы докера" делайте compose.yml а рядом с ним compose.sh файл и внутри него на хосте устанавливайте используя choco / apt-get / dnf всё что хотите; засетайте его как энтрипойнт сервиса и вызывайте из .yml.
Но тогда это будет только как таск раннер, смысл тогда от него...может только для настройки сети, яхз.
 
Есть 2 причины, первая - геморрой с установкой MSSQL на Ubuntu/Debian, вторая - а почему бы и нет?
Да и вообще - задумываюсь не начать ли заново пилить серв под Linux хотя бы потому что там есть epoll, просто чтоб было, только вот в реверсинге я - балерун. А с расшаренными сорсами от Java с пакетами какая-то дичь творится, тестил на клиенте от lineager - вроде бы и работает, но - недолго, критует по причине несоответствия пакетов, хотя с темже клиентом спокойно играл на PTS draconic.ru у Abys и сборке PTS C4 Storm.
Как-то так...

felex67, если есть время и большое желание, то конечно можно попробовать. Странно что в Postgresql нет того, что есть в MySQL, я думал она функциональнее MySQL
тогда может с l2 сервера начать, а не с бд?)
 
---
По теме

Во первых не факт что у вас технически получится, изза изменений в API читайте блоги, ИИ и документацию всеравно там будут различия в работе который сам ПТС заставит не правильно работать.

Без доступа к исходникам чтоб поправить имплементацию советую не начинать.

Другой компот взять сборку явы (как самый простой варик) и подогнать её под работы с оффициальной ДБ перенесенной на ваш MySQL, why not? Там много функционала уходит в процедуры и часть нагрузки ЦПУ возьмет на себя вторая машина. Если деплоить всё на одной машине, что яву что птс смысла в переносе не вижу.

Я хотел попробовать использовать докер вместо всей мишуры с установкой легаси говна и виртуальной машины изза сранной зависимости от платформы ОС.

в compat mode

Bash:
docker run -e "ACCEPT_EULA=Y" \
  -e "MSSQL_SA_PASSWORD=YourStrong!Pass123" \
  -p 1433:1433 \
  --name mssql \
  -d mcr.microsoft.com/mssql/server:2019-latest

SQL:
ALTER DATABASE mmsql
SET COMPATIBILITY_LEVEL = 80;

DB Schema я успешно запушал, но сервера которые нуждались в SQL Server Management Studio / ODBC для коннекта, чёт я не додумался еще как обойти без Windows Server - на всё это у меня ушло пару дней, только дойти до этого этапа, фиксить парочку частей для компатибилити у т.д. дальше хз. Там паходу нужно отреверсить все эти програмульки сервера и поменять режим коннекта с имени ODBC connect'a на прямой путь к базе. Мб я чёт не шарю.
 
Последнее редактирование:
---
По теме

Во первых не факт что у вас технически получится, изза изменений в API читайте блоги, ИИ и документацию всеравно там будут различия в работе который сам ПТС заставит не правильно работать.

Без доступа к исходникам чтоб поправить имплементацию советую не начинать.

Другой компот взять сборку явы (как самый простой варик) и подогнать её под работы с оффициальной ДБ перенесенной на ваш MySQL, why not? Там много функционала уходит в процедуры и часть нагрузки ЦПУ возьмет на себя вторая машина. Если деплоить всё на одной машине, что яву что птс смысла в переносе кроме не вижу.

Я хотел попробовать использовать докер вместо всей мишуры с установкой легаси говна и виртуальной машины изза сранной зависимости от платформы ОС.

в compat mode

Bash:
docker run -e "ACCEPT_EULA=Y" \
  -e "MSSQL_SA_PASSWORD=YourStrong!Pass123" \
  -p 1433:1433 \
  --name mssql \
  -d mcr.microsoft.com/mssql/server:2019-latest

SQL:
ALTER DATABASE mmsql
SET COMPATIBILITY_LEVEL = 80;

DB Schema я успешно запушал, но сервера которые нуждались в SQL Server Management Studio / ODBC для коннекта, чёт я не додумался еще как обойти без Windows Server
Весь функционал уходит в процедуры, в бинарниках кешед ни одного селекта инсерта или апдейта нет, всё в процедурах, но вот AuthD - работает с базой прямыми запросами, единственная процедура которую он вызывает - exec ap_SLog, и он без проблем работает с MySQL и PostgreSQL. Вся загвоздка в Кэшеде, самому L2Server вообще по-барабану на базу, он юзает кэшед.
Что касается ODBC под Linux - wine с этой задачей спокойно справляется, под IoS не могу сказать. В моём случае всё упирается в то что я с ассемблером не в ладах совсем, для меня декомпил как дремучий лес :cry:
П.С.: Не хочу имплементировать сервер на Java ни под каким соусом.
 
Последнее редактирование:

Только самые бородатые, немытые и упоротые разработчики могут читать реверснутый ассембли их красными, убитые мелким шрифтом глазами и мозгом захламленным инструкциями, а то и на больше чем одну архитекруту чипсета...круто быть таким, но девки 99% не дадут про ескорт не уверен, фу таким быть.

Попробуйте вместе с ИИ, чудеса творит)
 

Pikachu

Баллов: 5
тоже пытался запустить, отспупился
миграция птс на линух без декомпила и получения годных исходников - это уже сильно извращенное занятие с нулевым стратегическим потенциалом. если делать нех - то лучше заняться получением птс исходов, тем более несколько людей/команд уже смогли в это. более того, пришли к этому через долгий и бестолковый путь частичных экстендеров и инжекта. а по мне лучше не выебываться, и сделать грамотный форк с оптимизацией максимальной какой-нибудь существующей ява-сборки с исходами. и вот его уже по желанию мигрировать на линух.
 
Последнее редактирование:
миграция птс на линух без декомпила и получения годных исходников - это уже сильно извращенное занятие с нулевым стратегическим потенциалом. если делать нех - то лучше заняться получением птс исходов, тем более несколько людей/команд уже смогли в это. более того, пришли к этому через долгий и бестолковый путь частичных экстендеров и инжекта. а по мне лучше не выебываться, и сделать грамотный форк с оптимизацией максимальной какой-нибудь существующей ява-сборки с исходами. и вот его уже по желанию мигрировать ни линух.
Ты ни в чем из описанного нихyя не понимаешь, почему ты рот открываешь вообще?
 
Весь функционал уходит в процедуры, в бинарниках кешед ни одного селекта инсерта или апдейта нет, всё в процедурах, но вот AuthD - работает с базой прямыми запросами, единственная процедура которую он вызывает - exec ap_SLog, и он без проблем работает с MySQL и PostgreSQL. Вся загвоздка в Кэшеде, самому L2Server вообще по-барабану на базу, он юзает кэшед.
Что касается ODBC под Linux - wine с этой задачей спокойно справляется, под IoS не могу сказать. В моём случае всё упирается в то что я с ассемблером не в ладах совсем, для меня декомпил как дремучий лес :cry:
П.С.: Не хочу имплементировать сервер на Java ни под каким соусом.
я не помню что это за auth у меня, но там не одна хранимка =) и самая первая которая при инициализации коннекта вызывается это ap_SetServerStatus

1769956927091.webp
 
я не помню что это за auth у меня, но там не одна хранимка =) и самая первая которая при инициализации коннекта вызывается это ap_SetServerStatus

Посмотреть вложение 93309
вот всё что "CALL" - это не про MSSQL, у него вызов идет через 'exec', и с вопросами также(?), вполне возможно что это просто описания для конструктора объектов, или для других ODBC. Когда я запустил подменив файловый дсн на mysql AuthD спокойно стартанул и прочитал данные о сервере и пользователе, запустив меня с паролем до момента выбора сервера, а вот CacheD начал сразу материться что ошибка вызова процедуры(хотя бы потому что в отличии от lin2db, в lin2world они еще не написаны).
Вот статистика вызовов за сутки, но я и не бегал толком, некогда было. в принципе 35 процедур - не так много.
Всё решится ближайшие дни, запасайтесь попкорном =)
 

Вложения

  • lin2db_callstat.webp
    lin2db_callstat.webp
    8,4 КБ · Просмотры: 20
  • lin2world_callstat.webp
    lin2world_callstat.webp
    83,4 КБ · Просмотры: 21
Последнее редактирование:
Фокир был пьян. тушите свет. Видимо когда я первый раз запускал - забыл поменять lin2db на MySQL, потому то и подключился =( Буду копать в сторону того как прикрутить MySQL odbc, где-то должна быть валидация драйвера. Спасибо всем за поддержку, пошёл нервно курить и учиться реверсингу ;)
 
Да вроде нет там какой то жесткой привязки, в реестр сохраняется путь к DSN и логин с паролем.
1770066664192.webp

при создании подключения тоже вроде ничего такого..
1770067173062.webp
 
Последнее редактирование:
Оверпостинг
Да вроде нет там какой то жесткой привязки, в реестр сохраняется путь к DSN и логин с паролем.
Посмотреть вложение 93333

при создании подключения тоже вроде ничего такого..
Посмотреть вложение 93334
Пока что не могу судить точно ли оно так, но то что он не подключается - 100%. тест при создании DSN проходит успешно. однако в гидре я заметил что как-раз где-то в этом районе AuthD запрашивает окружение и указывает тип объекта подключения(при odbc_SetAttr...(ODBC_ATTRIBUTE.. == 0x2)), вот как раз-таки ODBC_ATTRIBUTE.. == 0x2. Возможно тут и кроется загвоздка, вполне реальна ситуация что данные методы расходятся у разных баз данных, хотя судя по названию все эти методы должны делать одно и тоже раз это "OpenConnectivity". После успешного создания подключения AuthD пихает его в std::vector.
К стати, спасибо огромное rmx за гидру, IDA даже и рядом не валялся, по крайней мере его бесплатная версия, жаль только что рёву к нему подключить не получилось, но мне пока и этого достаточно =)

C:
/* bool __cdecl BlowFishDecryptPacket(unsigned char *,__int64 &,int) */
bool __cdecl BlowFishDecryptPacket(uchar *pkgBody,__int64 *param_2,int pkgSize)
{
    bool result;
    int i;
    uint checksumm;
    if ((pkgSize & 7U) == 0) {
        _BlowfishDecrypt((uint *)pkgBody,pkgSize);
        checksumm = 0;
        for (i = 0; i < pkgSize + -8 >> 2; i = i + 1) {
            checksumm = checksumm ^ *(uint *)(pkgBody + i * 4);
        }
        if (*(uint *)(pkgBody + i * 4) == checksumm) {
            result = true;
        }
        else {
            result = false;
        }
    }
    else {
        result = false;
    }
  return result;
}
Реально - чудеса =D
 
Последнее редактирование:
а кстати, не попробовал исходники Мастера Томы ? там же был authD, он так же себя ведёт?
 
Последнее редактирование:
а кстати, не попробовал исходники Мастера Томы ? там же был authD, он так же себя ведёт?
Загрузил, но пока не пробовал, как будет время - гляну. Через wine в Debian не коннектится вообще, MSSQL прекрасно встал, а эти никак не хотят работать. Уже что только не пробовал. Видимо - придётся таки прям под Linux переписывать AuthD и CacheD =D
По сути мне от туда только пакеты AuthD->L2Server и обратно нужны, остальное - мелочь. По идее(как мне видится) они обмениваются только сессионными ключами, потому что сам сервер тоже подгружает через cached данные о пользователе. Попробую реализовать AuthD, если всё норм пойдёт то и остальное подтянется.
 
Последнее редактирование:
some_gleech.webp
Есть у кого-нибудь идеи по данному поводу? По-моему тут какой-то сюр. Баг тысячелетней давности, хорошо если он окажется в пределах от 0 до 4, а если нет? :ROFLMAO:
some_gleech1.webp
Видимо просто глюк декомпилятора, в бинарнике всё путём.
 
Последнее редактирование:
в теории cached можно вообще выкинуть, а работу с БД перенести в l2server.правда придется свой пул потоков для этого дела городить + кучу функций переписывать(но там функции небольшие и однотипные).
если сделать все правильно (например инвентарь сохранять только тогда когда перс выходит из игры /или с фиксированным интервалом), то нагрузка на БД даже снизится, ибо кешед прилично долбит базу постоянно сохраняя итемы. а если еще трейд сделать как на яве(чтобы итемы не копировались) то за одно еще кучка дюпов пофиксится :)
 
Назад
Сверху Снизу