Browse Source

feat: rebrand project and services from proxmox-router to DebTik

Proxmox Router 2 days ago
parent
commit
8120e84e29
73 changed files with 215 additions and 191 deletions
  1. 5 5
      Makefile
  2. 4 4
      README.md
  3. 1 1
      VERSION
  4. BIN
      bin/debtik
  5. BIN
      bin/debtik-cli
  6. 1 1
      cmd/aerotun-keygen/main.go
  7. 1 1
      cmd/debtik-cli/main.go
  8. 20 20
      cmd/server/main.go
  9. 1 1
      docs/RoutingFilters.md
  10. 1 1
      docs/aerotun-live-deployment.md
  11. 9 9
      docs/aerotun-v2.md
  12. 1 1
      go.mod
  13. 14 7
      install.sh
  14. 1 1
      internal/aerotun/integration_test.go
  15. 1 1
      internal/aerotun/types.go
  16. 2 2
      internal/api/aerotun_handlers.go
  17. 3 3
      internal/api/aerotun_handlers_test.go
  18. 15 15
      internal/api/api.go
  19. 1 1
      internal/api/auth_handlers.go
  20. 1 1
      internal/api/bridge_handlers.go
  21. 1 1
      internal/api/bwtest_handlers.go
  22. 1 1
      internal/api/certs_handlers.go
  23. 1 1
      internal/api/dhcp_handlers.go
  24. 1 1
      internal/api/dhcp_server_handlers.go
  25. 1 1
      internal/api/dns_handlers.go
  26. 1 1
      internal/api/dynamic_routing_handlers.go
  27. 2 2
      internal/api/firewall_handlers.go
  28. 1 1
      internal/api/management_services_test.go
  29. 1 1
      internal/api/services_handlers.go
  30. 1 1
      internal/api/tools_handlers.go
  31. 2 2
      internal/api/update_handlers.go
  32. 1 1
      internal/api/update_handlers_test.go
  33. 1 1
      internal/api/vpn_handlers.go
  34. 1 1
      internal/api/vrrp_handlers.go
  35. 1 1
      internal/auth/manager.go
  36. 1 1
      internal/bridge/manager.go
  37. 2 2
      internal/bwtest/manager.go
  38. 2 2
      internal/certs/manager.go
  39. 1 1
      internal/certs/renewal.go
  40. 2 2
      internal/cli/aerotun.go
  41. 3 3
      internal/cli/command_test.go
  42. 15 15
      internal/cli/executor.go
  43. 2 2
      internal/cli/server.go
  44. 4 4
      internal/cli/ssh.go
  45. 1 1
      internal/cli/ssh_test.go
  46. 2 2
      internal/dhcp/manager.go
  47. 1 1
      internal/dhcp/server_manager.go
  48. 1 1
      internal/dns/manager.go
  49. 3 3
      internal/dynamicrouting/manager.go
  50. 4 4
      internal/firewall/geoip.go
  51. 1 1
      internal/firewall/iptables.go
  52. 5 5
      internal/firewall/manager.go
  53. 2 2
      internal/firewall/native_test.go
  54. 4 4
      internal/firewall/owned_test.go
  55. 1 1
      internal/network/metadata.go
  56. 2 2
      internal/network/persistence.go
  57. 5 5
      internal/routing/manager.go
  58. 2 2
      internal/services/manager.go
  59. 1 1
      internal/vpn/eoip.go
  60. 1 1
      internal/vpn/ipsec.go
  61. 1 1
      internal/vpn/l2tp.go
  62. 1 1
      internal/vpn/manager.go
  63. 4 4
      internal/vpn/ppp_server.go
  64. 1 1
      internal/vpn/pppoe.go
  65. 1 1
      internal/vpn/pptp.go
  66. 2 2
      internal/vpn/wireguard.go
  67. 1 1
      internal/vpn/wireguard_integration_test.go
  68. 5 5
      internal/vrrp/manager.go
  69. 1 1
      internal/web/static/app.js
  70. 1 1
      internal/web/static/index.html
  71. 22 11
      scripts/debtik-update
  72. 7 1
      scripts/install-dependencies.sh
  73. 1 1
      systemd/debtik.service

+ 5 - 5
Makefile

@@ -1,4 +1,4 @@
-BINARY_NAME=proxmox-router
+BINARY_NAME=debtik
 BUILD_DIR=bin
 GO=go
 
@@ -21,11 +21,11 @@ install: build
 	cp $(BUILD_DIR)/$(BINARY_NAME) /usr/local/bin/$(BINARY_NAME)
 	cp $(BUILD_DIR)/debtik-cli /usr/local/bin/debtik-cli
 	chmod +x /usr/local/bin/$(BINARY_NAME) /usr/local/bin/debtik-cli
-	@mkdir -p /etc/proxmox-router /etc/network/interfaces.d
-	cp systemd/proxmox-router.service /etc/systemd/system/proxmox-router.service
+	@mkdir -p /etc/debtik /etc/network/interfaces.d
+	cp systemd/debtik.service /etc/systemd/system/debtik.service
 	systemctl daemon-reload
-	systemctl enable --now proxmox-router
-	@echo "Installed and started service proxmox-router successfully!"
+	systemctl enable --now debtik
+	@echo "Installed and started service debtik successfully!"
 
 clean:
 	rm -rf $(BUILD_DIR)

+ 4 - 4
README.md

@@ -1,6 +1,6 @@
 # DebTik
 
-DebTik is a Debian/Proxmox router appliance with an embedded web interface, REST API and RouterOS-style CLI. It manages network interfaces, routing, firewall/NAT, DHCP/DNS, WireGuard, IPsec, PPP, VRRP and AeroTUN. AeroTUN v3 uses pinned peer identities and encrypted tunnels; it works with native TUN or a veth fallback when `/dev/net/tun` is unavailable.
+DebTik is a network router appliance with an embedded web interface, REST API and RouterOS-style CLI. It manages network interfaces, routing, firewall/NAT, DHCP/DNS, WireGuard, IPsec, PPP, VRRP and AeroTUN. AeroTUN v3 uses pinned peer identities and encrypted tunnels; it works with native TUN or a veth fallback when `/dev/net/tun` is unavailable.
 
 Current release: **1.3.9**. See [functionality corrections and verification](docs/functionality-fixes.md) for network persistence, firewall isolation/IPv6, service error handling and certificate renewal changes.
 
@@ -26,7 +26,7 @@ git -c http.sslVerify=false \
 
 This verifies the server's pinned key for this command; it does not change global Git settings. Reverify the pin if the server's TLS key changes. For a reproducible fresh installation, `v1.3.9` contains the complete dependency installer and native Linux firewall corrections.
 
-`install.sh` installs and verifies the dependencies listed in [Dependencies](docs/dependencies.md), including Go, WireGuard, firewall, BIRD, DHCP/DNS, PPP clients and servers, strongSwan plugins, diagnostics and the RSTP daemon. It builds `proxmox-router` and `debtik-cli`, installs the updater helpers, and starts `proxmox-router.service`. It can be run again; existing `/etc/proxmox-router` files and tunnel keys are preserved. Previous binaries are saved as `/usr/local/bin/*.previous`. For native TUN in an LXC container, enable `/dev/net/tun` on the Proxmox host; otherwise AeroTUN uses veth.
+`install.sh` installs and verifies the dependencies listed in [Dependencies](docs/dependencies.md), including Go, WireGuard, firewall, BIRD, DHCP/DNS, PPP clients and servers, strongSwan plugins, diagnostics and the RSTP daemon. It builds `debtik` and `debtik-cli`, installs the updater helpers, and starts `debtik.service`. It can be run again; existing `/etc/debtik` files and tunnel keys are preserved. Previous binaries are saved as `/usr/local/bin/*.previous`. For native TUN in an LXC container, enable `/dev/net/tun` on the host; otherwise AeroTUN uses veth.
 
 To install or repair dependencies on an existing appliance without replacing the application binaries or restarting DebTik:
 
