From 88c08ab5a96d5c1a8c75cbd8eb68e5f9795a356a Mon Sep 17 00:00:00 2001 From: Knut Ahlers Date: Tue, 19 Jun 2018 13:14:45 +0200 Subject: [PATCH] Update image build, upgrade to 0.16.51 Signed-off-by: Knut Ahlers --- .repo-runner.yaml | 12 --------- Dockerfile | 41 +++++++++++++++++++---------- start.sh | 66 ++++++++++++++++++++++++----------------------- 3 files changed, 61 insertions(+), 58 deletions(-) delete mode 100644 .repo-runner.yaml diff --git a/.repo-runner.yaml b/.repo-runner.yaml deleted file mode 100644 index 3b235bc..0000000 --- a/.repo-runner.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- - -image: "quay.io/luzifer/repo-runner-image" -checkout_dir: /src/factorio - -commands: - - make ci - -environment: - GHUSER: luzifer-docker - GPG_KEY: 316D1333 - diff --git a/Dockerfile b/Dockerfile index 9e6d424..5dd7bcf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,35 @@ -FROM debian +FROM debian:stretch -ENV FACTORIO_SERVER_VERSION 0.15.37 +ENV FACTORIO_SERVER_VERSION=0.16.51 \ + DUMB_INIT_VERSION=1.2.1 \ + GOSU_VERSION=1.10 + +RUN set -ex \ + && apt-get update \ + && apt-get install --no-install-recommends -y \ + ca-certificates \ + curl \ + xz-utils \ + && curl -sSfLo /usr/local/bin/dumb-init "https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_amd64" \ + && curl -sSfLo /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-amd64" \ + && chmod +x \ + /usr/local/bin/dumb-init \ + /usr/local/bin/gosu \ + && mkdir -p /opt \ + && curl -sSLf "https://www.factorio.com/get-download/${FACTORIO_SERVER_VERSION}/headless/linux64" | \ + tar -C /opt -x -J \ + && useradd -d /opt/factorio -M -u 10000 factorio \ + && apt-get purge -y \ + ca-certificates \ + curl \ + xz-utils \ + && apt-get autoremove -y --purge \ + && rm -rf /var/lib/apt/lists/* ENTRYPOINT ["/opt/defaults/start.sh"] EXPOSE 34197/udp -ADD . /opt/defaults - -RUN set -ex \ - && apt-get update && apt-get install -y curl xz-utils \ - && mkdir -p /opt \ - && useradd -d /opt/factorio -M -u 10000 factorio \ - && curl -sSLfo /tmp/factorio.tgz https://www.factorio.com/get-download/${FACTORIO_SERVER_VERSION}/headless/linux64 \ - && tar -C /opt -x -J -f /tmp/factorio.tgz \ - && chown -R factorio:factorio /opt/factorio \ - && rm /tmp/factorio.tgz - -USER factorio +COPY . /opt/defaults VOLUME /data WORKDIR /data diff --git a/start.sh b/start.sh index 0c8b652..062743b 100755 --- a/start.sh +++ b/start.sh @@ -1,44 +1,46 @@ -#!/bin/bash -e +#!/usr/local/bin/dumb-init /bin/bash +set -euo pipefail -set -o pipefail +# Ensure factorio owns /data +chown -R factorio:factorio /data -ACTION=$1 +ACTION=${1:-help} BINARY="/opt/factorio/bin/x64/factorio" MAP_FILE="mapfile.zip" if ! [ -e /opt/factorio/config/config.ini ]; then - mkdir -p /opt/factorio/config - cp /opt/defaults/config.ini /opt/factorio/config/config.ini + mkdir -p /opt/factorio/config + cp /opt/defaults/config.ini /opt/factorio/config/config.ini fi case ${ACTION} in - "init") - echo "Initializing files in case they do not exist: map-gen-settings.json / server-settings.json" - [ -e map-gen-settings.json ] || cp /opt/defaults/map-gen-settings.json map-gen-settings.json - [ -e server-settings.json ] || cp /opt/defaults/server-settings.json server-settings.json - ;; - "create") - echo "Creating map at ${MAP_FILE} with settings from map-gen-settings.json" - [ -e map-gen-settings.json ] || cp /opt/defaults/map-gen-settings.json map-gen-settings.json - exec ${BINARY} --map-gen-settings map-gen-settings.json --create ${MAP_FILE} - ;; - "start") - echo "Starting game from map file ${MAP_FILE} with settings from server-settings.json" +"init") + echo "Initializing files in case they do not exist: map-gen-settings.json / server-settings.json" + [ -e map-gen-settings.json ] || cp /opt/defaults/map-gen-settings.json map-gen-settings.json + [ -e server-settings.json ] || cp /opt/defaults/server-settings.json server-settings.json + ;; +"create") + echo "Creating map at ${MAP_FILE} with settings from map-gen-settings.json" + [ -e map-gen-settings.json ] || cp /opt/defaults/map-gen-settings.json map-gen-settings.json + exec gosu factorio ${BINARY} --map-gen-settings map-gen-settings.json --create ${MAP_FILE} + ;; +"start") + echo "Starting game from map file ${MAP_FILE} with settings from server-settings.json" - if ! [ -e ${MAP_FILE} ]; then - echo "Error: There is no map file at ${MAP_FILE}. Use 'create' or put a map file at that location." - exit 1 - fi + if ! [ -e ${MAP_FILE} ]; then + echo "Error: There is no map file at ${MAP_FILE}. Use 'create' or put a map file at that location." + exit 1 + fi - [ -e server-settings.json ] || cp /opt/defaults/server-settings.json server-settings.json - exec ${BINARY} --server-settings server-settings.json --start-server ${MAP_FILE} - ;; - "help") - echo "Usage: docker run quay.io/luzifer/factorio [init | create | start]" - echo - echo "Alternative: docker run quay.io/luzifer/factorio " - ;; - *) - exec ${BINARY} "$@" - ;; + [ -e server-settings.json ] || cp /opt/defaults/server-settings.json server-settings.json + exec gosu factorio ${BINARY} --server-settings server-settings.json --start-server ${MAP_FILE} + ;; +"help") + echo "Usage: docker run luzifer/factorio [init | create | start]" + echo + echo "Alternative: docker run luzifer/factorio " + ;; +*) + exec gosu factorio ${BINARY} "$@" + ;; esac