Skip to content

KSP - LMP

Dedicated server for the LunaMultiplayer (LMP) mod for Kerbal Space Program. Automatically installs the latest or specified version from GitHub. Runs on .NET 5 using the official Ptero-Eggs yolk.

egg-ksp-lmp.json

updated

Ports

Add an allocation on the node for each port.

  • Game 8800

Install

Installer image
ghcr.io/ptero-eggs/installers:debian
Install script
67 lines

Image

  • Dotnet 5 ghcr.io/ptero-eggs/yolks:dotnet_5

Startup

The Panel runs this command to start the server. It replaces each variable in the command with the value of that variable.

7 variables

Startup command

dotnet ./LMPServer/Server.dll
  • Leave blank to install the latest LunaMultiplayer release, or specify a version tag (e.g. 0.29.3).

    LMP_VERSIONUsers can edit

    nullable|string|max:20

  • Name of the server. Max 30 char.

    SERVER_NAMEUsers can edit

    required|string|max:30

  • Password for the server. Leave it empty if you want to make a public server. Max 30 chars.

    PASSWORDUsers can edit

    nullable|string|max:30

  • Admin password for the server. Leave it empty if you don't want to allow server administration from KSP. Max 30 chars.

    ADMIN_PASSWORDUsers can edit

    Nullable|string|max:30

  • Maximum amount of players that can join the server.

    MaxPlayersUsers can edit

    required|string|numeric

  • Specify the gameplay difficulty of the server. Values: Easy, Normal, Moderate, Hard, Custom. Changing value gives an message : Your GameplaySettings file is different than your GeneralSettings - Difficulty value. So the difficulty setting will be set as "Custom". In case you want to use the default setting values for the difficulty you have chosen. Remove the GameplaySettings.xml file so it's recreated again.

    GameDifficultyUsers can edit

    required|string|in:Easy,Normal,Moderate,Hard,Custom

  • Specify the game Type. Values: Sandbox, Career, Science

    GameModeUsers can edit

    required|string|in:Sandbox,Career,Science

Wings

Stop command
^C (SIGINT)
Running when the console shows
All systems up and running

Files Wings edits

Wings sets these values in these files before each start.

LMPServer/Config/ConnectionSettings.xml xml

ConnectionSettingsDefinition.Port
{{server.build.default.port}}

LMPServer/Config/GeneralSettings.xml xml

GeneralSettingsDefinition.ServerName
{{server.build.env.SERVER_NAME}}
GeneralSettingsDefinition.Password
{{server.build.env.PASSWORD}}
GeneralSettingsDefinition.AdminPassword
{{server.build.env.ADMIN_PASSWORD}}
GeneralSettingsDefinition.MaxPlayers
{{server.build.env.MaxPlayers}}
GeneralSettingsDefinition.GameDifficulty
{{server.build.env.GameDifficulty}}
GeneralSettingsDefinition.GameMode
{{server.build.env.GameMode}}

Readme

Kerbal Space Program - LunaMultiplayer

Game Description

LunaMultiplayer (LMP) is a multiplayer mod for Kerbal Space Program that allows multiple players to explore the same universe together.
This egg provides an easy way to deploy the LunaMultiplayer dedicated server using Pterodactyl.


Server Ports

Port Default Description
Game 8800 LMP game communication

[!IMPORTANT]

When Changing difficulty you get the message :

"Your GameplaySettings file is different than your GeneralSettings - Difficulty value.

So the difficulty setting will be set as "Custom".

In case you want to use the default setting values for the difficulty you have chosen.

Remove the GameplaySettings.xml file so it's recreated again."

Other settings can be changed inside the LMPServer/Config directory.

Problem with this egg?

Open an issue on GitHub. Include your Panel and Wings versions.

Install script 67 lines bash in ghcr.io/ptero-eggs/installers:debian Show
#!/bin/bash
# ==================================================
# Kerbal Space Program - LunaMultiplayer Server Installer
# ==================================================
# Runs inside container using Ptero-Eggs .NET 5 yolk base

chown -R root:root /mnt
export HOME=/mnt/server

cd /mnt/server

# Determine version to install
if [ -z "${LMP_VERSION}" ]; then
    echo "No version specified, downloading latest release..."
    RELEASE_URL=$(curl -s https://api.github.com/repos/LunaMultiplayer/LunaMultiplayer/releases/latest | grep browser_download_url | grep 'Server-Release.zip' | cut -d '"' -f 4)
else
    echo "Downloading specified version: ${LMP_VERSION}"
    RELEASE_URL="https://github.com/LunaMultiplayer/LunaMultiplayer/releases/download/${LMP_VERSION}/LunaMultiplayer-Server-Release.zip"
fi

if [ -z "${RELEASE_URL}" ]; then
    echo "Failed to fetch release URL from GitHub!"
    exit 1
fi

echo "Downloading LunaMultiplayer Server from: ${RELEASE_URL}"
curl -L -o LMPServer.zip "${RELEASE_URL}"
unzip -o LMPServer.zip -d .
rm -f LMPServer.zip

# Normalize extracted structure if necessary
if [ -d LMPServer/Server ]; then
    mv LMPServer/Server/* LMPServer/ || true
fi

# Ensure executable permissions
chmod +x LMPServer/Server 2>/dev/null || true

# Create default config if missing
mkdir -p LMPServer/Config
if [ ! -f LMPServer/Config/ConnectionSettings.xml ]; then
    cat > LMPServer/Config/ConnectionSettings.xml <<EOF
<?xml version="1.0" encoding="utf-16"?>
<ConnectionSettingsDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!--The address the server listens on. If set to the unspecified IPv6 address [::], the server listens for both IPv6 and IPv4-->
  <ListenAddress>0.0.0.0</ListenAddress>
  <!--The UDP port the server listens on. You don't need to open it on your router if RegisterWithMasterServer = true. If you want that players can connect against your server MANUALLY you will need to open it on your router-->
  <Port>${SERVER_PORT}</Port>
  <!--Heartbeat interval in ms. MUST be lower than the ConnectionMsTimeout value.-->
  <HearbeatMsInterval>1000</HearbeatMsInterval>
  <!--Connection timeout in ms. If no heartbeats are received after this interval, the client is disconnected.-->
  <ConnectionMsTimeout>30000</ConnectionMsTimeout>
  <!--Tries to use UPnP to open the ports in your router-->
  <Upnp>true</Upnp>
  <!--UPnP timeout in ms for trying to open the ports-->
  <UpnpMsTimeout>5000</UpnpMsTimeout>
  <!--Maximum transmission unit (MTU) size in bytes. Min value is 1. Default value is 1408. Max value is 8192.-->
  <MaximumTransmissionUnit>1408</MaximumTransmissionUnit>
  <!--Try to expand MTU size-->
  <AutoExpandMtu>false</AutoExpandMtu>
</ConnectionSettingsDefinition>
EOF
fi

echo "-----------------------------------------"
echo "Installation completed..."
echo "-----------------------------------------"