From fbd4dd8db9af8c45a32b7c956070e7f0422affbd Mon Sep 17 00:00:00 2001 From: Mona Mayrhofer Date: Wed, 31 Jan 2024 20:32:03 +0100 Subject: [PATCH] initial container works --- .gitignore | 1 + flake.lock | 27 +++++++++++++ flake.nix | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 143 insertions(+) create mode 100644 .gitignore create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b2be92b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +result diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..640e40a --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1706373441, + "narHash": "sha256-S1hbgNbVYhuY2L05OANWqmRzj4cElcbLuIkXTb69xkk=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "56911ef3403a9318b7621ce745f5452fb9ef6867", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..c30c5f9 --- /dev/null +++ b/flake.nix @@ -0,0 +1,115 @@ +{ + description = "Vintage Story Server as a Dockerfile"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-23.11"; + }; + + outputs = { + self, + nixpkgs, + }: let + pkgs = import nixpkgs { + system = "x86_64-linux"; + }; + + server = pkgs.stdenv.mkDerivation rec { + pname = "vintagestory-server"; + version = "1.18.15"; + + src = pkgs.fetchzip { + url = "https://cdn.vintagestory.at/gamefiles/stable/vs_server_linux-x64_${version}.tar.gz"; + hash = "sha256-nWzx44EVkEqWZw42Yi4NLa0b9lJ4HVIIqEvqEcjW+Q4="; + stripRoot = false; + }; + #src = fetchurl { + # url = "https://cdn.vintagestory.at/gamefiles/stable/vs_server_linux-x64_${version}.tar.gz"; + # hash = "sha256-gPe5ZQn7MrK07R1nT6UK1D9YMUbVTUltzkOycvJFZ3o="; + # stripRoot = false; + #}; + + nativeBuildInputs = [pkgs.makeWrapper]; + + buildInputs = [pkgs.dotnet-runtime_7]; + + runtimeLibs = pkgs.lib.makeLibraryPath (with pkgs; [ + gtk2 + sqlite + openal + cairo + libGLU + SDL2 + freealut + libglvnd + pipewire + libpulseaudio + dotnet-runtime_7 + ]); + + installPhase = '' + runHook preInstall + + mkdir -p $out/share/vintagestory $out/bin $out/share/pixmaps $out/share/fonts/truetype + cp -r * $out/share/vintagestory + cp $out/share/vintagestory/assets/gameicon.xpm $out/share/pixmaps/vintagestory.xpm + #cp $out/share/vintagestory/assets/game/fonts/*.ttf $out/share/fonts/truetype + + runHook postInstall + ''; + + preFixup = + '' + makeWrapper ${pkgs.dotnet-runtime_7}/bin/dotnet $out/bin/vintagestory-server \ + --prefix LD_LIBRARY_PATH : "${runtimeLibs}" \ + --add-flags $out/share/vintagestory/VintagestoryServer.dll + '' + + '' + find "$out/share/vintagestory/assets/" -not -path "*/fonts/*" -regex ".*/.*[A-Z].*" | while read -r file; do + local filename="$(basename -- "$file")" + ln -sf "$filename" "''${file%/*}"/"''${filename,,}" + done + ''; + }; + in { + packages.x86_64-linux.default = server; + images = { + default = pkgs.dockerTools.buildImage { + name = "vintage-server"; + architecture = "amd64"; + + copyToRoot = + [ + (pkgs.buildEnv + { + name = "image-root"; + paths = [ + pkgs.hello + pkgs.coreutils + pkgs.strace + pkgs.bash + pkgs.dotnet-sdk_7 + server + ]; + pathsToLink = ["/bin"]; + }) + ] + ++ (with pkgs.dockerTools; [ + usrBinEnv + binSh + caCertificates + fakeNss + ]); + + runAsRoot = '' + mkdir -p /home/dotnet + mkdir -p /game + ''; + + config = { + Env = ["HOME=/home/dotnet" "VS_DATA_PATH=/game"]; + Cmd = ["/bin/bash"]; + }; + }; + }; + }; +}