commit 13482ae3bf3fe3ffc447e8bad1dfc61d2f01c0f6 Author: manuel.maier Date: Fri Jul 25 17:26:08 2025 +0200 install_newt.sh hinzugefügt diff --git a/install_newt.sh b/install_newt.sh new file mode 100644 index 0000000..ebbebc0 --- /dev/null +++ b/install_newt.sh @@ -0,0 +1,113 @@ +#!/bin/bash +set -e + +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' + +REPO="fosrl/newt" +INSTALL_DIR="/opt/newt" +SERVICE_NAME="PVE-MGNT" +SYMLINK="${INSTALL_DIR}/newt_latest" + +info() { echo -e "${GREEN}[INFO]${NC} $1"; } +warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } +error() { echo -e "${RED}[ERROR]${NC} $1"; } + +get_latest_version() { + curl -fsSL "https://api.github.com/repos/${REPO}/releases/latest" | grep -Po '"tag_name": *"\K[^"]+' +} + +download_newt() { + version="$1" + arch=$(uname -m) + + case "$arch" in + x86_64) file="newt_linux_amd64" ;; + aarch64) file="newt_linux_arm64" ;; + armv7l) file="newt_linux_arm32" ;; + *) error "Nicht unterstützte Architektur: $arch" && exit 1 ;; + esac + + url="https://github.com/${REPO}/releases/download/${version}/${file}" + target="${INSTALL_DIR}/newt_${version}" + + mkdir -p "$INSTALL_DIR" + info "⬇️ Lade $url herunter …" + curl -fsSL "$url" -o "$target" || { error "Download fehlgeschlagen."; exit 1; } + + chmod +x "$target" + ln -sf "$target" "$SYMLINK" + info "✅ newt ${version} installiert als ${target}" +} + +cleanup_old_versions() { + cd "$INSTALL_DIR" + keep=$(readlink -f newt_latest) + versions=($(ls -1 newt_* | grep -v latest | sort -Vr)) + count=0 + for ver in "${versions[@]}"; do + if [[ "$(readlink -f "$ver")" != "$keep" ]]; then + ((count++)) + if [ "$count" -gt 1 ]; then + info "🧹 Entferne alte Version: $ver" + rm -f "$ver" + fi + fi + done +} + +setup_systemd_service() { + svc="/etc/systemd/system/${SERVICE_NAME}.service" + if [ -f "$svc" ]; then + info "systemd-Dienst ${SERVICE_NAME} existiert bereits. Überspringe Neuanlage." + return + fi + + read -rp "🆔 Bitte gib die Pangolin-ID ein: " PANGOLIN_ID + read -rp "🔑 Bitte gib das Secret ein: " PANGOLIN_SECRET + read -rp "🌐 Bitte gib den Endpoint (z. B. https://pangolin.domain.de) ein: " PANGOLIN_ENDPOINT + + cat < "$svc" +[Unit] +Description=Newt Client - ${SERVICE_NAME} +After=network.target + +[Service] +ExecStart=${SYMLINK} --id ${PANGOLIN_ID} --secret ${PANGOLIN_SECRET} --endpoint ${PANGOLIN_ENDPOINT} +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + + systemctl daemon-reexec + systemctl daemon-reload + systemctl enable "$SERVICE_NAME" + systemctl start "$SERVICE_NAME" + + info "🛠️ systemd-Dienst ${SERVICE_NAME} eingerichtet und gestartet." +} + +main() { + info "🔧 Starte Installation/Update von newt ..." + version=$(get_latest_version) + version=${version#v} # führendes "v" entfernen, falls vorhanden + + info "📦 Neueste Version: ${version}" + + if [ -f "${INSTALL_DIR}/newt_${version}" ]; then + info "✅ Version ${version} ist bereits installiert." + else + download_newt "$version" + fi + + cleanup_old_versions + setup_systemd_service + + info "🚀 Fertig! newt läuft als systemd-Dienst (${SERVICE_NAME})" +} + +main "$@"