_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
meta:
  version: PLCN_v3
  update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/rust/egg-rust.yaml'
exported_at: '2025-10-31T12:25:32+00:00'
name: Rust
author: panel@example.com
uuid: bace2dfb-209c-452a-9459-7d6f340b07ae
description: |-
  The only aim in Rust is to survive. To do this you will need to overcome struggles such as hunger,
  thirst and cold. Build a fire. Build a shelter. Kill animals for meat. Protect yourself from other
  players, and kill them for meat. Create alliances with other players and form a town. Do whatever it
  takes to survive.
image: 'data:image/png;base64,[encoded data, 8852 characters]'
tags:
  - source
  - steamcmd
features:
  - steam_disk_space
docker_images:
  Rust: 'ghcr.io/pelican-eggs/games:rust'
file_denylist: {  }
startup_commands:
  Default: './RustDedicated -batchmode +server.port {{SERVER_PORT}} +server.queryport {{QUERY_PORT}} +server.identity "rust" +rcon.port {{RCON_PORT}} +rcon.web true +server.hostname \"{{SERVER_HOSTNAME}}\" +server.level \"{{LEVEL}}\" +server.description \"{{DESCRIPTION}}\" +server.url \"{{SERVER_URL}}\" +server.headerimage \"{{SERVER_IMG}}\" +server.logoimage \"{{SERVER_LOGO}}\" +server.maxplayers {{MAX_PLAYERS}} +rcon.password \"{{RCON_PASS}}\" +server.saveinterval {{SAVEINTERVAL}} +app.port {{APP_PORT}}  $( [ -z ${MAP_URL} ] && printf %s "+server.worldsize \"{{WORLD_SIZE}}\" +server.seed \"{{WORLD_SEED}}\"" || printf %s "+server.levelurl {{MAP_URL}}" ) {{ADDITIONAL_ARGS}}'
config:
  files: {  }
  startup:
    done: 'Server startup complete'
  logs: {  }
  stop: quit
scripts:
  installation:
    script: |-
      #!/bin/bash
      # steamcmd Base Installation Script
      #
      # Server Files: /mnt/server


      ## just in case someone removed the defaults.
      if [ "${STEAM_USER}" == "" ]; then
          echo -e "steam user is not set.
      "
          echo -e "Using anonymous user.
      "
          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_update ${SRCDS_APPID} ${EXTRA_FLAGS} validate +quit ## other flags may be needed depending on install. looking at you cs 1.6

      ## 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
    container: 'ghcr.io/pelican-eggs/installers:debian'
    entrypoint: bash
variables:
  -
    name: 'Additional Arguments'
    description: 'Add additional startup parameters to the server.'
    env_variable: ADDITIONAL_ARGS
    default_value: ''
    user_viewable: true
    user_editable: true
    rules:
      - nullable
      - string
    sort: 14
  -
    name: 'App ID'
    description: ''
    env_variable: SRCDS_APPID
    default_value: 258550
    user_viewable: false
    user_editable: false
    rules:
      - required
      - string
      - 'in:258550'
    sort: 18
  -
    name: 'App Port'
    description: 'Port for the Rust+ App. -1 to disable.'
    env_variable: APP_PORT
    default_value: 28082
    user_viewable: true
    user_editable: false
    rules:
      - required
      - integer
    sort: 15
  -
    name: 'Custom Map URL'
    description: |-
      Overwrites the map with the one from the direct download URL. Invalid URLs will cause the server to
      crash.
    env_variable: MAP_URL
    default_value: ''
    user_viewable: true
    user_editable: true
    rules:
      - nullable
      - url
    sort: 17
  -
    name: Description
    description: 'The description under your server title. Commonly used for rules & info. Use \n for newlines.'
    env_variable: DESCRIPTION
    default_value: 'Powered by Panel'
    user_viewable: true
    user_editable: true
    rules:
      - required
      - string
    sort: 4
  -
    name: Level
    description: 'The world file for Rust to use.'
    env_variable: LEVEL
    default_value: 'Procedural Map'
    user_viewable: true
    user_editable: true
    rules:
      - required
      - string
      - 'max:20'
    sort: 3
  -
    name: 'Max Players'
    description: 'The maximum amount of players allowed in the server at once.'
    env_variable: MAX_PLAYERS
    default_value: 40
    user_viewable: true
    user_editable: true
    rules:
      - required
      - integer
    sort: 8
  -
    name: 'Modding Framework'
    description: "The modding framework to be used: carbon, oxide, vanilla.\r\nDefaults to \"vanilla\" for a non-modded server installation."
    env_variable: FRAMEWORK
    default_value: vanilla
    user_viewable: true
    user_editable: true
    rules:
      - required
      - 'in:vanilla,oxide,carbon'
    sort: 2
  -
    name: 'Query Port'
    description: "Server Query Port. Can't be the same as Game's primary port."
    env_variable: QUERY_PORT
    default_value: 27017
    user_viewable: true
    user_editable: false
    rules:
      - required
      - integer
    sort: 10
  -
    name: 'RCON Password'
    description: 'RCON access password.'
    env_variable: RCON_PASS
    default_value: ''
    user_viewable: true
    user_editable: true
    rules:
      - required
      - 'regex:/^[\w.-]*$/'
      - 'max:64'
    sort: 12
  -
    name: 'RCON Port'
    description: 'Port for RCON connections.'
    env_variable: RCON_PORT
    default_value: 28016
    user_viewable: true
    user_editable: false
    rules:
      - required
      - integer
    sort: 11
  -
    name: 'Save Interval'
    description: 'Sets the server’s auto-save interval in seconds.'
    env_variable: SAVEINTERVAL
    default_value: 60
    user_viewable: true
    user_editable: true
    rules:
      - required
      - integer
    sort: 13
  -
    name: 'Server Image'
    description: 'The header image for the top of your server listing.'
    env_variable: SERVER_IMG
    default_value: ''
    user_viewable: true
    user_editable: true
    rules:
      - nullable
      - url
    sort: 9
  -
    name: 'Server Logo'
    description: 'The circular server logo for the Rust+ app.'
    env_variable: SERVER_LOGO
    default_value: ''
    user_viewable: true
    user_editable: true
    rules:
      - nullable
      - url
    sort: 16
  -
    name: 'Server Name'
    description: 'The name of your server in the public server list.'
    env_variable: SERVER_HOSTNAME
    default_value: 'A Rust Server'
    user_viewable: true
    user_editable: true
    rules:
      - required
      - string
      - 'max:60'
    sort: 1
  -
    name: URL
    description: 'The URL for your server. This is what comes up when clicking the "Visit Website" button.'
    env_variable: SERVER_URL
    default_value: 'http://example.com'
    user_viewable: true
    user_editable: true
    rules:
      - nullable
      - url
    sort: 5
  -
    name: 'World Seed'
    description: 'The seed for a procedural map.'
    env_variable: WORLD_SEED
    default_value: ''
    user_viewable: true
    user_editable: true
    rules:
      - nullable
      - string
    sort: 7
  -
    name: 'World Size'
    description: 'The world size for a procedural map.'
    env_variable: WORLD_SIZE
    default_value: 3000
    user_viewable: true
    user_editable: true
    rules:
      - required
      - integer
    sort: 6
