Instalacja serwera Minecraft
28 kwietnia 2011
Gry Minecraft nie muszę chyba nikomu przedstawiać. A jeżeli ktoś jej naprawdę nie zna to w sieci jest o niej zatrzęsienie materiałów i nie ma sensu ich tutaj powielać. Jakiś czas temu postanowiłem połączyć przyjemne z pożytecznym i w ramach podnoszenia swoich umiejętności obsługi systemów Linux postawiłem serwer Minecraft na serwerze VPS z systemem Debian.
Minecraft ma swoje własne oficjalne oprogramowanie do serwerów multiplayer ale serwery budowane przez społeczność* są lepsze, bardziej rozbudowane, dają większe możliwości konfiguracji i rozszerzania itd. Zgaduję, że w tej chwili najpopularniejszy jest Bukkit**. Właśnie jego wybrałem i na nim się teraz skupimy.
Tak naprawdę instalacja jest banalna ale zauważyłem, że wiele osób szuka informacji i chyba przyda się taka mała ściągawka. Dodam w tym miejscu tylko tyle, że nie chcę się tutaj przesadnie skupiać na obsłudze samego Debiana. Musisz sobie z tym poradzić sam ale wskazówek w sieci jest pod dostatkiem.
Niektóre elementy poniższej listy zostały napisane pod osoby, które swój serwer VPS/dedykowany zakupiły trzy minuty temu. Jeżeli administrujesz serwerem już jakiś czas to nie wszystko musisz robić ale pewnie sam zdajesz sobie z tego sprawę
Robiłem wszystko z poziomu root’a.
Jedziemy:
- Przeczytaj to http://wiki.bukkit.org/Setting_up_a_server. Zrobimy trochę inaczej ale przeczytanie oficjalnych zaleceń nikomu nie zaszkodzi
- Połącz się z serwerem. Nie wiesz jak? Skorzystaj z PuTTY i tym tropem podążaj w google
Przy okazji dodam, że najprawdopodobniej możesz się także połączyć ze swoim serwerem za pomocą klienta SFTP. Ja polecam WinSCP. Jeżeli trudno Ci się poruszać po serwerze za pomocą konsoli to klient SFTP będzie dla Ciebie bardzo pomocny. - Przejdź do pliku /etc/apt/sources.list. Znajdują się tu adresy skąd Twój system powinien pobierać paczki oprogramowania. Ja mam tam wpisane następujące adresy:
Debian 5
deb http://ftp.de.debian.org/debian/ lenny main non-free contrib deb-src http://ftp.de.debian.org/debian/ lenny main non-free contrib deb http://security.debian.org/ lenny/updates main contrib non-free deb-src http://security.debian.org/ lenny/updates main contrib non-free deb http://www.backports.org/debian etch-backports main contrib non-free
Debian 6
deb http://ftp.pl.debian.org/debian/ squeeze main non-free contrib deb-src http://ftp.pl.debian.org/debian/ squeeze main non-free contrib deb http://security.debian.org/ squeeze/updates main contrib non-free deb-src http://security.debian.org/ squeeze/updates main contrib non-free deb http://ftp.pl.debian.org/debian/ squeeze-updates main non-free contrib deb-src http://ftp.pl.debian.org/debian/ squeeze-updates main non-free contrib deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free
- Dokonaj aktualizacji wszystkich paczek. Zrobisz to za pomocą następującej komendy:
apt-get update - Sprawdź czy masz zainstalowaną Jave (polecenie java -version powinno zwrócić jakieś informacje o Javie). Wyczytałem, że Bukkit nie zadziała z Javą w wersji OpenJDK (kiedyś chyba działał). Jeżeli nie masz Javy to uruchom następujący kod:
apt-get install sun-java6-jreTeraz wypadałoby napisać czym różni się Java w wersji JRE od JDK. Ten cytat z Wikipedii wyjaśnia wszystko:
JRE (Java Runtime Environment) – udostępnia kod bajtowy wszystkich klas standardowych i wirtualną maszynę do ich uruchamiania, zaś JDK (Java Development Kit) dodatkowo udostępnia źródła tych klas oraz dodatkowe narzędzia takie jak kompilator, paker czy debuger. Podział ten wprowadzono dlatego, że użytkownik Javy do uruchamiania programów potrzebuje tylko JRE, natomiast do programowania działających aplikacji potrzeba już JDK.
Administrując serwerem Minecraft nigdy nie miałem potrzeby czegokolwiek kompilować więc moim oczywistym wyborem jest JRE. Jeżeli jednak z jakiegoś powodu chcesz mieć JDK to pakiet ten instaluje się identycznie, wystarczy zmienić literki na końcu polecenia.
Wskazówka: podczas instalacji Javy pojawią się dwa „okienka” z informacjami o licencji. Aby w pierwszym „kliknąć” na Ok a w drugim zgodzić się na warunki licencji używaj klawisza Tab.
- W /opt/ stwórz katalog o nazwie craftbukkit.
- Do /opt/craftbukkit/ wgraj plik o nazwie start.sh o następującej zawartości:
#!/bin/sh if [ $# -eq 1 ] then if [ $1 = 'l' -o $1 = '-l' ] then echo "Pobieranie ostatniej wersji Bukkit" wget http://ci.bukkit.org/job/dev-CraftBukkit/lastBuild/artifact/target/craftbukkit-0.0.1-SNAPSHOT.jar mv -T craftbukkit.jar craftbukkit-last.jar mv -T craftbukkit-0.0.1-SNAPSHOT.jar craftbukkit.jar elif [ $1 = 'r' -o $1 = '-r' ] then echo "Pobieranie ostatniej rekomendowanej wersji Bukkit" wget http://ci.bukkit.org/job/dev-CraftBukkit/promotion/latest/Recommended/artifact/target/craftbukkit-0.0.1-SNAPSHOT.jar mv -T craftbukkit.jar craftbukkit-last.jar mv -T craftbukkit-0.0.1-SNAPSHOT.jar craftbukkit.jar fi fi java -d32 -Xincgc -Xmx768M -jar craftbukkit.jar noguiW ostatniej linijce masz taki ciąg znaków: -d32. Jeżeli Twój system jest 32-bitowy to zostawiasz tak jak jest. Jeżeli system jest 64-bitowy to zamieniasz na -d64. W tej samej linijce masz ciąg znaków: 768M. Musisz tu wpisać ile RAM’u Twojego serwera chcesz przeznaczyć na Minecrafta. Niestety gra jest napisana w Javie i zżera ogromne zasoby :/ Wydajność to wielki problem tej gry.
- Uruchom poniższą komendę aby umożliwić uruchamianie stworzonego przed chwilą pliku:
chmod +x start.sh - Uruchom nasz skrypt z wymuszeniem ściągnięcia serwera (./start.sh -r o ile jesteśmy w katalogu /opt/craftbukkit/)
- Olej wszystkie błędy
Serwer na razie tworzy pliki konfiguracyjne etc. - Gdy serwer się uruchomił napisz stop i naciśnij Enter.
- Teraz czeka nas konfiguracja serwera. Opiszę ją bardzo krótko, każdy powinien się bardziej w to zagłębić bo każdy ma inne potrzeby.
- Najpierw plik ops.txt. Wpisujemy tu linijka pod linijką kolejne nicki operatorów serwera. Wpisuj wszystko małymi literami.
- Następnie przechodzimy do pliku server.propeties. Tu jest kilka ustawień:
level-name – nazwa Twojego świata. Może pozostać domyślna wartość.
hellworld – decydujesz czy ma być dostępne tzw. piekło w Minecraft. Proponuję ustawić na false a dodatkowe światy obsługiwać za pomocą odpowiedniego pluginu np. MultiVerse.
spawn-monsters – mają się pojawiać potwory?
online-mode – podczas logowania użytkownika serwer ma sprawdzać czy posiada on oryginalną wersję gry?
spawn-animals – mają się pojawiać zwierzęta?
max-players – maksymalna ilość graczy jednocześnie
server-ip – zostaw puste
pvp – czy gracze mogą ze sobą walczyć i zadawać sobie rany?
level-seed – seed mapy***. Można pozostawić puste, wtedy seed wylosuje się sam.
server-port – port pod jakim ma być dostępny serwer. Można zostawić domyślną wartość.
allow-flight – czy dozwolone jest latanie?
white-list – wpuszczać tylko tych użytkowników, którzy są na białej liście?
spawn-protection – nie jestem pewien do końca za co odpowiada to ustawienie. Nie chce mi się szukać
Domyślam się, że określa ilość kratek od punktu startu gry (tzw. spawn) w obrębie których to klatek nie działa np. PVP, bez względu na ustawienia serwera. - Plik white-list.txt wypełniamy tylko gdy w server.propeties ustawiliśmy opcję white-list na true. W pliku tym wpisujemy nicki osób, jeden pod drugim. Tylko osoby z tej listy będą wpuszczane na serwer.
- Na tym konfiguracja serwera się kończy. Możemy ponownie go uruchomić (./start.sh). Nie powinno być już żadnych błędów. Wszystko co „wypluwa” serwer do konsoli możesz przeglądać w pliku server.log.
Serwer działa ale przestanie działać gdy tylko wyłączysz PuTTY. Jak temu zaradzić? Najprościej za pomocą pakietu screen. Najpierw instalacja (wcześniej wyłącz serwer Minecrafta poprzez polecenie stop):
apt-get install screen
Następnie w katalogu /opt/craftbukkit/ wpisujemy to:
screen -dR minecraft
Teraz uruchamiamy serwer:
./start.sh
Działa tak jak zawsze z tym, że teraz spokojnie możemy zamknąć PuTTY a serwer dalej działa. Jeżeli po wyłączeniu konsoli zapragniemy wrócić do naszego serwera to po zalogowaniu na swoje konto serwerowe wystarczy wpisać ponownie screen -dR minecraft i włączy nam się w konsoli nasz serwer. Aby z niego wyjść (oczywiście bez jego wyłączania) naciśnij kombinację przycisków Ctrl+a, puść je i naciśnij literkę d. W ten sposób wrócisz do konsoli ale serwer dalej będzie działał.
Bukkit jest aktualizowany praktycznie codziennie, czasami kilka razy na dzień. Część aktualizacji jest ustawiana jako rekomendowane, część to tylko drobne lub niepełne zmiany. Wszystkie buildy znajdziesz na stronie www.ci.bukkit.org/job/dev-CraftBukkit/. Swój serwer możesz łatwo zaktualizować dzięki tym komendom (najpierw oczywiście zatrzymaj serwer):
./start.sh -r
Zaktualizuje serwer do najnowszej rekomendowanej paczki
./start.sh -l
Zaktualizuje serwer do najnowszej paczki, niekoniecznie rekomendowanej
Po każdej aktualizacji automatycznie uruchamiany jest serwer. Jeżeli po aktualizacji coś jest nie tak (serwer się nie uruchamia, są jakieś błędy etc.) to Twoja ostatnia wersja serwera jest pod nazwą craftbukkit-last.jar.
Gratuluję, Twój serwer powinien już działać. Możesz się na niego zalogować jako gracz podając w kliencie Minecraft adres IP swojego serwera oraz port w postaci IP:port. Jeżeli port zostawiłeś domyślny (25565) to możesz go pominąć i podać tylko IP. Oczywiście można również ustawić to w taki sposób aby nie wpisywać IP a jakąś domenę ale to już sprawa na inny wpis…
Prawdziwą siłą Bukkita jest duża baza pluginów, które ułatwiają pracę administratorom/moderatorom, dodają nowe funkcjonalności itd. Namawiam do regularnego sprawdzania bazy pluginów.
Ciekawe artykuły o instalacji/uruchomieniu/obsłudze serwera Bukkit: [1], [2], [3]. Czytaj je jednak z głową bo nie wszystko tam jest prawidłowe… Na przykład zachęta do instalacji OpenJDK lub gorszy sposób uruchomienia serwera (komenda java -Xmx2048M -Xms2048M -jar minecraft_server.jar, która jest odradzana na oficjalnym forum Bukkita).
EDIT 09.05.2011
Gorąco namawiam do przeczytania mojego drugiego wpisu na temat serwera Minecraft. Znajdziesz tam kilka bardzo pomocnych skryptów do zarządzania Craftbukkit.
Przypisy
* – Nigdy nie sprawdzałem jak to wygląda od strony technicznej ale wyczytałem, że CraftBukkit to nakładka na oficjalny serwer, która udostępnia nowe możliwości/ulepszoną komunikację z oficjalnym serwerem. A więc nie jestem pewien czy można tu mówić o samodzielnym serwerze. Dla mnie to nie ma znaczenia ale wyjaśniam żeby ktoś mnie nie posądził, że podaję błędne informacje
** – Tak naprawdę to serwer nazywa się CraftBukkit a Bukkit to API dla deweloperów dzięki któremu łatwiej im się komunikować w ich pluginach z serwerem Minecrafta. Dla uproszczenia będę nazywał serwer jako Bukkit. Sami twórcy tak postępują
*** – Każda mapa w Minecraft ma tzw. seed czyli ciąg znaków na podstawie którego generator terenu generuje kolejne porcje mapy. Dla graczy oznacza to ważną informację: jeżeli sami podamy seed to ilekroć będzie on taki sam tyle razy wygeneruje nam się identyczna mapa.
EDIT 29.02.2012
Z nieukrywaną przyjemnością chciałbym zaprosić wszystkich na mój serwer Minecraft czyli na craftlandia.pl. Miłej zabawy!
Blog przede wszystkim o Internecie i mojej pasji jaką jest tworzenie stron www. Ale nie ograniczam się do jednej tematyki, piszę o wszystkim o czym mam ochotę :-)
Dvorak napisał: 28.04.11 o godzinie 17:20
W jakiej firmie masz VPS-a?
P.S. Stworzysz kiedyś liste mailingową z nowymi wpisami?
MariuszT napisał: 28.04.11 o godzinie 17:33
W tej chwili http://hitme.net.pl/, wykupiony tylko pod Minecrafta i „zabawy” z Debianem, Apache, MySQL itd. Nie ma raczej problemów. Sam Minecraft zżera potężne ilości RAM’u ale lagów raczej nie ma. Jednak na serwerze nie ma więcej jak cztery osoby jednocześnie więc trudno mi wyciągać konkretne wnioski.
Stworzę
W ogóle chciałbym trochę przebudować bloga ale nie ma kiedy… Dzisiaj poszukam jakiegoś plugina do tej listy.
shutdown napisał: 28.04.11 o godzinie 18:43
Przy zabawie z TNT przecie często serwerkowi brakuje zasobów. ;P
MariuszT napisał: 28.04.11 o godzinie 18:56
Serwerowi zawsze brakuje zasobów. Nawet jak nikt nie gra to w konsoli płacze, że za duże obciążenie
A przy zabawie z TNT przeważnie serwer sobie daje dobrze radę a lagi są spowodowane naszymi klientami gry. Lagów tak naprawdę nie ma tylko gra się zacina, nie wyrabia z grafiką/obliczeniami. W efekcie na serwerze już dawno jest po zabawie a my nadal widzimy wybuchy i animację poklatkową
shutdown napisał: 30.04.11 o godzinie 23:30
Wszystko przez jave ;P
Gry powinny być w C++…
Dvorak napisał: 01.05.11 o godzinie 14:55
@shutdown
Właśnie.
U mnie stoi 5 serwerów SA:MP-a (nohup, C++ ;P), w pełni działający directadmin (apa, mysql, bind, dovecot, exim, itd), serwer czasu, głosowy mumble i nigdy nie przypominam sobie żeby były jakiekolwiek były lagi/przeciążenia. Debian 6.0 (oryginalnie 5.0, uaktualniłem).
mati napisał: 07.05.11 o godzinie 11:01
no, no – nie wiedzialem, że zacząłeś bawić się debianem
.
).
No i nie wiedziałem, że VPS tak staniały (choć pierwszy z oferty za 19 zł to moim zdaniem coś słabszego od klasycznego hostingu
Pokompiluj sobie – poczujesz pełnie linuxa
. APT-GET jest dla dziadków
MaDMikE napisał: 06.06.11 o godzinie 23:13
Więc chciałem się dowiedzieć ile osób pociągnie VPS 1024MB Debian 32bit.
MariuszT napisał: 06.06.11 o godzinie 23:24
1GB RAM’u to wbrew pozorom nie jest mało. Problem w tym, że te wszystkie VPS’y stoją na strasznie obciążonych maszynach i bez względu na to jakie mamy tam konto to nigdy nie pozbędziemy się lagów. Co innego dedyk.
Do tej pory testowałem dwa serwery. Jeden 1,5GB RAM Burst w tym 1GB gwarantowane i drugi 2GB RAM Burst w tym 1,5GB gwarantowane. Na obu zdarzały się lagi nawet gdy grała jedna osoba ale grało się wygodnie. Gdy były trzy osoby to było jeszcze OK ale gdy grało pięciu lub więcej graczy i to w najpopularniejszych godzinach to już bywało nieprzyjemnie. Dało się grać ale jednak cofanie klocków występowało dość często.
Ciężko jednoznacznie odpowiedzieć ile taki serwer uciągnie użytkowników bo każdy VPS jest inny ale nie spodziewaj się cudów. Pograsz co najwyżej z kilkoma kolegami.
pet napisał: 18.08.11 o godzinie 17:37
Coś mogę powiedzieć na temat hostowania minecrafta, jestem głównym adminem http://www.maxrate.pl
Sama gra bez pluginów działająca na stabilnym bukkicie nie chodzi źle, ale dopiero się dzieje jak użytkownicy instalują te swoje pluginy, które w większości wypadków gryzą się z grą, w sumie to ciało obce. Nie dobrze że gra jest w javie, fakt pożera ogromne zasoby pamięci i CPU, kiepskie rozwiązanie jeśli chodzi o generowanie logów, nie raz miałem przypadki że klientom logi rosły w przeciągu 1 godziny do 2GB, duże niebezpieczeństwo dla nas, serwer wymaga dodatkowego oskryptowania. Potwierdzam, VPS kompletnie nie nadaję się na tą grę, porządny dedyk z min 32GB ramu + xeon etc, najlepiej aby na serwerze chodził tylko minecraft. Podstawa to oczywiście bardzo wydajne dyski z solidnym kontrolerem RAID i jego odpowiednią konfiguracją. Źle dobrany sprzęt pod względem dysków twardych spowoduje ogromne lagi i cofki na serwerze, poczytajcie sobie o IOWAIT to będziecie wiedzieli o co chodzi.
Generalnie fenomen minecrafta jest poparty solidną grywalnością, jednakże na boga niech w końcu dopracują porządnie ten kod albo wymyślą coś co pozwoli nam adminom odpocząć w kuchni..
Redzior napisał: 06.01.12 o godzinie 1:31
Witam Cię Mariuszu
PS. Tak jak prosiłeś nie pisać maili oraz spamowac na gg wiec pisze tu w komentarzach
Właśnie z Twojego bloga dowiedziałem się jak odpalić serwer mine na vps, ale mam mały problem …
mogę powiedzieć jedynie tyle, że poradziłem sobie z nim w sposób idiotyczny … napisałem prostego batch’a sprawdzającego czy serwer śmiga (z Twojego atykułu „Łatwiejsze zarządzanie serwerem Minecraft”) ale tez dodałem warunek sprawdzający czy proces wogole istnieje w danym momencie (pgrep –s Java) jeśli go nie ma ponownie uruchamia serwer.
Uruchamiam serwer mine, ładnie się załaduje itd. pogra się troszeczkę (czasem 5 , czasem 1h) i nagle bach… występuje klika problemów, jak się tam serwerowi umyśli:
[1]serwer czasem łapie zawias – wchodzę przez screen do niego i wpisuje ? lub help i niestety nic mi nie zwraca, traktuje to jako zawias wiec musze go zabijać bo nie da się wejść na grę ani tez wyłączyć gry w inny sposób np. poprzez komendę stop
[2]serwer otrzymuje jakiś błąd – zwraca mi ze logi błędu są zapisane w jakimś tam pliczku (przykład pliku w linku: http://www61.zippyshare.com/v/29533697/file.html) po czym serwer się wyłącza. czytałem ten błąd i niestety nie czaję o co w nim biega
[3]serwer po prostu się wyłącza w jakiś dziwny sposób, ni to zawias, ni błąd – nie da się wejść na grę
W każdym radzie, gdy wystąpi któryś z powyższych błędów, serwer zapisuje mapę jednak postacie są cofnięte… trochę sobie pomogłem rozwianiem cron’a co minutkę wywołuje batcha który sprawdza działanie serwera oraz jeśli działa to zapisuje stan gry (save-all) jednak często się tak zdarza, ze nawet po save postacie są w innych miejscach.
Próbowałem aktualizacji Javy, ustawiania uprawnień (chmod) na pliki serwerowe oraz foldery, zmieniałem ilość ramu (w Twoim artykule było 768 ja zmieniłem na 1024).
Brakuje mi już pomysłów jak rozwiązać ten problem.
Maszyna i system
VPS
CPU 1,8GHz – gwarantowane
RAM 2GB – gwarantowane
System Debian 6.0.3
HDD mało ważny ale 45GB
Z góry dziękuję za pomoc. Pozdrawiam
MariuszT napisał: 06.01.12 o godzinie 2:05
Hmmm „uwielbiam” te zrzuty z logów Javy
Tak jakby Java nie mogła czegoś zapisać na dysk i się wywala. Może jej też brakować pamięci. Ale ja też nie potrafię czytać tych błędów :/
Zaktualizuj Jave do 1.7
Zaktualizuj Bukkita i wszystkie pluginy
Rozumiem, że miejsca na dysku jest pod dostatkiem?
Ustaw pamięć dla MC przynajmniej 1536MB
To najprostsze wskazówki ale może coś pomoże.
Redzior napisał: 06.01.12 o godzinie 19:07
Zaaktualizowałem teraz jave
Wersja serwera jest najnowsza
Miejsca na dysku jest tak jak piszesz pod dostatkiem
Ale gdy ustawiłem 1536M na mine, serwer chodził ale gdy ktoś wchodził na grę orazu wywalało błąd (ten co poprzednio podałem z linkiem), dochodzę do wniosku, że ten błąd jest wywoływany przez brak pamięci ram.
Ogólnie z tego co tak mi już przychodzi na myśl to plik wymiany SWAP – może on jest powodem, bo java coś o nim wspomina w swoim logu.
Jak narazie testuję serwer z jawą 1.7 na pamięci 768M – zobaczymy co będzie.
MariuszT napisał: 06.01.12 o godzinie 19:11
Zainstaluj sobie htop i zobacz jakie jest zużycie procesora i pamięci.
Redzior napisał: 06.01.12 o godzinie 19:19
Ledwo co napisałem poprzedniego posta to zawiesił się serwer. No ale ok uruchomiłem ponownie zainstalowałem htop i nawet screena załączam, że pamięć raczej jest.
http://imageshack.us/photo/my-images/215/vps1.jpg/
Redzior napisał: 06.01.12 o godzinie 19:34
Takie małe ostrzeżenie dla wszystkich
Jeśli chcecie uruchomić mine bez parametrów czyli:
java -jar [plik serwera mine]
to spowoduje to zawieszeniem całego vps-a (przynajmniej tak jest w moim przypadku).
Milten napisał: 31.01.12 o godzinie 17:02
dzieki wielkie narescie serwa odpalilem IP: 62.181.182.133