Browse Source

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

Proxmox Router 1 day ago
parent
commit
315728daa0
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
 BUILD_DIR=bin
 GO=go
 GO=go
 
 
@@ -21,11 +21,11 @@ install: build
 	cp $(BUILD_DIR)/$(BINARY_NAME) /usr/local/bin/$(BINARY_NAME)
 	cp $(BUILD_DIR)/$(BINARY_NAME) /usr/local/bin/$(BINARY_NAME)
 	cp $(BUILD_DIR)/debtik-cli /usr/local/bin/debtik-cli
 	cp $(BUILD_DIR)/debtik-cli /usr/local/bin/debtik-cli
 	chmod +x /usr/local/bin/$(BINARY_NAME) /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 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:
 clean:
 	rm -rf $(BUILD_DIR)
 	rm -rf $(BUILD_DIR)

+ 4 - 4
README.md

@@ -1,6 +1,6 @@
 # DebTik
 # 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.
 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.
 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:
 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 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
 ## 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"
 	"fmt"
 	"log"
 	"log"
 	"os"
 	"os"
-	"proxmox-router/internal/aerotun"
+	"debtik/internal/aerotun"
 )
 )
 
 
 func main() {
 func main() {

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

@@ -26,7 +26,7 @@ func main() {
 	conn, err := net.DialTimeout("tcp", *addr, 3*time.Second)
 	conn, err := net.DialTimeout("tcp", *addr, 3*time.Second)
 	if err != nil {
 	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, "\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)
 		os.Exit(1)
 	}
 	}
 	defer conn.Close()
 	defer conn.Close()

+ 20 - 20
cmd/server/main.go

@@ -10,35 +10,35 @@ import (
 	"net/http"
 	"net/http"
 	"os"
 	"os"
 	"os/signal"
 	"os/signal"
-	release "proxmox-router"
+	release "debtik"
 	"sync"
 	"sync"
 	"syscall"
 	"syscall"
 	"time"
 	"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() {
 func main() {
 	addr := flag.String("addr", ":8080", "HTTP service address (e.g. :8080 or :80)")
 	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)")
 	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()
 	flag.Parse()
 	if os.Geteuid() == 0 {
 	if os.Geteuid() == 0 {
 		if err := release.RefreshUpdateHelpers("/usr/local/libexec"); err != nil {
 		if err := release.RefreshUpdateHelpers("/usr/local/libexec"); err != nil {

+ 1 - 1
docs/RoutingFilters.md

@@ -3,7 +3,7 @@
 **Software Version:** 1.3.11+  
 **Software Version:** 1.3.11+  
 **Routing Engine:** BIRD 2 (v2.17+)  
 **Routing Engine:** BIRD 2 (v2.17+)  
 **Syntax Layer:** MikroTik RouterOS v7 Scripting Layer  
 **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
 # 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
 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.
 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
 ## Coordinated installation
 
 
 The prepared binary is at:
 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).
 subsequently upgraded; see [the deployment report](aerotun-live-deployment.md).
 For future upgrades, ensure both ends have v2 and management access independent
 For future upgrades, ensure both ends have v2 and management access independent
 of this AeroTUN connection. Preserve the
 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:
 On each end, after coordinating the restart:
 
 
 ```sh
 ```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
 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
 go 1.26.0
 
 

+ 14 - 7
install.sh

@@ -26,27 +26,34 @@ cd "$src"
 build=$(mktemp -d)
 build=$(mktemp -d)
 commit=$(git rev-parse HEAD 2>/dev/null || printf unknown)
 commit=$(git rev-parse HEAD 2>/dev/null || printf unknown)
 echo "Building DebTik server for $(uname -m); the first build may take several minutes..."
 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..."
 echo "Building DebTik CLI..."
 CGO_ENABLED=0 "$go_cmd" build -trimpath -o "$build/debtik-cli" ./cmd/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 0700 /var/lib/debtik/update
 install -d -m 0755 /usr/local/libexec
 install -d -m 0755 /usr/local/libexec
 install -m 0750 scripts/debtik-update /usr/local/libexec/debtik-update
 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/release-version.py /usr/local/libexec/debtik-release-version
 install -m 0750 scripts/install-dependencies.sh /usr/local/libexec/debtik-install-dependencies
 install -m 0750 scripts/install-dependencies.sh /usr/local/libexec/debtik-install-dependencies
 install -d -m 0755 /etc/network/interfaces.d
 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
   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"
   install -m 0755 "$build/$name" "/usr/local/bin/$name.next"
   mv -f "/usr/local/bin/$name.next" "/usr/local/bin/$name"
   mv -f "/usr/local/bin/$name.next" "/usr/local/bin/$name"
 done
 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
 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 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
 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 0600 VERSION /var/lib/debtik/update/installed_version
 install -m 0644 go.mod /var/lib/debtik/update/go.mod
 install -m 0644 go.mod /var/lib/debtik/update/go.mod

+ 1 - 1
internal/aerotun/integration_test.go

@@ -14,7 +14,7 @@ import (
 	"testing"
 	"testing"
 	"time"
 	"time"
 
 
-	"proxmox-router/internal/bwtest"
+	"debtik/internal/bwtest"
 )
 )
 
 
 // Opt in: AEROTUN_INTEGRATION=1 go test -run TestVethBandwidthIntegration -v ./internal/aerotun
 // 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"
 	MagicHeader       = 0xAE70 // "AE"
 	FlagCompressedLZ4 = 0x01
 	FlagCompressedLZ4 = 0x01
 	FlagKeepalive     = 0x02
 	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
 // 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/hex"
 	"encoding/json"
 	"encoding/json"
 	"net/http"
 	"net/http"
-	"proxmox-router/internal/aerotun"
-	"proxmox-router/internal/auth"
+	"debtik/internal/aerotun"
+	"debtik/internal/auth"
 	"time"
 	"time"
 )
 )
 
 

+ 3 - 3
internal/api/aerotun_handlers_test.go

@@ -9,9 +9,9 @@ import (
 	"strings"
 	"strings"
 	"testing"
 	"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 {
 func aeroRequest(method, path, body string, role auth.Role) *http.Request {

+ 15 - 15
internal/api/api.go

@@ -9,21 +9,21 @@ import (
 	"sync"
 	"sync"
 	"time"
 	"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 {
 type Server struct {

+ 1 - 1
internal/api/auth_handlers.go

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

+ 1 - 1
internal/api/bridge_handlers.go

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

+ 1 - 1
internal/api/bwtest_handlers.go

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

+ 1 - 1
internal/api/certs_handlers.go

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

+ 1 - 1
internal/api/dhcp_handlers.go

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

+ 1 - 1
internal/api/dns_handlers.go

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

+ 1 - 1
internal/api/dynamic_routing_handlers.go

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

+ 2 - 2
internal/api/firewall_handlers.go

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

+ 1 - 1
internal/api/management_services_test.go

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

+ 1 - 1
internal/api/services_handlers.go

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

+ 1 - 1
internal/api/tools_handlers.go

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

+ 2 - 2
internal/api/update_handlers.go

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

+ 1 - 1
internal/api/update_handlers_test.go

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

+ 1 - 1
internal/api/vpn_handlers.go

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

+ 1 - 1
internal/api/vrrp_handlers.go

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

+ 1 - 1
internal/auth/manager.go

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

+ 1 - 1
internal/bridge/manager.go

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

+ 2 - 2
internal/bwtest/manager.go

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

+ 2 - 2
internal/certs/manager.go

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

+ 1 - 1
internal/certs/renewal.go

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

+ 2 - 2
internal/cli/aerotun.go

@@ -6,8 +6,8 @@ import (
 	"strconv"
 	"strconv"
 	"strings"
 	"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 {
 func (e *Executor) handleInterfaceAeroTUN(parts []string, user *auth.PublicUser) string {

+ 3 - 3
internal/cli/command_test.go

@@ -6,9 +6,9 @@ import (
 	"strings"
 	"strings"
 	"testing"
 	"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) {
 func TestQuotedCommandArguments(t *testing.T) {

+ 15 - 15
internal/cli/executor.go

@@ -10,21 +10,21 @@ import (
 	"strings"
 	"strings"
 	"time"
 	"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 {
 type Executor struct {

+ 2 - 2
internal/cli/server.go

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

+ 4 - 4
internal/cli/ssh.go

@@ -18,13 +18,13 @@ import (
 	"golang.org/x/crypto/ssh"
 	"golang.org/x/crypto/ssh"
 	"golang.org/x/crypto/ssh/terminal"
 	"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 (
 const (
-	DefaultSSHHostKeyPath = "/etc/proxmox-router/ssh_host_ed25519_key"
+	DefaultSSHHostKeyPath = "/etc/debtik/ssh_host_ed25519_key"
 )
 )
 
 
 type SSHServer struct {
 type SSHServer struct {

+ 1 - 1
internal/cli/ssh_test.go

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

+ 2 - 2
internal/dhcp/manager.go

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

+ 1 - 1
internal/dhcp/server_manager.go

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

+ 1 - 1
internal/dns/manager.go

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

+ 3 - 3
internal/dynamicrouting/manager.go

@@ -17,7 +17,7 @@ import (
 )
 )
 
 
 const (
 const (
-	defaultConfigPath = "/etc/proxmox-router/routing/dynamic.json"
+	defaultConfigPath = "/etc/debtik/routing/dynamic.json"
 	birdConfigPath    = "/etc/bird/bird.conf"
 	birdConfigPath    = "/etc/bird/bird.conf"
 )
 )
 
 
@@ -197,7 +197,7 @@ func (m *Manager) applyBirdConfig() error {
 	}
 	}
 
 
 	sb.WriteString("# /etc/bird/bird.conf\n")
 	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 protocol iso long;\n")
 	sb.WriteString("timeformat base iso long;\n")
 	sb.WriteString("timeformat base iso long;\n")
 	sb.WriteString("timeformat log 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
 	// 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
 	// Check static_routes.json first to ensure we don't delete user's manual static routes
 	userManualStaticBlackholes := make(map[string]bool)
 	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 {
 		var userRoutes []struct {
 			DstAddress string `json:"dst_address"`
 			DstAddress string `json:"dst_address"`
 			Gateway    string `json:"gateway"`
 			Gateway    string `json:"gateway"`

+ 4 - 4
internal/firewall/geoip.go

@@ -18,9 +18,9 @@ import (
 )
 )
 
 
 const (
 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
 // GeoIPConfig defines interval and enabled country persistence
@@ -419,7 +419,7 @@ func (m *GeoIPManager) SyncCountryZone(code string) (int, error) {
 	if err != nil {
 	if err != nil {
 		return 0, err
 		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)
 	resp, err := client.Do(req)
 	if err != nil {
 	if err != nil {

+ 1 - 1
internal/firewall/iptables.go

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

+ 5 - 5
internal/firewall/manager.go

@@ -13,10 +13,10 @@ import (
 )
 )
 
 
 const (
 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 {
 type FirewallManager struct {
@@ -161,7 +161,7 @@ func (m *FirewallManager) restore(data []byte) {
 	}
 	}
 }
 }
 func (m *FirewallManager) save() error {
 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
 		return err
 	}
 	}
 	files := map[string][]byte{}
 	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")
 	run("ip", "link", "set", "lo", "up")
 	dir := t.TempDir()
 	dir := t.TempDir()
-	run("mount", "--bind", dir, "/etc/proxmox-router/firewall")
+	run("mount", "--bind", dir, "/etc/debtik/firewall")
 	meta := t.TempDir() + "/metadata.json"
 	meta := t.TempDir() + "/metadata.json"
 	os.WriteFile(meta, []byte(`{"interfaces":{"wan0":{"role":"WAN"},"lan0":{"role":"LAN"}}}`), 0600)
 	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.MkdirAll(GeoIPZonesDir, 0755)
 	os.WriteFile(GeoIPConfigFile, []byte(`{"auto_update":false,"interval_hours":24,"enabled_countries":[]}`), 0600)
 	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)
 	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")
 		t.Skip("isolated mount and network namespaces required")
 	}
 	}
 	dir := t.TempDir()
 	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)
 		t.Fatalf("bind: %s: %v", out, err)
 	}
 	}
 	m := &FirewallManager{natRules: []NATRule{
 	m := &FirewallManager{natRules: []NATRule{
@@ -101,7 +101,7 @@ func TestFirewallFailedSaveRollsBack(t *testing.T) {
 		t.Skip("requires isolated mount and network namespaces")
 		t.Skip("requires isolated mount and network namespaces")
 	}
 	}
 	dir := t.TempDir()
 	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)
 		t.Fatal(err)
 	}
 	}
 	m := NewFirewallManager()
 	m := NewFirewallManager()
@@ -143,14 +143,14 @@ func TestProductionFirewallMigration(t *testing.T) {
 	}
 	}
 	dir := t.TempDir()
 	dir := t.TempDir()
 	if _, err := os.Stat(fixture + "/metadata.json"); err == nil {
 	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)
 			t.Fatal(err)
 		}
 		}
 	}
 	}
 	if out, err := exec.Command("cp", "-a", fixture+"/config/.", dir).CombinedOutput(); err != nil {
 	if out, err := exec.Command("cp", "-a", fixture+"/config/.", dir).CombinedOutput(); err != nil {
 		t.Fatal(string(out), err)
 		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)
 		t.Fatal(err)
 	}
 	}
 	restore := func(binary, path string) {
 	restore := func(binary, path string) {

+ 1 - 1
internal/network/metadata.go

@@ -10,7 +10,7 @@ import (
 	"time"
 	"time"
 )
 )
 
 
-var defaultMetadataPath = "/etc/proxmox-router/metadata.json"
+var defaultMetadataPath = "/etc/debtik/metadata.json"
 
 
 var defaultRoles = []RoleTag{
 var defaultRoles = []RoleTag{
 	{ID: "wan", Name: "WAN", Color: "amber", Description: "Public internet uplink interfaces", Builtin: true},
 	{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
 	var sb strings.Builder
 	sb.WriteString(fmt.Sprintf("# ====================================================\n"))
 	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("# 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("# DO NOT EDIT MANUALLY - Managed via Router Web UI\n"))
 	sb.WriteString(fmt.Sprintf("# ====================================================\n\n"))
 	sb.WriteString(fmt.Sprintf("# ====================================================\n\n"))
@@ -132,7 +132,7 @@ func (p *PersistenceManager) GenerateInterfacesConfig() (string, error) {
 	existing := declaredInterfaces(string(mainData))
 	existing := declaredInterfaces(string(mainData))
 	var sb strings.Builder
 	var sb strings.Builder
 	sb.WriteString("# ====================================================\n")
 	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(fmt.Sprintf("# Generated: %s\n", time.Now().Format(time.RFC1123)))
 	sb.WriteString("# DO NOT EDIT MANUALLY - Managed via Router Web UI\n")
 	sb.WriteString("# DO NOT EDIT MANUALLY - Managed via Router Web UI\n")
 	sb.WriteString("# ====================================================\n\n")
 	sb.WriteString("# ====================================================\n\n")

+ 5 - 5
internal/routing/manager.go

@@ -19,9 +19,9 @@ import (
 )
 )
 
 
 const (
 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"
 	RTTableFilePath       = "/etc/iproute2/rt_tables"
 )
 )
 
 
@@ -81,7 +81,7 @@ func (m *RoutingManager) load() {
 }
 }
 
 
 func (m *RoutingManager) save() error {
 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 {
 	if data, err := json.MarshalIndent(m.staticRoutes, "", "  "); err != nil {
 		return err
 		return err
@@ -958,7 +958,7 @@ func (m *RoutingManager) ListPolicyRules() []PolicyRuleItem {
 			isDefault = false
 			isDefault = false
 			isSystem = false
 			isSystem = false
 		} else {
 		} 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
 			isSystem = true
 		}
 		}
 
 

+ 2 - 2
internal/services/manager.go

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

+ 1 - 1
internal/vpn/eoip.go

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

+ 1 - 1
internal/vpn/ipsec.go

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

+ 1 - 1
internal/vpn/l2tp.go

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

+ 1 - 1
internal/vpn/manager.go

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

+ 4 - 4
internal/vpn/ppp_server.go

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

+ 1 - 1
internal/vpn/pppoe.go

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

+ 1 - 1
internal/vpn/pptp.go

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

+ 2 - 2
internal/vpn/wireguard.go

@@ -16,8 +16,8 @@ import (
 )
 )
 
 
 const (
 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 {
 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" {
 	if os.Getenv("DEBTIK_WG_INTEGRATION") != "1" {
 		t.Skip("isolated mount/network namespaces required")
 		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 {
 		if err := exec.Command("mount", "--bind", t.TempDir(), target).Run(); err != nil {
 			t.Fatal(err)
 			t.Fatal(err)
 		}
 		}

+ 5 - 5
internal/vrrp/manager.go

@@ -16,9 +16,9 @@ import (
 )
 )
 
 
 const (
 const (
-	VRRPStorePath        = "/etc/proxmox-router/vrrp.json"
+	VRRPStorePath        = "/etc/debtik/vrrp.json"
 	KeepalivedConfPath   = "/etc/keepalived/keepalived.conf"
 	KeepalivedConfPath   = "/etc/keepalived/keepalived.conf"
-	VRRPStatusDir        = "/run/proxmox-router/vrrp"
+	VRRPStatusDir        = "/run/debtik/vrrp"
 	VRRPNotifyScriptPath = "/usr/local/bin/vrrp-notify.sh"
 	VRRPNotifyScriptPath = "/usr/local/bin/vrrp-notify.sh"
 )
 )
 
 
@@ -53,8 +53,8 @@ func (m *Manager) ensureNotifyScript() {
 	scriptContent := `#!/bin/bash
 	scriptContent := `#!/bin/bash
 STATE="$1"
 STATE="$1"
 NAME="$2"
 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)
 	_ = os.WriteFile(VRRPNotifyScriptPath, []byte(scriptContent), 0755)
 }
 }
@@ -322,7 +322,7 @@ func (m *Manager) applyConfigLocked() error {
 	sb.WriteString("# ==================================================================\n\n")
 	sb.WriteString("# ==================================================================\n\n")
 
 
 	sb.WriteString("global_defs {\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("    vrrp_version 3\n")
 	sb.WriteString("    script_user root\n")
 	sb.WriteString("    script_user root\n")
 	sb.WriteString("    enable_script_security\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();
       state.pppoeServer = await pppoeRes.json();
       const s = state.pppoeServer;
       const s = state.pppoeServer;
       document.getElementById('pppoe-server-enabled').checked = !!s.enabled;
       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');
       populateInterfaceSelect('pppoe-server-iface', s.interface || 'eth0');
       document.getElementById('pppoe-server-profile').value = s.default_profile || 'default';
       document.getElementById('pppoe-server-profile').value = s.default_profile || 'default';
       document.getElementById('pppoe-server-mtu').value = s.max_mtu || 1480;
       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 class="grid grid-cols-1 md:grid-cols-2 gap-4 text-xs font-sans">
                 <div>
                 <div>
                   <label class="block text-slate-300 font-medium mb-1">Service Name</label>
                   <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>
                 <div>
                 <div>
                   <label class="block text-slate-300 font-medium mb-1">Listen Interface</label>
                   <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() {
 cleanup_veth() {
   python3 - <<'PY'
   python3 - <<'PY'
 import json,subprocess,pathlib
 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():
 if p.exists():
  for tunnel in json.loads(p.read_text()):
  for tunnel in json.loads(p.read_text()):
   name=tunnel['name']
   name=tunnel['name']
@@ -34,21 +34,22 @@ PY
 }
 }
 restore() {
 restore() {
   state rolling_back
   state rolling_back
-  systemctl stop proxmox-router.service || true
+  systemctl stop debtik.service || systemctl stop proxmox-router.service || true
   cleanup_veth || true
   cleanup_veth || true
-  for name in proxmox-router debtik-cli; do
+  for name in debtik debtik-cli; do
     test -f "$base/previous/$name"
     test -f "$base/previous/$name"
     cp -p "$base/previous/$name" "/usr/local/bin/$name.rollback"
     cp -p "$base/previous/$name" "/usr/local/bin/$name.rollback"
     mv -f "/usr/local/bin/$name.rollback" "/usr/local/bin/$name"
     mv -f "/usr/local/bin/$name.rollback" "/usr/local/bin/$name"
   done
   done
+  ln -sf /usr/local/bin/debtik /usr/local/bin/proxmox-router
   for name in debtik-update debtik-release-version debtik-install-dependencies; do
   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
     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
   done
   if [[ -f "$base/previous_commit" ]]; then cp -p "$base/previous_commit" "$base/installed_commit"; fi
   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_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
   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 [[ -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
   if [[ -s "$base/previous/ip6tables.save" ]]; then ip6tables-restore -c < "$base/previous/ip6tables.save"; fi
   state rolled_back
   state rolled_back
@@ -89,10 +90,10 @@ state building
 go_cmd=$(command -v go || true)
 go_cmd=$(command -v go || true)
 if [[ -x /opt/debtik/go/bin/go ]]; then go_cmd=/opt/debtik/go/bin/go; fi
 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; }
 [[ -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
 CGO_ENABLED=0 "$go_cmd" build -trimpath -o "$work/debtik-cli" ./cmd/debtik-cli
 install -d -m 0700 "$base/previous"
 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
 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
   if [[ -f "/usr/local/libexec/$name" ]]; then cp -p "/usr/local/libexec/$name" "$base/previous/$name"; fi
 done
 done
@@ -106,21 +107,31 @@ ip6tables-save -c > "$base/previous/ip6tables.save"
 state installing
 state installing
 rollback_on_error() { trap - ERR; restore || state failed; exit 1; }
 rollback_on_error() { trap - ERR; restore || state failed; exit 1; }
 trap rollback_on_error ERR
 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
 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"
   install -m 0755 "$work/$name" "/usr/local/bin/$name.next"
   mv -f "/usr/local/bin/$name.next" "/usr/local/bin/$name"
   mv -f "/usr/local/bin/$name.next" "/usr/local/bin/$name"
 done
 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/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/release-version.py /usr/local/libexec/debtik-release-version.next
 install -m 0750 scripts/install-dependencies.sh /usr/local/libexec/debtik-install-dependencies.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-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-release-version.next /usr/local/libexec/debtik-release-version
 mv -f /usr/local/libexec/debtik-install-dependencies.next /usr/local/libexec/debtik-install-dependencies
 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
 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' "$commit" > "$base/installed_commit"
 printf '%s\n' "$version" > "$base/installed_version"
 printf '%s\n' "$version" > "$base/installed_version"
 state complete
 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
   cat > /etc/systemd/system/mstpd.service <<UNIT
 [Unit]
 [Unit]
 Description=Spanning Tree Protocol daemon for DebTik
 Description=Spanning Tree Protocol daemon for DebTik
-Before=proxmox-router.service
+Before=debtik.service
 [Service]
 [Service]
 Type=simple
 Type=simple
 ExecStart=$mstpd_binary -d
 ExecStart=$mstpd_binary -d
@@ -132,6 +132,12 @@ RestartSec=2
 WantedBy=multi-user.target
 WantedBy=multi-user.target
 UNIT
 UNIT
 fi
 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
 install -d -m 0755 /etc/systemd/system/proxmox-router.service.d
 cat > /etc/systemd/system/proxmox-router.service.d/mstpd.conf <<'UNIT'
 cat > /etc/systemd/system/proxmox-router.service.d/mstpd.conf <<'UNIT'
 [Unit]
 [Unit]

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

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