Powrót do strony

Serwer Counter-Strike 1.6 na Linuksie

Artykuł dotyczy instalacji serwera Counter-Strike 1.6 w systemie Linux. Dowiesz się w nim jak od podstaw pobrać i postawić serwer HLDS z AmxModem, jak go skonfigurować, uruchomić i restartować.

Spis treści

  1. Tworzymy konto użytkownika
  2. Pobieramy narzędzie aktualizacyjne
  3. Pobieramy serwer
  4. Zabezpieczenie (HLShield)
  5. Konfigurujemy serwer
  6. Edycja konfiguracji
  7. Instalujemy AmxModX
  8. Uruchamiamy serwer

Serwer Counter-Strike 1.6 - Linux

Dla bezpieczeństwa stworzymy najpierw konto użytkownika, na którym uruchamiany będzie serwer. Jeżeli mamy już konto użytkownika możemy się na nie zalogować przed rozpoczęciem instalacji.

1. Tworzymy konto użytkownika

Sposoby obsługi różnych dystrybucji systemu Linux mogą się różnić od mi osobiście znanych. Nie jestem ekspertem i otwarcie się do tego przyznaję, dlatego w przypadku jakichkolwiek wątpliwości googlujcie :)

Komendy wpisane w wyróżnionych tabelach wpisujemy w konsoli (SSH/Terminal).

Poniższe komendy wpisujemy z konta root-a.

Komendą useradd możemy dodać nowego użytkownika do systemu. Polecam lekturę artykułu w wikipedii na ten temat.

Utwórzmy więc użytkownika hlds, którego katalogiem domowym będzie folder hlds w katalogu /home

useradd -d /home/hlds hlds

Wypadałoby ustalić hasło.

passwd hlds

Wpisujemy hasło dwukrotnie potwierdzając ENTER-em.

Katalog domowy zapewne nie istnieje więc go utworzymy.

mkdir /home/hlds

Nadamy teraz użytkownikowi hlds uprawnienia do katalogu.

chown hlds /home/hlds

Jeżeli chcemy móc z poziomu konta hlds wychodzić do katalogów wyżej czyli do home i / ustawiamy jeszcze chmod na katalog home na odczyt.

chmod +r /home

Gotowe. Zalogujmy się na nowo utworzone konto.

su - hlds

Udało się? Taką mam nadzieję. Ruszajmy dalej

Poniższe komendy wpisujemy z konta użytkownika.

2. Pobieramy narzędzie aktualizacyjne

Po zalogowaniu się na konto użytkownika upewniamy się czy na pewno jesteśmy w katalogu domowym /home/hlds

pwd

Zgadza się? Jeśli nie (dziwne)...

cd /home/hlds
pwd

Dalej coś nie tak? Spokojnie! Sprawdź czy wszystkie powyższe punkty wykonałeś(aś) poprawnie. Jeżeli coś namieszałeś(aś) zacznij od nowa, tylko zamiast hlds używaj wszędzie nazwy np. hlds2.

pwd

Teraz ok? Startujemy. Najpierw stwórzmy jakiś katalog żeby nie robić zamieszania w katalogu domowym. Niech to będzie katalog csrv

mkdir csrv

Nie wchodzimy na razie do niego. Posłuży nam do umieszczenia już pobranego serwera. Pobierzmy najpierw narzędzie aktualizacyjne.

wget http://storefront.steampowered.com/download/hldsupdatetool.bin

Czekamy aż plik zostanie pobrany...

chmod +x hldsupdatetool.bin

./hldsupdatetool.bin

Jeżeli posiadamy system 64 bitowy i wyskoczy nam błąd "-bash: ./hldsupdatetool.bin: No such file or directory" mimo, iż plik został pobrany i istnieje, wówczas należy doinstalować biblioteki 32 bitowe. W Debianie i Ubuntu z root-a należy wydać polecenie: apt-get install ia32-libs -y

Zapoznajemy się z prawniczym bełkotem (licencją) i jeżeli zgadzamy się pozostać w słodkiej nieświadomości tego jakie kruczki tam na nas czyhają wpisujemy...

yes

...i potwierdzamy ENTER-em

Z uwagi na to, że hldsupdatetool jest nam dłużej niepotrzebne kończymy jego krótki żywot na naszej maszynie...

rm hldsupdatetool.bin

3. Pobieramy serwer

Mamy już pobranego Steama (pobrał się sam skubany po zaakceptowaniu licencji). Teraz przygotujemy go do pobrania serwera.

chmod +x steam

./steam

Steam pomarudzi coś o sprawdzaniu wersji, pobierze sobie ją i wyrzuci ostatecznie komunikat

