Bug [789-805] не работает linux-демон

Автор темы #1
Дата рег
2 Июн 2013
Сообщения
63
Симпатии
18
Линукс-сервер не взлетает на CentOS 7 x64 в docker-контейнере с образом ubuntu:latest

Дамп
Код:
Message
		curFile.IsLoaded()
 
Application
		Name		FOnlineServer
		Version	 744
		OS		  Linux / 3.10.0-327.36.1.el7.x86_64 / #1 SMP Sun Sep 18 13:04:29 UTC 2016
		Timestamp   12.01.2017 20:51:40
 
Thread 'Main' (139963315373824, current)
		0			 0x99d232 /fo/Binaries/Server/FOnlineServerDaemon64() [0x99d232]
		1			 0x99cdbb CreateDump(char const*, char const*) + 70
		2			 0x99d716 RaiseAssert(char const*, char const*, int) + 253
		3			 0x9a1a17 FilesCollection::GetNextFile(char const**, char const**, char const**, bool) + 155
		4			 0x9cf812 Script::ReloadScripts(char const*) + 294
		5			 0xb758a7 FOServer::InitScriptSystem() + 571
		6			 0xb3d3f0 FOServer::InitReal() + 292
		7			 0xb3d2b6 FOServer::Init() + 30
		8			 0xa9f5cc /fo/Binaries/Server/FOnlineServerDaemon64() [0xa9f5cc]
		9			 0xa0dc63 /fo/Binaries/Server/FOnlineServerDaemon64() [0xa0dc63]
		10	  0x7f4bc0e3b6ba /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f4bc0e3b6ba]
		11	  0x7f4bbfc2382d clone + 109
лог демона
Код:
[00:000] FOnline server daemon, version 744.
[00:000] Command line '-WorkDir /fo/Binaries/Server/ -AddConfig /fo/Binaries/Server/FOnline.cfg'.
[00:001] ***   Starting initialization   ****
[00:002] Script system initialization...
[00:008] ERROR : Info : reflection::type typeof::opImplConv() : Line 0.
[00:008] ERROR : Error : Don't support returning type 'reflection::type' by value from application in native calling convention on this platform : Line 0.
[00:008] ERROR : Info : reflection::type type::get_baseType() const : Line 0.
[00:008] ERROR : Error : Don't support returning type 'reflection::type' by value from application in native calling convention on this platform : Line 0.
[00:008] ERROR : Info : reflection::type typeof::get_baseType() const : Line 0.
[00:008] ERROR : Error : Don't support returning type 'reflection::type' by value from application in native calling convention on this platform : Line 0.
[00:008] ERROR : Info : reflection::type type::getInterface(uint) const : Line 0.
[00:008] ERROR : Error : Don't support returning type 'reflection::type' by value from application in native calling convention on this platform : Line 0.
[00:008] ERROR : Info : reflection::type typeof::getInterface(uint) const : Line 0.
[00:008] ERROR : Error : Don't support returning type 'reflection::type' by value from application in native calling convention on this platform : Line 0.
[00:016] Reload scripts...
[00:016] Runtime assert: curFile.IsLoaded() in FileManager.cpp (993)
 
Автор темы #4
Дата рег
2 Июн 2013
Сообщения
63
Симпатии
18
Обычный сервер работает нормально?
Я взял у скайкаста пустые модули и конфиги, с которыми у него windows-сервер работает нормально (клиент коннектится к нему), и расположил их в правильных директориях, а так же указал нужный воркдир и файл конфига в параметрах демона, удостоверился в том, что конфиг читается демоном и сервер находит модули (без модулей демон ругается сообщениями "не могу найти модуль такой-то").
 
Дата рег
16 Сен 2011
Сообщения
208
Симпатии
72
Обычный сервер как работает, с гуем который.
 
Автор темы #7
Дата рег
2 Июн 2013
Сообщения
63
Симпатии
18
Раздуплился, работает в докере, полет нормальный. Попробую как-то автоматизировать сборку и завернуть туда Tawaruk-ово хозяйство
 
Автор темы #8
Дата рег
2 Июн 2013
Сообщения
63
Симпатии
18
Залил правку для
ERROR : Error : Don't support returning type 'reflection::type' by value from application in native calling convention on this platform : Line 0.
https://xp-dev.com/sc/change/76003/767
Пытаюсь запустить вот это - https://github.com/Tawaruuk/FOnline-Example. Со слов Cracker-а и Tawaruk-а - оно работоспособно, но:

