Symulator EU07 (i nie tylko) > Symulator

 Uruchomienie MaSzyny w systemach innych niż Windows

(1/1)

skejl:
Instrukcja oznajmia, że najnowsze wersje MaSzyny działają wyłącznie pod Windowsem.  Jest to bzdura.  Po wprowadzeniu drobnych poprawek udało mi się pomyślnie skompilować i uruchomić symulator w systemie GNU/Linux, konkretnie w Fedorze.  Myślę, że pod MacOS-em też może się udać, lecz nie mam jak tego sprawdzić.

Poniżej przedstawiam kroki, które należało w tym celu wykonać.  Zakładam, że chętni do skorzystania z tych porad mają jako takie obycie z Linuksem i instalowanie dodatkowych pakietów, wprowadzanie komend tekstowych oraz kompilowanie programów ze źródeł są im niestraszne.  Bez tego założenia ten poradnik bardzo by się wydłużył.

Na wstępie też zaznaczam, że tak przygotowana MaSzyna będzie bez programów Starter oraz Rainsted.

Kompilowanie symulatora

1. Pozyskanie kodu źródłowego

Ten należy pobrać z jednego z poniższych repozytoriów:

- https://github.com/Xoov/maszyna
- https://github.com/eu07/maszyna (ciut starsza wersja)
- https://github.com/Milek7/maszyna

Na przykład w ten sposób:


--- Kod: ---git clone git@github.com:Xoov/maszyna.git
--- Koniec kodu ---

2. Zainstalowanie potrzebnych bibliotek

Nie podam pełnej listy choćby z tego powodu, że w różnych dystrybucjach Linuksa te pakiety będą trochę inaczej nazwane.  CMake, który zostanie użyty w kolejnych krokach, będzie się sam dopominał o brakujące rzeczy.  Wówczas trzeba będzie po prostu znaleźć stosowny pakiet w repozytoriach i go zainstalować.  Należy pamiętać, że potrzebne będą też pliki nagłówkowe owych bibliotek.  W wielu dystrybucjach pliki binarne i nagłówkowe są umieszczane w osobnych pakietach, ten drugi można rozpoznać po przyrostku „dev” lub „devel”.

Niektóre z bibliotek można też po prostu wyłączyć przekazując odpowiednie parametry do CMake'a.

3. Zainstalowanie CMake'a

Jest duża szansa, że nie trzeba nic instalować.  Można to sprawdzić następującym poleceniem:


--- Kod: ---cmake --version
--- Koniec kodu ---

4. Zainstalowanie Pythona

MaSzyna wymaga Pythona w wersji 2.7.  Jest to wersja dość leciwa i w związku z tym może być trudno dostępna w niektórych dystrybucjach.  W razie czego można uruchomić MaSzynę bez Pythona, ale nie wiem, jakie dokładnie będą tego konsekwencje.

5. Skonfigurowanie i zbudowanie MaSzyny


--- Kod: ---mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
--- Koniec kodu ---

Parametr „-DCMAKE_BUILD_TYPE=Debug” podany do CMake'a jest opcjonalny, ale sprawi, że symulator wypisze trochę informacji, które być może pomogą rozwiązać ewentualne problemy.  Z drugiej strony może on negatywnie wpływać na szybkość działania symulatora.

Parametrami przekazywanymi do CMake'a można też wyłączać niektóre funkcjonalności, na przykład „-DWITH_OPENVR=OFF” wyłączy całkiem OpenVR (tym samym nie trzeba będzie instalować tej biblioteki). Z kolei „-DWITH_PYTHON=OFF” wyłączy całkiem Pythona.

6. Przygotowanie środowiska Pythona

MaSzyna spodziewa się izolowanego środowiska Pythona w katalogu, którego nazwa jest określona w pliku źródłowym „PyInt.cpp” i zależy od systemu operacyjnego.  W przypadku 64-bitowego Linuksa jest to „linuxpython64”.  W celu utworzenia tego środowiska, posługujemy się modułem virtualenv.  Zakładając, że Python 2.7 jest dostępny pod nazwą python2, robimy to w katalogu „build” w ten sposób:


--- Kod: ---python2 -m virtualenv -p $(which python2) linuxpython64

--- Koniec kodu ---

Następnie aktywujemy stworzone przed chwilą środowisko i instalujemy bibliotkę Pillow w wersji 4.0.0.  Są nowsze wersje, ale wersja dla Windows korzysta z tej właśnie.  Skrypt „activate” jest napisany ściśle pod Basha i należy go uruchamiać wyłącznie w tej powłoce.  Niemniej jest on potrzebny tylko do zainstalowania biblioteki, bo MaSzyna aktywuje środowisko Pythona po swojemu.  Skrypt m.in. ustawia zmienną $PATH, tak że właściwy program pip jest dostępny pod tą właśnie nazwą, a nie np. pip2.


