Autor Wątek:  Uruchomienie MaSzyny w systemach innych niż Windows  (Przeczytany 2849 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline skejl

  • Wiadomości: 2
    • Zobacz profil
  • Otrzymane polubienia: 7
Uruchomienie MaSzyny w systemach innych niż Windows
« dnia: 11 Maja 2023, 10:43:25 »
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:

git clone git@github.com:Xoov/maszyna.git
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:

cmake --version
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

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make

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:

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

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.

source linuxpython64/bin/activate
pip install pillow==4.0.0

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:

7z x maszyna-r8639.zip
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:

Bad init: failed to create glfw window
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:

@@ -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" );

Po dokonaniu tych zmian zbuduj program jeszcze raz.

Jeśli zobaczysz:

ImportError: No module named site
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.
« Ostatnia zmiana: 24 Maja 2023, 13:16:37 wysłana przez skejl »

Offline jakubg1

  • Wydział Repozytorium
  • Wiadomości: 1606
  • MaSzyna ma szynę, szyna ma MaSzynę - na kołach.
    • Zobacz profil
  • Otrzymane polubienia: 1289
Odp: Uruchomienie MaSzyny w systemach innych niż Windows
« Odpowiedź #1 dnia: 11 Maja 2023, 16:37:11 »
W razie czego można uruchomić MaSzynę bez Pythona, ale nie wiem, jakie dokładnie będą tego konsekwencje.
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.

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.
Rainsted jest, tak samo jak Starter, również napisany w Delphi.

Offline Milek7

  • Administrator
  • Wiadomości: 1051
    • Zobacz profil
  • Otrzymane polubienia: 907
Odp: Uruchomienie MaSzyny w systemach innych niż Windows
« Odpowiedź #2 dnia: 14 Maja 2023, 16:51:40 »
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:
virtualenv2 linuxpython64
source linuxpython64/bin/activate
pip2 install pillow
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)
« Ostatnia zmiana: 14 Maja 2023, 16:59:27 wysłana przez Milek7 »

Offline skejl

  • Wiadomości: 2
    • Zobacz profil
  • Otrzymane polubienia: 7
Odp: Uruchomienie MaSzyny w systemach innych niż Windows
« Odpowiedź #3 dnia: 24 Maja 2023, 13:28:39 »
Żadne zmiany w kodzie nie powinny być potrzebne.

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

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.

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



Uzupełniłem i poprawiłem poradnik.
« Ostatnia zmiana: 24 Maja 2023, 13:30:08 wysłana przez skejl »

Offline jakubg1

  • Wydział Repozytorium
  • Wiadomości: 1606
  • MaSzyna ma szynę, szyna ma MaSzynę - na kołach.
    • Zobacz profil
  • Otrzymane polubienia: 1289
Odp: Uruchomienie MaSzyny w systemach innych niż Windows
« Odpowiedź #4 dnia: 15 Stycznia 2024, 21:33:16 »
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.

Lista bibliotek, które musiałem zainstalować na Linux Mint:
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