{ "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", "meta": { "version": "PLCN_v1", "update_url": null }, "exported_at": "2025-10-20T19:43:26+02:00", "name": "FiveM", "author": "parker@parkervcp.com", "uuid": "238b3cb3-6796-4ba2-8403-5eb30faf1c86", "description": "A new FiveM \/ RedM egg for the latest builds due to recent changes in FiveM", "features": null, "docker_images": { "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" }, "file_denylist": [], "startup": "$(pwd)\/alpine\/opt\/cfx-server\/ld-musl-x86_64.so.1 --library-path \"$(pwd)\/alpine\/usr\/lib\/v8\/:$(pwd)\/alpine\/lib\/:$(pwd)\/alpine\/usr\/lib\/\" -- $(pwd)\/alpine\/opt\/cfx-server\/FXServer +set citizen_dir $(pwd)\/alpine\/opt\/cfx-server\/citizen\/ +set sv_licenseKey {{FIVEM_LICENSE}} +set steam_webApiKey {{STEAM_WEBAPIKEY}} +set sv_maxplayers {{MAX_PLAYERS}} $( [ \"$TXADMIN_ENABLE\" == \"1\" ] || printf %s '+exec server.cfg' )", "config": { "files": "{\r\n \"server.cfg\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \"endpoint_add_tcp\": \"endpoint_add_tcp \\\"0.0.0.0:{{server.allocations.default.port}}\\\"\",\r\n \"endpoint_add_udp\": \"endpoint_add_udp \\\"0.0.0.0:{{server.allocations.default.port}}\\\"\",\r\n \"sv_hostname\": \"sv_hostname \\\"{{server.environment.SERVER_HOSTNAME}}\\\"\",\r\n \"set sv_licenseKey\": \"set sv_licenseKey {{server.environment.FIVEM_LICENSE}}\",\r\n \"set steam_webApiKey\": \"set steam_webApiKey {{server.environment.STEAM_WEBAPIKEY}}\",\r\n \"sv_maxclients\": \"sv_maxclients {{server.environment.MAX_PLAYERS}}\"\r\n }\r\n }\r\n}", "startup": "{\r\n \"done\": \"succeeded. Welcome!\"\r\n}", "logs": "{}", "stop": "quit" }, "scripts": { "installation": { "script": "#!\/bin\/bash\r\n# FiveM Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update -y\r\napt install -y tar xz-utils file jq\r\n\r\nmkdir -p \/mnt\/server\/resources\r\n\r\ncd \/mnt\/server\r\n\r\necho \"updating citizenfx resource files\"\r\ngit clone https:\/\/github.com\/citizenfx\/cfx-server-data.git \/tmp\r\ncp -Rf \/tmp\/resources\/* resources\/\r\n\r\nRELEASE_PAGE=$(curl -sSL https:\/\/runtime.fivem.net\/artifacts\/fivem\/build_proot_linux\/master\/)\r\nCHANGELOGS_PAGE=$(curl -sSL https:\/\/changelogs-live.fivem.net\/api\/changelog\/versions\/linux\/server)\r\n\r\nif [[ \"${FIVEM_VERSION}\" == \"recommended\" ]] || [[ -z ${FIVEM_VERSION} ]]; then\r\n DOWNLOAD_LINK=$(echo $CHANGELOGS_PAGE | jq -r '.recommended_download')\r\nelif [[ \"${FIVEM_VERSION}\" == \"latest\" ]]; then\r\n DOWNLOAD_LINK=$(echo $CHANGELOGS_PAGE | jq -r '.latest_download')\r\nelse\r\n VERSION_LINK=$(echo -e \"${RELEASE_PAGE}\" | grep -Eo '\".*\/*.tar.xz\"' | grep -Eo '\".*\/*.tar.xz\"' | sed 's\/\\\"\/\/g' | sed 's\/\\.\\\/\/\/1' | grep -i \"${FIVEM_VERSION}\" | grep -o =.* | tr -d '=')\r\n if [[ \"${VERSION_LINK}\" == \"\" ]]; then\r\n echo -e \"defaulting to recommedned as the version requested was invalid.\"\r\n DOWNLOAD_LINK=$(echo $CHANGELOGS_PAGE | jq -r '.recommended_download')\r\n else\r\n DOWNLOAD_LINK=$(echo https:\/\/runtime.fivem.net\/artifacts\/fivem\/build_proot_linux\/master\/${VERSION_LINK})\r\n fi\r\nfi\r\n\r\nif [ ! -z \"${DOWNLOAD_URL}\" ]; then\r\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_URL}; then\r\n echo -e \"link is valid. setting download link to ${DOWNLOAD_URL}\"\r\n DOWNLOAD_LINK=${DOWNLOAD_URL}\r\n else\r\n echo -e \"link is invalid closing out\"\r\n exit 2\r\n fi\r\nfi\r\n\r\necho -e \"Running curl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\"\r\n\r\ncurl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\r\n\r\necho \"Extracting fivem files\"\r\n\r\nFILETYPE=$(file -F ',' ${DOWNLOAD_LINK##*\/} | cut -d',' -f2 | cut -d' ' -f2)\r\nif [ \"$FILETYPE\" == \"gzip\" ]; then\r\n tar xzvf ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"Zip\" ]; then\r\n unzip ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"XZ\" ]; then\r\n tar xvf ${DOWNLOAD_LINK##*\/}\r\nelse\r\n echo -e \"unknown filetype. Exiting\"\r\n exit 2\r\nfi\r\n\r\nrm -rf ${DOWNLOAD_LINK##*\/} run.sh\r\n\r\nif [ -e server.cfg ]; then\r\n echo \"Skipping downloading default server config file as one already exists\"\r\nelse\r\n echo \"Downloading default fivem config\"\r\n curl https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/gta\/fivem\/server.cfg >>server.cfg\r\nfi\r\n\r\n# Map GAME_NAME to GAME_TYPE before writing to server.cfg\r\nif [ \"${TXHOST_GAME_NAME}\" == \"fivem\" ]; then\r\n GAME_TYPE=\"gta5\"\r\nelif [ \"${TXHOST_GAME_NAME}\" == \"redm\" ]; then\r\n GAME_TYPE=\"rdr3\"\r\nelse\r\n echo \"Invalid GAME_NAME specified: ${TXHOST_GAME_NAME}\"\r\n exit 1\r\nfi \r\n\r\nCFG_FILE=\"server.cfg\"\r\n\r\n# Only proceed if server.cfg exists\r\nif [ -f \"$CFG_FILE\" ]; then\r\n # Remove old gamename block: comment and actual line\r\n sed -i '\/^# set gamename\/,+1d' \"$CFG_FILE\"\r\n\r\n # Append clean new block\r\n {\r\n echo \"# set gamename\"\r\n echo \"set gamename \\\"${GAME_TYPE}\\\"\"\r\n } >> \"$CFG_FILE\"\r\nelse\r\n echo \"Warning: $CFG_FILE not found. Skipping gamename insertion.\"\r\nfi\r\n\r\nmkdir -p logs\/\r\n\r\necho \"install complete\"", "container": "ghcr.io\/parkervcp\/installers:debian", "entrypoint": "bash" } }, "variables": [ { "name": "fivem license", "description": "Required to start the service. Get your keys at https:\/\/portal.cfx.re\/", "env_variable": "FIVEM_LICENSE", "default_value": "", "user_viewable": true, "user_editable": true, "rules": [ "required", "string", "max:33" ], "sort": 1 }, { "name": "Max Players", "description": "Set the fivem max play count", "env_variable": "MAX_PLAYERS", "default_value": "48", "user_viewable": true, "user_editable": true, "rules": [ "required", "integer", "between:1,48" ], "sort": 2 }, { "name": "Server Hostname", "description": "The name that shows up in the server browser", "env_variable": "SERVER_HOSTNAME", "default_value": "My new FXServer!", "user_viewable": true, "user_editable": true, "rules": [ "required", "string" ], "sort": 3 }, { "name": "fivem version", "description": "The fivem version that is to be installed. Invalid versions will default to recommended.\r\n\r\nAn example is `6013-d8ae399d15680da569022f57ab7f2474d307c821`\r\n\r\nYou can get the latest version from here - https:\/\/runtime.fivem.net\/artifacts\/fivem\/build_proot_linux\/master\/", "env_variable": "FIVEM_VERSION", "default_value": "recommended", "user_viewable": true, "user_editable": true, "rules": [ "required", "string", "max:50" ], "sort": 4 }, { "name": "Download Link", "description": "This is the link to download fivem from. This is only used in the install script.\r\n\r\nThe file you link to needs to be an fx.tar.zx file.\r\n\r\nExample:\r\nhttps:\/\/runtime.fivem.net\/artifacts\/fivem\/build_proot_linux\/master\/6013-d8ae399d15680da569022f57ab7f2474d307c821\/fx.tar.xz", "env_variable": "DOWNLOAD_URL", "default_value": "", "user_viewable": false, "user_editable": false, "rules": [ "string", "nullable" ], "sort": 5 }, { "name": "Steam Web Api Key", "description": "Use your Steam WebApiKey or set to 'none'. Get your key at https:\/\/steamcommunity.com\/dev\/apikey\/", "env_variable": "STEAM_WEBAPIKEY", "default_value": "none", "user_viewable": true, "user_editable": true, "rules": [ "required", "string" ], "sort": 6 }, { "name": "txAdmin Port", "description": "The port for the txAdmin panel", "env_variable": "TXHOST_TXA_PORT", "default_value": "40120", "user_viewable": true, "user_editable": false, "rules": [ "required", "string", "max:20" ], "sort": 7 }, { "name": "Enable txadmin", "description": "Enables txadmin.\r\n\r\nset to 1 to enable. (default is 0 for false)", "env_variable": "TXADMIN_ENABLE", "default_value": "0", "user_viewable": true, "user_editable": true, "rules": [ "required", "boolean" ], "sort": 8 }, { "name": "Game Name", "description": "Restricts to only running either FiveM or RedM servers.\r\nThe setup page will only show recipes for the game specified below !\r\nOptions are : fivem or redm", "env_variable": "TXHOST_GAME_NAME", "default_value": "fivem", "user_viewable": true, "user_editable": true, "rules": [ "required", "in:fivem,redm" ], "sort": 9 }, { "name": "Game type", "description": "Value to be used : gta5 for FiveM and rdr3 for RedM\r\n! Dont fill in any value it reads the game name variable and set the correct value for it !", "env_variable": "GAME_TYPE", "default_value": "", "user_viewable": false, "user_editable": false, "rules": [ "string", "nullable" ], "sort": 10 }, { "name": "TXHOST DATA PATH", "description": "Location for TX Admin", "env_variable": "TXHOST_DATA_PATH", "default_value": "\/home\/container\/txData", "user_viewable": false, "user_editable": false, "rules": [ "required", "string" ], "sort": 11 } ] }