Ubuntu Linux - Minecraft Server Installation
Hier ein kleines HowTo um Minecraft Server auf einem Ubuntu Linux 11.04 Server zum laufen zu bringen.
Vorbereitungen
Zuerst muss Java Runtime Environment installiert werden. Dazu muss als erstes in der Datei /etc/apt/sources.list Das Partner Repository aktiviert werden:
## Uncomment the following two lines to add software from Canonical's ## 'partner' repository. ## This software is not part of Ubuntu, but is offered by Canonical and the ## respective vendors as a service to Ubuntu users. deb http://archive.canonical.com/ubuntu natty partner deb-src http://archive.canonical.com/ubuntu natty partner
nun kann es installiert werden
aptitude update aptitude install sun-java6-jre
nun sollte für Minecraft ein eigener unprivilegierter User angelegt werden:
useradd -d /srv/minecraft -m -s /bin/bash minecraft passwd -l minecraft
Installation Minecraft Server
Einfach die Minecraft Jar Datei in das Homeverzeichnis laden,
su - minecraft wget -q -c http://ci.bukkit.org/job/dev-CraftBukkit/promotion/latest/Recommended/artifact/target/craftbukkit-0.0.1-SNAPSHOT.jar
dann den aktuellen Download auf die Standarddatei verlinken:
ln -s craftbukkit-0.0.1-SNAPSHOT.jar craftbukkit.jar
und zum schluss die Jar Datei einmal starten, damit alles angelegt und generiert wird:
java -Xmx1536M -jar craftbukkit.jar
Update Minecraft Server
- neustes bukkit Server Paket laden => http://wiki.bukkit.org/Setting_up_a_server
- Minecraft Server stoppen:
/etc/init.d/minecraft stop
- neues bukkit Paket korrekt nach craftbukkit.jar verlinken:
ln -s craftbukkit-<VERSION>-SNAPSHOT.jar craftbukkit.jar
- Minecraft Server starten:
/etc/init.d/minecraft start
- Im
server.logüberprüfen ob der Server wieder normal startet und keine Plugin-Konflikte vorliegen
Init Startup Skript
Nun kann der Server noch mittels INIT Skript gestartet werden. Dafür folgendes Skript als root user ablegen und ihm das Ausführrecht geben:
chmod +x /etc/init.d/minecraft
/etc/init.d/minecraft
#!/bin/bash
# /etc/init.d/minecraft
### BEGIN INIT INFO
# Provides: minecraft
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Minecraft server
# Description: Init script for minecraft/bukkit server, with rolling logs and use of ramdisk for less lag.
### END INIT INFO
### Based on http://www.minecraftwiki.net/wiki/Server_startup_script
# Name of server.jar file
SERVICE='craftbukkit.jar'
# User that should run the server
USERNAME="minecraft"
# Path to minecraft directory
MCPATH='/srv/minecraft'
CPU_COUNT=2
# Change the values of -Xmx###M and -Xms###M to how mutch ram you want to give to the
# server, remember to make room for the ramdisk
INVOCATION="java -Xmx1536M -Xms1536M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar $SERVICE nogui"
# Where the world backups should go
BACKUPPATH='/backup/minecraft/worlds'
# Where the logs are copied when running log-roll
LOGPATH="${MCPATH}/logs"
# Where the whole minecraft directory is copied when whole-backup is runned
WHOLEBACKUP='/backup/minecraft/whole'
# Where the world is located on the disk
WORLDSTORAGE='/srv/minecraft/world/'
#Path to the the mounted ramdisk default in ubuntu: /dev/shm
RAMDISK='/dev/shm'
ME=`whoami`
as_user() {
if [ $ME == $USERNAME ] ; then
bash -c "$1"
else
su - $USERNAME -c "$1"
fi
}
datepath() {
# datepath path filending-to-check returned-filending
if [ -e $1`date +%x`$2 ]
then
echo $1`date +%FT%T`$3
else
echo $1`date +%F`$3
fi
}
mc_start() {
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "Tried to start but $SERVICE was already running!"
else
echo "$SERVICE was not running... starting."
# rsync -tr $MCPATH/world-disc /dev/shm/
cd $MCPATH
as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION"
sleep 7
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is now running."
else
echo "Could not start $SERVICE."
fi
fi
}
mc_saveoff() {
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is running... suspending saves"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
sync
sleep 10
else
echo "$SERVICE was not running. Not suspending saves."
fi
}
mc_saveon() {
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is running... re-enabling saves"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
else
echo "$SERVICE was not running. Not resuming saves."
fi
}
mc_stop() {
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is running... stopping."
as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
sleep 10
as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
sleep 7
else
echo "$SERVICE was not running."
fi
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE could not be shut down... still running."
else
echo "$SERVICE is shut down."
fi
}
log_roll() {
path=`datepath $MCPATH/logs/server_ .log.gz .log`
as_user "mv $MCPATH/server.log $path && gzip $path"
}
mc_whole_backup() {
path=`datepath $WHOLEBACKUP/mine_`
as_user "cp -r $MCPATH $path"
}
mc_world_backup() {
echo "Backing up minecraft world"
path=`datepath $BACKUPPATH/world_ .tar.bz2 .tar.bz2`
as_user "tar -hcjf $path $MCPATH/world"
}
to_ram() {
if [ -L $MCPATH/world ]
then
as_user "rsync -rt $WORLDSTORAGE/ $RAMDISK/world"
echo "World copied to ram"
fi
}
to_disk() {
as_user "rsync -rt $MCPATH/world/ $WORLDSTORAGE"
echo "World copied to disk"
}
case "$1" in
start)
# Starts the server
to_ram
mc_start
;;
stop)
# Stops the server
as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN!\"\015'"
mc_stop
to_disk
;;
restart)
# Restarts the server
as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER REBOOT IN 10 SECONDS.\"\015'"
mc_stop
mc_start
;;
backup)
# Backups world
as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Backing up world.\"\015'"
mc_saveoff
mc_world_backup
mc_saveon
as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Backup complete.\"\015'"
;;
whole-backup)
# Backups everything
mc_whole_backup
;;
to-disk)
# Writes from the ramdisk to disk, in case the server crashes.
# Using ramdisk speeds things up alot, especially if you allow
# teleportation on the server.
mc_saveoff
to_disk
mc_saveon
;;
connected)
# Lists connected users
as_user "screen -p 0 -S minecraft -X eval 'stuff list\015'"
sleep 3s
tac $MCPATH/server.log | grep -m 1 "Connected"
;;
log-roll)
# Moves and Gzips the logfile, a big log file slows down the
# server ALOT (what was notch thinking?)
as_user "screen -p 0 -S minecraft -X eval 'stuff \"say ROUTINE REBOOT IN 10 SECONDS.\"\015'"
mc_stop
log_roll
mc_start
;;
status)
# Shows server status
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is running."
else
echo "$SERVICE is not running."
fi
;;
*)
echo "Usage: /etc/init.d/minecraft {start|stop|backup|whole-backup|log-roll|to-disk|connected|status|restart}"
exit 1
;;
esac
exit 0
nun noch den autostart und starten:
update-rc.d minecraft defaults 99 /etc/init.d/minecraft start
Das Init Skript hat folgende Startparameter:
/etc/init.d/minecraft {start|stop|backup|whole-backup|log-roll|to-disk|connected|status|restart}
Map-Renderer Minecraft Overviewer
1. In /etc/apt/sources.list eintragen:
deb http://overviewer.org/debian ./
2. Dann APT updaten und Paket installieren
apt-get update && apt-get install minecraft-overviewer
3. terrain.png (oder anderes Theme) in selbes Verzeichnis wie overviewer.py kopieren
4. ... und rendern lassen:
overviewer.py /home/username/mcserver /home/username/mcmap
Server Konfiguration (server.properties)
Minecraft Server Konfiguration
Minecraft Item Data Values
http://www.minecraftwiki.net/wiki/Data_values
Minecraft mcMMO Plugin PHP StatViewer
Minecraft Plugin mcMMO PHP StatViewer
Nagios Überwachung
/etc/nagios-plugins/config/tcp_udp.cfg
# 'check_tcp' command definition
define command{
command_name check_tcp
command_line /usr/lib/nagios/plugins/check_tcp -H '$HOSTADDRESS$' -p '$ARG1$' -w 5 -c 10
}
Änderungen an der Nagios Host Konfig nagios3.cfg
define service {
host_name hostname
service_description Minecraft Port
check_command check_tcp!25565
use generic-service
notification_interval 0 ; set > 0 if you want to be renotified
}