1. 789 работает только FOnlineServer64, FOnlineServerDaemon64 с теми же настройками вылетает, оставляя в логе следующее:
Код:
[00:002] FOnline server daemon, version 789.
[00:002] Command line '-WorkDir ./Server -AddConfig ../FOnline.cfg'.
[00:006] Starting initialization
[00:006] Script system initialization...
2. Этот же пример, обновленный до 805, и запускающийся на винде (со слов Крекера), не взлетает на Linux, создается ощущение, что бинари для Linux не рабочие (оба, демон и гуи-сервер) - они вылетают без создания лога и файла с версией, но если указать неверный путь к FOnline.cfg - будет дамп и ошибка о том, что сервер не может найти ProjectFiles. Пути по-разному пробовал указывать, с точками, без точек, относительные, абсолютные. Думаю проблема в нерабочих бинарниках. На 805 то же самое. Linux-сервер с гуи работает, демон - нет.

Код:
[00:000] FOnline server daemon, version 805.
[00:008] Command line '-WorkDir ./Server -AddConfig ../FOnline.cfg'.
[00:022] ***   Starting initialization   ***
[00:022] Storage : Initialize at 'Memory'.
[00:022] Script system initialization...
[00:030] Reload scripts...

Пробовал как в контейнере Ubuntu 16.04, так и на обычной виртуалке с Ubuntu 18.04 с гуи
 
Последнее редактирование:
Автор темы #10
Дата рег
2 Июн 2013
Сообщения
63
Симпатии
18
Неа, стартует, появляется вышеприведенный лог, а потом демон вываливается с exit-code 0. Есть только этот лог и version.txt с номером ревизии в воркдире. Если запускать сервер с гуями с точно такими же настройками - он запускается. Я соберу автодеплой окружения на docker-compose на днях, если это как-то поможет.
 
Дата рег
16 Сен 2011
Сообщения
208
Симпатии
72
Попробуй еще указать абсолютные пути в WorkDir и AddConfig.
 
Автор темы #13
Дата рег
2 Июн 2013
Сообщения
63
Симпатии
18
Попробуй еще указать абсолютные пути в WorkDir и AddConfig.
Пробовал, много всего перепробывал, абсолютные пути, точки, кавычки, слеши в разные стороны. Если указываешь неправильный путь, он вываливается с дампом о том, что в конфиге не указан ProjectFiles (или если он действительно не указан). Пробовал то же самое с путями подключения модулей, в этом случае ругается по-другому, как-то так:

Код:
[00:000] FOnline server daemon, version 789.
[00:000] Command line '-WorkDir /fonline/Server -AddConfig /fonline/FOnline.cfg'.
[00:005]	Starting initialization
[00:005] Script system initialization...
[00:013] Reload scripts...
[00:013] No scripts found.
[00:013] Reload scripts fail.
[00:013] Initialization fail!
На 805-й тоже пробовал, просто под рукой лог от 789. Из этого я делаю вывод, что с путями все тип-топ, во всяком случае модули он находит и пытается их кушать.

Пока что я из гуй-сервера сделал своего рода демон, вкорячив VNC в соседний контейнер, но есть одна беда: он сейвит логи только по нажатию "Save log", можно его заставить как-то писать их в файл автоматически? (потому что вьювер логов и дампов я тоже вкорячил, в еще один соседний контейнер :D)




Сейчас вкорячиваю веб-сервер для раздачи клиента и навожу hardening, чуть позже опубликую инструкцию с быстрым запуском примера от Tawaruk на любой линукс-системе одной командой. Есть идея написать веб-враппер для админ-консоли (она живая вообще?). Нужно чтобы было так:
  • положил или просинхронизировал код проекта в директорию на любой линукс-хост
  • нажал кнопку и получил поднявшийся сервер со всем нужным фаршем в браузере (логи, дампы, управлятор, ссылку на клиенты и веб)
-----
МЕХАНОТАВОР подсказал из зала, что можно подебажить процесс strace-ом и предоставить больше информации, чем сегодня и попробую заняться.
 
Последнее редактирование:
Дата рег
16 Сен 2011
Сообщения
208
Симпатии
72
Тут можешь взять пример странички для раздачи клиента:
HTML:
<!doctype html>
<html lang="en-us">
  <head>
	<link rel="shortcut icon" href="Client.ico">
	<meta charset="utf-8">
	<meta name="Robots" content="NONE">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<style>
	.middle {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	}
	</style>
	<title>Title</title>
  </head>
  <body>
	<div class="middle">
		<div align="center">
			<a href="Web/LastFrontier" style="font-size: 2em;">Play in Browser</a>
			<br>
			<br>
			<a href="Windows/LastFrontier.zip" style="font-size: 2em;">Windows (zip)</a>
			<br>
			<a href="Android/LastFrontier.apk" style="font-size: 2em;">Android (apk)</a>
			<br>
			<a href="Linux/LastFrontier.tar" style="font-size: 2em;">Linux (tar)</a>
		</div>
	</div>
  </body>
</html>
закидываешь этот index.html в папку Client, ну и на веб сервере настраиваешь эту папку само собой.
 
Последнее редактирование: