From 024bbe2ec77ba3023e54e11599a89ec5d0afe017 Mon Sep 17 00:00:00 2001 From: CroneKorkN Date: Sun, 18 Jan 2026 19:24:39 +0100 Subject: [PATCH] configurable paths --- app/views/server_templates/show.html.slim | 2 +- config/initializers/l4d_server.rb | 46 +++++++++++++++++++++++ lib/l4d_server/config_generator.rb | 2 +- lib/l4d_server/launcher.rb | 12 +++--- lib/l4d_server/systemd_manager.rb | 4 +- 5 files changed, 56 insertions(+), 10 deletions(-) diff --git a/app/views/server_templates/show.html.slim b/app/views/server_templates/show.html.slim index 6e917a1..8fe609e 100644 --- a/app/views/server_templates/show.html.slim +++ b/app/views/server_templates/show.html.slim @@ -19,7 +19,7 @@ li = to.overlay.name span.small - | (dir: /opt/l4d2/overlays/#{to.overlay.slug}) + | (dir: #{L4dServer::Config.overlay_path(to.overlay.slug)}) = link_to "Remove", server_template_overlay_path(@server_template, to.overlay), method: :delete, data: { confirm: "Sure?" }, class: "btn btn--small btn--danger" - else p No overlays selected. diff --git a/config/initializers/l4d_server.rb b/config/initializers/l4d_server.rb index ab8948d..acd983d 100644 --- a/config/initializers/l4d_server.rb +++ b/config/initializers/l4d_server.rb @@ -1,3 +1,49 @@ +# Configuration for L4D2 server paths +module L4dServer + class Config + class << self + # Base directory for all L4D2 server files + def base_path + @base_path ||= ENV.fetch("L4D2_BASE_PATH", "/opt/l4d2") + end + + def base_path=(path) + @base_path = path + end + + # Directory containing the base L4D2 installation + def installation_path + File.join(base_path, "installation") + end + + # Directory containing overlay filesystems + def overlays_path + File.join(base_path, "overlays") + end + + # Directory containing individual server instances + def servers_path + File.join(base_path, "servers") + end + + # Directory containing helper scripts (start-server, stop-server) + def bin_path + File.join(base_path, "bin") + end + + # Full path to a specific server directory + def server_path(server_id) + File.join(servers_path, server_id.to_s) + end + + # Full path to a specific overlay directory + def overlay_path(slug) + File.join(overlays_path, slug) + end + end + end +end + systemd_user_dir = File.expand_path("~/.config/systemd/user") unless Dir.exist?(systemd_user_dir) diff --git a/lib/l4d_server/config_generator.rb b/lib/l4d_server/config_generator.rb index 6340464..04ec221 100644 --- a/lib/l4d_server/config_generator.rb +++ b/lib/l4d_server/config_generator.rb @@ -20,7 +20,7 @@ module L4dServer end def config_file_path - "/opt/l4d2/servers/#{@server.id}/server.cfg" + "#{L4dServer::Config.server_path(@server.id)}/server.cfg" end private diff --git a/lib/l4d_server/launcher.rb b/lib/l4d_server/launcher.rb index d961187..15e2c8f 100644 --- a/lib/l4d_server/launcher.rb +++ b/lib/l4d_server/launcher.rb @@ -34,7 +34,7 @@ module L4dServer private def setup_directories - server_dir = "/opt/l4d2/servers/#{@server.id}" + server_dir = L4dServer::Config.server_path(@server.id) FileUtils.mkdir_p("#{server_dir}/upper") FileUtils.mkdir_p("#{server_dir}/work") FileUtils.mkdir_p("#{server_dir}/merged") @@ -45,9 +45,9 @@ module L4dServer end def mount_overlayfs - server_dir = "/opt/l4d2/servers/#{@server.id}" - overlays = @template.template_overlays.ordered.map { |to| "/opt/l4d2/overlays/#{to.overlay.slug}" }.join(":") - lower_dirs = "#{overlays}:/opt/l4d2/installation" + server_dir = L4dServer::Config.server_path(@server.id) + overlays = @template.template_overlays.ordered.map { |to| L4dServer::Config.overlay_path(to.overlay.slug) }.join(":") + lower_dirs = "#{overlays}:#{L4dServer::Config.installation_path}" mount_cmd = "fuse-overlayfs -o lowerdir=#{lower_dirs},upperdir=#{server_dir}/upper,workdir=#{server_dir}/work #{server_dir}/merged" @@ -65,7 +65,7 @@ module L4dServer end def unmount_overlayfs - server_dir = "/opt/l4d2/servers/#{@server.id}" + server_dir = L4dServer::Config.server_path(@server.id) merged = "#{server_dir}/merged" if Dir.exist?(merged) @@ -76,7 +76,7 @@ module L4dServer end def cleanup_directories - server_dir = "/opt/l4d2/servers/#{@server.id}" + server_dir = L4dServer::Config.server_path(@server.id) FileUtils.rm_rf(server_dir) if Dir.exist?(server_dir) rescue StandardError => e Rails.logger.warn("Failed to cleanup directories: #{e.message}") diff --git a/lib/l4d_server/systemd_manager.rb b/lib/l4d_server/systemd_manager.rb index a794b89..f3389f0 100644 --- a/lib/l4d_server/systemd_manager.rb +++ b/lib/l4d_server/systemd_manager.rb @@ -94,8 +94,8 @@ module L4dServer [Service] Type=simple User=steam - ExecStart=/opt/l4d2/bin/start-server #{@server.id} - ExecStop=/opt/l4d2/bin/stop-server #{@server.id} + ExecStart=#{L4dServer::Config.bin_path}/start-server #{@server.id} + ExecStop=#{L4dServer::Config.bin_path}/stop-server #{@server.id} Restart=on-failure RestartSec=10 Nice=-10