Od momentu wydania wersji 4.0 (1 kwietnia 2007 r.) Urban Terror jest samodzielną oraz darmową grą.
Co to jest B3? Jak działa? Czy i jak mogę go samodzielnie zainstalować? Na te i wiele innych pytań znajdziesz odpowiedź w tym tekście.
Artykuł opisuje sposób instalacji i konfiguracji zautomatyzowanego narzędzia do administracji serwerem gry Urban Terror - Big Brother Bot, zwanym w skrócie B3. Dowiesz się czym jest B3, poznasz szczegóły jego działania, jakie musisz spełniać wymagania i w końcu jak poprawnie go zainstalować, starając się opisać problemy, które możesz po drodze napotkać. Może nie będę prowadził całą drogę za rękę, ale nie powinien też umknąć żaden aspekt, o który - w razie kłopotów - zawsze możesz zapytać w komentarzach.
1. Czym jest B3?
Big Brother Bot to oprogramowanie open source napisane w języku skryptowym Python służące do szeroko pojętej administracji serwerem gry (nie tylko Urban Terror). Oczywiście może służyć do wielu innych celów, z którymi na pewno B3 utożsamiacie - liczenie fragów, zgonów, doniesionych flag, headshotów. Aby poznać zasadę działania B3, należy najpierw zrozumieć w jaki sposób gra komunikuje się z B3. Proces gry domyślnie zapisuje pewne akcje, które wydarzyły się w grze do pliku zwanego dalej logiem. W logu można znaleźć m.in.: kto się połączył (wraz z parametrami połączenia tj. IP, nick itd.), kto kogo trafił/zabił i z jakiej broni, kto został wykopany, kto doniósł flagę i wiele innych). Każde takie zdarzenie znajduje się w osobnej linii pliku z logiem. Przykładowy fragment znajdziemy poniżej:
10:42 ClientBegin: 14
10:43 Kill: 7 7 10: ^2Equity killed ^2Equity by MOD_CHANGE_TEAM
10:43 ClientUserinfo: 7 \ip\x.x.x.x:27960\name\^2Equity\racered\2\raceblue\2\rate\8000\ut_timenudge\0\cg_rgb\0 0 0\cg_predictitems\0\cg_physics\1\cl_anonymous\0\sex\male\color2\5\color1\4\team_headmodel\*james\team_model\james\headmodel\sarge\model\sarge\snaps\20\gear\GMIARWA\teamtask\0\cl_guid\x\weapmodes\00000110220000020002
10:43 ClientUserinfoChanged: 7 n\^2Equity\t\1\r\2\tl\0\f0\\f1\\f2\\a0\0\a1\0\a2\0
10:43 ClientBegin: 7
10:43 Kill: 19 19 10: DR_Headshot killed DR_Headshot by MOD_CHANGE_TEAM
Każde zdarzenie ma swój określony format. Posiadając tę wiedzę można zatem napisać program, który czyta logi linia po linii i podejmuje odpowiednie akcje na podstawie wydarzeń zaistniałych w grze. Takim programem jest właśnie B3. Skąd zatem jego ograniczenia? Gra nie komunikuje o wszystkim, np. B3 nie ma pojęcia, że dany gracz otrzymał obrażenia od wybuchającego obok granatu (o ile nie zginął), bo taka informacja po prostu nie znajduje się w logach. Jest to jeden z wielu licznych przykładów, gdy B3 nie może zostać użyte do realizacji każdej zachcianki. Ostatnio często popularnym pomysłem jest nagradzanie medyków, jednak nie ma możliwości wyciągnięcia takiej informacji od gry bez jej modyfikacji. W jaki sposób komunikacja przebiega w drugą stronę? B3 wysyła wszystkie komunikaty za pomocą rcona.
2. Wymagania
Część wymagań musisz spełnić ty, a pozostałe środowisko w jakim pracuje twój serwer. Poradnik jest dla osób, które rozróżniają serwer fizyczny od procesu uruchomionego nań. Musisz posiadać podstawową wiedzę na temat internetu i systemów operacyjnych (szczególnie Linuksa). Zagadnienia takie, jak transfer plików przez FTP czy obsługa swojego konta przez SSH na zdalnej maszynie nie powinny być ci obce.
Jeśli nie posiadasz jeszcze własnego serwera, przeczytaj ten rozdział przed zakupem, a może uchroni cię to od niemiłej niespodzianki. Dostępne na rynku usługi serwerowe postnowiłem podzielić na trzy kategorie:
Jak wszędzie, gdy mamy do wyboru wiele dróg, tak i te mają swoje wady i zalety. Serwer gry jest rozwiązaniem najprostszym i najtańszym - płacisz np. esemesem i po chwili otrzymuejsz informację zwrotną z adresem IP serwera i hasłem rcona. Sprawdza się najlepiej dla serwerów klanowych/prywatnych ze względu na stosunkowo wysoki koszt slota publicznego. Niestety, możliwości rozbudowy takiego serwera są praktycznie zerowe. Serwer dedykowany jest usługą najdroższą (koszt conajmniej 200zł miesięcznie), dlatego bez pomysłu na biznes z wykorzystaniem tej usługi, raczej mało kto będzie mógł sobie na to pozwolić. Zaletą jest dowolność i swoboda w wyborze... wszystkiego. Ty decydujesz jakie oprogramowanie będzie tam zainstalowane. Rozwiązanie ostatnie jest niejako kompromisem dwóch wcześniejszych. Sposób dostępu jak i możliwości wyboru oprogramowania są równie szerokie jak w przypadku serwera dedykowanego, a koszt znacznie niższy, rzędu kilkudziesięciu złotych miesięcznie. Wydajność serwera wirtualnego daje jednak wiele do życzenia. Serwer taki powinien wystarczyć dla niewielkiego serwera publicznego lub prywatnego.
Na koniec należałoby również wspomnieć o kontach shell, których usługodawcy oferują niekiedy możliwość instalacji serwera gry. Przy dobrym kontakcie z administratorem serwera również nie widzę problemu, aby użyć takiego konta do realizacji naszego celu. Najważniejsze zatem: B3 można zainstalować na serwerze dedykowanym oraz VPS (żeby nie skłamać - istnieją firmy, które oferują opcję pierwszą z B3, ale niedość, że policzyć je można na palcach jednej ręki, to nie oferują szerokiego zakresu konfiguracji).
Czego będziemy potrzebować (informacja dla tych, którzy mogą to już mieć i niekoniecznie pragną wdawać się w szczegóły następnego rozdziału):
3. Przygotowanie gruntu
W tym momencie zakładam, że posiadasz jedną z poniższych opcji:
Jako ciekawostkę podam, że serwer Polkowice działa na koncie shell bez dostępu do praw administratora (ani bez sprawnego kontaktu z administratorem), stąd miałem do pokonania wiele trudności, żeby wszystko dobrze działało.
Pierwszą rzeczą jest upewnienie się, że posiadamy interpreter języka Python. Z racji, że większość poradników dotyczy dystrybucji Debian lub Ubuntu jak i ze względu na samą popularność tychże, również ja przedstawię instalację w oparciu o te dytrybucje. Sprawdzamy zatem czy i w jakiej wersji posiadamy interpreter Pythona:
$ python -V
Jeśli pojawił nam się numer wersji i była ona conajmniej 2.7, to ten krok mamy z głowy. W przeciwnym wypadku musimy zainstalować Pythona. W momencie pisania tego poradnika wersja 2.7 nie znajdowała się w stabilnym repozytorium Debiana, dlatego należało dodać następującą linijkę do pliku /etc/apt/sources.list:
deb http://ftp.uk.debian.org/debian/ testing main contrib non-free
oraz zaktualizować dostępne paczki:
# apt-get update
Proszę zwrócić uwagę na znaki zachęty, które umieszczam na początku poleceń, $ oznacza, że polecenie może (lub powinno) zostać wykonane z prawami szeregowego użytkownika, natomiast # wymaga praw administratora (roota).
Po pomyślnej aktualizacji, możemy przejść do instalacji:
# apt-get install python2.7 python-mysqldb
Paczka python-mysqldb dodaje możliwość łączenia się z bazą danych MySQL, z której korzysta B3.
Krótka wzmianka dla zaawansowanych użytkowników: jeśli nie mamy roota, możemy zainstalować Pythona ze źródeł w naszym katalogu domowym (wymaganiem jest dostęp do gcc, make itd.). Przy odpowiednim ustawieniu zmiennych środowiskowych (służę pomocą) możemy cieszyć się pythonem równie mocno, jakby został zainstalowany przez administratora globalnie w systemie.
Gdy mamy już działający interpreter, możemy przejść do zainstalowania serwera MySQL i stworzenia na nim użytkownika oraz bazy.
# apt-get install mysql-server mysql-client
Podczas instalacji zostaniemy zapytani m. in. o hasło dla użytkownika root (do bazy, nie mylić z systemowym) - zapamiętujemy i... po chwili wykorzystujemy:
$ mysql -u root -p
Password:
mysql> create user 'b3'@'localhost' identified by 'b3haslo';
mysql> create database b3;
mysql> grant all on b3.* to 'b3'@'localhost';
Powyższe polecenia oznaczają odpowiednio: stworzenie użytkownika b3 z hasłem b3haslo, stworzenie bazy danych o nazwie b3 i przydzielenie wszystkich praw do bazy danych b3 użytkownikowi o tej samej nazwie.
Jedyne, co nam zostało, to... serwer gry, którego sposób instalacji znajdziesz w innym poradniku - Stawianie serwera Urban Terror od podstaw. Skoro mamy serwer gry, to musimy mieć też użytkownika w systemie, na którym będzie on uruchomiony. Na potrzeby przyszłych rozdziałów zakładam, że jego nazwa to urt.
4. Instalacja
Zakladam, że katalogiem domowym użytkownika, na którym uruchomiony jest serwer gry jest /home/urt. Umieśćmy w nim najnowszą wersję (obecnie 1.8.2) B3, którą znajdziemy na strone http://bigbrotherbot.net/ (wersja Latest pypi Release (Source .zip file)). Pliki możemy rozpakować na swoim komputerze, a następnie przetrasnferować je na nasze konto za pomocą (Win)SCP lub FTP. Dla uproszczenia zmieńmy mu również nazwę z b3-1.8.2/ na b3/. I już.
Należałoby jeszcze wspomnieć o alternatywnym sposobie instalacji jako python .egg. Uważam te rozwiązanie za niekoniecznie łatwiejsze, choćby dlatego, że bez praw roota wymaga "akrobacji" ze zmiennymi środowiskowymi. Instaluje B3 globalnie w systemie. Paczka taka jest co prawda łatwiejsza w aktualizacji, ale tychże będziemy unikać jeśli chcemy wprowadzać zmiany w kodzie B3 - a te wypada zrobić, choćby dla zachowania spójności kolorystycznej. Każdy autor pisze swój plugin inaczej i po załadowaniu ich wszystkich to działa, ale estetycznie pozostawia duże pole manewru.
Aby rozpocząć właściwą konfigurację, należy skopiować domyślny config, który znajdziemy w /home/urt/b3/b3/conf/b3.distribution.xml. Proponuję umieścić go pod nazwą b3.xml w tym samym katalogu (/home/urt/b3/b3/conf). Na koniec trzeba załadować domyślną bazę danych, z której będzie korzystało B3. Przechodzimy do katalogu ze zrzutami domyślnej struktury bazy danych i ładujemy do naszej bazy plik b3.sql (już jako użytkownik b3, zatem uwierzytelniamy się hasłem b3hasło):
$ cd /home/urt/b3/b3/sql
$ mysql -u b3 -p b3 < b3.sql
Password:
5. Konfiguracja
Edytujemy plik /home/urt/b3/b3/conf/b3.xml wedle własnych potrzeb. Poniżej przedstawiam większość opcji konfiguracyjnych, które można w nim znaleźć.
W sekcji plugins znajdziemy listę pluginów do załadowania. Plugin składa się z kodu oraz pliku konfiguracyjnego. Kod pluginu znajdziemy w b3/plugins/ lub b3/extplugins/ w zależności od tego czy został dostarczony z paczką czy napisany przez zewnętrznego autora. Pliki konfiguracyjne znajdziemy odpowiednio w b3/conf/ i b3/extplugins/conf/. Kolejność na liście pluginów ma znaczenie, gdyż w takiej właśnie kolejności będą wywoływane pluginy dla każdego zdarzenia z gry. Istotne to może być, gdy np. jeden plugin korzysta z wyników działania innego pluginu lub przy duzym obciążeniu dobrze jest mieć niski czas reakcji dla najważniejszych pluginów (admin?).
Weźmy na stół losowy plugin:
<plugin name="censor" config="@conf/plugin_censor.xml" />
Linia ta mówi nam, że plugin nazywa się censor, jego kod znajduje się w pliku censor.py (który leży w b3/plugins/, ponieważ jest to plugin dostarczony razem z B3), a jego plik konfiguracyjny znajdziemy w b3/conf/plugin_censor.xml. Fragment @conf jest zamieniany na ścieżkę do domyślnej lokalizacji configów pluginów, czyli /home/urt/b3/b3/conf. Aby wyłączyc plugin, należy linię usunąć, a najlepiej zakomentować. Zakomentowana linia pliku konfiguracyjnego jest ignorowana przez B3 i wygląda następująco:
<!-- <plugin name="censor" config="@conf/plugin_censor.xml" /> -->
Zatem każdy tekst znajdujący sie miedzy <!-- a --> jest ignorowany.
Konfigurację poszczególnych pluginów pozostawiam użytkownikowi. Każdy jest inny, zawiera różne parametry, dlatego - w przypadku problemów - zachęcam do komentowania.
Ładowanie pluginów zewnętrznych odbywa się analogicznie, z tym że nalezy pamiętać o innej ścieżce do pliku konfiguracyjnego. Najlepiej dać sobie spokój z makrami @conf i @b3, a zamiast nich poadawać pełne bezwzględne ściezki w celu uniknięcia błędów.
Nadszedł czas uruchamiania. Aby to zrobić, wykonujemy polecenie (będąc w katalogu /home/urt/b3/):
$ python ./b3_run.py -c b3/conf/b3.xml
W idealnym wypadku powinniśmy ujrzeć na ekranie coś podobnego do:
Starting www.bigbrotherbot.net (b3) v1.8.1 [posix] [Seda]
Using config file: b3.xml
checking for updates...
latest B3 stable version is 1.8.1
_\|/_
(o o) 1.8.2
+----oOO---OOo-----------------------+
| |
| |
| A newer version of B3 is available |
| |
| http://bit.ly/MHI1Wv |
| |
+------------------------------------+
Using external plugin directory: /home/urt/b3/b3/extplugins
Activating log : b3.log
Connecting to DB : OK
Using Gamelog : /home/urt/.q3a/q3ut4/games.log
Testing RCON : OK
Loading Events : 34 events loaded
Loading Plugins : .................. (18)
Starting Plugins : .................. (18)
Startup Complete : B3 is running! Let's get to work!
Jeśli coś pójdzie nie tak i z powrotem ujrzymy znak zachęty, powinniśmy zajrzeć do loga /home/urt/b3.log, gdzie znajdziemy informacje co poszło nie tak.
Gdy już dotrzemy wszystkie configi i bot uruchamia się poprawnie, zapewne chcielibyśmy, aby B3 działało zawsze i w tle. W normalnych warunkach program uruchomiony przez konsolę na zdalnej maszynie zakończy swoje działanie, gdy zamkniemy okno terminala. Aby temu zabiobiec, powinniśmy skorzystać z oprogramowania pomocniczego, które powoli nam wygodnie pozostawić uruchomiony program w tle. Takim programem jest screen:
# apt-get install screen
Stworzymy teraz krótki skrypt, który pozwoli nam na łatwe uruchamianie B3 w tle. W katalogu /home/urt/b3/ tworzymy plik START_B3.sh o zawartości:
#!/bin/bash
screen -m -d -S b3 python ./b3_run.py -c /home/urt/b3/b3/conf/b3.xml
Nadajemy mu prawa wykonywania:
$ chmod +x START_B3.sh
I... uruchamiamy:
$ ./START_B3.sh
Do programu możemy dostać się poleceniem:
$ screen -r
a w przypadku wielu programów uruchomionych w tle:
$ screen -r b3
Jeśli screen nie zabierze nas do okna B3, to zawsze pamiętajmy o b3.log.
6. Korzystaj
Wejdź teraz do gry i wpisz !iamgod, aby uzyskać prawa super administratora. Pamiętaj, nikt nie może cię w tym uprzedzić, w przeciwnym razie trzeba będzie ręcznie dłubać w bazie. Teraz czeka cię długa lektura dokumentacji. Znajdziesz tam informacje na temat poleceń, które możesz wydawać botowi, a także szczegółową instrukcję konfigurowania pluginów, które zostały potraktowane tutaj tylko pobieżnie. Aby wyłączyć bota wpisujemy w grze !die lub ctrl+c w oknie B3 (screen -r b3).
Tak naprawdę dopiero teraz zaczyna się zabawa, jakby nie patrzeć mamy dopiero co działający bot, ale przecież chcielibyśmy, aby wyrównywał nam drużyny, wyświetlał statystyki, wyrzucał za niecenzuralne słowa i pomagał w wielu innych sytuacjach. Liczba zastosowań jest nieograniczona, dlatego zapraszam do zadawania pytań w komentarzach w jaki sposób osiągnąć dany efekt. W wielu przypadkach ogranicza się to do (ściągnięcia i) dodania nowego pluginu do listy, ale jeśli chcemy zmienić działanie lub sposób prezentacji danej funkcjonalności nierzadko musimy zajrzeć do matriksa tzn. kodu.
O tak super artykuł. Przyda się. Tym bardziej, że nie było Polskich artykułów/manuali na ten temat.
manual super - myślę, że korzystali z niego będą nie tylko admini UrT
Takie poradniki ułatwiają życie, dzięki fruk
Żeby bot mógł wstać po komendzie !restart, trzeba dopisać parametr -r przy jego uruchamianiu. Ścieżki do cfg podawać nie trzeba jeżeli korzystamy z pliku b3/conf/b3.xml. Podawanie ścieżki się przydaje, gdy na tych samych plikach bota, chcemy uruchomić go dla kilku serwerów, z których każdy ma osobny plik b3.xml. Ale to takie szczegóły:)
P.S. Wersja 1.8.2 mi się coś sypała, nie potrafił bot wysyłać komend przez rcon...
Prawdę mówiąc nie testowałem nieczego na 1.8.2, bo za długo się męczyłem, żeby dostosować 1.8.1. Ważne, że parser zwraca już prawidłowy damage dla hitów. O ile pamiętam, nawet dzięki Tobie ;)
Tak, tak. Jeszcze z Majkim spisywaliśmy dmg broni, żeby dopisać do parsera. Ale niestety dmg z HE jest nie do przewidzenia. Chociaż zobaczymy ile będzie pracy z BBB jak wyjdzie 4.2.
No BBB, a właściwie to jego dzielni developerzy i biedni beta-testerzy, dostaną do implementacji sporo nowych komend i co nieco z logów do przeparsowania. Ale poczekajmy z tym do oficjalnej premiery :}
Właśnie tu leży problem, bo w dniu premiery 4.2 prawdopodobnie bbb się posypią (chyba, że istnieje jakaś super tajna współpraca Courguette z FS, albo logi pozostaną takie same, a jedynie komunikaty widoczne przez graczy będą inne).
Od momentu wydania wersji 4.0 (1 kwietnia 2007 r.) Urban Terror jest samodzielną oraz darmową grą.
Świetny poradnik, dodaję link do FAQ.