Nekem fantasztikusan kezdődött az új év, mert rátaláltam az OpenRA kezdeményezésre. Már fiatalabb koromban is a stratégiai játékokban több sikerem volt, így sokkal inkább preferáltam a hosszabb és megfontoltabb döntéseket igénylő szórakozást, mint a vad lövöldözést és száguldozást. A gyerekkorom nagy stratégiai játékainak számított a DUNE 2000 vagy a Command and Conquer később pedig a C&C: Red Alert. Nagyon sikeres és hihetetlen jó játékok voltak ezek a maguk idejében. Véleményem szerint, a mai napig kihat az a mechanika és struktúra, amiket ezek a játékok lefektettek. Persze minden kornak megvannak a maga limitációi. Ha manapság akarnánk játszani ezekkel a játékokkal, akkor a hatalmas monitorokon, és modern 64 bites operációs rendszereken már nem nyújtanák a régi élményt, csupán egy paródiáját a régi csodáknak. Persze van megoldás!

OpenRA

OpenRA_1

Az OpenRA egy kiadótól független saját szerveződés. A készítők gyakorlatilag teljesen újraírták a programot, megtartva az eredeti pixel grafikát, hangulatot, járműveket, és játékstílust. Viszont a játék portolva lett modern Windows, Linux és OSX operációs rendszerekre is. Nem csak, hogy futnak az új gépeken, de képesek kezelni a hatalmas felbontásokat is.

(Nekem most az Apple Thunderbolt kijelzőmön mindegyik pálya egy az egyben látszik, nem kell scroll-ozni a térképen. Az érzés pedig hihetetlen!)

Természetesen ez az új release nem tartalmazza az eredeti kampány, egyjátékos játékmenetet. Csupán mások ellen vagy saját gépünkön a számítógép által megszemélyesített társak ellen játszhatunk. Cserébe az OpenRA három játékot is tartalmaz. Egész pontosan a játék motorja ugyan az. Csupán az egységek, épületek, és az egész játék grafikáját szabályozó MOD-ok választhatóak. Tehát három játék közül választhatunk indítás után:

– C&C (Tiberian Dawn)
– C&C: Red Alert
– Dune 2000

OpenRASlogan

Számomra a Mod-ok ténylegesen külön játékot jelentettek, és nem csak külön skin-eket. Mindezt pedig INGYEN!!!

Dedicated Linux Server

Külön öröm számomra, hogy azon túl, hogy a játék játszható Linux-on is, lehetőségünk van nyilvános OpenRA szervert is futtatni. Egy kicsit bonyolult, és jómagam saját script-eket is fejlesztettem hozzá, ezért úgy gondoltam lejegyem hogyan installáltam és futtatom a játékot.

A következő procedúra egy Ubuntu 14.04 rendszeren történt.

Hozzunk létre egy felhasználót, ami a játék szerverét fogja futtatni.

root@server# useradd -md /home/openra openra
root@server# passwd openra

Telepítsük a szükséges dependenciákat. A játéknak MONO futtató környezetre van szüksége. Az én esetemben ezek a függőségek elegendőek voltak.

root@server# apt-get install libmono-system-core4.0-cil libmono-system-windows-forms4.0-cil xdg-utils zenity libopenal1 libopenal-data libalut0 libcg libfluidsynth1 libmad0 libmikmod2 libmono-accessibility2.0-cil libmono-corlib2.0-cil libmono-data-tds2.0-cil libmono-i18n-west2.0-cil libmono-messaging2.0-cil libmono-posix2.0-cil libmono-security2.0-cil libmono-sharpzip2.84-cil libmono-sqlite2.0-cil libmono-system-data-linq2.0-cil libmono-system-data2.0-cil libmono-system-messaging2.0-cil libmono-system-runtime2.0-cil libmono-system-web2.0-cil libmono-system2.0-cil libmono-wcf3.0a-cil libmono-webbrowser2.0-cil libmono-winforms2.0-cil libmono2.0-cil libsdl-gfx1.2-4 libsdl-image1.2 libsdl-mixer1.2 libsdl-net1.2 libsdl-ttf2.0-0 libsmpeg0 

Töltsük le a legfrissebb release-t a hivatalos oldalról: http://www.openra.net/download/
Majd telepítsük a csomagot.

root@server# dpkg -i /tmp/openra_release.20141029_all.deb

Az első indítást kézzel érdemes megtenni, mert ez az első indítás fogja legenerálni a szükséges konfigurációs állományokat.

Erre én írtam egy saját script-et, ezt létre kell hoznunk kézzel:

# cat /usr/games/openra-server

#!/bin/bash
Name="Dedicated-Server"
Mod="ra"
Dedicated="True"
DedicatedLoop="True"
ListenPort=1234
ExternalPort=1234
AdvertiseOnline="False"

BINDIR=$(dirname $(readlink -f $0))
ROOTDIR="${BINDIR%/usr/games}"
EXECDIR="${ROOTDIR}/usr/lib"
cd "${EXECDIR}/openra"


while true; do
     mono --debug OpenRA.Game.exe Game.Mod=$Mod Server.Dedicated=$Dedicated Server.DedicatedLoop=$DedicatedLoop \
     Server.Name=$Name Server.ListenPort=$ListenPort Server.ExternalPort=$ExternalPort \
     Server.AdvertiseOnline=$AdvertiseOnline
done

Ez gyakorlatilag beállítja, hogy milyen porton fog hallgatni a szerver, és hogy DEDIKÁLT módban fusson, folyamatosan, és ne hirdesse magát a hivatalos oldalra.