--- Kod: ---source linuxpython64/bin/activate
pip install pillow==4.0.0

--- Koniec kodu ---

7. Skopiowanie dodatkowych plików

Jest od groma różnych potrzebnych plików, których nie znajdziecie w powyższych repozytoriach.  Są to różne tekstury, modele pojazdów, dźwięki itd.  Można je pobrać w formie paczek albo skopiować z zainstalowanej uprzednio wersji dla Windowsa.

Precyzując, chodzi o katalogi „data”, „dynamic”, „fonts”, „inne”, „lang”, „models”, „przepisy_kolejowe”, „python”, „scenery”, „screenshots”, „scripts”, „shaders”, „sounds”, „textures”, a także o pliki z rozszerzeniem „.ini”.  Wszystkie należy umieścić w katalogu „build”.  Wprawdzie niektóre z nich można by pominąć, ale akurat te, które zajmują niewiele miejsca na dysku, więc nie będę rozwijał tematu.  Katalog „python” jest potrzebny, mimo że właśnie skonfigurowaliśmy środowisko.  Jest w nim jeden skrypt, bez którego MaSzyna odmówi włączenia Pythona.

Paczki publikowane są w forumowym dziale „Publikacje” przy okazji kolejnych wydań MaSzyny.  W przypadku wersji 23.04 paczki noszą nazwy „maszyna-r8639.zip” oraz „m2304_exefiles_common.zip”.  Systemowy unzip nie poradzi sobie z wypakowaniem wszystkich plików, ale można skorzystać z 7-zipa:


--- Kod: ---7z x maszyna-r8639.zip
--- Koniec kodu ---

8. Ustawienia

Krok ten można pominąć, ale jeśli MaSzyna będzie wyglądać szpetniej niż na Windowsie, to właśnie z tego powodu.  Można to naprawić wpisując odpowiednie rzeczy do pliku eu07.ini, ale temat ten wykracza poza ramy niniejszego poradnika, jest za to szeroko opisany na MaSzynowym Wiki: https://wiki.eu07.pl/index.php/Plik_konfiguracyjny_EU07.INI

Przede wszystkim warto rozważyć usunięcie ustawień „sceneryfile” oraz „humanctrlvehicle”, co spowoduje uruchomienie prostszego odpowiednika Startera.

Uruchamianie

Plik wykonywalny znajdziesz w podkatalogu „bin”.

Rozwiązywanie problemów

Jeśli zobaczysz:


--- Kod: ---Bad init: failed to create glfw window
--- Koniec kodu ---

Znaczy to, że MaSzyna ma jakiś dziwny problem z ustaleniem rozmiaru okna początkowego.  W pliku application.cpp znajdź wywołanie funkcji „window”, a następnie zastąp „Global.window_size.x” i „Global.window_size.y” jakimiś liczbami, np. 800 i 600.  Wartości te definiują początkowy rozmiar okna programu, które można później zmaksymalizować.

W wersji, którą ja kompilowałem, wyglądało to tak:


