diff --git a/ct/factorio.sh b/ct/factorio.sh new file mode 100644 index 0000000000..45696aaa38 --- /dev/null +++ b/ct/factorio.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/DevScripts/main" +_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func" +source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func") +# Copyright (c) 2021-2026 community-scripts ORG +# Author: William Lindholm (LindholmLabs) +# License: MIT | https://github.com/community-scripts/DevScripts/raw/main/LICENSE +# Source: https://www.factorio.com/ + +APP="Factorio" +var_tags="${var_tags:-gaming}" +var_cpu="${var_cpu:-1}" +var_ram="${var_ram:-2048}" +var_disk="${var_disk:-8}" +var_os="${var_os:-debian}" +var_version="${var_version:-13}" +var_unprivileged="${var_unprivileged:-1}" +var_arm64="${var_arm64:-no}" # Factorio headless is only published for Linux x64. + +header_info "$APP" +variables +color +catch_errors + +function update_script() { + header_info + check_container_storage + check_container_resources + + if [[ ! -x /opt/factorio/bin/x64/factorio ]]; then + msg_error "No Factorio Installation Found!" + exit 1 + fi + + ensure_dependencies file xz-utils + + msg_info "Stopping Factorio" + systemctl stop factorio + msg_ok "Stopped Factorio" + + create_backup /opt/factorio/config /opt/factorio/config-path.cfg \ + /opt/factorio/server-settings.json /opt/factorio/saves /opt/factorio/mods \ + /opt/factorio/player-data.json /opt/factorio/server-adminlist.json \ + /opt/factorio/server-banlist.json /opt/factorio/server-whitelist.json + + # Overlay the release without deleting user files; restore any shipped defaults. + if ! fetch_and_deploy_from_url "https://factorio.com/get-download/stable/headless/linux64" "/opt/factorio"; then + restore_backup + msg_error "Factorio update failed. User data was restored; Factorio remains stopped." + exit 1 + fi + restore_backup + + msg_info "Starting Factorio" + systemctl start factorio + msg_ok "Started Factorio" + msg_ok "Updated Factorio successfully!" + + exit +} + +start +build_container +description + +msg_ok "Completed Factorio setup successfully!\n" +echo -e "${INFO}${YW}Connect in Factorio using the following address (UDP):${CL}" +echo -e "${GATEWAY}${BGN}${IP}:34197${CL}" diff --git a/install/factorio-install.sh b/install/factorio-install.sh new file mode 100644 index 0000000000..85f79928d3 --- /dev/null +++ b/install/factorio-install.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: William Lindholm (LindholmLabs) +# License: MIT | https://github.com/community-scripts/DevScripts/raw/main/LICENSE +# Source: https://www.factorio.com/ + +source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" +color +verb_ip6 +catch_errors +setting_up_container +network_check +update_os + +ensure_dependencies file xz-utils +fetch_and_deploy_from_url "https://factorio.com/get-download/stable/headless/linux64" "/opt/factorio" + +msg_info "Configuring Factorio" +sed 's/"public":[[:space:]]*true/"public": false/' /opt/factorio/data/server-settings.example.json >/opt/factorio/server-settings.json +cat </opt/factorio/server-adminlist.json +[] +EOF +msg_ok "Configured Factorio" + +msg_info "Creating Factorio Save" +mkdir -p /opt/factorio/saves +$STD /opt/factorio/bin/x64/factorio --create /opt/factorio/saves/save.zip +msg_ok "Created Factorio Save" + +msg_info "Creating Factorio Service" +cat </etc/systemd/system/factorio.service +[Unit] +Description=Factorio Headless Server +Wants=network-online.target +After=network-online.target + +[Service] +Type=simple +User=root +WorkingDirectory=/opt/factorio +ExecStart=/opt/factorio/bin/x64/factorio --start-server-load-latest --server-settings /opt/factorio/server-settings.json --server-adminlist /opt/factorio/server-adminlist.json +KillSignal=SIGINT +TimeoutStopSec=120 +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF +systemctl enable -q --now factorio + +msg_ok "Created Factorio Service" + +motd_ssh +customize +cleanup_lxc diff --git a/json/factorio.json b/json/factorio.json new file mode 100644 index 0000000000..b847f4e755 --- /dev/null +++ b/json/factorio.json @@ -0,0 +1,36 @@ +{ + "name": "Factorio", + "slug": "factorio", + "categories": [24], + "date_created": "2026-10-13", + "type": "ct", + "updateable": true, + "privileged": false, + "interface_port": null, + "documentation": "https://wiki.factorio.com/Multiplayer", + "website": "https://factorio.com/", + "repository": "", + "architectures": ["amd64"], + "platforms": ["pve"], + "logo": "", + "description": "Factorio headless multiplayer server using the current stable Linux x64 release.", + "install_methods": [ + { + "type": "default", + "script": "ct/factorio.sh", + "config_path": "/opt/factorio/server-settings.json", + "resources": { + "cpu": 1, + "ram": 2048, + "hdd": 8, + "os": "Debian", + "version": "13" + } + } + ], + "default_credentials": {"username": null, "password": null}, + "notes": [ + {"text": "Connect using the Factorio client to :34197 over UDP. There is no web interface. Clients need the same Factorio version and mods as the server.", "type": "info"}, + {"text": "Saves are stored in /opt/factorio/saves. The service loads the most recent save on restart. Run update inside the container to install the current stable release while preserving settings and saves.", "type": "info"} + ] +}