Checking bootstrapper version ...
Getting version 34 of Steam HLDS Update Tool
Downloading. . . . . . . . . . .
Steam Linux Client updated, please retry the command

Czasami Steam jest przeładowany i aktualizacja trwa długo, a czasem przesadnie długo. Gdy tak się dzieje korzystamy z kombinacji klawiszy CTRL+C by przerwać działanie Steama. Powinniśmy zostać przeniesieni do nowej pustej linii (jeśli nie da się tego zrobić zapewne proces się zawiesił, musimy raz jeszcze połączyć się z SSH/Terminalem i przełączyć na użytkownika hlds). Gdy wyjdziemy z procesu Steama uruchamiamy go ponownie do skutku. Jeżeli w ciągu 5 minut nie uda się zakończyć aktualizacji dajemy sobie spokój i ponawiamy ponownie po jakimś czasie.

Gdy już zaktualizowaliśmy Steama możemy pobrać serwer do wcześniej przygotowanego katalogu csrv.

./steam -command update -game cstrike -dir csrv -verify_all -retry

Z powyższej komendy można korzystać również do ściągnięcia innych serwerów ze Steama. Zmienia się jedynie nazwa gry w opcji -game. Listę gier można zobaczyć po wydaniu komendy ./steam -command list

Po uruchomieniu pobierania powinno wyskoczyć coś takiego:

Checking bootstrapper version ...
Getting version 42 of Steam HLDS Update Tool
Downloading. . . . . . . . . . . .Steam Linux Client updated, please retry the command
CAsyncIOManager: 0 threads terminating. 0 reads, 0 writes, 0 deferrals.
CAsyncIOManager: 21 single object sleeps, 0 multi object sleeps
CAsyncIOManager: 0 single object alertable sleeps, 0 multi object alertable sleeps
No installation record found at csrv
No installation record found at csrv

Jest to normalny komunikat, który informuje o rozpoczęciu pobierania, wersji silnika, jakimś "CAsyncIOManager", które można olać i "No installation record found at" co świadczy o tym, że pierwszy raz instalujemy serwer.

Teraz możemy zrobić sobie herbatę. Do ściągnięcia jest ok 350 MB danych, co łączu 1Mbps powinno przysporzyć od 45 minut do godziny pracy. W przypadku problemów typu zawieszony proces, czekamy kilka minut - czasem tak się dzieje, a później Steam się odwiesza. Jeżeli to się przedłuża możemy otworzyć drugą sesję SSH i sprawdzać co kilkanaście sekund czy wielkość katalogu się zmienia. Jeżeli nie, próbujemy wyjść z procesu (CTRL+C), jeżeli się nie da - zamykamy sesję, otwieramy nową i ponawiamy pobieranie.

4. Zabezpieczenie (HLShield)

Ta część artykułu, odnosząca się do instalacji HLShield może być nieaktualna. W przypadku problemów należy ją pominąć i przejść do punktu 5.

Aby uchronić serwer przed atakami CSDOS i nie tylko należy zainstalować na nim HLShield.

W tym celu wykonujemy kolejno następujące czynności:

Wchodzmy do głównego katalogu serwera. W naszym wypadku do csrv. Następnie pobieramy instalator HLShield, nadajemy mu prawa i uruchamiamy:

cd ~/csrv
wget http://hobby.sarichioi.com/cstrike/hlshield-install.sh
chmod 755 hlshield-install.sh
./hlshield-install.sh

To wszystko. Jeżeli serwer jest uruchomiony to należy go oczywiście zrestartować.

5. Konfigurujemy serwer

Konfiguracja serwera jest o tyle istotna, że możemy ustalić w niej jak serwer będzie się nazywał, czy i jakie będzie miał hasło, jakie będzie hasło rcona (administracyjne), a także ustalić czas trwania rundy itd.

Przechodzimy teraz do katalogu, w którym zainstalowaliśmy serwer i od razu do folderu cstrike, w którym znajduje się plik server.cfg - plik konfiguracyjny serwera.

cd ~/csrv/cstrike

Tyldę ( ~ ) tworzymy poprzez kombinację klawiszy SHIFT + ~ (klawisz pod ESC) i wciśnięcie spacji. Tylda oznacza katalog domowy. Jest zatem zamiennikiem ciągu znaków wskazujących ścieżkę do katalogu domowego. W naszym przypadku /home/hlds

W dostarczonym przez Steam pliku konfiguracyjnym niestety nie ma niczego ciekawego dlatego pozbędziemy się jego zawartości.

echo -n > server.cfg

Teraz możemy wkleić do niego konfigurację przygotowaną przeze mnie na potrzeby tego artykułu. Ten server.cfg posiada domyślne ustawienia, które można dowolnie zmienić.

