diff options
author | Dominic Radermacher <dominic@familie-radermacher.ch> | 2023-03-05 13:08:24 +0100 |
---|---|---|
committer | Dominic Radermacher <dominic@familie-radermacher.ch> | 2023-03-05 13:08:24 +0100 |
commit | 21f2ee38b56670aa24d59a48ac27811a8520f6f2 (patch) | |
tree | e7cf859da93e535e60b07cfc4eeb825b9d299d2b | |
parent | 275a173d9223b9d194c41cc61e35c3d461de13ae (diff) |
add systemd service file, prepare for multiple instances
-rw-r--r-- | PKGBUILD | 17 | ||||
-rwxr-xr-x | attach | 13 | ||||
-rwxr-xr-x | minecraft-bedrock-server.install | 3 | ||||
-rw-r--r-- | minecraft@.service | 53 | ||||
-rwxr-xr-x | runserver.sh | 4 |
5 files changed, 78 insertions, 12 deletions
@@ -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 } @@ -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 |