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
This commit is contained in:
BabbleBones 2026-02-14 16:20:07 -05:00
commit 2b2d3925e8
7 changed files with 200 additions and 0 deletions

30
.SRCINFO Normal file
View file

@ -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

54
PKGBUILD Normal file
View file

@ -0,0 +1,54 @@
# Maintainer: BabbleBones <babblebones at protonmail dot com>
# Contributor: Kyle Brady <kyle at spark - gap dot com>
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"
}

View file

@ -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.

View file

@ -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/"
}

View file

@ -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

View file

@ -0,0 +1,2 @@
#Type Name ID GECOS Home directory Shell
u zomboid - "Project Zomboid dedicated server" /opt/project-zomboid-server

View file

@ -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