Kliknij na strzałę po lewej by zaznaczyć całość i skopiuj (CTRL+C).

//
// Config serwera CS 1.6
// Autor: c0m4r
// ga.lamarr.pl
//

hostname "CS @ GA.Lamarr.pl"	// nazwa serwera
sv_contact ""			// mozesz tutaj wpisac swoj adres e-mail
sv_region "3"			// region, do ktoego nalezy serwer (3 oznacza Europe)

// Hasla

sv_password ""			// haslo dostepu do serwera
rcon_password ""		// haslo rcona, dzieki niemu mozna zmieniac ustawienia serwera gdy jest on uruchomiony

// Ustawienia ogolne

sv_timeout "120"		// Po jakim czasie (w sekundach) gracz jest odlaczany od serwera gdy sie zbyt dlugo podlacza

sv_allowdownload "1" 		// umozliwia pobieranie plikow z serwera
sv_downloadurl ""		// adres alterantywnego serwera HTTP/FTP do pobierania plikow z serwera
sv_allowupload "1" 		// umozliwia wysylanie plikow na serwer, czyli korzysatnie z wlasnych sprayow przez graczy

sv_send_logos "1" 		// pozwala na wysylanie przez serwer nowych sprayow graczom
sv_send_resources "1" 		// wlacza wysylanie wszystkich chronionych zasobow graczom

pausable "0"			// wlaczenie tej funkcji umozliwia zatrzymywanie rozgrywki w dowolnym momencie jej trwania
sv_gravity "800"		// domyslna wartosc grawitacji na serwerze
sv_cheats "0"			// wylacza komendy typu noclip, god itp.
sv_aim "0"			// wylacza autocelowanie

// Rozgrywka

mp_autokick "0"			// automatycznie wyrzucaj graczy za TK oraz nieaktywnosc
mp_autoteambalance "0"		// balans druzyn
mp_buytime "0.25"		// czas, w ktorym mozna kupowac bronie wyrazony w minutach. Wartosc 0.25 to 25 sekund.
mp_c4timer "30"			// czas do wybuchu bomby
mp_chasecam "0"			// obserwatorzy moga korzystac ze wszystkich kamer. Wartosc 1 to czarny ekran po zabiciu.
mp_fadetoblack "0"		// gdy wlaczone gracz widzi tylko czarny ekran i wlasny HUD po tym jak zginie
mp_falldamage "1"		// gdy gracz spada z wysokosci traci punkty zycia
mp_flashlight "1"		// umozliwia korzystanie z latarki
mp_footsteps "1"		// slychac kroki przeciwnika
mp_forcechasecam "0"		// 0-Mozna obserwowac wszystkich 1-Tylko swoja druzyne 2-Widac tylko cialo gracza
mp_freezetime "5"		// czas zatrzymania graczy na spawnie przed rozpoczeciem rozgrywki
mp_friendlyfire "1"		// 0 oznacza, ze gdy strzelasz do graczy ze swojej druzyny, nie traca punktow zycia
mp_friendly_granades_damage "0"	// nie tracisz punktow zycia od granatow rzuconych przez graczy z wlasnej druzyny
mp_hostagepenalty "2"		// wyrzuca gracza po zabiciu dwoch zakladnikow
mp_limitteams "2"		// limit roznicy graczy w druzynach (2 graczy wiecej moze posiadac druzyna przeciwna)
mp_roundtime "2.5"		// czas trwania rundy
mp_timelimit "25"		// czas trwania mapy

// Ponizsze komendy sa opcjonalne, mozna usunac sprzed nich dwa ukosniki i ustawic ich wartosc be je uaktywnic

//mp_maxrounds ""		// maksymalna ilosc rund zanim serwer zmieni mape
//mp_winlimit ""		// maksymalna ilosc wygranych zanim serwer zmieni mape

// Ustawienia siecowe

sv_maxrate "25000"		// Maksymalna przepustowosc z jaka serwer wysyla informacje do gracza. 1000=~1KB/s.
sv_minrate "2500"		// Minimalna przepustowosc (j.w.)
sv_maxupdaterate "100"		// Maksymalna ilosc pakietow, ktore gracz moze otrzymac od serwera w ciagu jednej sekundy.
sv_minupdaterate "20"		// Minimalna ilosc pakietow, ktore gracz otrzymuje od serwera w ciagu jednej sekundy.

sys_ticrate "200"		// Maksymalna ilosc FPS, jaka moze osiagnac serwer.
				// Jezeli nie mamy wyraznej potrzeby nie zwiekszamy wartosci tej komendy.
				// Nie sluchamy rowniez bajek o wyzszosci 1000 FPS nad innymi. To bzdury.
				// Nie ma sensu ustawiac wiecej niz 200 FPS