--- Kod: ---@@ -869,7 +869,7 @@ eu07_application::init_glfw() {
     }
 
     auto *mainwindow = window(
-        -1, true, Global.window_size.x, Global.window_size.y, ( Global.bFullScreen ? monitor : nullptr ), true, false );
+        -1, true, 800, 600, ( Global.bFullScreen ? monitor : nullptr ), true, false );
 
     if( mainwindow == nullptr ) {
         ErrorLog( "Bad init: failed to create glfw window" );
--- Koniec kodu ---

Po dokonaniu tych zmian zbuduj program jeszcze raz.

Jeśli zobaczysz:


--- Kod: ---ImportError: No module named site
--- Koniec kodu ---

Znaczy to, że MaSzyna nie może znaleźć katalogu z izolowanym środowiskiem Pythona.  W najgorszym razie możesz całkiem wyłączyć wsparcie dla Pythona.

Starter i Rainsted

Starter jest napisany w Delphi i zadziała tylko pod Windowsem.  Być może udałoby się go skompilować Lazarusem, ale na pewno trzeba by podmienić biblioteki VCL na LCL.  Do tematu Rainsteda w ogóle nie podchodziłem.

Powitanie

Na zakończenie witam wszystkich serdecznie, bo to jest mój pierwszy wpis na tym forum.

jakubg1:

--- Cytat: skejl w 11 Maja 2023, 10:43:25 ---W razie czego można uruchomić MaSzynę bez Pythona, ale nie wiem, jakie dokładnie będą tego konsekwencje.

--- Koniec cytatu ---
W niektórych pojazdach będzie brakować ekranów komputera pokładowego czy elektronicznych prędkościomierzy, a na peronach nie będą poprawnie wyświetlać się tablice przyjazdów oraz te z nazwami stacji. Poza tym nie powinno być większych problemów.


--- Cytat: skejl w 11 Maja 2023, 10:43:25 ---Starter jest napisany w Delphi i zadziała tylko pod Windowsem.  Być może udałoby się go skompilować Lazarusem, ale na pewno trzeba by podmienić biblioteki VCL na LCL.  Do tematu Rainsteda w ogóle nie podchodziłem.

--- Koniec cytatu ---
Rainsted jest, tak samo jak Starter, również napisany w Delphi.

Milek7:
Najnowsza jest ta gałąź: https://github.com/Milek7/maszyna/tree/sim
Żadne zmiany w kodzie nie powinny być potrzebne.
Do działania oczywiście potrzebna jest paczka, najlepiej po prostu ściągnąć to co jest wyszczególnione w publikacjach: maszyna-r8639.zip oraz m2304_exefiles_common.zip Reszta wypisanych plików jest zależna od systemu więc się nie przyda.
Należy pamiętać że dla pełnej wydajności należy kompilować z -DCMAKE_BUILD_TYPE=Release
Python powinien mieć w katalogu paczki katalog virtualenv z zainstalowanym pillow:

--- Kod: ---virtualenv2 linuxpython64
source linuxpython64/bin/activate
pip2 install pillow
--- Koniec kodu ---
Z wyłączonym pythonem po prostu nie będą działać ekrany w pojazdach. (da się go wyłączyć przy kompilacji jak i wpisem w ini)
W zasadzie głównym problemem pełnego wsparcia innych platform jest brak starterów. A jak już się używa startera przez Wine, to w zasadzie równie dobrze można uruchomić przez Wine wszystko.
Można usunąć z ini wpis z domyślną scenerią, wtedy exe uruchamia wbudowany interfejs wyboru scenerii, ale jest on obecnie dosyć podstawowy w porównaniu do innych.
Na MacOS też można uruchomić, ale z tamtejszą obsługę OpenGL bywa różnie. (np. z moich doświadczeń renderer shaderowy miał mocne problemy wydajnościowe na M1)

skejl:

--- Cytat: Milek7 w 14 Maja 2023, 16:51:40 ---Żadne zmiany w kodzie nie powinny być potrzebne.

--- Koniec cytatu ---

U mnie akurat były potrzebne, ale jeszcze nie znam przyczyny. W każdym razie ustawienie początkowego rozmiaru okna pomogło.


--- Cytat: Milek7 w 14 Maja 2023, 16:51:40 ---Można usunąć z ini wpis z domyślną scenerią, wtedy exe uruchamia wbudowany interfejs wyboru scenerii, ale jest on obecnie dosyć podstawowy w porównaniu do innych.

--- Koniec cytatu ---

Wprawdzie pozwala na mniej i jest mniej przejrzysty, ale też jest całkiem sensowny.


Uzupełniłem i poprawiłem poradnik.

jakubg1:

--- Cytat: skejl w 11 Maja 2023, 10:43:25 ---2. Zainstalowanie potrzebnych bibliotek

Nie podam pełnej listy choćby z tego powodu, że w różnych dystrybucjach Linuksa te pakiety będą trochę inaczej nazwane.  CMake, który zostanie użyty w kolejnych krokach, będzie się sam dopominał o brakujące rzeczy.  Wówczas trzeba będzie po prostu znaleźć stosowny pakiet w repozytoriach i go zainstalować.  Należy pamiętać, że potrzebne będą też pliki nagłówkowe owych bibliotek.  W wielu dystrybucjach pliki binarne i nagłówkowe są umieszczane w osobnych pakietach, ten drugi można rozpoznać po przyrostku „dev” lub „devel”.

Niektóre z bibliotek można też po prostu wyłączyć przekazując odpowiednie parametry do CMake'a.

--- Koniec cytatu ---

Lista bibliotek, które musiałem zainstalować na Linux Mint:

--- Kod: ---sudo apt install cmake build-essential libgl1-mesa-dev libglew-dev libglfw3-dev python2-dev libpng-dev libopenal-dev libluajit-5.1-dev libserialport-dev libsndfile1-dev

--- Koniec kodu ---

Nawigacja

[0] Indeks wiadomości

Idź do wersji pełnej
Powered by Advanced Topic Prefix Pro
Powered by SMFPacks Likes Pro Mod