Custom ReHLDS Engine Game

games
Report Issue

This option allows modifying the startup arguments and other details to run a custom HLDS based game on the panel, substituting the official Valve engine binaries with the ReHLDS binaries.

Contributors:
README

HLDS Servers

This is for older games like CS 1.6 (default game) and other servers that still run on the older HLDS server under id 90

ReHLDS

ReHLDS is a reverse engineered build of the original HLDS (build 6152/6153), and provides a number of fixes and improvements over the vanilla engine files, while remaining compatible with vanilla clients.

Github: https://github.com/dreamstalker/rehlds

Server Ports

HLDS servers require up to 6 ports

Port default
Game/rcon 27015
HLTV 27020
VAC 26900
Docker Images (1)
Name Image
ghcr.io/ptero-eggs/games:source ghcr.io/ptero-eggs/games:source
Startup Command
./hlds_run -console -game {{HLDS_GAME}} -port {{SERVER_PORT}} -sport {{VAC_PORT}} +map {{SRCDS_MAP}} +ip 0.0.0.0 -strictportbind -norestart
Variables (11)

Game ID

The ID corresponding to the game to download and run using HLDS. The HLDS server ID is 90. This should not be changed.

Environment:
SRCDS_APPID
Default:
90
User Viewable:
User Editable:
Rules:
required|numeric|in:90

Game Name

The name corresponding to the game to download and run using HLDS. all the HLDS server names are here - https://developer.valvesoftware.com/wiki/Dedicated_Server_Name_Enumeration

Environment:
HLDS_GAME
Default:
valve
User Viewable:
User Editable:
Rules:
required|alpha_dash|between:1,100

Map

The default map for the server.

Environment:
SRCDS_MAP
Default:
crossfire
User Viewable:
User Editable:
Rules:
required|string|alpha_dash

VAC port

Specifies the VAC port the server should use. Default is 26900.

Environment:
VAC_PORT
Default:
26900
User Viewable:
User Editable:
Rules:
required|numeric|digits_between:1,5

ReHLDS Version

The version of ReHLDS to install, or 'latest' for the latest release.

Environment:
VERSION
Default:
latest
User Viewable:
User Editable:
Rules:
required|string

Validate

Validate game files on update. Recommended to turn off with ReHLDS due to SteamCMD overwriting its changes

Environment:
VALIDATE
Default:
0
User Viewable:
User Editable:
Rules:
required|boolean

Steam Username

Username associated wanted to be used. Not needed.

Environment:
STEAM_USER
Default:
None
User Viewable:
User Editable:
Rules:
nullable|string

Steam Password

Steam Password for account.

Environment:
STEAM_PASS
Default:
None
User Viewable:
User Editable:
Rules:
nullable|string

Steam Auth

Steam authenticator code for the account

Environment:
STEAM_AUTH
Default:
None
User Viewable:
User Editable:
Rules:
nullable|string

Beta branch

Leave empty for the public branch, for the legacy version select steam_legacy.

Environment:
SRCDS_BETAID
Default:
None
User Viewable:
User Editable:
Rules:
nullable|string|in:,steam_legacy

Auto update

Auto update on restart

Environment:
AUTO_UPDATE
Default:
0
User Viewable:
User Editable:
Rules:
required|boolean
Installation Script
Container: ghcr.io/ptero-eggs/installers:debian
Entrypoint: bash
#!/bin/bash
# SRCDS Base Installation Script
#
# Server Files: /mnt/server

# just in case someone removed the defaults.
if [[ "${STEAM_USER}" == "" ]] || [[ "${STEAM_PASS}" == "" ]]; then
    echo -e "steam user is not set.\n"
    echo -e "Using anonymous user.\n"
    STEAM_USER=anonymous
    STEAM_PASS=""
    STEAM_AUTH=""
else
    echo -e "user set to ${STEAM_USER}"
fi

## download and install steamcmd
cd /tmp
mkdir -p /mnt/server/steamcmd
curl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xzvf steamcmd.tar.gz -C /mnt/server/steamcmd
mkdir -p /mnt/server/steamapps # Fix steamcmd disk write error when this folder is missing
cd /mnt/server/steamcmd

# SteamCMD fails otherwise for some reason, even running as root.
# This is changed at the end of the install process anyways.
chown -R root:root /mnt
export HOME=/mnt/server


## install game using steamcmd
./steamcmd.sh +force_install_dir /mnt/server +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH}  +app_set_config 90 mod ${HLDS_GAME} $( [[ "${WINDOWS_INSTALL}" == "1" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} $( [[ -z ${SRCDS_BETAID} ]] || printf %s "-beta ${SRCDS_BETAID}" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s "-betapassword ${SRCDS_BETAPASS}" ) ${INSTALL_FLAGS} validate +quit


## set up 32 bit libraries
mkdir -p /mnt/server/.steam/sdk32
cp -v linux32/steamclient.so ../.steam/sdk32/steamclient.so

## set up 64 bit libraries
mkdir -p /mnt/server/.steam/sdk64
cp -v linux64/steamclient.so ../.steam/sdk64/steamclient.so


# Github Release Grabber script
## get release info and download links
LATEST_JSON=$(curl --silent "https://api.github.com/repos/dreamstalker/rehlds/releases/latest")
RELEASES=$(curl --silent "https://api.github.com/repos/dreamstalker/rehlds/releases")
MATCH="rehlds-bin"

if [ -z "${VERSION}" ] || [ "${VERSION}" == "latest" ]; then
    DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})
else
    VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION "${VERSION}" '.[] | select(.tag_name==$VERSION) | .tag_name')
    if [ "${VERSION}" == "${VERSION_CHECK}" ]; then
        DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION "${VERSION}" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -Ei ${MATCH})
    else
        echo -e "defaulting to latest release"
        DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)
    fi
fi

cd /tmp
curl -sSL -o rehlds-bin.zip ${DOWNLOAD_URL}
unzip -q -o rehlds-bin.zip

cp -r /tmp/bin/linux32/* /mnt/server

## install end
echo "-----------------------------------------"
echo "Installation completed..."
echo "-----------------------------------------"