// Rozmowy glosowe

sv_voiceenable "1"		// Umozliwia rozmowe glosowa na serwerze
sv_voicequality "5"		// Jesli chcesz zmniejszyc obciazenie maszyny przez serwer ustaw mniejsza wartosc (np. 3)
sv_voicecodec "voice_speex"	// Kodek wykorzystywany do rozmowy glosowej.
sv_alltalk "1"			// 1 - kazdy slyszy kazdego, 0 - tylko druzyna slyszy co mowisz

// Pliki konfiguracyjne

servercfgfile "server.cfg" 	// ustala domyslny plik konfiguracyjny serwera
mapchangecfgfile "server.cfg" 	// ustala plik konfiguracyjny, ktory wczytywany jest przy zmianie mapy

// Wczytywanie banow

exec "banned.cfg" 		// wczytuje bany zalozone na STEAM_ID
exec "listip.cfg" 		// wczytuje bany zalozone na adresy IP
			

Config skopiowany? Dobrze. Najlepiej wkleić go do pliku server.cfg korzystając z programu nano, który powinien być zainstalowany wraz z każdym systemem. Jeżeli korzystacie z mcedit (edytor programu midnight-commander) z uwagi na wpisane komentarze może się Wam na końcu władować kilka niepotrzebnych akapitów. Mcedit można wykorzystać później - do edycji pliku konfiguracyjnego.

cd ~/csrv/cstrike
nano server.cfg

Mcedit i nano można używać zamiennie.

Usunęliśmy wcześniej zawartość pliku więc powinien być on pusty, jeżeli nie jest to wróć do początku punktu 4 i rozpocznij działania ponownie. Jeżeli jesteś początkujący upewnij się, że jesteś w poprawnym katalogu przez wydanie komendy pwd. Musisz być w folderze cstrike by edytować config. Może Ci być łatwiej poruszać się po katalogach z poiozmu midnight-commandera (uruchamia się go poprzez wpisanie: mc), musi on jednak być zainstalowany w systemie. Poniżej znajduje się na ten temat informacja.

By wkleić skopiowany config korzystamy z kombinacji klawiszy SHIFT + INSERT. Zmiany w pliku zapisujemy poprzez kombinację klawiszy CTRL + X. Zostaniemy zapytani czy zapisać zmiany. Potwierdzamy przez wpisanie Y i wciśnięcie ENTER.

6. Edycja konfiguracji

Aby móc korzystać z midnight-commandera i jego edytora musimy mieć ów program zainstalowany w systemie. Możemy sprawdzić czy program jest zainstalowany poprzez wydanie komendy, która powinna go uruchomić

mc

Jeżeli program się uruchomi to wiadomo, że działa i można z niego korzystać. Do szybkiej edycji pliku zamiast nano wpisujemy wtedy mcedit server.cfg

Jeżeli program się nie uruchomi i wyskoczy informacja

-bash: mc: command not found

musimy zainstalować program w systemie. Można to zrobić tylko z poziomu root-a (by wyjść z konta użytkownika do konta roota korzystamy z kombinacji klawiszy CTRL + A + D (wciskamy w kolejności przytrzymując wciśnięty klawisz, gdy zostaniemy wylogowani puszczamy klawisze).

Program apt-get jest dołączony do Debiana oraz systemów, które powstały w oparciu o Debiana czyli np. Ubuntu. Nie miałem styczności z instalacją programów w innych systemach, zawsze jednak można poprosić wujka Google o pomoc :)

Jeżeli mamy Debiana lub debiano-podobny system wpisujemy następujące polecenie by zainstalować midnight-commandera

Poniższe komendy wykonujemy z poziomu konta root-a.

apt-get moo

:) ...

apt-get install mc

Jeżeli mamy system, który posiada apt-get, a po wydaniu komendy pakiet nie chce się zainstalować zapewne jest problem z repozytoriami (jeżeli nie wiemy czym są repozytoria to googlujemy lub zgłaszamy się do administratora maszyny/hostingu by nam pomógł).

Jeśli mc (midnight-commander) zainstalowało się poprawnie możemy je uruchomić poprzez komendę mc, a pliki edytować albo już z poziomu programu lub z poziomu konsoli przez mcedit.

7. Instalujemy AmxModX

AmxModX to popularna modyfikacja serwera, która umożliwia administrację serwera z poziomu menu tekstowego w grze oraz instalację różnych pluginów, urozmaicających rozgrywkę.

Zanim rozpoczniemy instalację chciałbym abyś zrozumiał(a) kilka podstawowych spraw.

