summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip Abernethy2015-07-03 19:16:00 +0200
committerPhilip Abernethy2015-07-03 19:16:00 +0200
commit2c972cc0990cbd02218c6ad916b503b8c707f72a (patch)
treedc4350977bca49990125d2ee7db8a9e4d1392e43
downloadaur-2c972cc0990cbd02218c6ad916b503b8c707f72a.tar.gz
Initial commit
-rw-r--r--.SRCINFO33
-rw-r--r--PKGBUILD40
-rw-r--r--conf.minecraft37
-rw-r--r--minecraft-server.install33
-rw-r--r--minecraftctl124
-rw-r--r--minecraftd6
-rw-r--r--minecraftd-diag7
-rw-r--r--minecraftd.service14
8 files changed, 294 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 00000000000..1b0a2d8685d
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,33 @@
+pkgbase = minecraft-server
+ pkgdesc = Minecraft server unit files, script, and jar
+ pkgver = 1.8.6
+ pkgrel = 1
+ url = http://minecraft.net/
+ install = minecraft-server.install
+ arch = any
+ license = custom
+ depends = java-runtime-headless
+ depends = systemd
+ depends = screen
+ depends = expect
+ conflicts = minecraft-server-systemd
+ conflicts = minecraft-canary
+ noextract = minecraft_server.1.8.6.jar
+ options = !strip
+ options = emptydirs
+ backup = etc/conf.d/minecraft
+ source = https://s3.amazonaws.com/Minecraft.Download/versions/1.8.6/minecraft_server.1.8.6.jar
+ source = minecraftd
+ source = minecraftd-diag
+ source = minecraftd.service
+ source = minecraftctl
+ source = conf.minecraft
+ sha256sums = 7fc66b2b54f0f4d65fdd6d6484a50f432c144ef02072d3435d5660f120f58e0d
+ sha256sums = 043101c29d4b4f9092cb93ef52168cfe3d16d49ff573136f4fbb45071a38a5d1
+ sha256sums = de03317d02668bb71ec160fff497c7fbfe8b03ffff2950c6a0bcfb39f69cd214
+ sha256sums = 6eb4c085b8377712671445b891a3a2cf2a17cf7a7bea66be456a980c2b620e23
+ sha256sums = 472e06e1bd63838e88ace0bd2f971f72f2efd9e541cc0956599a44c324fd49ac
+ sha256sums = 738e10185df160d190a5f4f0226de110d67ba023877e4999a6d3ef41c9918ed6
+
+pkgname = minecraft-server
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 00000000000..d6ac423f1e3
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,40 @@
+# Maintainer: Philip Abernethy <chais.z3r0@gmail.com>
+
+pkgname=minecraft-server
+pkgver=1.8.6
+pkgrel=1
+pkgdesc="Minecraft server unit files, script, and jar"
+arch=(any)
+url="http://minecraft.net/"
+license=('custom')
+depends=('java-runtime-headless' 'systemd' 'screen' 'expect')
+conflicts=('minecraft-server-systemd' 'minecraft-canary')
+options=(!strip emptydirs)
+install=minecraft-server.install
+backup=('etc/conf.d/minecraft')
+source=(https://s3.amazonaws.com/Minecraft.Download/versions/${pkgver}/minecraft_server.${pkgver}.jar
+ minecraftd
+ minecraftd-diag
+ minecraftd.service
+ minecraftctl
+ conf.minecraft)
+noextract=("minecraft_server.${pkgver}.jar")
+sha256sums=('7fc66b2b54f0f4d65fdd6d6484a50f432c144ef02072d3435d5660f120f58e0d'
+ '043101c29d4b4f9092cb93ef52168cfe3d16d49ff573136f4fbb45071a38a5d1'
+ 'de03317d02668bb71ec160fff497c7fbfe8b03ffff2950c6a0bcfb39f69cd214'
+ '6eb4c085b8377712671445b891a3a2cf2a17cf7a7bea66be456a980c2b620e23'
+ '472e06e1bd63838e88ace0bd2f971f72f2efd9e541cc0956599a44c324fd49ac'
+ '738e10185df160d190a5f4f0226de110d67ba023877e4999a6d3ef41c9918ed6')
+
+package() {
+ install -Dm755 "${srcdir}/minecraftd" "${pkgdir}/usr/bin/minecraftd"
+ install -Dm755 "${srcdir}/minecraftd-diag" "${pkgdir}/usr/bin/minecraftd-diag"
+ install -Dm755 "${srcdir}/minecraftctl" "${pkgdir}/usr/bin/minecraftctl"
+
+ install -Dm644 "${srcdir}/minecraft_server.${pkgver}".jar "${pkgdir}/srv/minecraft/minecraft_server.${pkgver}".jar
+ ln -s "minecraft_server.${pkgver}.jar" "${pkgdir}/srv/minecraft/minecraft_server.jar"
+ install -Dm644 "${srcdir}/minecraftd.service" "${pkgdir}/usr/lib/systemd/system/minecraftd.service"
+ install -Dm644 "${srcdir}/conf.minecraft" "${pkgdir}/etc/conf.d/minecraft"
+
+ install -d "${pkgdir}/srv/minecraft/backup"
+}
diff --git a/conf.minecraft b/conf.minecraft
new file mode 100644
index 00000000000..a78e2a15c47
--- /dev/null
+++ b/conf.minecraft
@@ -0,0 +1,37 @@
+# MINECRAFT SERVER LAUNCH CONFIGS
+# not to be confused with server.properties.
+
+# Server root directory
+_SRVDIR=/srv/minecraft
+
+# World directory (relative to SRVDIR)
+# Ensure that this matches what is in your server.properties,
+# or else the wrong folder will be backed up!
+WORLD=world
+
+# Maximum RAM usage (change to suit your needs)
+MAXHEAP=1024M
+
+# Minimum RAM usage (change to suit your needs)
+MINHEAP=512M
+
+# Number of concurrent threads (no more than the number of logical processors in your system)
+THREADS=1
+
+# Where to store backup files
+BACKUPPATH=/srv/minecraft/backup
+
+# What to say to the server when backup starts
+BACKUPSTARTMSG="WORLD BACKUP STARTING. Server going read-only..."
+
+# What to say when to the server when backup ends
+BACKUPENDMSG="WORLD BACKUP ENDED. Server going read-write..."
+
+## Only change these if you know what you're doing
+
+# Server JAR file
+SERVERJAR=minecraft_server.jar
+SERVICE=${SERVERJAR}
+
+# User to run server under
+MCUSER=minecraft
diff --git a/minecraft-server.install b/minecraft-server.install
new file mode 100644
index 00000000000..3031324e002
--- /dev/null
+++ b/minecraft-server.install
@@ -0,0 +1,33 @@
+post_install() {
+ post_upgrade
+}
+
+post_upgrade() {
+ getent group "minecraft" &>/dev/null || groupadd -r minecraft 1>/dev/null
+ getent passwd "minecraft" &>/dev/null && usermod -s "/usr/bin/nologin" minecraft &>/dev/null || useradd -r -g minecraft -d "/srv/minecraft" -s "/usr/bin/nologin" minecraft 1>/dev/null
+ touch /srv/minecraft/server.log
+ chown -R minecraft:minecraft "/srv/minecraft" 1>/dev/null
+ ln -s /srv/minecraft/server.log /var/log/minecraft.log &>/dev/null
+ # Removes old data from previous version
+ cat << EOF
+==> World data is stored under /srv/minecraft
+==> The server runs as "minecraft", not root
+==> You can access the server's console as root with:
+ $ screen -r minecraft
+==> The systemd service is called "minecraftd.service"
+==> Calling "stop" or "restart" with systemctl will gracefully exit the server, saving world data
+==> Modify /etc/conf.d/minecraft to change the invocation of the server if you wish
+==> A script at /usr/bin/minecraftctl is also provided. See the wiki for details on its usage.
+==> For the server to start you have to accept the EULA in /srv/minecraft/eula.txt
+
+EOF
+}
+
+post_remove() {
+ if getent passwd "minecraft" >/dev/null; then
+ userdel minecraft >/dev/null
+ fi
+ if getent group "minecraft" >/dev/null; then
+ groupdel minecraft >/dev/null
+ fi
+}
diff --git a/minecraftctl b/minecraftctl
new file mode 100644
index 00000000000..55ed49c0a53
--- /dev/null
+++ b/minecraftctl
@@ -0,0 +1,124 @@
+#!/bin/bash
+
+
+# Adapted from generic minecraft init script
+# http://www.minecraftwiki.net/wiki/Tutorials/Server_startup_script
+#
+# Main Differences:
+# - Start stop and reload is handled by systemd, removed
+# - update handled by pacman, removed
+# - changed from init script to "minecraftctl" command.
+# - uses /etc/conf.d/minecraftd for variables
+#
+# Changes:
+#
+# Changed running screen to work as root, broke it out into mc_docommand
+# Commented echo commands for successful execution to not spam the log.
+
+
+. /etc/conf.d/minecraft || echo "can't source /etc/conf.d/minecraft"
+
+
+ME=`whoami`
+as_user() {
+ if [ $ME == $MCUSER ] ; then
+ bash -c "$1"
+ else
+ su - $MCUSER -c "$1"
+ fi
+}
+
+mc_saveoff() {
+ if pgrep -u $MCUSER -f $SERVICE > /dev/null
+ then
+ #echo "$SERVICE is running... suspending saves"
+ mc_docommand "say $BACKUPSTARTMSG"
+ mc_docommand save-off
+ mc_docommand save-all
+ sync
+ sleep 10
+ else
+ echo "$SERVICE is not running. Not suspending saves."
+ fi
+}
+
+mc_saveon() {
+ if pgrep -u $MCUSER -f $SERVICE > /dev/null
+ then
+ #echo "$SERVICE is running... re-enabling saves"
+ mc_docommand save-on
+ mc_docommand "say $BACKUPENDMSG"
+ else
+ echo "$SERVICE is not running. Not resuming saves."
+ fi
+}
+
+mc_backup() {
+ mc_saveoff
+
+ NOW=`date "+%Y-%m-%d_%Hh%M"`
+ BACKUP_FILE="$BACKUPPATH/${WORLD}_${NOW}.tar"
+ #echo "Backing up minecraft world..."
+ #as_user "cd $_SRVDIR && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"
+ as_user "tar -h -C \"$_SRVDIR\" -cf \"$BACKUP_FILE\" \"$WORLD\""
+
+ #echo "Backing up $SERVICE"
+ as_user "tar -h -C \"$_SRVDIR\" -rf \"$BACKUP_FILE\" \"$SERVICE\""
+ #as_user "cp \"$_SRVDIR/$SERVICE\" \"$BACKUPPATH/minecraft_server_${NOW}.jar\""
+
+ mc_saveon
+
+ #echo "Compressing backup..."
+ as_user "gzip -f \"$BACKUP_FILE\""
+ #echo "Done."
+}
+
+mc_command() {
+ command="$1";
+ if pgrep -u $MCUSER -f $SERVICE > /dev/null
+ then
+ pre_log_len=`wc -l "$_SRVDIR/server.log" | awk '{print $1}'`
+ #echo "$SERVICE is running... executing command"
+ mc_docommand "$command"
+ sleep .1 # assumes that the command will run and print to the log file in less than .1 seconds
+ # print output
+ tail -n $[`wc -l "$_SRVDIR/server.log" | awk '{print $1}'`-$pre_log_len] "$_SRVDIR/server.log"
+ else
+ echo "$SERVICE is not running. Couldn't executed command."
+ fi
+}
+
+mc_docommand() {
+ screen -p 0 -S minecraft -X stuff "`printf \"$1\r\"`"
+}
+
+
+#Start-Stop here
+case "$1" in
+ backup)
+ mc_backup
+ ;;
+ status)
+ if pgrep -u $MCUSER -f $SERVICE > /dev/null
+ then
+ echo "$SERVICE is running."
+ else
+ echo "$SERVICE is not running."
+ fi
+ ;;
+ command)
+ if [ $# -gt 1 ]; then
+ shift
+ mc_command "$*"
+ else
+ echo "Must specify server command (try 'help'?)"
+ fi
+ ;;
+
+ *)
+ echo "Usage: $0 {backup|status|command \"server command\"}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/minecraftd b/minecraftd
new file mode 100644
index 00000000000..997f9288200
--- /dev/null
+++ b/minecraftd
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+. /etc/conf.d/minecraft || echo "can't source /etc/conf.d/minecraft"
+
+cd $_SRVDIR
+screen -dmS minecraft java -Xmx${MAXHEAP} -Xms${MINHEAP} -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=${THREADS} -XX:+AggressiveOpts -jar ${_SRVDIR}/${SERVERJAR} nogui
diff --git a/minecraftd-diag b/minecraftd-diag
new file mode 100644
index 00000000000..a0bd0458d3c
--- /dev/null
+++ b/minecraftd-diag
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+. /etc/conf.d/minecraft || echo "can't source /etc/conf.d/minecraft"
+
+cd $_SRVDIR
+echo "If the next command executes correctly, then something is wrong with screen."
+su minecraft -c "PATH=/opt/java/bin/:/usr/bin/:$PATH java -Xmx${MAXHEAP} -Xms${MINHEAP} -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=${THREADS} -XX:+AggressiveOpts -jar ${_SRVDIR}/${SERVERJAR} nogui"
diff --git a/minecraftd.service b/minecraftd.service
new file mode 100644
index 00000000000..d649d633d61
--- /dev/null
+++ b/minecraftd.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Minecraft server daemon
+After=network.target
+
+[Service]
+User=minecraft
+Group=minecraft
+ExecStart=/usr/bin/minecraftd
+Type=oneshot
+RemainAfterExit=yes
+ExecStop=/usr/bin/screen -S minecraft -X stuff 'say Server Shutting Down in 5 Seconds\n' ; /usr/bin/sleep 5 ; /usr/bin/screen -S minecraft -X stuff 'stop\n' ; /usr/bin/expect -c "exec screen -x minecraft ; wait ; exit"
+
+[Install]
+WantedBy=multi-user.target