commit 2b2d3925e84900d2bdb779a8b68caef35c83f34c Author: BabbleBones Date: Sat Feb 14 16:20:07 2026 -0500 Initial upload: Build 42 unstable (42.13.2) - Dedicated server for Project Zomboid Build 42 (unstable beta branch) - Requires jre-openjdk-headless>=25 (B42 uses Java 25) - Systemd service with RCON graceful shutdown - Provides/conflicts project-zomboid-server for coexistence with stable B41 package diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 0000000000000..8ed6f19984a3e --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,30 @@ +pkgbase = project-zomboid-server-unstable + pkgdesc = Dedicated server for the game Project Zomboid (Build 42 unstable) + pkgver = 42.13.2 + pkgrel = 1 + url = https://projectzomboid.com + install = project-zomboid-server.install + arch = x86_64 + license = custom:ProjectZomboid + makedepends = steamcmd + depends = jre-openjdk-headless>=25 + depends = lib32-glibc + depends = libxext + depends = gcc-libs + depends = libsm + depends = rcon-cli + provides = project-zomboid-server + conflicts = project-zomboid-server + options = !strip + options = !debug + backup = etc/project-zomboid/server.conf + source = project-zomboid-server.service + source = project-zomboid-server.conf + source = project-zomboid-server.sysusers + source = project-zomboid-server.tmpfiles + sha256sums = 448325d636dfa825c8dd849303b6a92fa63eee628da57e2438dd173657b9b056 + sha256sums = 1314a94efda4bfbef5df3e325e0f41afb46fe442c9a61466988251db6cfaedab + sha256sums = 561f21c7cc53dc4a14eae829c04050e917d668649a1fffab630647c62f94bb08 + sha256sums = ecd0abe220d2fa7ad1c31d7a46aa086c74e92aa5801cb013c7943dc301f411a0 + +pkgname = project-zomboid-server-unstable diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 0000000000000..468ee6bcc3a15 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: BabbleBones +# Contributor: Kyle Brady + +pkgname=project-zomboid-server-unstable +_basename=project-zomboid-server +# While the pkgver is set here, the latest unstable version will always be downloaded via steamcmd +# Build 42 is currently on the unstable beta branch +pkgver=42.13.2 +pkgrel=1 +pkgdesc="Dedicated server for the game Project Zomboid (Build 42 unstable)" +arch=('x86_64') +url='https://projectzomboid.com' +license=('custom:ProjectZomboid') +depends=('jre-openjdk-headless>=25' 'lib32-glibc' 'libxext' 'gcc-libs' 'libsm' 'rcon-cli') +makedepends=('steamcmd') +provides=('project-zomboid-server') +conflicts=('project-zomboid-server') +options=('!strip' '!debug') +backup=('etc/project-zomboid/server.conf') +install='project-zomboid-server.install' +source=('project-zomboid-server.service' + 'project-zomboid-server.conf' + 'project-zomboid-server.sysusers' + 'project-zomboid-server.tmpfiles') +sha256sums=('448325d636dfa825c8dd849303b6a92fa63eee628da57e2438dd173657b9b056' + '1314a94efda4bfbef5df3e325e0f41afb46fe442c9a61466988251db6cfaedab' + '561f21c7cc53dc4a14eae829c04050e917d668649a1fffab630647c62f94bb08' + 'ecd0abe220d2fa7ad1c31d7a46aa086c74e92aa5801cb013c7943dc301f411a0') + +prepare() { + steamcmd +force_install_dir "$srcdir/$_basename" +login anonymous +app_update 380870 -beta unstable validate +quit +} + +package() { + cd "$srcdir" + mkdir -p "$pkgdir/opt" + cp -r $_basename "$pkgdir/opt/" + + # Remove bundled JRE — we use system jre-openjdk-headless>=25 + # B42 ships Azul Zulu JDK 25 (class file version 69.0) + rm -rf "$pkgdir/opt/$_basename/jre64" + + # Remove unnecessary launch scripts + rm -f "$pkgdir/opt/$_basename/start-server.sh" + rm -f "$pkgdir/opt/$_basename/ProjectZomboid32.json" + rm -f "$pkgdir/opt/$_basename/"*.bat + + install -Dm644 $_basename.service "$pkgdir/usr/lib/systemd/system/$_basename.service" + install -Dm644 $_basename.conf "$pkgdir/etc/project-zomboid/server.conf" + install -Dm644 $_basename.sysusers "$pkgdir/usr/lib/sysusers.d/$_basename.conf" + install -Dm644 $_basename.tmpfiles "$pkgdir/usr/lib/tmpfiles.d/$_basename.conf" + # B42 renamed PZLicense.txt to "Project Zomboid.txt" + install -Dm644 "$pkgdir/opt/$_basename/license/Project Zomboid.txt" "$pkgdir/usr/share/licenses/$pkgname/LICENSE" +} diff --git a/project-zomboid-server.conf b/project-zomboid-server.conf new file mode 100644 index 0000000000000..1a551cdeae466 --- /dev/null +++ b/project-zomboid-server.conf @@ -0,0 +1,22 @@ +# Save/server to use +NAME="servertest" + +# Bypasses the create a password prompt +ADMIN_PASSWORD="CHANGE_ME" + +# RCON Options both here and in: +# /opt/project-zomboid-server/Zomboid/Server/$NAME.ini +RCON_PORT="27015" +# Password used to connect to RCON for graceful shutdowns +RCON_PASSWORD="CHANGE_ME" + +# Most options should be set via: +# /opt/project-zomboid-server/ProjectZomboid64.json +# /opt/project-zomboid-server/Zomboid/Server/$NAME* +# But any extra startup arguments to java and zomboid can be set with: +#JVM_ARGS= +#SERVER_ARGS= + +# NOTE: JVM memory settings (Xmx/Xms) must be set in ProjectZomboid64.json, +# NOT via JVM_ARGS. The ProjectZomboid64 binary reads them from the JSON file. +# Build 42 defaults to 16GB max heap. Recommended minimum for MP is 8-9GB. diff --git a/project-zomboid-server.install b/project-zomboid-server.install new file mode 100644 index 0000000000000..291330c298a5c --- /dev/null +++ b/project-zomboid-server.install @@ -0,0 +1,46 @@ +## arg 1: the new package version +post_install() { + echo "==========================================================" + echo " Project Zomboid Dedicated Server — Build 42 (unstable)" + echo "==========================================================" + echo "" + echo "CHANGE THE PASSWORDS IN /etc/project-zomboid/server.conf BEFORE STARTING THE SERVICE" + echo "" + echo "UDP ports 16261 and 16262 need to be open in your firewall for users to connect." + echo "RCON password needs to be updated in the game settings to enable graceful service shutdown." + echo "" + echo "Settings can be configured via:" + echo " Passwords & launch args: /etc/project-zomboid/server.conf" + echo " Server & game settings (made on start): /opt/project-zomboid-server/Zomboid/Server/servertest*" + echo " JVM settings (RAM): /opt/project-zomboid-server/ProjectZomboid64.json" + echo "" + echo "NOTE: JVM memory (Xmx/Xms) must be configured in ProjectZomboid64.json, not via command line." + echo "Build 42 recommends at least 8-9GB RAM for multiplayer (default max heap is 16GB)." + echo "" + echo "By default, saves will be stored in /opt/project-zomboid-server/Zomboid/Saves/Multiplayer/" + echo "Start project-zomboid-server.service to create a default world." + echo "" + echo "WARNING: Build 42 is unstable. B41 saves and mods are NOT compatible." + echo " Devs recommend no more than 20 players and disabling all mods." +} + +## arg 1: the new package version +## arg 2: the old package version +post_upgrade() { + echo "==========================================================" + echo " Project Zomboid Server upgraded" + echo "==========================================================" + echo "" + echo "WARNING: Build 42 unstable updates may break existing saves." + echo "Back up /opt/project-zomboid-server/Zomboid/ before restarting the service." + echo "" + echo "If upgrading from Build 41:" + echo " - B41 saves and mods are NOT compatible with B42" + echo " - Ports changed: now UDP 16261 + 16262 (was 16261 + 8766)" + echo " - Delete the db/ folder if you encounter Thread-0 errors" +} + +## arg 1: the old package version +post_remove() { + echo "Game saves, settings, and mods may be left in /opt/project-zomboid-server/" +} diff --git a/project-zomboid-server.service b/project-zomboid-server.service new file mode 100644 index 0000000000000..e31957cee62d1 --- /dev/null +++ b/project-zomboid-server.service @@ -0,0 +1,40 @@ +[Unit] +Description=Project Zomboid dedicated server (Build 42) + +[Service] +Type=simple +User=zomboid +Group=zomboid + +Environment=LD_LIBRARY_PATH="/opt/project-zomboid-server/linux64:/opt/project-zomboid-server/natives:/opt/project-zomboid-server/:${LD_LIBRARY_PATH}" +# Force Java 25 — ProjectZomboid64 uses PATH to locate libjvm.so +Environment=PATH="/usr/lib/jvm/java-25-openjdk/bin:/usr/bin" +EnvironmentFile=/etc/project-zomboid/server.conf +# These variables need to be changed from the default value in the EnvironmentFile +ExecCondition=/usr/bin/test "${ADMIN_PASSWORD}" != "CHANGE_ME" +ExecCondition=/usr/bin/test "${RCON_PASSWORD}" != "CHANGE_ME" +ExecStart=/opt/project-zomboid-server/ProjectZomboid64 $JVM_ARGS -- -adminpassword "${ADMIN_PASSWORD}" -servername "${NAME}" $SERVER_ARGS +ExecStop=/usr/bin/rcon -a "127.0.0.1:${RCON_PORT}" -p "${RCON_PASSWORD}" -t rcon quit +# Quitting / saving is async, and doesn't have a good way to be wrapped by systemd +# use timeout + tail to try and give the process some time to exit +ExecStop=/usr/bin/timeout 60s /usr/bin/tail --pid="${MAINPID}" -f /dev/null +ExecReload=/usr/bin/rcon -a "127.0.0.1:${RCON_PORT}" -p "${RCON_PASSWORD}" -t rcon reloadoptions + +WorkingDirectory=/opt/project-zomboid-server +ReadWritePaths=/opt/project-zomboid-server +ProtectSystem=full +ProtectHome=true +PrivateTmp=yes +PrivateDevices=yes +ProtectClock=yes +ProtectKernelTunables=yes +ProtectKernelModules=yes +ProtectKernelLogs=yes +ProtectControlGroups=yes +RestrictSUIDSGID=yes +RestrictRealtime=yes +RestrictNamespaces=yes +NoNewPrivileges=yes + +[Install] +WantedBy=multi-user.target diff --git a/project-zomboid-server.sysusers b/project-zomboid-server.sysusers new file mode 100644 index 0000000000000..fa1f852996718 --- /dev/null +++ b/project-zomboid-server.sysusers @@ -0,0 +1,2 @@ +#Type Name ID GECOS Home directory Shell +u zomboid - "Project Zomboid dedicated server" /opt/project-zomboid-server diff --git a/project-zomboid-server.tmpfiles b/project-zomboid-server.tmpfiles new file mode 100644 index 0000000000000..408d2129c521c --- /dev/null +++ b/project-zomboid-server.tmpfiles @@ -0,0 +1,6 @@ +#Type Path Mode User Group Age Argument +d /opt/project-zomboid-server 0755 zomboid zomboid +# Zomboid Server needs to be able to write mods to the steamapps folder +d /opt/project-zomboid-server/steamapps 0755 zomboid zomboid +# Build 42 uses a SQLite database for server state +d /opt/project-zomboid-server/db 0755 zomboid zomboid