Każdy program, niezależnie od tego czy jest to Windows czy Linux korzysta z jakichś plików binarnych (w systemie Windows pliki .dll natomiast w Linuksie .so). Dlaczego o tym mówię? Ponieważ bardzo często początkujący administratorzy zapominają o tym.

Domyślnym plikiem binarnym (w skrócie: binarką), z którego korzysta serwer Counter-Strike'a 1.6 w systemie Linux jest plik cs_i386.so znajdujący się w katalogu cstrike/dlls.

Chcąc uruchomić na serwerze jakiekolwiek modyfikacje musimy ustawić alternatywny plik binarny - metamod, który umożliwia uruchamianie modyfikacji.

Instalacja Metamoda

Edytujemy plik liblist.gam, w którym ustala się binarkę serwera.

Poniższe komendy wykonujemy z poziomu konta użytkownika.

cd ~/csrv/cstrike
mcedit liblist.gam # lub nano liblist.gam

Plik ma strukturę taką jak server.cfg, tyle, że nie interesuje nas w nim nic oprócz binarki serwera.

gamedll "dlls\mp.dll"
gamedll_linux "dlls/cs_i386.so"

Pierwsza z dwóch powyższych komend ustala binarkę dla serwera stawianego na Windowsie. My stawiamy serwer na Linuksie więc ta komenda nas nie obchodzi i zostawiamy ją bez zmian.

Obchodzi nas natomiast druga komenda, która ustala binarkę dla serwera stawianego na Linuksie - gamedll_linux.

Zamieniamy więc jej wartość na ścieżkę do binarki metamoda, którego za chwilę wgramy.

Info dla łosi: Czyli usuwamy wspomniany wpis i wklejamy poniższy (przez SHIFT + INSERT na klawiaturze).

gamedll_linux "addons/metamod/dlls/metamod_i386.so"

Zapisujemy plik i będąc w katalogu cstrike tworzymy nowy katalog - addons (powinien już istnieć, ale dla pewności...).

mkdir addons

Jeśli wyskoczy "Cannot create directory addons. File Exist." oznacza to, że mamy już taki katalog. Jeżeli nie jesteśmy pewni co do poprawności istniejącego już metamoda i amxmoda możemy ten katalog usunąć poleceniem rm metamod -r następnie ponownie wykonujemy powyższe polecenie mkdir addons.

Nie wdając się w szczegóły bo powinniście już wiedzieć co oznaczając te komendy wpisujecie kolejno:

cd addons
mkdir metamod
mkdir metamod/dlls
cd metamod/dlls
wget http://heanet.dl.sourceforge.net/project/metamod-p/Metamod-P%20Binaries/1.19p32/metamod-p-1.19p32-linux_i586.tar.gz

Pobraliśmy spakowanego metamoda do katalogu cstrike/addons/dlls. Teraz wypadałoby go rozpakować. Wątpię aby ktoś nie miał w systemie zainstalowanego programu tar, ale jeżeli tak to postępujemy analogicznie do instalacji midnight-commandera, tylko zamiast apt-get install mc wpisujemy apt-get install tar

Teraz rozpakujemy binarkę i usuniemy niepotrzebne archiwum.

tar -xvzf metamod-p-1.19p32-linux_i586.tar.gz

Powinniśmy otrzymać wynik

metamod_i386.so

Teraz usuwamy archiwum, które jest nam niepotrzebne.

rm metamod-p-1.19p32-linux_i586.tar.gz

Z metamodem jeszcze nie skończyliśmy, wrócimy do niego pod koniec instalacji AmxModa by omówić rozpoczętą wcześniej kwestię binarek.

Instalacja AmxModX

Zanim zaczniemy słów kilka o tzw. paczkach. Nie instalujcie żadnych paczek AmxModa pobranych z for internetowych jeżeli nie mieliście do tej pory do czynienia z serwerem hlds. "Jak to? Przecież wszyscy wgrywają paczki.". Bądź mądrzejszy. Paczki są tworzone w większości przypadków przez ludzi, którzy mają średnie pojęcie o serwerach dlatego zazwyczaj oprócz samego AmxModa i pluginów znajduje się w nich wiele niepotrzebnych śmieci. Autorzy paczek nie przewidują tego, że paczka może zostać wgrana na serwer windowsowy lub linuksowy. Gdy wgrasz paczkę z windowsową binarką w metamodzie na serwer linuksowy będziesz dziwił się dlaczego serwer nie chce się uruchomić. Dlatego AmxModa najlepiej zainstalować samodzielnie by wiedzieć gdzie się co ustawiło i mieć porządek. A jeżeli już naprawdę chcemy zainstalować jakąś paczkę musimy mieć wiedzę na temat tego co z tej paczki jest przydatne i co należy wgrać, a co nie. Takiej wiedzy nie mamy jednak gdy zaczynamy dopiero administrację serwerem.

