| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #!/usr/bin/env bash
- set -euo pipefail
- if [[ $EUID -ne 0 ]]; then echo 'Run as root' >&2; exit 1; fi
- src=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
- command -v apt-get >/dev/null || { echo 'Debian apt-get required' >&2; exit 1; }
- export DEBIAN_FRONTEND=noninteractive
- apt-get update
- apt-get install -y --no-install-recommends ca-certificates curl git tar iproute2 bridge-utils iptables ipset conntrack wireguard-tools bird2 dnsmasq isc-dhcp-client ppp pppoe strongswan strongswan-swanctl xl2tpd iputils-ping iputils-tracepath traceroute procps openssl certbot python3 util-linux
- required=$(awk '$1=="toolchain" {sub(/^go/,"",$2);print $2}' "$src/go.mod")
- if [[ -z $required ]]; then required=$(awk '$1=="go" {print $2}' "$src/go.mod"); fi
- if ! command -v go >/dev/null || [[ $(printf '%s\n%s\n' "$required" "$(go version | awk '{sub(/^go/,"",$3);print $3}')" | sort -V | head -n1) != "$required" ]]; then
- case $(uname -m) in x86_64) arch=amd64;; aarch64) arch=arm64;; *) echo 'Unsupported CPU' >&2; exit 1;; esac
- archive=$(mktemp)
- trap 'rm -f "$archive"' EXIT
- curl --fail --location --retry 3 "https://go.dev/dl/go${required}.linux-${arch}.tar.gz" -o "$archive"
- install -d /opt/debtik
- rm -rf /opt/debtik/go
- tar -C /opt/debtik -xzf "$archive"
- rm -f "$archive"
- export PATH=/opt/debtik/go/bin:$PATH
- fi
- cd "$src"
- build=$(mktemp -d)
- trap 'rm -rf "$build"' EXIT
- commit=$(git rev-parse HEAD 2>/dev/null || printf unknown)
- CGO_ENABLED=0 go build -trimpath -ldflags "-X proxmox-router/internal/api.BuildCommit=$commit" -o "$build/proxmox-router" ./cmd/server
- CGO_ENABLED=0 go build -trimpath -o "$build/debtik-cli" ./cmd/debtik-cli
- install -d -m 0700 /etc/proxmox-router
- 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 -d -m 0755 /etc/network/interfaces.d
- for name in proxmox-router 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
- 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
- systemctl daemon-reload
- systemctl enable proxmox-router.service
- systemctl restart proxmox-router.service
- systemctl is-active --quiet proxmox-router.service
- echo 'DebTik installed: http://<host>/ and debtik-cli'
|