@@ -37,9 +37,9 @@ sudo ./install.sh --check-dependencies
 
 The dependency check exits nonzero and names missing packages, commands or an outdated Go toolchain. Existing Proxmox `ifupdown2` installations are retained. On Debian 13, where `mstpd` is not packaged, the installer builds a pinned upstream release with archive checksum verification; its daemon is enabled before DebTik starts. Go archives are checksum verified as well.
 
-The web UI and authenticated REST API use HTTP port **80** by default. HTTPS is an optional separate `www-ssl` management service, normally port **443**, configured in **Certificates** and **Management Services**. The application SSH CLI normally listens on **2222**, and Telnet/`debtik-cli` on **8282**. The built-in bandwidth test server uses **2000**. Ports can be changed in the management services UI where available. The main service command is `/usr/local/bin/proxmox-router -addr :80`; `systemd/proxmox-router.service` defines the installed unit.
+The web UI and authenticated REST API use HTTP port **80** by default. HTTPS is an optional separate `www-ssl` management service, normally port **443**, configured in **Certificates** and **Management Services**. The application SSH CLI normally listens on **2222**, and Telnet/`debtik-cli` on **8282**. The built-in bandwidth test server uses **2000**. Ports can be changed in the management services UI where available. The main service command is `/usr/local/bin/debtik -addr :80`; `systemd/debtik.service` defines the installed unit.
 
-Configuration is JSON under `/etc/proxmox-router/` (including `services.json` and `vpn/aerotun_instances.json`). AeroTUN secrets and private identities remain on the local appliance. Do not copy one side's private identity to the other.
+Configuration is JSON under `/etc/debtik/` (including `services.json` and `vpn/aerotun_instances.json`). AeroTUN secrets and private identities remain on the local appliance. Do not copy one side's private identity to the other.
 
 ## Usage
 

+ 1 - 1
VERSION

@@ -1 +1 @@
-1.3.11
+1.4.0

BIN
bin/proxmox-router → bin/debtik


BIN
bin/debtik-cli


+ 1 - 1
cmd/aerotun-keygen/main.go