Pomarudziłem, zacznijmy więc instalację Amx-a.

Skończyliśmy na katalogu cstrike/addons/dlls. Wejdziemy teraz do katalogu cstrike.

cd ~/csrv/cstrike

Będziemy teraz potrzebować dwóch archiwów z podstawowym AmxModem i dodatkiem dla serwerów Counter-Strike 1.6.

Można je pobrać z oficjalnej strony projektu.

Interesuje nas AMX Mod X Base dla systemu Linux oraz Counter-Strike Addon i tu niespodzianka, również dla systemu Linux.

Korzystając z aktualnych odnośników bezpośrednich do pliku pobieramy obydwa archiwa do katalogu cstrike

Poniższe komendy można skopiować w całości i wkleić do konsoli korzystając z kombinacji klawiszy SHIFT+INSERT lub PPM. Komendy powinny wykonać się w kolejności. W przypadku problemów należy wpisywać je pojedynczo.

wget http://downloads.sourceforge.net/project/amxmodx/AMX%20Mod%20X%20Base/1.8.1/amxmodx-1.8.1-base.tar.gz?use_mirror=switch
wget http://downloads.sourceforge.net/project/amxmodx/Counter-Strike%20Addon/1.8.1/amxmodx-1.8.1-cstrike.tar.gz?use_mirror=switch
tar -xvzf amxmodx-1.8.1-base.tar.gz
tar -xvzf amxmodx-1.8.1-cstrike.tar.gz
echo gotowe # Wcisnij ENTER

AmxModX jest już zainstalowany. Teraz musismy go uruchomić w metamodzie.

cd addons/metamod
mcedit plugins.ini # lub nano plugins.ini

Odniosę się teraz do wspomnianej wcześniej kwestii binarek. Istotne jest to aby wbić sobie do głowy jak działa metamod żeby później nie dziwić się dlaczego serwer czy sam AmxModX nie chce nam działać. W plugins.ini metamoda możemy umieszczać dwa typy wpisów:

linux addons/amxmodx/dlls/amxmodx_mm_i386.so
;win32 addons/amxmodx/dlls/amxmodx_mm.dll

Co należy wiedzieć. Po pierwszy: średnik na początku linii przed komendą powoduje, że dana komenda nie jest czytana przez silnik gry. Więc w tym wypadku wczytana zostanie komenda rozpoczynająca się od "linux", a komenda "win32", przed którą wstawiłem średnik będzie traktowana tylko jako komentarz.

Posiadając serwer linuksowy korzystamy tylko z wpisów, które rozpoczynają się od "linux", a plikiem binarnym jest plik .so tak jak w powyższym przykładzie. Często niedoświadczeni administratorzy zapominają o tym i tak jak wspomniałem wgrywają np. paczki, w których jest metamod skonfigurowany pod Windowsa, uruchamiają serwer i dziwią się dlaczego nie działa. Dlatego należy zapamiętać, że w metamodzie ma być wpis

linux addons/amxmodx/dlls/amxmodx_mm_i386.so

żaden inny. Jeżeli mamy serwer postawiony na Linuksie, a takim się w tym poradniku zajmujemy, żaden inny wpis nie będzie działać.

Gdy już wkleimy powyższy wpis do otwartego pliku plugins.ini metamoda zapisujemy zmiany.

O podstawach AmxModa czyli dodaniu adminów, map do menu, pluginów przeczytacie w osobnym poradniku. Teraz uruchomimy serwer.

8. Uruchamiamy serwer

Za uruchomienie serwera odpowiada plik hlds_run, znajdujący się w głównym katalogu serwera.

Aby uruchomić serwer musimy być w głównym katalogu serwera! Czyli tym, w którym jest cstrike, valve i plik hlds_run.

Aby uruchomić serwer musimy jednak zbudować polecenie startowe.

./hlds_run -game gra +ip <adres ip> +port <port> +maxplayers <liczba_graczy> +exec server.cfg +map de_dust2

Powyższe polecenie nie uruchomi serwera. Trzeba najpierw uzupełnić wartości komend startowych. Prawidłowe polecenie startowe znajduje się poniżej.

