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