configurable paths

This commit is contained in:
CroneKorkN 2026-01-18 19:24:39 +01:00
parent 7c4177d749
commit 024bbe2ec7
Signed by: cronekorkn
SSH key fingerprint: SHA256:v0410ZKfuO1QHdgKBsdQNF64xmTxOF8osF1LIqwTcVw
5 changed files with 56 additions and 10 deletions

View file

@ -19,7 +19,7 @@
li li
= to.overlay.name = to.overlay.name
span.small 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" = link_to "Remove", server_template_overlay_path(@server_template, to.overlay), method: :delete, data: { confirm: "Sure?" }, class: "btn btn--small btn--danger"
- else - else
p No overlays selected. p No overlays selected.

View file

@ -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") systemd_user_dir = File.expand_path("~/.config/systemd/user")
unless Dir.exist?(systemd_user_dir) unless Dir.exist?(systemd_user_dir)

View file

@ -20,7 +20,7 @@ module L4dServer
end end
def config_file_path def config_file_path
"/opt/l4d2/servers/#{@server.id}/server.cfg" "#{L4dServer::Config.server_path(@server.id)}/server.cfg"
end end
private private

View file

@ -34,7 +34,7 @@ module L4dServer
private private
def setup_directories 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}/upper")
FileUtils.mkdir_p("#{server_dir}/work") FileUtils.mkdir_p("#{server_dir}/work")
FileUtils.mkdir_p("#{server_dir}/merged") FileUtils.mkdir_p("#{server_dir}/merged")
@ -45,9 +45,9 @@ module L4dServer
end end
def mount_overlayfs def mount_overlayfs
server_dir = "/opt/l4d2/servers/#{@server.id}" server_dir = L4dServer::Config.server_path(@server.id)
overlays = @template.template_overlays.ordered.map { |to| "/opt/l4d2/overlays/#{to.overlay.slug}" }.join(":") overlays = @template.template_overlays.ordered.map { |to| L4dServer::Config.overlay_path(to.overlay.slug) }.join(":")
lower_dirs = "#{overlays}:/opt/l4d2/installation" 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" 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 end
def unmount_overlayfs def unmount_overlayfs
server_dir = "/opt/l4d2/servers/#{@server.id}" server_dir = L4dServer::Config.server_path(@server.id)
merged = "#{server_dir}/merged" merged = "#{server_dir}/merged"
if Dir.exist?(merged) if Dir.exist?(merged)
@ -76,7 +76,7 @@ module L4dServer
end end
def cleanup_directories 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) FileUtils.rm_rf(server_dir) if Dir.exist?(server_dir)
rescue StandardError => e rescue StandardError => e
Rails.logger.warn("Failed to cleanup directories: #{e.message}") Rails.logger.warn("Failed to cleanup directories: #{e.message}")

View file

@ -94,8 +94,8 @@ module L4dServer
[Service] [Service]
Type=simple Type=simple
User=steam User=steam
ExecStart=/opt/l4d2/bin/start-server #{@server.id} ExecStart=#{L4dServer::Config.bin_path}/start-server #{@server.id}
ExecStop=/opt/l4d2/bin/stop-server #{@server.id} ExecStop=#{L4dServer::Config.bin_path}/stop-server #{@server.id}
Restart=on-failure Restart=on-failure
RestartSec=10 RestartSec=10
Nice=-10 Nice=-10