Aby wypełnić wartości komend startowych musimy znać IP, przypisane do maszyny, którego możemy używać do uruchomienia serwera. Jeżeli na tym samym IP uruchomione są inne serwery Counter-Strike'a musimy wiedzieć czy port, którego użyjemy jest wolny i może zostać użyty do uruchomienia serwera. Jeżeli jesteśmy pewni, że żadnych innych serwerów nie ma używamy domyslnego portu 27015. Uruchamiamy serwer Counter-Strike'a więc w opcji game wpisujemy cstrike. Tego samego polecenia możemy również używać do uruchomienia serwerów hlds innych gier (modyfikacji) takich jak Day of Defeat, Team Fortress, Condition Zero itp. Zmienia się wówczas jedynie nazwa folderu modyfikacji (np. dod, tf lub czero) i mapa startowa.

Przyjmijmy, że naszym adresem IP będzie 192.168.120.33. Uruchomimy serwer na domyślnym porcie 27015 z 8 slotami.

./hlds_run -game cstrike +ip 192.168.120.33 +port 27015 +maxplayers 8 +exec server.cfg +map de_dust2

Pamiętaj żeby w powyższym poleceniu zamienić IP na przypisane do maszyny. Jeżeli wpiszesz niepoprawne IP ujrzysz następującą informację:

WARNING: UDP_OpenSocket: port: 27015 bind: Cannot assign requested address
FATAL ERROR (shutting down): Couldn't allocate dedicated server IP port 27015.

Można wtedy spróbować usunąć z polecenia startowego adres IP i komendę +ip. Jeżeli do maszyny jest przypisane IP, hlds powinien sam je znaleźć i uruchomić się właśnie na nim. Po uruchomieniu serwera adres IP można sprawdzić komendą

status

Polecenie startowe może również zawierać dodatkowe komendy i praktycznie wszystkie ustawienia, których nie chcemy ustalać w server.cfg.

Jeżeli chcemy aby serwer przy każdym uruchomieniu automatycznie się aktualizował możemy dopisać do niego opcję -autoupdate, aczkolwiek przy obciążonym Steamie może to tylko spowolnić uruchamianie serwera. Więc można to robić jednorazowo co jakiś czas gdy wychodzą aktualizacje. Później można usunąć opcję z polecenia startowego.

Serwer uruchomiony i wszystko byłoby w porządku gdyby nie fakt, że gdy zamkniemy konsolę proces serwera się wyłączy.

Nasuwa się zatem pytanie: co zrobić aby serwer działał cały czas? I w jaki sposób go restartować?

Sądzę, iż jeżeli czytasz ten poradnik nie za bardzo wiesz jak to zrobić, a tłumaczenie działania kilku kolejnych komend w systemie przysporzy więcej problemów niż pożytku. Dlatego dajmy sobie spokój z konwencjonalnymi sposobami, skorzystajmy ze screena.

Jak już wspomniałem - nie uważam się za żadnego eksperta dlatego ujmę to w prosty, a nie profesjonalny sposób:

Screen umożliwia uruchomienie serwera i jego działanie w tle nawet wtedy gdy wyjdziemy z konsoli lub wylogujemy się z konta. Zaletą tego programu jest to, że każdemu procesowi możemy przypisać dowolne ID (etykietę, nazwę). Ułatwia to znacznie identyfikację procesów gdy uruchamiamy większą ilość serwerów.

Aby uruchomić serwer przy użyciu screena musimy go zainstalować - chyba, że posiadamy go już w systemie, by to sprawdzić wydajemy polecenie

screen

Jeżeli przywita nas seksowny ekran z informacją w stylu:

Screen version 4.00.03jw4 (FAU) 2-May-06

Copyright (c) 1993-2002 Juergen Weigert, Michael Schroeder
Copyright (c) 1987 Oliver Laumann

(...)

[Press Space or Return to end.]

oznacza to, iż jesteśmy szczęśliwymi posiadaczami screena i możemy pociągnąć zdrowy łyk herbaty.

By nie robić zamieszania wciskamy spację i wpisujemy

exit

Konsola wyrzuci informację

[screen is terminating]

Jeżeli system uznał, że nie zna takiej komendy - będziesz musiał zainstalować screena.

Dla systemów Debiano-podobnych korzystamy z apt-get

Poniższe komendy wykonujemy z poziomu konta root-a.

apt-get install screen

Jeżeli nie możesz lub nie potrafisz zainstalować screena będziesz musiał o to kogoś poprosić. Ewentualnie używać innych sposobów uruchamiania procesu w tle.

Poniższe komendy wykonujemy z poziomu konta użytkownika.

Aby efektywnie wykorzystać screena uruchomimy proces naszego serwera hlds od razu w tle. W tym celu korzystamy z komendy screen z atrybutami dmS.

Wykorzystajmy zatem przykładowe polecenie startowe serwera.

screen -dmS serwerek ./hlds_run -game cstrike +ip 192.168.120.33 +port 27015 +maxplayers 8 +exec server.cfg +map de_dust2