@@ -7,7 +7,7 @@ import (
 	"fmt"
 	"log"
 	"os"
-	"proxmox-router/internal/aerotun"
+	"debtik/internal/aerotun"
 )
 
 func main() {

+ 1 - 1
cmd/debtik-cli/main.go

@@ -26,7 +26,7 @@ func main() {
 	conn, err := net.DialTimeout("tcp", *addr, 3*time.Second)
 	if err != nil {
 		fmt.Fprintf(os.Stderr, "\033[31mError: Could not connect to DebTik CLI service on %s\033[0m\n", *addr)
-		fmt.Fprintf(os.Stderr, "Ensure proxmox-router service is active and listening on port 8282.\n")
+		fmt.Fprintf(os.Stderr, "Ensure debtik service is active and listening on port 8282.\n")
 		os.Exit(1)
 	}
 	defer conn.Close()

+ 20 - 20
cmd/server/main.go

@@ -10,35 +10,35 @@ import (
 	"net/http"
 	"os"
 	"os/signal"
-	release "proxmox-router"
+	release "debtik"
 	"sync"
 	"syscall"
 	"time"
 
-	"proxmox-router/internal/api"
-	"proxmox-router/internal/auth"
-	"proxmox-router/internal/bridge"
-	"proxmox-router/internal/bwtest"
-	"proxmox-router/internal/certs"
-	"proxmox-router/internal/cli"
-	"proxmox-router/internal/dhcp"
-	"proxmox-router/internal/dns"
-	"proxmox-router/internal/dynamicrouting"
-	"proxmox-router/internal/firewall"
-	"proxmox-router/internal/logging"
-	"proxmox-router/internal/network"
-	"proxmox-router/internal/routing"
-	"proxmox-router/internal/services"
-	"proxmox-router/internal/tools"
-	"proxmox-router/internal/vpn"
-	"proxmox-router/internal/vrrp"
-	"proxmox-router/internal/web"
+	"debtik/internal/api"
+	"debtik/internal/auth"
+	"debtik/internal/bridge"
+	"debtik/internal/bwtest"
+	"debtik/internal/certs"
+	"debtik/internal/cli"
+	"debtik/internal/dhcp"
+	"debtik/internal/dns"
+	"debtik/internal/dynamicrouting"
+	"debtik/internal/firewall"
+	"debtik/internal/logging"
+	"debtik/internal/network"
+	"debtik/internal/routing"
+	"debtik/internal/services"
+	"debtik/internal/tools"
+	"debtik/internal/vpn"
+	"debtik/internal/vrrp"
+	"debtik/internal/web"
 )
 
 func main() {
 	addr := flag.String("addr", ":8080", "HTTP service address (e.g. :8080 or :80)")
 	cliAddr := flag.String("cli-addr", ":8282", "CLI service address for Telnet and debtik-cli (e.g. :8282)")
-	metaPath := flag.String("meta", "/etc/proxmox-router/metadata.json", "Path to interface metadata storage file")
+	metaPath := flag.String("meta", "/etc/debtik/metadata.json", "Path to interface metadata storage file")
 	flag.Parse()
 	if os.Geteuid() == 0 {
 		if err := release.RefreshUpdateHelpers("/usr/local/libexec"); err != nil {

+ 1 - 1
docs/RoutingFilters.md

@@ -3,7 +3,7 @@
 **Software Version:** 1.3.11+  
 **Routing Engine:** BIRD 2 (v2.17+)  
 **Syntax Layer:** MikroTik RouterOS v7 Scripting Layer  
-**Corresponding PDF Document:** [`docs/RoutingFilters.pdf`](file:///root/.gemini/antigravity-cli/scratch/proxmox-router/docs/RoutingFilters.pdf)  
+**Corresponding PDF Document:** [`docs/RoutingFilters.pdf`](RoutingFilters.pdf)  
 
 ---
 

+ 1 - 1
docs/aerotun-live-deployment.md

@@ -1,6 +1,6 @@
 # AeroTUN live deployment — 2026-10-30
 
-Both `proxmox-router` services were upgraded through independent management SSH.
+Both `debtik` services were upgraded through independent management SSH.
 The local host is Linux amd64 using the veth fallback; `192.168.132.45` is Linux
 arm64 using native TUN. Each received the correct architecture build.
 

+ 9 - 9
docs/aerotun-v2.md

@@ -118,22 +118,22 @@ interface is deliberately reported as an error rather than deleted blindly.
 ## Coordinated installation
 
 The prepared binary is at:
-`/root/.local/share/debtik-builds/aerotun-v2/proxmox-router`.
-The ARM64 build is alongside it as `proxmox-router-linux-arm64`. Both hosts were
+`/root/.local/share/debtik-builds/aerotun-v2/debtik`.
+The ARM64 build is alongside it as `debtik-linux-arm64`. Both hosts were
 subsequently upgraded; see [the deployment report](aerotun-live-deployment.md).
 For future upgrades, ensure both ends have v2 and management access independent
 of this AeroTUN connection. Preserve the
-old binary and `/etc/proxmox-router/vpn/aerotun_instances.json` on each host.
+old binary and `/etc/debtik/vpn/aerotun_instances.json` on each host.
 
 On each end, after coordinating the restart:
 
 ```sh
-cp /usr/local/bin/proxmox-router /usr/local/bin/proxmox-router.pre-aerotun-v2
-install -m 0755 /path/to/new/proxmox-router /usr/local/bin/proxmox-router.next
-systemctl stop proxmox-router
-mv /usr/local/bin/proxmox-router.next /usr/local/bin/proxmox-router
-systemctl start proxmox-router
-journalctl -u proxmox-router -n 50 --no-pager
+cp /usr/local/bin/debtik /usr/local/bin/debtik.pre-aerotun-v2
+install -m 0755 /path/to/new/debtik /usr/local/bin/debtik.next
+systemctl stop debtik
+mv /usr/local/bin/debtik.next /usr/local/bin/debtik
+systemctl start debtik
+journalctl -u debtik -n 50 --no-pager
 ```
 
 If an old veth remains after stopping the OLD service, verify its ownership and

+ 1 - 1
go.mod

@@ -1,4 +1,4 @@
-module proxmox-router
+module debtik
 
 go 1.26.0
 

+ 14 - 7
install.sh

@@ -26,27 +26,34 @@ cd "$src"
 build=$(mktemp -d)
 commit=$(git rev-parse HEAD 2>/dev/null || printf unknown)
 echo "Building DebTik server for $(uname -m); the first build may take several minutes..."
-CGO_ENABLED=0 "$go_cmd" build -trimpath -ldflags "-X proxmox-router/internal/api.BuildCommit=$commit" -o "$build/proxmox-router" ./cmd/server
+CGO_ENABLED=0 "$go_cmd" build -trimpath -ldflags "-X debtik/internal/api.BuildCommit=$commit" -o "$build/debtik" ./cmd/server
 echo "Building DebTik CLI..."
 CGO_ENABLED=0 "$go_cmd" build -trimpath -o "$build/debtik-cli" ./cmd/debtik-cli
-install -d -m 0700 /etc/proxmox-router
+install -d -m 0700 /etc/debtik
+if [[ ! -e /etc/proxmox-router ]]; then ln -s /etc/debtik /etc/proxmox-router; fi
 install -d -m 0700 /var/lib/debtik/update
 install -d -m 0755 /usr/local/libexec
 install -m 0750 scripts/debtik-update /usr/local/libexec/debtik-update
 install -m 0750 scripts/release-version.py /usr/local/libexec/debtik-release-version
 install -m 0750 scripts/install-dependencies.sh /usr/local/libexec/debtik-install-dependencies
 install -d -m 0755 /etc/network/interfaces.d
-for name in proxmox-router debtik-cli; do
+for name in debtik debtik-cli; do
   if [[ -f /usr/local/bin/$name ]]; then cp -p "/usr/local/bin/$name" "/usr/local/bin/$name.previous"; fi
   install -m 0755 "$build/$name" "/usr/local/bin/$name.next"
   mv -f "/usr/local/bin/$name.next" "/usr/local/bin/$name"
 done
+# Backward compatibility symlink
+ln -sf /usr/local/bin/debtik /usr/local/bin/proxmox-router
 if [[ -f /etc/network/interfaces ]] && ! grep -Eq '^source[[:space:]]+/etc/network/interfaces\.d/\*' /etc/network/interfaces; then printf '\nsource /etc/network/interfaces.d/*\n' >> /etc/network/interfaces; fi
-install -m 0644 systemd/proxmox-router.service /etc/systemd/system/proxmox-router.service
+install -m 0644 systemd/debtik.service /etc/systemd/system/debtik.service
+if systemctl is-active --quiet proxmox-router.service; then
+  systemctl stop proxmox-router.service || true
+  systemctl disable proxmox-router.service || true
+fi
 systemctl daemon-reload
-systemctl enable proxmox-router.service
-systemctl restart proxmox-router.service
-systemctl is-active --quiet proxmox-router.service
+systemctl enable debtik.service
+systemctl restart debtik.service
+systemctl is-active --quiet debtik.service
 if [[ $commit =~ ^[a-f0-9]{40}$ ]]; then printf '%s\n' "$commit" > /var/lib/debtik/update/installed_commit; fi
 install -m 0600 VERSION /var/lib/debtik/update/installed_version
 install -m 0644 go.mod /var/lib/debtik/update/go.mod

+ 1 - 1
internal/aerotun/integration_test.go

@@ -14,7 +14,7 @@ import (
 	"testing"
 	"time"
 
-	"proxmox-router/internal/bwtest"
+	"debtik/internal/bwtest"
 )
 
 // Opt in: AEROTUN_INTEGRATION=1 go test -run TestVethBandwidthIntegration -v ./internal/aerotun

+ 1 - 1
internal/aerotun/types.go

@@ -10,7 +10,7 @@ const (
 	MagicHeader       = 0xAE70 // "AE"
 	FlagCompressedLZ4 = 0x01
 	FlagKeepalive     = 0x02
-	StoragePath       = "/etc/proxmox-router/vpn/aerotun_instances.json"
+	StoragePath       = "/etc/debtik/vpn/aerotun_instances.json"
 )
 
 // TunnelInstance represents a configured AeroTUN interface and its live status

+ 2 - 2
internal/api/aerotun_handlers.go

@@ -6,8 +6,8 @@ import (
 	"encoding/hex"
 	"encoding/json"
 	"net/http"
-	"proxmox-router/internal/aerotun"
-	"proxmox-router/internal/auth"
+	"debtik/internal/aerotun"
+	"debtik/internal/auth"
 	"time"
 )
 

+ 3 - 3
internal/api/aerotun_handlers_test.go

@@ -9,9 +9,9 @@ import (
 	"strings"
 	"testing"
 
-	"proxmox-router/internal/aerotun"
-	"proxmox-router/internal/auth"
-	"proxmox-router/internal/vpn"
+	"debtik/internal/aerotun"
+	"debtik/internal/auth"
+	"debtik/internal/vpn"
 )
 
 func aeroRequest(method, path, body string, role auth.Role) *http.Request {

+ 15 - 15
internal/api/api.go

@@ -9,21 +9,21 @@ import (
 	"sync"
 	"time"
 
-	"proxmox-router/internal/auth"
-	"proxmox-router/internal/bridge"
-	"proxmox-router/internal/bwtest"
-	"proxmox-router/internal/certs"
-	"proxmox-router/internal/dhcp"
-	"proxmox-router/internal/dns"
-	"proxmox-router/internal/dynamicrouting"
-	"proxmox-router/internal/firewall"
-	"proxmox-router/internal/network"
-	"proxmox-router/internal/routing"
-	"proxmox-router/internal/services"
-	"proxmox-router/internal/system"
-	"proxmox-router/internal/tools"
-	"proxmox-router/internal/vpn"
-	"proxmox-router/internal/vrrp"
+	"debtik/internal/auth"
+	"debtik/internal/bridge"
+	"debtik/internal/bwtest"
+	"debtik/internal/certs"
+	"debtik/internal/dhcp"
+	"debtik/internal/dns"
+	"debtik/internal/dynamicrouting"
+	"debtik/internal/firewall"
+	"debtik/internal/network"
+	"debtik/internal/routing"
+	"debtik/internal/services"
+	"debtik/internal/system"
+	"debtik/internal/tools"
+	"debtik/internal/vpn"
+	"debtik/internal/vrrp"
 )
 
 type Server struct {

+ 1 - 1
internal/api/auth_handlers.go

@@ -7,7 +7,7 @@ import (
 	"strings"
 	"time"
 
-	"proxmox-router/internal/auth"
+	"debtik/internal/auth"
 )
 
 type contextKey string

+ 1 - 1
internal/api/bridge_handlers.go

@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"net/http"
 
-	"proxmox-router/internal/bridge"
+	"debtik/internal/bridge"
 )
 
 func (s *Server) handleBridgeSummary(w http.ResponseWriter, r *http.Request) {

+ 1 - 1
internal/api/bwtest_handlers.go

@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"time"
 
-	"proxmox-router/internal/bwtest"
+	"debtik/internal/bwtest"
 )
 
 // handleGetBwTestServer returns status and metrics for the local BwTest server

+ 1 - 1
internal/api/certs_handlers.go

@@ -7,7 +7,7 @@ import (
 	"strings"
 	"time"
 
-	"proxmox-router/internal/certs"
+	"debtik/internal/certs"
 )
 
 func (s *Server) handleListCertificates(w http.ResponseWriter, r *http.Request) {

+ 1 - 1
internal/api/dhcp_handlers.go

@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"net/http"
 
-	"proxmox-router/internal/dhcp"
+	"debtik/internal/dhcp"
 )
 
 func (s *Server) handleListDHCPClients(w http.ResponseWriter, r *http.Request) {

+ 1 - 1
internal/api/dhcp_server_handlers.go

@@ -3,7 +3,7 @@ package api
 import (
 	"encoding/json"
 	"net/http"
-	"proxmox-router/internal/dhcp"
+	"debtik/internal/dhcp"
 )
 
 func (s *Server) handleGetDHCPServerSummary(w http.ResponseWriter, r *http.Request) {

+ 1 - 1
internal/api/dns_handlers.go

@@ -7,7 +7,7 @@ import (
 	"os/exec"
 	"strings"
 
-	"proxmox-router/internal/dns"
+	"debtik/internal/dns"
 )
 
 // handleGetDNSSettings returns the current router DNS configuration.

+ 1 - 1
internal/api/dynamic_routing_handlers.go

@@ -5,7 +5,7 @@ import (
 	"net/http"
 	"strings"
 
-	"proxmox-router/internal/dynamicrouting"
+	"debtik/internal/dynamicrouting"
 )
 
 // Summary

+ 2 - 2
internal/api/firewall_handlers.go

@@ -6,8 +6,8 @@ import (
 	"net/http"
 	"time"
 
-	"proxmox-router/internal/firewall"
-	"proxmox-router/internal/routing"
+	"debtik/internal/firewall"
+	"debtik/internal/routing"
 )
 
 // ======================== Firewall Summary ========================

+ 1 - 1
internal/api/management_services_test.go

@@ -7,7 +7,7 @@ import (
 	"path/filepath"
 	"testing"
 
-	"proxmox-router/internal/services"
+	"debtik/internal/services"
 )
 
 func TestHTTPAndHTTPSServiceGatesAreIndependent(t *testing.T) {

+ 1 - 1
internal/api/services_handlers.go

@@ -5,7 +5,7 @@ import (
 	"net/http"
 	"strconv"
 
-	"proxmox-router/internal/logging"
+	"debtik/internal/logging"
 )
 
 func (s *Server) handleListServices(w http.ResponseWriter, r *http.Request) {

+ 1 - 1
internal/api/tools_handlers.go

@@ -7,7 +7,7 @@ import (
 	"strconv"
 	"time"
 
-	"proxmox-router/internal/tools"
+	"debtik/internal/tools"
 )
 
 func (s *Server) handleToolsPing(w http.ResponseWriter, r *http.Request) {

+ 2 - 2
internal/api/update_handlers.go

@@ -9,8 +9,8 @@ import (
 	"os"
 	"os/exec"
 	"path/filepath"
-	release "proxmox-router"
-	"proxmox-router/internal/auth"
+	release "debtik"
+	"debtik/internal/auth"
 	"regexp"
 	"strconv"
 	"strings"

+ 1 - 1
internal/api/update_handlers_test.go

@@ -4,7 +4,7 @@ import (
 	"context"
 	"net/http"
 	"net/http/httptest"
-	"proxmox-router/internal/auth"
+	"debtik/internal/auth"
 	"strings"
 	"testing"
 )

+ 1 - 1
internal/api/vpn_handlers.go

@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"net/http"
 
-	"proxmox-router/internal/vpn"
+	"debtik/internal/vpn"
 )
 
 func (s *Server) handleOverallVPNStatus(w http.ResponseWriter, r *http.Request) {

+ 1 - 1
internal/api/vrrp_handlers.go

@@ -3,7 +3,7 @@ package api
 import (
 	"encoding/json"
 	"net/http"
-	"proxmox-router/internal/vrrp"
+	"debtik/internal/vrrp"
 )
 
 func (s *Server) handleListVRRPInstances(w http.ResponseWriter, r *http.Request) {

+ 1 - 1
internal/auth/manager.go

@@ -29,7 +29,7 @@ var (
 )
 
 const (
-	DefaultUsersPath = "/etc/proxmox-router/users.json"
+	DefaultUsersPath = "/etc/debtik/users.json"
 	SessionDuration  = 7 * 24 * time.Hour
 )
 

+ 1 - 1
internal/bridge/manager.go

@@ -20,7 +20,7 @@ import (
 	"github.com/vishvananda/netlink"
 )
 
-const BridgeConfigFile = "/etc/proxmox-router/bridge.json"
+const BridgeConfigFile = "/etc/debtik/bridge.json"
 
 type BridgeConfigStore struct {
 	Bridges []*BridgeInstance `json:"bridges"`

+ 2 - 2
internal/bwtest/manager.go

@@ -8,7 +8,7 @@ import (
 	"sync"
 )
 
-const DefaultConfigPath = "/etc/proxmox-router/bwtest.json"
+const DefaultConfigPath = "/etc/debtik/bwtest.json"
 
 // Manager coordinates the BwTest server and client subsystems
 type Manager struct {
@@ -67,7 +67,7 @@ func (m *Manager) loadConfig() (*ServerConfig, error) {
 }
 
 func (m *Manager) saveConfigLocked(cfg ServerConfig) error {
-	_ = os.MkdirAll("/etc/proxmox-router", 0755)
+	_ = os.MkdirAll("/etc/debtik", 0755)
 	data, err := json.MarshalIndent(cfg, "", "  ")
 	if err != nil {
 		return err

+ 2 - 2
internal/certs/manager.go

@@ -25,11 +25,11 @@ import (
 	"time"
 
 	"golang.org/x/crypto/acme"
-	"proxmox-router/internal/logging"
+	"debtik/internal/logging"
 )
 
 const (
-	DefaultCertsDir     = "/etc/proxmox-router/certs"
+	DefaultCertsDir     = "/etc/debtik/certs"
 	DefaultMetadataFile = "certs.json"
 
 	TypeCA     = "ca"

+ 1 - 1
internal/certs/renewal.go

@@ -10,7 +10,7 @@ import (
 	"fmt"
 	"os"
 	"path/filepath"
-	"proxmox-router/internal/logging"
+	"debtik/internal/logging"
 	"strings"
 	"time"
 )

+ 2 - 2
internal/cli/aerotun.go

@@ -6,8 +6,8 @@ import (
 	"strconv"
 	"strings"
 
-	"proxmox-router/internal/aerotun"
-	"proxmox-router/internal/auth"
+	"debtik/internal/aerotun"
+	"debtik/internal/auth"
 )
 
 func (e *Executor) handleInterfaceAeroTUN(parts []string, user *auth.PublicUser) string {

+ 3 - 3
internal/cli/command_test.go

@@ -6,9 +6,9 @@ import (
 	"strings"
 	"testing"
 
-	"proxmox-router/internal/aerotun"
-	"proxmox-router/internal/auth"
-	"proxmox-router/internal/vpn"
+	"debtik/internal/aerotun"
+	"debtik/internal/auth"
+	"debtik/internal/vpn"
 )
 
 func TestQuotedCommandArguments(t *testing.T) {

+ 15 - 15
internal/cli/executor.go

@@ -10,21 +10,21 @@ import (
 	"strings"
 	"time"
 
-	"proxmox-router/internal/auth"
-	"proxmox-router/internal/bridge"
-	"proxmox-router/internal/bwtest"
-	"proxmox-router/internal/certs"
-	"proxmox-router/internal/dhcp"
-	"proxmox-router/internal/dns"
-	"proxmox-router/internal/dynamicrouting"
-	"proxmox-router/internal/firewall"
-	"proxmox-router/internal/logging"
-	"proxmox-router/internal/network"
-	"proxmox-router/internal/routing"
-	"proxmox-router/internal/services"
-	"proxmox-router/internal/system"
-	"proxmox-router/internal/vpn"
-	"proxmox-router/internal/vrrp"
+	"debtik/internal/auth"
+	"debtik/internal/bridge"
+	"debtik/internal/bwtest"
+	"debtik/internal/certs"
+	"debtik/internal/dhcp"
+	"debtik/internal/dns"
+	"debtik/internal/dynamicrouting"
+	"debtik/internal/firewall"
+	"debtik/internal/logging"
+	"debtik/internal/network"
+	"debtik/internal/routing"
+	"debtik/internal/services"
+	"debtik/internal/system"
+	"debtik/internal/vpn"
+	"debtik/internal/vrrp"
 )
 
 type Executor struct {

+ 2 - 2
internal/cli/server.go

@@ -11,8 +11,8 @@ import (
 
 	"golang.org/x/crypto/ssh/terminal"
 
-	"proxmox-router/internal/auth"
-	"proxmox-router/internal/system"
+	"debtik/internal/auth"
+	"debtik/internal/system"
 )
 
 type Server struct {

+ 4 - 4
internal/cli/ssh.go

@@ -18,13 +18,13 @@ import (
 	"golang.org/x/crypto/ssh"
 	"golang.org/x/crypto/ssh/terminal"
 
-	"proxmox-router/internal/auth"
-	"proxmox-router/internal/logging"
-	"proxmox-router/internal/system"
+	"debtik/internal/auth"
+	"debtik/internal/logging"
+	"debtik/internal/system"
 )
 
 const (
-	DefaultSSHHostKeyPath = "/etc/proxmox-router/ssh_host_ed25519_key"
+	DefaultSSHHostKeyPath = "/etc/debtik/ssh_host_ed25519_key"
 )
 
 type SSHServer struct {

+ 1 - 1
internal/cli/ssh_test.go

@@ -10,7 +10,7 @@ import (
 	"time"
 
 	"golang.org/x/crypto/ssh"
-	"proxmox-router/internal/auth"
+	"debtik/internal/auth"
 )
 
 func TestSSHExecReportsFailureAndPreservesLongCommands(t *testing.T) {

+ 2 - 2
internal/dhcp/manager.go

@@ -18,7 +18,7 @@ import (
 )
 
 const (
-	DHCPConfigFile = "/etc/proxmox-router/dhcp_clients.json"
+	DHCPConfigFile = "/etc/debtik/dhcp_clients.json"
 	DHCPRunDir     = "/run"
 	DHCPLeaseDir   = "/var/lib/dhcp"
 	DHCPConfDir    = "/etc/dhcp"
@@ -52,7 +52,7 @@ type Manager struct {
 
 // NewManager initializes the DHCP Manager and restores saved clients.
 func NewManager() *Manager {
-	_ = os.MkdirAll("/etc/proxmox-router", 0755)
+	_ = os.MkdirAll("/etc/debtik", 0755)
 	_ = os.MkdirAll(DHCPLeaseDir, 0755)
 	_ = os.MkdirAll(DHCPConfDir, 0755)
 

+ 1 - 1
internal/dhcp/server_manager.go

@@ -16,7 +16,7 @@ import (
 )
 
 const (
-	DHCPServerStoreFile = "/etc/proxmox-router/dhcp_server.json"
+	DHCPServerStoreFile = "/etc/debtik/dhcp_server.json"
 	DnsmasqConfFile     = "/etc/dnsmasq.d/debtik_dhcp.conf"
 	DnsmasqLeasesFile   = "/var/lib/misc/dnsmasq.leases"
 )

+ 1 - 1
internal/dns/manager.go

@@ -14,7 +14,7 @@ import (
 )
 
 const (
-	SettingsStorePath = "/etc/proxmox-router/dns/settings.json"
+	SettingsStorePath = "/etc/debtik/dns/settings.json"
 	DnsmasqDNSConf    = "/etc/dnsmasq.d/debtik_dns.conf"
 	SystemResolvConf  = "/etc/resolv.conf"
 )

+ 3 - 3
internal/dynamicrouting/manager.go

@@ -17,7 +17,7 @@ import (
 )
 
 const (
-	defaultConfigPath = "/etc/proxmox-router/routing/dynamic.json"
+	defaultConfigPath = "/etc/debtik/routing/dynamic.json"
 	birdConfigPath    = "/etc/bird/bird.conf"
 )
 
@@ -197,7 +197,7 @@ func (m *Manager) applyBirdConfig() error {
 	}
 
 	sb.WriteString("# /etc/bird/bird.conf\n")
-	sb.WriteString("# Generated dynamically by Proxmox Router (BIRD 2 Engine)\n\n")
+	sb.WriteString("# Generated dynamically by DebTik (BIRD 2 Engine)\n\n")
 	sb.WriteString("timeformat protocol iso long;\n")
 	sb.WriteString("timeformat base iso long;\n")
 	sb.WriteString("timeformat log iso long;\n")
@@ -769,7 +769,7 @@ func (m *Manager) syncKernelBlackholeRoutes() {
 	// Cleanup any obsolete blackhole routes that were previously installed with metric 255
 	// Check static_routes.json first to ensure we don't delete user's manual static routes
 	userManualStaticBlackholes := make(map[string]bool)
-	if data, err := os.ReadFile("/etc/proxmox-router/routing/static_routes.json"); err == nil {
+	if data, err := os.ReadFile("/etc/debtik/routing/static_routes.json"); err == nil {
 		var userRoutes []struct {
 			DstAddress string `json:"dst_address"`
 			Gateway    string `json:"gateway"`

+ 4 - 4
internal/firewall/geoip.go

@@ -18,9 +18,9 @@ import (
 )
 
 const (
-	GeoIPDir        = "/etc/proxmox-router/firewall/geoip"
-	GeoIPConfigFile = "/etc/proxmox-router/firewall/geoip/config.json"
-	GeoIPZonesDir   = "/etc/proxmox-router/firewall/geoip/zones"
+	GeoIPDir        = "/etc/debtik/firewall/geoip"
+	GeoIPConfigFile = "/etc/debtik/firewall/geoip/config.json"
+	GeoIPZonesDir   = "/etc/debtik/firewall/geoip/zones"
 )
 
 // GeoIPConfig defines interval and enabled country persistence
@@ -419,7 +419,7 @@ func (m *GeoIPManager) SyncCountryZone(code string) (int, error) {
 	if err != nil {
 		return 0, err
 	}
-	req.Header.Set("User-Agent", "Proxmox-Router/1.0")
+	req.Header.Set("User-Agent", "DebTik/1.0")
 
 	resp, err := client.Do(req)
 	if err != nil {

+ 1 - 1
internal/firewall/iptables.go

@@ -86,7 +86,7 @@ func resolveInterfaceList(listName string) []string {
 	if listName == "" {
 		return nil
 	}
-	data, err := os.ReadFile("/etc/proxmox-router/metadata.json")
+	data, err := os.ReadFile("/etc/debtik/metadata.json")
 	if err != nil {
 		return nil
 	}

+ 5 - 5
internal/firewall/manager.go

@@ -13,10 +13,10 @@ import (
 )
 
 const (
-	FilterStorePath       = "/etc/proxmox-router/firewall/filter.json"
-	NATStorePath          = "/etc/proxmox-router/firewall/nat.json"
-	MangleStorePath       = "/etc/proxmox-router/firewall/mangle.json"
-	AddressListsStorePath = "/etc/proxmox-router/firewall/address_lists.json"
+	FilterStorePath       = "/etc/debtik/firewall/filter.json"
+	NATStorePath          = "/etc/debtik/firewall/nat.json"
+	MangleStorePath       = "/etc/debtik/firewall/mangle.json"
+	AddressListsStorePath = "/etc/debtik/firewall/address_lists.json"
 )
 
 type FirewallManager struct {
@@ -161,7 +161,7 @@ func (m *FirewallManager) restore(data []byte) {
 	}
 }
 func (m *FirewallManager) save() error {
-	if err := os.MkdirAll("/etc/proxmox-router/firewall", 0755); err != nil {
+	if err := os.MkdirAll("/etc/debtik/firewall", 0755); err != nil {
 		return err
 	}
 	files := map[string][]byte{}

+ 2 - 2
internal/firewall/native_test.go

@@ -58,10 +58,10 @@ func TestFirewallNativeKernel(t *testing.T) {
 	}
 	run("ip", "link", "set", "lo", "up")
 	dir := t.TempDir()
-	run("mount", "--bind", dir, "/etc/proxmox-router/firewall")
+	run("mount", "--bind", dir, "/etc/debtik/firewall")
 	meta := t.TempDir() + "/metadata.json"
 	os.WriteFile(meta, []byte(`{"interfaces":{"wan0":{"role":"WAN"},"lan0":{"role":"LAN"}}}`), 0600)
-	run("mount", "--bind", meta, "/etc/proxmox-router/metadata.json")
+	run("mount", "--bind", meta, "/etc/debtik/metadata.json")
 	os.MkdirAll(GeoIPZonesDir, 0755)
 	os.WriteFile(GeoIPConfigFile, []byte(`{"auto_update":false,"interval_hours":24,"enabled_countries":[]}`), 0600)
 	os.WriteFile(GeoIPZonesDir+"/gr.zone", []byte("192.0.2.0/24\n"), 0600)

+ 4 - 4
internal/firewall/owned_test.go

@@ -70,7 +70,7 @@ func TestMoveNATRulesWithinChainInNamespace(t *testing.T) {
 		t.Skip("isolated mount and network namespaces required")
 	}
 	dir := t.TempDir()
-	if out, err := exec.Command("mount", "--bind", dir, "/etc/proxmox-router/firewall").CombinedOutput(); err != nil {
+	if out, err := exec.Command("mount", "--bind", dir, "/etc/debtik/firewall").CombinedOutput(); err != nil {
 		t.Fatalf("bind: %s: %v", out, err)
 	}
 	m := &FirewallManager{natRules: []NATRule{
@@ -101,7 +101,7 @@ func TestFirewallFailedSaveRollsBack(t *testing.T) {
 		t.Skip("requires isolated mount and network namespaces")
 	}
 	dir := t.TempDir()
-	if err := exec.Command("mount", "--bind", dir, "/etc/proxmox-router/firewall").Run(); err != nil {
+	if err := exec.Command("mount", "--bind", dir, "/etc/debtik/firewall").Run(); err != nil {
 		t.Fatal(err)
 	}
 	m := NewFirewallManager()
@@ -143,14 +143,14 @@ func TestProductionFirewallMigration(t *testing.T) {
 	}
 	dir := t.TempDir()
 	if _, err := os.Stat(fixture + "/metadata.json"); err == nil {
-		if err = exec.Command("mount", "--bind", fixture+"/metadata.json", "/etc/proxmox-router/metadata.json").Run(); err != nil {
+		if err = exec.Command("mount", "--bind", fixture+"/metadata.json", "/etc/debtik/metadata.json").Run(); err != nil {
 			t.Fatal(err)
 		}
 	}
 	if out, err := exec.Command("cp", "-a", fixture+"/config/.", dir).CombinedOutput(); err != nil {
 		t.Fatal(string(out), err)
 	}
-	if err := exec.Command("mount", "--bind", dir, "/etc/proxmox-router/firewall").Run(); err != nil {
+	if err := exec.Command("mount", "--bind", dir, "/etc/debtik/firewall").Run(); err != nil {
 		t.Fatal(err)
 	}
 	restore := func(binary, path string) {

+ 1 - 1
internal/network/metadata.go

@@ -10,7 +10,7 @@ import (
 	"time"
 )
 
-var defaultMetadataPath = "/etc/proxmox-router/metadata.json"
+var defaultMetadataPath = "/etc/debtik/metadata.json"
 
 var defaultRoles = []RoleTag{
 	{ID: "wan", Name: "WAN", Color: "amber", Description: "Public internet uplink interfaces", Builtin: true},

+ 2 - 2
internal/network/persistence.go

@@ -33,7 +33,7 @@ func (p *PersistenceManager) GenerateDebianConfig() (string, error) {
 
 	var sb strings.Builder
 	sb.WriteString(fmt.Sprintf("# ====================================================\n"))
-	sb.WriteString(fmt.Sprintf("# Proxmox Router Appliance - VLANs Configuration\n"))
+	sb.WriteString(fmt.Sprintf("# DebTik Network Appliance - VLANs Configuration\n"))
 	sb.WriteString(fmt.Sprintf("# Generated: %s\n", time.Now().Format(time.RFC1123)))
 	sb.WriteString(fmt.Sprintf("# DO NOT EDIT MANUALLY - Managed via Router Web UI\n"))
 	sb.WriteString(fmt.Sprintf("# ====================================================\n\n"))
@@ -132,7 +132,7 @@ func (p *PersistenceManager) GenerateInterfacesConfig() (string, error) {
 	existing := declaredInterfaces(string(mainData))
 	var sb strings.Builder
 	sb.WriteString("# ====================================================\n")
-	sb.WriteString("# Proxmox Router Appliance - Interface IP Configuration\n")
+	sb.WriteString("# DebTik Network Appliance - Interface IP Configuration\n")
 	sb.WriteString(fmt.Sprintf("# Generated: %s\n", time.Now().Format(time.RFC1123)))
 	sb.WriteString("# DO NOT EDIT MANUALLY - Managed via Router Web UI\n")
 	sb.WriteString("# ====================================================\n\n")

+ 5 - 5
internal/routing/manager.go

@@ -19,9 +19,9 @@ import (
 )
 
 const (
-	StaticRoutesStorePath = "/etc/proxmox-router/routing/static_routes.json"
-	PolicyRulesStorePath  = "/etc/proxmox-router/routing/policy_rules.json"
-	CustomTablesStorePath = "/etc/proxmox-router/routing/custom_tables.json"
+	StaticRoutesStorePath = "/etc/debtik/routing/static_routes.json"
+	PolicyRulesStorePath  = "/etc/debtik/routing/policy_rules.json"
+	CustomTablesStorePath = "/etc/debtik/routing/custom_tables.json"
 	RTTableFilePath       = "/etc/iproute2/rt_tables"
 )
 
@@ -81,7 +81,7 @@ func (m *RoutingManager) load() {
 }
 
 func (m *RoutingManager) save() error {
-	_ = os.MkdirAll("/etc/proxmox-router/routing", 0755)
+	_ = os.MkdirAll("/etc/debtik/routing", 0755)
 
 	if data, err := json.MarshalIndent(m.staticRoutes, "", "  "); err != nil {
 		return err
@@ -958,7 +958,7 @@ func (m *RoutingManager) ListPolicyRules() []PolicyRuleItem {
 			isDefault = false
 			isSystem = false
 		} else {
-			// System/daemon rule not added by user in proxmox-router (e.g. WireGuard, IPsec)
+			// System/daemon rule not added by user in debtik (e.g. WireGuard, IPsec)
 			isSystem = true
 		}
 

+ 2 - 2
internal/services/manager.go

@@ -9,11 +9,11 @@ import (
 	"sync"
 	"time"
 
-	"proxmox-router/internal/logging"
+	"debtik/internal/logging"
 )
 
 const (
-	DefaultServicesPath = "/etc/proxmox-router/services.json"
+	DefaultServicesPath = "/etc/debtik/services.json"
 
 	ServiceTelnet = "telnet"
 	ServiceSSH    = "ssh"

+ 1 - 1
internal/vpn/eoip.go

@@ -51,7 +51,7 @@ type EoIPManager struct {
 
 func NewEoIPManager() *EoIPManager {
 	mgr := &EoIPManager{
-		storePath: "/etc/proxmox-router/vpn/eoip.json",
+		storePath: "/etc/debtik/vpn/eoip.json",
 		tunnels:   make(map[string]*EoIPInstance),
 		workers:   make(map[string]*eoipTunnelWorker),
 	}

+ 1 - 1
internal/vpn/ipsec.go

@@ -12,7 +12,7 @@ import (
 
 const (
 	SwanctlConfPath = "/etc/swanctl/conf.d/tunnels.conf"
-	IPSecStorePath  = "/etc/proxmox-router/vpn/ipsec.json"
+	IPSecStorePath  = "/etc/debtik/vpn/ipsec.json"
 )
 
 type IPSecManager struct {

+ 1 - 1
internal/vpn/l2tp.go

@@ -15,7 +15,7 @@ import (
 )
 
 const (
-	L2TPInstancesStorePath = "/etc/proxmox-router/vpn/l2tp_instances.json"
+	L2TPInstancesStorePath = "/etc/debtik/vpn/l2tp_instances.json"
 	Xl2tpdConfigPath       = "/etc/xl2tpd/xl2tpd.conf"
 	L2TPControlFIFO        = "/var/run/xl2tpd/l2tp-control"
 )

+ 1 - 1
internal/vpn/manager.go

@@ -1,6 +1,6 @@
 package vpn
 
-import "proxmox-router/internal/aerotun"
+import "debtik/internal/aerotun"
 
 type Manager struct {
 	PPPoE     *PPPoEManager

+ 4 - 4
internal/vpn/ppp_server.go

@@ -121,13 +121,13 @@ type PPPServerManager struct {
 
 func NewPPPServerManager() *PPPServerManager {
 	mgr := &PPPServerManager{
-		baseDir:      "/etc/proxmox-router/vpn",
+		baseDir:      "/etc/debtik/vpn",
 		profiles:     make(map[string]*PPPProfile),
 		secrets:      make(map[string]*PPPSecret),
-		pppoePIDFile: "/var/run/proxmox-pppoe-server.pid",
+		pppoePIDFile: "/var/run/debtik-pppoe-server.pid",
 		pppoeServer: PPPoEServerConfig{
 			Enabled:        false,
-			ServiceName:    "proxmox-pppoe",
+			ServiceName:    "debtik-pppoe",
 			Interface:      "eth0",
 			DefaultProfile: "default",
 			MaxMTU:         1480,
@@ -148,7 +148,7 @@ func NewPPPServerManager() *PPPServerManager {
 		ipsecServer: IPSecServerConfig{
 			Enabled:      false,
 			PoolAddress:  "10.10.30.0/24",
-			PresharedKey: "ProxmoxRouterSecret123",
+			PresharedKey: "DebTikSecret123",
 			LocalSubnet:  "0.0.0.0/0",
 			DNSServers:   "1.1.1.1,8.8.8.8",
 		},

+ 1 - 1
internal/vpn/pppoe.go

@@ -15,7 +15,7 @@ import (
 )
 
 const (
-	PPPoEInstancesStorePath = "/etc/proxmox-router/vpn/pppoe_instances.json"
+	PPPoEInstancesStorePath = "/etc/debtik/vpn/pppoe_instances.json"
 )
 
 type PPPoEManager struct {

+ 1 - 1
internal/vpn/pptp.go

@@ -15,7 +15,7 @@ import (
 )
 
 const (
-	PPTPInstancesStorePath = "/etc/proxmox-router/vpn/pptp_instances.json"
+	PPTPInstancesStorePath = "/etc/debtik/vpn/pptp_instances.json"
 )
 
 type PPTPManager struct {

+ 2 - 2
internal/vpn/wireguard.go

@@ -16,8 +16,8 @@ import (
 )
 
 const (
-	WGInterfacesStorePath = "/etc/proxmox-router/vpn/wireguard_interfaces.json"
-	WGPeersStorePath      = "/etc/proxmox-router/vpn/wireguard_peers.json"
+	WGInterfacesStorePath = "/etc/debtik/vpn/wireguard_interfaces.json"
+	WGPeersStorePath      = "/etc/debtik/vpn/wireguard_peers.json"
 )
 
 type WireGuardManager struct {

+ 1 - 1
internal/vpn/wireguard_integration_test.go

@@ -13,7 +13,7 @@ func TestWireGuardEditAndClearingInNamespace(t *testing.T) {
 	if os.Getenv("DEBTIK_WG_INTEGRATION") != "1" {
 		t.Skip("isolated mount/network namespaces required")
 	}
-	for _, target := range []string{"/etc/proxmox-router/vpn", "/etc/wireguard"} {
+	for _, target := range []string{"/etc/debtik/vpn", "/etc/wireguard"} {
 		if err := exec.Command("mount", "--bind", t.TempDir(), target).Run(); err != nil {
 			t.Fatal(err)
 		}

+ 5 - 5
internal/vrrp/manager.go

@@ -16,9 +16,9 @@ import (
 )
 
 const (
-	VRRPStorePath        = "/etc/proxmox-router/vrrp.json"
+	VRRPStorePath        = "/etc/debtik/vrrp.json"
 	KeepalivedConfPath   = "/etc/keepalived/keepalived.conf"
-	VRRPStatusDir        = "/run/proxmox-router/vrrp"
+	VRRPStatusDir        = "/run/debtik/vrrp"
 	VRRPNotifyScriptPath = "/usr/local/bin/vrrp-notify.sh"
 )
 
@@ -53,8 +53,8 @@ func (m *Manager) ensureNotifyScript() {
 	scriptContent := `#!/bin/bash
 STATE="$1"
 NAME="$2"
-mkdir -p /run/proxmox-router/vrrp
-echo "$STATE $(date -Iseconds)" > "/run/proxmox-router/vrrp/${NAME}.state"
+mkdir -p /run/debtik/vrrp
+echo "$STATE $(date -Iseconds)" > "/run/debtik/vrrp/${NAME}.state"
 `
 	_ = os.WriteFile(VRRPNotifyScriptPath, []byte(scriptContent), 0755)
 }
@@ -322,7 +322,7 @@ func (m *Manager) applyConfigLocked() error {
 	sb.WriteString("# ==================================================================\n\n")
 
 	sb.WriteString("global_defs {\n")
-	sb.WriteString("    router_id proxmox-router\n")
+	sb.WriteString("    router_id debtik\n")
 	sb.WriteString("    vrrp_version 3\n")
 	sb.WriteString("    script_user root\n")
 	sb.WriteString("    enable_script_security\n")

+ 1 - 1
internal/web/static/app.js

@@ -8845,7 +8845,7 @@ async function loadPPPServers() {
       state.pppoeServer = await pppoeRes.json();
       const s = state.pppoeServer;
       document.getElementById('pppoe-server-enabled').checked = !!s.enabled;
-      document.getElementById('pppoe-server-name').value = s.service_name || 'proxmox-pppoe';
+      document.getElementById('pppoe-server-name').value = s.service_name || 'debtik-pppoe';
       populateInterfaceSelect('pppoe-server-iface', s.interface || 'eth0');
       document.getElementById('pppoe-server-profile').value = s.default_profile || 'default';
       document.getElementById('pppoe-server-mtu').value = s.max_mtu || 1480;

+ 1 - 1
internal/web/static/index.html

@@ -1767,7 +1767,7 @@
               <div class="grid grid-cols-1 md:grid-cols-2 gap-4 text-xs font-sans">
                 <div>
                   <label class="block text-slate-300 font-medium mb-1">Service Name</label>
-                  <input type="text" id="pppoe-server-name" placeholder="proxmox-pppoe" class="w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white font-mono">
+                  <input type="text" id="pppoe-server-name" placeholder="debtik-pppoe" class="w-full bg-slate-800 border border-slate-700 rounded-lg px-3 py-2 text-white font-mono">
                 </div>
                 <div>
                   <label class="block text-slate-300 font-medium mb-1">Listen Interface</label>

+ 22 - 11
scripts/debtik-update

@@ -17,7 +17,7 @@ state() { printf '%s\n' "$1" >"$base/status"; printf '[%s] %s\n' "$(date -u +%FT
 cleanup_veth() {
   python3 - <<'PY'
 import json,subprocess,pathlib
-p=pathlib.Path('/etc/proxmox-router/vpn/aerotun_instances.json')
+p=pathlib.Path('/etc/debtik/vpn/aerotun_instances.json')
 if p.exists():
  for tunnel in json.loads(p.read_text()):
   name=tunnel['name']
@@ -34,21 +34,22 @@ PY
 }
 restore() {
   state rolling_back
-  systemctl stop proxmox-router.service || true
+  systemctl stop debtik.service || systemctl stop proxmox-router.service || true
   cleanup_veth || true
-  for name in proxmox-router debtik-cli; do
+  for name in debtik debtik-cli; do
     test -f "$base/previous/$name"
     cp -p "$base/previous/$name" "/usr/local/bin/$name.rollback"
     mv -f "/usr/local/bin/$name.rollback" "/usr/local/bin/$name"
   done
+  ln -sf /usr/local/bin/debtik /usr/local/bin/proxmox-router
   for name in debtik-update debtik-release-version debtik-install-dependencies; do
     if [[ -f "$base/previous/$name" ]]; then install -m 0750 "$base/previous/$name" "/usr/local/libexec/$name.rollback"; mv -f "/usr/local/libexec/$name.rollback" "/usr/local/libexec/$name"; fi
   done
   if [[ -f "$base/previous_commit" ]]; then cp -p "$base/previous_commit" "$base/installed_commit"; fi
   if [[ -f "$base/previous_version" ]]; then cp -p "$base/previous_version" "$base/installed_version"; fi
   if [[ -f "$base/previous/go.mod" ]]; then cp -p "$base/previous/go.mod" "$base/go.mod"; fi
-  systemctl start proxmox-router.service
-  systemctl is-active --quiet proxmox-router.service
+  systemctl start debtik.service
+  systemctl is-active --quiet debtik.service
   if [[ -f "$base/previous/iptables.save" ]]; then iptables-restore -c < "$base/previous/iptables.save"; fi
   if [[ -s "$base/previous/ip6tables.save" ]]; then ip6tables-restore -c < "$base/previous/ip6tables.save"; fi
   state rolled_back
@@ -89,10 +90,10 @@ state building
 go_cmd=$(command -v go || true)
 if [[ -x /opt/debtik/go/bin/go ]]; then go_cmd=/opt/debtik/go/bin/go; fi
 [[ -n $go_cmd ]] || { state failed; echo 'Go is not installed'; exit 1; }
-CGO_ENABLED=0 "$go_cmd" build -trimpath -ldflags "-X proxmox-router/internal/api.BuildCommit=$commit" -o "$work/proxmox-router" ./cmd/server
+CGO_ENABLED=0 "$go_cmd" build -trimpath -ldflags "-X debtik/internal/api.BuildCommit=$commit" -o "$work/debtik" ./cmd/server
 CGO_ENABLED=0 "$go_cmd" build -trimpath -o "$work/debtik-cli" ./cmd/debtik-cli
 install -d -m 0700 "$base/previous"
-for name in proxmox-router debtik-cli; do cp -p "/usr/local/bin/$name" "$base/previous/$name"; done
+for name in debtik debtik-cli; do cp -p "/usr/local/bin/$name" "$base/previous/$name"; done
 for name in debtik-update debtik-release-version debtik-install-dependencies; do
   if [[ -f "/usr/local/libexec/$name" ]]; then cp -p "/usr/local/libexec/$name" "$base/previous/$name"; fi
 done
@@ -106,21 +107,31 @@ ip6tables-save -c > "$base/previous/ip6tables.save"
 state installing
 rollback_on_error() { trap - ERR; restore || state failed; exit 1; }
 trap rollback_on_error ERR
-systemctl stop proxmox-router.service
+if systemctl is-active --quiet proxmox-router.service; then
+  systemctl stop proxmox-router.service || true
+  systemctl disable proxmox-router.service || true
+fi
+systemctl stop debtik.service || true
 cleanup_veth
-for name in proxmox-router debtik-cli; do
+for name in debtik debtik-cli; do
   install -m 0755 "$work/$name" "/usr/local/bin/$name.next"
   mv -f "/usr/local/bin/$name.next" "/usr/local/bin/$name"
 done
+ln -sf /usr/local/bin/debtik /usr/local/bin/proxmox-router
 install -m 0750 scripts/debtik-update /usr/local/libexec/debtik-update.next
 install -m 0750 scripts/release-version.py /usr/local/libexec/debtik-release-version.next
 install -m 0750 scripts/install-dependencies.sh /usr/local/libexec/debtik-install-dependencies.next
 mv -f /usr/local/libexec/debtik-update.next /usr/local/libexec/debtik-update
 mv -f /usr/local/libexec/debtik-release-version.next /usr/local/libexec/debtik-release-version
 mv -f /usr/local/libexec/debtik-install-dependencies.next /usr/local/libexec/debtik-install-dependencies
-systemctl start proxmox-router.service
+if [[ -f systemd/debtik.service ]]; then
+  install -m 0644 systemd/debtik.service /etc/systemd/system/debtik.service
+  systemctl daemon-reload
+  systemctl enable debtik.service
+fi
+systemctl start debtik.service
 sleep 3
-systemctl is-active --quiet proxmox-router.service
+systemctl is-active --quiet debtik.service
 printf '%s\n' "$commit" > "$base/installed_commit"
 printf '%s\n' "$version" > "$base/installed_version"
 state complete

+ 7 - 1
scripts/install-dependencies.sh

@@ -122,7 +122,7 @@ if ! systemctl cat mstpd.service >/dev/null 2>&1; then
   cat > /etc/systemd/system/mstpd.service <<UNIT
 [Unit]
 Description=Spanning Tree Protocol daemon for DebTik
-Before=proxmox-router.service
+Before=debtik.service
 [Service]
 Type=simple
 ExecStart=$mstpd_binary -d
@@ -132,6 +132,12 @@ RestartSec=2
 WantedBy=multi-user.target
 UNIT
 fi
+install -d -m 0755 /etc/systemd/system/debtik.service.d
+cat > /etc/systemd/system/debtik.service.d/mstpd.conf <<'UNIT'
+[Unit]
+Wants=mstpd.service
+After=mstpd.service
+UNIT
 install -d -m 0755 /etc/systemd/system/proxmox-router.service.d
 cat > /etc/systemd/system/proxmox-router.service.d/mstpd.conf <<'UNIT'
 [Unit]

+ 1 - 1
systemd/proxmox-router.service → systemd/debtik.service

@@ -6,7 +6,7 @@ Wants=network-online.target
 [Service]
 Type=simple
 User=root
-ExecStart=/usr/local/bin/proxmox-router -addr :80
+ExecStart=/usr/local/bin/debtik -addr :80
 Restart=always
 RestartSec=3s
 LimitNOFILE=65535