summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominic Radermacher <dominic@familie-radermacher.ch>2023-03-05 13:08:24 +0100
committerDominic Radermacher <dominic@familie-radermacher.ch>2023-03-05 13:08:24 +0100
commit21f2ee38b56670aa24d59a48ac27811a8520f6f2 (patch)
treee7cf859da93e535e60b07cfc4eeb825b9d299d2b
parent275a173d9223b9d194c41cc61e35c3d461de13ae (diff)
add systemd service file, prepare for multiple instances
-rw-r--r--PKGBUILD17
-rwxr-xr-xattach13
-rwxr-xr-xminecraft-bedrock-server.install3
-rw-r--r--minecraft@.service53
-rwxr-xr-xrunserver.sh4
5 files changed, 78 insertions, 12 deletions
diff --git a/PKGBUILD b/PKGBUILD
index 7222c10..e05263a 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,7 +1,7 @@
# Maintainer: Dominic Radermacher <dominic@familie-radermacher.ch>
pkgname=minecraft-bedrock-server
-pkgver=1.19.51.01
-pkgrel=1
+pkgver=1.19.63.01
+pkgrel=2
pkgdesc="Minecraft Bedrock Server"
arch=('x86_64')
url="https://www.minecraft.net/en-us/download/server/bedrock/"
@@ -15,19 +15,22 @@ backup=('srv/minecraft/bedrock-server/server.properties'
install=${pkgname}.install
options=('!strip')
source=("https://minecraft.azureedge.net/bin-linux/bedrock-server-${pkgver}.zip"
- 'runserver.sh')
-sha512sums=('b4554cb0fe66bc742d80e2c6143faa6ad10412645207a845a84cbd99550888a0e9e80df764419ff50b24abbdd63d1260c2532c79add2dd4e012604e5bff59173'
- 'c9d0680e94bcb0c944c17e184cbfc1193eb0c7a07df784082e16d794cb93755ae0753ddfebe0cbf8d28185a486870193dc5394ca10774bc56c9102fd52734d43')
+ "minecraft@.service"
+ "attach")
+sha512sums=('59e52498b2d6e3d97ae588e1910f9adcc0039319738d3ade7539252129d3a4c22014d44aa48ec0feb92776fd611e9b456f6d09e133b23916e84db5899edd8a00'
+ '8a67a6f8172b29f1883da6cc13a8d15c800804b95256477cb21f2cfd588998c4b33f2e3b5cb57e77785b542141bc2809cef0e66ad49240c128cc54fd16cfe30f'
+ 'b23ae304d24d1c8579eb8e4d9ca0b80d326a50f01c13040c0e37b3a7caeeae8cbcb02e85d904d669b83d2c19c54bfe4ebb2c9311d89660de0b5015bf9a492071')
package() {
cd "$srcdir"
install -m 700 -d ${pkgdir}/srv/minecraft
install -m 700 -d ${pkgdir}/srv/minecraft/bin
- install -m 700 runserver.sh ${pkgdir}/srv/minecraft/bin
+ install -m 755 attach ${pkgdir}/srv/minecraft/bin
install -m 700 -d ${pkgdir}/srv/minecraft/bedrock-server
install -m 700 bedrock_server ${pkgdir}/srv/minecraft/bedrock-server
install -m 600 -t ${pkgdir}/srv/minecraft/bedrock-server bedrock_server_how_to.html release-notes.txt server.properties *.json
- #install -m 600 -t ${pkgdir}/srv/minecraft/bedrock-server bedrock_server_symbols.debug
#cp -r behavior_packs definitions resource_packs structures ${pkgdir}/srv/minecraft/bedrock-server
cp -r behavior_packs config definitions resource_packs ${pkgdir}/srv/minecraft/bedrock-server
+ install -m 755 -d ${pkgdir}/usr/lib/systemd/system
+ install -m 644 minecraft@.service ${pkgdir}/usr/lib/systemd/system
}
diff --git a/attach b/attach
new file mode 100755
index 0000000..0e2b3f7
--- /dev/null
+++ b/attach
@@ -0,0 +1,13 @@
+#!/bin/sh
+SCRIPTNAME=${0##*/}
+prefix=root-fs
+if [ $# -lt 1 ]; then
+ echo "usage: ${SCRIPTNAME} <instance>"
+ exit 1
+fi
+instance_root=/srv/minecraft/${prefix}-$1
+if [ ! -d ${instance_root} ]; then
+ echo "instance $1 not found"
+ exit 1
+fi
+screen -Rd "bedrock_$1"
diff --git a/minecraft-bedrock-server.install b/minecraft-bedrock-server.install
index 0cca486..133d486 100755
--- a/minecraft-bedrock-server.install
+++ b/minecraft-bedrock-server.install
@@ -1,5 +1,6 @@
post_install() {
- chown -R minecr.games /srv/minecraft
+ useradd minecr -g games -d /srv/minecraft -c "Minecraft Bedrock Server"
+ chown -R minecr:games /srv/minecraft
}
post_upgrade() {
diff --git a/minecraft@.service b/minecraft@.service
new file mode 100644
index 0000000..c3e2d5f
--- /dev/null
+++ b/minecraft@.service
@@ -0,0 +1,53 @@
+[Unit]
+Description=Minecraft Bedrock Service
+After=network.target
+
+[Service]
+WorkingDirectory=/srv/minecraft/root-fs-%i
+User=minecr
+Group=games
+# Users Database is not available for within the unit, only root and minecraft is available, everybody else is nobody
+# PrivateUsers=true
+# Read only mapping of /usr /boot and /etc
+ProtectSystem=full
+# /home, /root and /run/user seem to be empty from within the unit. It is recommended to enable this setting for all long-running services (in particular network-facing ones).
+ProtectHome=tmpfs
+# /proc/sys, /sys, /proc/sysrq-trigger, /proc/latency_stats, /proc/acpi, /proc/timer_stats, /proc/fs and /proc/irq will be read-only within the unit. It is recommended to turn this on for most services.
+#ProtectKernelTunables=true
+# Block module system calls, also /usr/lib/modules. It is recommended to turn this on for most services that do not need special file systems or extra kernel modules to work
+#ProtectKernelModules=true
+#ProtectKernelLogs=true
+#ProtectControlGroups=true
+# LockPersonality apparently incompatible with setuid screen
+#LockPersonality=true
+# NoNewPriviledes disabled needed for setuid screen
+NoNewPrivileges=false
+# some CAP_ required for a setuid screen to work properly, but nor sure which
+# required = CAP_CHOWN
+# CAP_DAC_READ_SEARCH anscheinend von bedrock_server benötigt ?
+CapabilityBoundingSet=~CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_AUDIT_WRITE CAP_BLOCK_SUSPEND CAP_BPF CAP_CHECKPOINT_RESTORE CAP_DAC_OVERRIDE CAP_IPC_LOCK CAP_IPC_OWNER CAP_KILL CAP_LEASE CAP_LINUX_IMMUTABLE CAP_MAC_ADMIN CAP_MAC_OVERRIDE CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SYS_BOOT CAP_SYS_CHROOT CAP_SYS_MODULE CAP_SYS_NICE CAP_SYS_PACCT CAP_SYS_PTRACE CAP_SYS_RAWIO CAP_SYS_RESOURCE CAP_SYS_TIME CAP_SYSLOG CAP_WAKE_ALARM
+
+# ResctrictNamespaces apparently incompatible with setuid screen
+# RestrictNamespaces=yes
+
+# RestrictAddressFamilies apparently incompatible with screen
+# RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
+Type=forking
+ExecStart=/usr/bin/screen -dmS bedrock_%i /bin/bash -c "./bedrock_server"
+
+#ExecStop=/usr/bin/screen -Rd bedrock_%i -X stuff "say Stopping server in 10 seconds...\r"
+#ExecStop=/bin/sleep 10
+ExecStop=/usr/bin/screen -Rd bedrock_%i -X stuff "stop\r"
+
+ExecReload=/usr/bin/screen -p 0 -S bedrock_%i -X stuff "reload\r"
+
+# Restart=on-failure
+# RestartSec=30s
+
+GuessMainPID=no
+TimeoutStartSec=600
+
+UMask=0077
+
+[Install]
+WantedBy=multi-user.target
diff --git a/runserver.sh b/runserver.sh
deleted file mode 100755
index 5a96556..0000000
--- a/runserver.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-cd $HOME/bedrock-server
-export LD_LIBRARY_PATH="."
-exec ./bedrock_server