Powyższym poleceniem uruchomiany proces naszego serwera hlds w tle nadając naszemu screenowi identyfikator: serwerek. Jest to o tyle fajna rzecz, że dzięki temu indetyfikatorowi możemy w łatwy sposób przywołać konkretny serwer, nie musząc przeszukiwać wszystkich procesów po adres IP czy porcie, gdyż byłoby to uciążliwe przy większej ilości serwerów.

Wszystkie uruchomione na naszym koncie użytkownika screeny, czyli innymi słowy wszystkie uruchomione serwery posiadają swój identyfikator. Składa się on z PID-u (numer identyfikacyjny procesu w systemie) oraz ID, przypisanego do screena przez nas. W tym przypadku: serwerek.

Aby wyświetlić wszystkie uruchomione na screenie procesy wpisujemy:

screen -ls

Wyświetlona zostanie lista uruchomionych screenów oraz informacja o tym gdzie zapisują się pliki z identyfikatorami tych procesów.

There is a screen on:
21907.serwerek (Detached)
1 Socket in /home/hlds/.screen.

Jak powyższą informację rozumieć? Otóż jak widzimy jest uruchomiony jeden screen oznaczony "21907.serwerek". Status (Detached) oznacza, że screen jest schowany i działa w tle. status Attached oznacza, że ktoś (np. Ty :)) przywołał screena i działa na nim. Status Dead??? oznacza, że proces, który uruchomił screen został wyłączony i po screenie został tylko ślad w postaci pliku identyfikacyjnego. W tym wypadku wydajemy polecenie screen -wipe aby wyczyścić nieusunięte screeny.

Aby przywołać z powrotem proces serwera do konsoli wpisujemy poniższą komendę wraz z PIDem, czyli pierwszą częścią powyższego identyfikatora, tj. (w tym przypadku) 21907 lub korzystamy z ID procesu czyli "serwerek", ale tylko wtedy gdy ciąg znaków, z którego skorzystaliśmy jest unikalny i został użyty tylko dla danego procesu. W innym wypadku screen nie będzie wiedział, który z dwóch np. zawierających to samo słowo w ID screenów otworzyć.

Przywołujemy powyższego screena:

screen -r 21907

W tym momencie powinien otworzyć się screen, aczkolwiek prawie na pewno wyskoczy Wam informacja:

Cannot open your terminal '/dev/pts/0' - please check.

Może to być równie dobrze /dev/pts/1, 2, 3 i każdy kolejny. Co w tym wypadku robimy? Jeżeli mamy dostęp do roota przełączamy się na niego i wydajemy polecenie, nadające wszystkie prawa zapisu/odczytu i wykonywania dla terminalu, który jest dla nas zablokowany. Jak wspomniałem, nie jestem żadnym ekspertem i zapewne nie jest to sposób, w jaki należy to robić, ale ten jest mi znany i działa :)

Korzystamy zatem z nazwy terminalu, który nam wyskoczył i wykonujemy polecenie:

Poniższe komendy wykonujemy z poziomu konta root-a.

chmod 777 /dev/pts/0

Uwaga: Twój terminal może mieć inną nazwę! Np. /dev/pts/5. Wykonujemy wtedy to samo polecenie co wyżej tylko wpisujemy inny numer terminalu.

Wracamy na konto użytkownika i ponownie wykonujemy polecenie screen -r z ID lub PID-em (patrz wyżej). Jeżeli wszystko poszło tak jak powinno otworzy się konsola serwera. W tej konsoli możemy wydawać wyłącznie polecenia serwera hlds. Innymi słowy to coś jak rcon. Cóż, to jest rcon :) Możemy wydać np. polecenie status, które pokaże informacje o serwerze.

Jak zamknąć konsolę serwera aby dalej działał w tle? To proste. Wciskamy kombinację klawiszy:

CTRL + A + D

Wciskamy kolejno CTRL, przytrzymujemy go, następnie A, przytrzymujemy oba wciśnięte klawisze, następnie D i puszczamy całość. Powinniśmy znaleźć się z powrotem w konsoli systemowej.

Jeżeli nasz proces serwera się zawiesił, wystąpił jakiś błąd i chcemy go wyłączyć to będąc w konsoli serwera zamiast CTRL+A+D użyjemy kombinacji klawiszy:

CTRL + C

Spowoduje to wyłączenie procesu. Aby wyczyścić screena wpisujemy:

screen -wipe

Przykładowy skrypt startowy: run.sh

© by c0m4r. Uszanuj moją pracę. Powyższy artykuł jest chroniony prawem autorskim jako własność intelektualna właściciela serwisu. Kopiowanie powyższego artykułu bez pisemnej zgody autora jest zabronione.

Do góry