…czyli walki z Adobe AIR.
Przeglądając The Linux Game Tome natrafiłem na opis gry Dofus. MMORPG, z ładną grafiką, ale bez zbytnich wymagań do sprzętu (grafika 2D) – wyglądało zachęcająco, postanowiłem więc spróbować.
Ściągnąłem instalator, uruchomiłem… i nic, okazuje się że RPMowych dystrybucji nie obsługuje. Jak to tak?! Odpaliłem z opcją ‚–keep’, żeby zobaczyć co jest w środku i ewentualnie zainstalować ręcznie. W środku trochę plików, skrypt instalacyjny, deinstalacyjny i jakaś binarka „UpLauncher”. Spróbowałem odpalić binarkę, brakowało starej wersji libjpeg. W PLDowych CVS na szczęście jest spec, to dobudowałem, doinstalowałem i coś ruszyło. Ruszyło, „uaktualniło grę”, ale odpalić już się nie dało. Okazało się, że czegoś brakuje…
Znalazłem logi (po francusku) i rzeczywiście jakby jakiś plików brakuje. Zajrzałem do skryptu instalacyjnego (komentarze częściowo po francusku) i zrozumiałem, że to miało sobie jeszcze Adobe AIR zainstalować, potem tym Adobe AIR zainstalować grę z plików *.air, a dopiero to ostatecznie jest uruchamiane…
Udałem się więc do Adobe po to całe AIR. Do wyboru paczki ‚deb’, ‚yum’, ‚rpm’ i ‚bin’. Wybrałem ostatnie, nie licząc na kompatybilność tego RPMa z PLD. Okazało się jednak, że to ‚bin’ to niby samo-rozpakowujące-się-archiwum, ale potem i tak próbuje budować i instalować RPM. Budować w PLD tym bardziej nie umie, więc nic z tego nie wyszło. Wziąłem więc paczkę rpm (albo jednak z tego ‚bin’ coś wykopałem, nie pamiętam)… coś się zainstalowało.
Zainstalowanym „Adobe AIR Application Installer” próbowałem zainstalować „Dofus.air” i „Reg.air” jak to miał robić skrypt instalacyjny Dofusa. Nie udało się. Okazało się, że ten cały „application installer” też próbuje jakieś RPMy budować, co mu nie wychodzi. Czemu nie można jak np. z javowymi aplikacjami „java -jar cośtam.jar”? Ja rozumiem, że developerzy postawili sobie za cel zrobić tak, że user dwa razy kliknie w paczkę i mu się zainstaluje jak każda inna aplikacje, ale żeby to osiągnąć strasznie przekombinowali jednocześnie zapewniając sobie kompatybilność tylko z kilkoma konkretnymi dystrybucjami, właściwie uniemożliwiając użycie tego w innych…
W końcu, jakoś strasznie hackując udało mi się to jednak opanować i grę zainstalować tak, że zadziałała. Właściwie zadziałało wszystko poza dźwiękami i urwanymi tekstami NPC już w samej grze (ten drugi problem najwyraźniej doskwiera też innym linuksowym użytkownikom Dofusa). Skoro zadziałało, to sobie trochę pograłem. I spodobało mi się. Prawie że noce nad tym zarywam, jak kiedyś nad Crossfire ;-)
Wciąż jednak nie dawało mi spokoju pytanie: „czy na prawdę nie dałoby się prościej”. I dzisiaj wygooglałem coś takiego: Adobe® AIR on Gentoo Linux. Artykuł ten mówi jak można uruchamiać aplikacje AIR używają ichniejszego SDK. Bez żadnych śmiesznych „instalatorów” próbujących budować paczki. Sprawdziłem, rzeczywiście działa. Przygotowałem też „uproszczoną procedurę” instalacji Dofusa pod prawie każdym Linuksem (poniżej). Co więcej, tym razem udało mi się uzyskać także dźwięk! :-)
Instalacja Dofusa pod ulubioną dystrybucją
- Ściągnijmy Adobe AIR SDK z http://www.adobe.com/cfusion/entitlement/index.cfm?e=airsdk
- Zainstalujmy Adobe AIR SDK (tutaj do /opt, więc potrzebne prawa roota):
mkdir -p /opt/AdobeAIRSDK cd /opt/AdobeAIRSDK tar xjvf AdobeAIRSDK.tbz2 cat >/usr/local/bin/adl <<'EOF' #!/bin/sh exec /opt/AdobeAIRSDK/bin/adl "$@" EOF
- Ściągnij instalator Dofusa dla Linuksa ze strony gry i rozpakuj do tymczasowej lokalizacji. To (i wszystko następne) już z prawami zwykłego użytkownika.
mkdir /tmp/dofus-inst cd /tmp wget http://dl.ak.ankama.com/games/dofus2/setup/DofusInstall.run chmod a+x DofusInstall.run ./DofusInstall.run --keep --noexec --target /tmp/dofus-inst
- Stwórz katalog dla gry (tutaj w
$HOME/Gry/Dofus
) i rozpakuj tam aplikacje AIR:
mkdir -p ~/Gry/Dofus cd ~/Gry/Dofus mkdir -p share/reg cd share unzip /tmp/dofus-inst/Dofus.air cd reg unzip /tmp/dofus-inst/Reg.air cd ../..
- Stwórz pliki wykonywalne dla tych aplikacji:
mkdir -p bin share/reg/bin cat >bin/Dofus << 'EOF' #!/bin/sh exec /opt/AdobeAIRSDK/bin/adl -nodebug ~/Gry/Dofus/share/META-INF/AIR/application.xml ~/Gry/Dofus/share EOF chmod a+x bin/Dofus cat >share/reg/bin/Reg << 'EOF' #!/bin/sh exec /opt/AdobeAIRSDK/bin/adl -nodebug ~/Gry/Dofus/share/reg/META-INF/AIR/application.xml ~/Gry/Dofus/share/reg EOF chmod a+x share/reg/bin/Reg
- Oryginalny instalator robi jakieś dziwne symlinki. Więc i my je zróbmy:
mkdir share/reg/share ln -s ../Reg.swf share/reg/share/Reg.swf ln -s ../content share/reg/share/content
- Teraz skopiujmy pliki z instalatora:
cp /tmp/dofus-inst/UpLauncher share cp /tmp/dofus-inst/games.xml share chmod a+x share/UpLauncher
- I zróbmy skrypt do uruchamiania gry:
cat > start-dofus << 'EOF' #!/bin/sh cd ~/Gry/Dofus/share exec ./UpLauncher EOF chmod a+x start-dofus
- Teraz można spróbować uruchomić grę:
./start-dofus
To może się nie udać, jeśli w systemie brakuje odpowiednich bibliotek w odpowiednich wersjach. W PLD Th np. trzeba było zbudować i doinstalować
libjpeg6
.Po doinstalowaniu brakujących bibliotek powinien się Launcher uruchomić i zacząć „uaktualniać” grę. Gdy Launcher ściągnie najnowszą wersję Dofusa będzie go można uruchomić.
Adobe Air 1.x robi potworne rzeczy. W skrócie przychodzi z własnym rpmbuild, który ma wymuszoną nazwę wszystkich pakietów wyjściowych na package.deb w skutek czego próba budowania z włączonym debuginfo niszczy plik z pakietem. Poza tym jest tam coś nie tak z metodą uruchamiania sudo.
PolubieniePolubienie
*wskutek
PolubieniePolubienie
Ja walczyłem z Adobe AIR 2.0, wcale nie lepiej – naprawdę nieźle hackowałem, żeby z Adobe AIR z oryginalnego pakietu coś odpalić. Za to ten knif z SDK który opisałem powyżej to już całkiem normalne (można by i normalnego RPMa z tego zrobić)… tyle, że chyba nie do końca z licencją zgodnie – według licencji SDK jest tylko do rozwijania oprogramowania… więc chyba nie do uruchamiania już gotowego 😉
PolubieniePolubienie