From 7e2e006c62c366a0ee2164550f01986daa0e2f1d Mon Sep 17 00:00:00 2001 From: Merith-TK Date: Mon, 9 Dec 2024 21:58:51 +0000 Subject: [PATCH] rebase to dotnet containter --- .gitignore | 2 ++ Dockerfile | 49 ++++++++-------------------- crystite/appsettings.json | 23 ------------- {crystite => defaults}/resonite.json | 0 docker-compose.yml | 17 +++------- scripts/00_setup.sh | 3 +- scripts/01_install.sh | 16 +++------ scripts/02_setup_config.sh | 13 ++------ scripts/03_download_mods.sh | 4 +-- scripts/99_start.sh | 15 +++------ 10 files changed, 33 insertions(+), 109 deletions(-) create mode 100644 .gitignore delete mode 100644 crystite/appsettings.json rename {crystite => defaults}/resonite.json (100%) mode change 100644 => 100755 scripts/00_setup.sh mode change 100644 => 100755 scripts/01_install.sh mode change 100644 => 100755 scripts/02_setup_config.sh mode change 100644 => 100755 scripts/03_download_mods.sh mode change 100644 => 100755 scripts/99_start.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..59c464d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/data +/steamcred.env \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index e2640f9..eeb991f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM public.ecr.aws/docker/library/debian:12 +FROM mcr.microsoft.com/dotnet/runtime ENV \ LANG="en_US.UTF-8" \ @@ -9,48 +9,25 @@ WORKDIR /root # Install Base Packages RUN apt update && apt upgrade -y \ - && dpkg --add-architecture i386 \ - && apt install -y \ + && dpkg --add-architecture i386 +RUN DEBIAN_FRONTEND=noninteractive \ + apt install -y \ apt-transport-https \ - dirmngr \ - gnupg \ - ca-certificates \ - iproute2 \ - unzip \ - sqlite3 \ - fontconfig \ - lib32gcc-s1 \ curl \ - wget \ - screen \ - sudo \ - youtube-dl \ - jq - -# Install Mono -RUN export GNUPGHOME=$(mktemp -d) \ - && gpg --recv-keys --no-default-keyring --keyring /etc/apt/trusted.gpg.d/mono-keyring.gpg --keyserver keyserver.ubuntu.com 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF \ - && echo "deb [signed-by=/etc/apt/trusted.gpg.d/mono-keyring.gpg] https://download.mono-project.com/repo/debian stable-buster main" > /etc/apt/sources.list.d/mono-official-stable.list \ - && wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb \ - && dpkg -i packages-microsoft-prod.deb \ - && rm packages-microsoft-prod.deb \ - && apt-get update \ - && apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install -y mono-complete - -# Install Crystite -RUN echo 'deb [signed-by=/usr/share/keyrings/algiz.gpg] https://repo.algiz.nu/crystite bookworm main' | tee /etc/apt/sources.list.d/crystite.list \ - && mkdir -p /usr/share/keyrings \ - && wget -O /usr/share/keyrings/algiz.gpg https://repo.algiz.nu/algiz.gpg \ - && apt-get update \ - && apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install -y crystite + jq \ + lib32gcc-s1 \ + libopus-dev \ + libopus0 \ + locales \ + mono-complete \ + opus-tools # make data directories RUN mkdir -p /data/resonite /data/steamcmd -VOLUME [ "/etc/crystite", "/data/resonite", "/data/steamcmd", "/data/home" ] +VOLUME [ "/data/resonite", "/data/steamcmd", "/data/home" ] # DEFAULT ENVS ENV DISABLE_STEAMCMD=false -ENV USE_CRYSTITE=false ENV CONFIG_FILE="/data/Config.json" ENV COMMAND="/scripts/99_start.sh" ENV RESONITE_ARGS="" @@ -58,7 +35,7 @@ ENV RESONITE_MOD_LOADER=false ENV MOD_URLS="" ENV STOP_LAUNCH=false -COPY crystite /mnt/crystite +COPY defaults /mnt/defaults COPY scripts /scripts RUN chmod +x /scripts/* ENTRYPOINT ["/scripts/00_setup.sh"] diff --git a/crystite/appsettings.json b/crystite/appsettings.json deleted file mode 100644 index 2f7e4de..0000000 --- a/crystite/appsettings.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "Serilog": { - "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.Debug" ], - "WriteTo": [ - { - "Name": "Console" - } - ], - "MinimumLevel": { - "Default": "Information", - "Override": { - "System": "Information", - "Microsoft": "Information", - "System.Net.Http.HttpClient": "Warning" - } - } - }, - "Headless": { - "resonitePath": "/data/resonite", - "assetCleanupInterval": "06:00:00", - "maxAssetAge": "07:00:00:00" - } -} \ No newline at end of file diff --git a/crystite/resonite.json b/defaults/resonite.json similarity index 100% rename from crystite/resonite.json rename to defaults/resonite.json diff --git a/docker-compose.yml b/docker-compose.yml index a79aaf5..701058b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,18 +12,16 @@ services: # have volume entires in dockerfile, if removed this data will persist # until the volume is removed - # - ./data/crystite/:/etc/crystite:rw - # - ./data/resonite:/data/resonite:rw - # - ./data/steamcmd:/data/steamcmd:rw + - ./data/resonite:/data/resonite:rw + - ./data/steamcmd:/data/steamcmd:rw # mount scripts for runtime, optional - - .build/scripts:/scripts:ro - - .build/crystite:/mnt/crystite:ro + - ./scripts:/scripts:ro ## EDIT THESE ENVIRONMENT VARIABLES ## environment: # DO NOT REMOVE THIS VALUE - RUN_AS: 1000 + # RUN_AS: 1000 # THIS CONTROLS THE USER ID THAT THE SERVER RUNS AS # This is specifically so *you* have control over the files] @@ -33,10 +31,6 @@ services: # Prevents SteamCMD from updating the gamefiles DISABLE_STEAMCMD: "false" - # Wether to use crystite or not. - # if no STEAM_BETA key is provided, this is force set to true - USE_CRYSTITE: "false" - # Where to located the config file, defaults to /data/Config.json # if config file does not exist, it will generate a template one at that location CONFIG_FILE: "/data/Config.json" @@ -45,8 +39,7 @@ services: COMMAND: "/scripts/99_start.sh" # Wether to enable the Resonite Mod Loader - # Crystite Support is expiremental at best. - RESONITE_MOD_LOADER: true + RESONITE_MOD_LOADER: false # list of mods to load, MOD_URLS: | https://github.com/New-Project-Final-Final-WIP/HeadlessTweaks/releases/latest/download/HeadlessTweaks.dll diff --git a/scripts/00_setup.sh b/scripts/00_setup.sh old mode 100644 new mode 100755 index 8a97a56..0168e36 --- a/scripts/00_setup.sh +++ b/scripts/00_setup.sh @@ -17,7 +17,7 @@ export DEFAULT_RESONITE_ARGS="-LogsPath /data/resonite/logs \ -HeadlessConfig $CONFIG_FILE \ $RESONITE_ARGS" -mkdir -p /data/home /data/resonite /data/steamcmd /etc/crystite/conf.d +mkdir -p /data/home /data/resonite /data/steamcmd ## Have to do this here, as otherwise stuff doesnt work for some reason # using source so runtime vars can be updated as needed source /scripts/01_install.sh @@ -35,7 +35,6 @@ if [ "$RUN_AS" != "" ]; then export HOME="/home/user" chown $USER_ID:$GROUP_ID /data -R - chown $USER_ID:$GROUP_ID /etc/crystite -R echo "executing command: $COMMAND" exec sudo -E -u user $COMMAND diff --git a/scripts/01_install.sh b/scripts/01_install.sh old mode 100644 new mode 100755 index 1378d29..fa62c31 --- a/scripts/01_install.sh +++ b/scripts/01_install.sh @@ -8,19 +8,11 @@ if [ "$DISABLE_STEAMCMD" != "true" ]; then fi # if steam beta is empty, or matchs "beta_access_key" we don't need to dwonload the beta if [ -z "$STEAM_BETA" ] || [ "$STEAM_BETA" == "beta_access_key" ]; then - echo "Downloading Resonite" - /data/steamcmd/steamcmd.sh +login anonymous +force_install_dir /data/resonite +app_update 2519830 +quit + echo "[ERROR] Unable to Download Headless, No Beta Key" + exit else echo "Downloading Resonite Headless" - /data/steamcmd/steamcmd.sh +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} +force_install_dir /data/resonite +app_update 2519830 -beta headless -betapassword ${STEAM_BETA} validate +quit + /data/steamcmd/steamcmd.sh +force_install_dir /data/resonite +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} +app_license_request 2519830 +app_update 2519830 -beta headless -betapassword ${STEAM_BETA} validate +quit fi + ln -s /data/resonite/Headless/Resonite.dll /data/resonite/Headless/dotnet-Resonite.dll fi - -# if crystite is enabled, we don't need to check for resonite -if [ "$USE_CRYSTITE" != "true" ]; then - if [ ! -f "/data/resonite/Headless/Resonite.exe" ]; then - echo "Headless/Resonite.exe not found!" - echo "Forcing use of Crystite" - USE_CRYSTITE="true" - fi -fi \ No newline at end of file diff --git a/scripts/02_setup_config.sh b/scripts/02_setup_config.sh old mode 100644 new mode 100755 index 282b32d..5ec5d7c --- a/scripts/02_setup_config.sh +++ b/scripts/02_setup_config.sh @@ -6,29 +6,20 @@ echo "Setting up Resonite Config" # if CONFIG_FILE is not set, use default config path if [ ! -f $CONFIG_FILE ]; then echo "No Resonite Config found, copying from template" - cp /mnt/crystite/resonite.json $CONFIG_FILE - # cat /mnt/crystite/resonite.json | jq '.' > $CONFIG_FILE -fi -echo "Generating Crystite configs" -if [ ! -f "/etc/crystite/appsettings.json" ]; then - cat /mnt/crystite/appsettings.json | jq '.' > /etc/crystite/appsettings.json + cp /mnt/defaults/resonite.json $CONFIG_FILE fi CONFIG_DATA=$(grep -v " null," "$CONFIG_FILE") if [ ! -n "$CONFIG_DATA" ]; then echo "Config file is empty, copying from template" - cp /mnt/crystite/resonite.json $CONFIG_FILE + cp /mnt/defaults/resonite.json $CONFIG_FILE CONFIG_DATA=$(grep -v " null," "$CONFIG_FILE") fi -CONFIG_DATA=$(echo "$CONFIG_DATA" | jq ".comment = \"DO NOT EDIT: This file was automatically generated. Please edit $CONFIG_FILE instead.\"") -echo "{ \"Resonite\": $CONFIG_DATA }" > /etc/crystite/conf.d/_generated_resonite.json ## Setup Modloader Configs if [ "$RESONITE_MOD_LOADER" == "true" ]; then echo "Setting up Modloader Configs" - echo "{\"Resonite\": {\"pluginAssemblies\": [\"/data/resonite/Headless/Libraries/ResoniteModLoader.dll\"]}}" | jq '.' > /etc/crystite/conf.d/_generated_rml.json DEFAULT_RESONITE_ARGS=$(echo "$DEFAULT_RESONITE_ARGS -LoadAssembly /data/resonite/Headless/Libraries/ResoniteModLoader.dll") else echo "Modloader is disabled" - rm -f /etc/crystite/conf.d/_generated_rml.json fi \ No newline at end of file diff --git a/scripts/03_download_mods.sh b/scripts/03_download_mods.sh old mode 100644 new mode 100755 index 7b26c2c..3bb56b1 --- a/scripts/03_download_mods.sh +++ b/scripts/03_download_mods.sh @@ -53,11 +53,11 @@ done # if resonte mod loader is enabled, create and link rml_mods, libs, and config if [ "$RESONITE_MOD_LOADER" == "true" ]; then for dir in rml_mods rml_libs rml_config; do - if [ -d "/data/resonite/$dir" ]; then + if [ -d "/data/resonite/Headless/$dir" ]; then continue fi mkdir -p "/data/resonite/Headless/$dir" - ln -s "/data/resonite/Headless/$dir" "/data/resonite/$dir" + ln -s "./Headless/$dir" "./$dir" done if [ ! -f "/data/resonite/Libraries/ResoniteModLoader.dll" ]; then mkdir -p "/data/resonite/Libraries" diff --git a/scripts/99_start.sh b/scripts/99_start.sh old mode 100644 new mode 100755 index 597347f..a7eeab5 --- a/scripts/99_start.sh +++ b/scripts/99_start.sh @@ -5,14 +5,7 @@ if [ "$STOP_LAUNCH" == "true" ]; then exit 0 fi -# Check if Crystite is enabled -if [ "$USE_CRYSTITE" == "true" ]; then - echo "Running Crystite" - echo "exec: /usr/lib/crystite/crystite" - /usr/lib/crystite/crystite -else - cd /data/resonite/Headless || exit - echo "Running Resonite" - echo "exec: mono Resonite.exe $DEFAULT_RESONITE_ARGS $RESONITE_ARGS" - mono Resonite.exe $DEFAULT_RESONITE_ARGS $RESONITE_ARGS -fi \ No newline at end of file +cd /data/resonite/Headless || exit +echo "Running Resonite" +echo "exec: dotnet Resonite.dll $DEFAULT_RESONITE_ARGS $RESONITE_ARGS" +dotnet Resonite.dll $DEFAULT_RESONITE_ARGS $RESONITE_ARGS