Ha ez megvan akkor tegyük futtathatóvá az állományt és kézzel indítsuk el.

root@server# chmod +x /usr/games/openra-server

Váltsunk az elkészített felhasználóvá.

root@server# su - openora
openora@server$ /usr/games/openra-server

openra2

Egy klienssel megpróbálhatunk csatlakozni hozzá. Ha működik, akkor CTRL + C billentyű kombinációval megszakíthatjuk a szerver program futtatását.
A sikeres futást követően lépjünk be az újonnan létrehozott felhasználó könyvtárába.

openora@server$ cd /home/openra

Ebben a könyvtárban kell látnunk egy újonnan létrejött, és titkos .openra folder-t.

openora@server$ cd /home/openra/.openra

openra3

Ennek a könyvtárnak a tartalma fog felelni a jövendőbeli szerverünkért. a motd.txt-t szabadon szerkeszthetjük, ez fogja tartalmazni a szerverre belépők üdvözlő üzenetét. A settings.yaml pedig felel a szerver beállításaiért.

openra4

Ahogy az előbb láthattuk a frissen létrehozott file nem képes magától a háttérben futni, így én a következő scriptet hoztam létre. Ezt újra root-ként kell létrehozni a rendszer scriptek közé:

# vi /etc/init.d/openra

#!/bin/sh
### BEGIN INIT INFO
# Provides:          openra_ded
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Initscript for an OpenRA server
# Description:       Starts a dedicated OpenRA server and allows
# it to be started/stopped/restarted with init.d
### END INIT INFO

# Author: Dan9550

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="OpenRA dedicated server"
NAME="openra_ded"

# The executable to use:
DAEMON=/usr/games/openra-server

SCRIPTNAME=/etc/init.d/$NAME

#The game will be executed as this user. NEVER execute as root
USERNAME=openra

#USERNAME must have write access to the HOMEDIR
HOMEDIR=/home/$USERNAME

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

. /lib/init/vars.sh

. /lib/lsb/init-functions

do_start()
{
        daemon --name="$NAME" --user=$USERNAME --running && return 1
        daemon --name="$NAME" --respawn --user=$USERNAME --output=/home/openra/openra_ded.out --env=HOME=$HOMEDIR  $DAEMON > /dev/null
}

do_stop()
{
        daemon --name=$NAME --user=$USERNAME --running ] || return 1
        daemon --name=$NAME --user=$USERNAME --stop
        pkill -u $USERNAME

}

do_reload() {
        return 0
}

case "$1" in
  start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                log_end_msg 1
                ;;
        esac
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 3
        ;;
esac

Adjunk neki futtatási jogot.

# chmod +x /etc/init.d/openra 
# apt-get install daemon

Majd ezzel a scriptel indítsuk az OpenRA szervert. Ez már a háttérben fogja futtatni a játék szervert. Ki is probálhatjuk most.

# /etc/init.d/openra start

openra1

Majd adjuk hozzá ezt a script-et alapértelmezett futási szintekhez. Így a gép indulásával automatikusan indulni fog a játék szerver is.

# cd /etc/init.d
# update-rc.d openra defaults

A szerver frissítése

Az OpenRA csapat publikál deb csomagokat is, de sajnos nincsen saját repository-juk. Így nekünk kell frissíteni manuálisan a szervert. Forog az interneten néhány ehhez hasonló script, de sajnos vagy nem működtek, vagy nem pont azt csinálták amit kellene. Így én írtam egyet. Ezt szintén az Ubuntu 14.04-es rendszeren teszteltem.

Alapvetően a következőt csinálja:

– letölti a /tmp -be a legfrisebb deb csomagot a weboldalról
– megnézi a letöltött csomagnak milyen a verziója
– megnézi a telepített csomag verzióját
– ha a telepített verzió régebbi mint a letöltött akkor telepíti és újraindítja a szervert a már bemutatott indító script segítségével
– letörli a /tmp alá letöltött file-t

# vi /usr/games/openra-update

#! /bin/bash

# Attempts to download new build
URL=$(wget 'http://openra.res0l.net/download/linux/deb/' -o /dev/null -O - | grep deb | grep release | awk -F\" '{print $2}')
wget $URL -O /tmp/oraupdate.deb

# New version
NEW_VERSION=$(dpkg -I /tmp/oraupdate.deb | awk '$1=="Version:" {print $2}' | sed 's|.release||')

# Installed version 
INSTALLED_VERSION=$(dpkg -l | awk '$2=="openra" { print $3 }' | sed 's|.release||')

# If available is newer then install
if [ "$NEW_VERSION" -gt "$INSTALLED_VERSION" ]
then
	# Stop the service
	/etc/init.d/openra stop
	# Installs new build
	dpkg -i /tmp/oraupdate.deb
	# Start the service
	/etc/init.d/openra start
fi

# Removes the package
rm /tmp/oraupdate.deb

A script-et tegyük futtathatóvá.

# chmod +x /usr/games/openra-update

Majd tegyük ezt a scriptet a cron job-ok közé.

# crontab -e

55 5 * * * /usr/games/openra-update

E szerint a script minden hajnal 5:55-kor fog futni.

Xorp OpenRA szerver

A game.xorp.hu oldalon természetesen megjelent az OpenRA szerver is, így ha valaki hálózatban kíván játszani másokkal, az igénybe veheti ezt a szervert is. Részletek itt.