Soldier Front · Dragonfly, 2004 · Soldier Front Legacy by TeamVanilla, 2026

Build 1 · protocol 24

OpenSFSoldier Front Legacy
Contents

Docs Running a server

Linux and containers

Running the server on Linux as a systemd service or in a container, on x86-64 or ARM64.

The Linux server is one program with no installer: legacysf-server for x86-64, and the same in arm64/ for ARM64. It needs glibc 2.28 or later (Debian 10, Ubuntu 18.10, RHEL 8 and newer) and reaches Team Vanilla through the system's own libcurl and certificates, which nearly every installation already has:

SystemPackages
Debian, Ubuntulibcurl4, ca-certificates
RHEL, Fedora, AlmaLinux, Rockylibcurl, ca-certificates

A data folder copied from Windows may have its folders in another case (Area for area): the server finds them either way.

By hand

cd legacysf-server
./legacysf-server              # the first run makes server.key and stops
./legacysf-server --register CODE
./legacysf-server

Ctrl+C or SIGTERM saves and stops it.

On ARM64, put the ARM64 programs in place of the x86-64 ones before anything else, so the service and the container file work unchanged:

cp arm64/legacysf-server legacysf-server
cp arm64/tools/lsfpack tools/lsfpack

As a service

The download carries a systemd unit, legacysf-server.service, that runs the server as its own user from /opt/legacysf-server:

sudo useradd --system --home /opt/legacysf-server --shell /usr/sbin/nologin legacysf
sudo cp -r . /opt/legacysf-server && sudo chown -R legacysf: /opt/legacysf-server
cd /opt/legacysf-server
sudo -u legacysf ./legacysf-server               # makes server.key
sudo -u legacysf ./legacysf-server --register CODE
sudo cp legacysf-server.service /etc/systemd/system/
sudo systemctl daemon-reload && sudo systemctl enable --now legacysf-server
journalctl -u legacysf-server -f

It starts again by itself after a reboot. systemctl stop legacysf-server saves and stops it.

In a container

Containerfile builds an image of the folder (podman or docker):

podman build -t legacysf-server -f Containerfile .
podman run --rm -v sf-state:/srv/state legacysf-server --register CODE
podman run -d --name sf -p 27240:27240/udp -v sf-state:/srv/state legacysf-server

Everything the server writes (server.cfg, server.key, accounts/, packs, recordings, logs) is in the volume. Keep the volume: server.key in it is the server's identity.

The firewall

Allow UDP on the server's port in the system's firewall, and in the provider's if it has one. Ports and firewalls has the commands.