Files
update-install-newt/reinstall_newt.sh

114 lines
3.1 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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"
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
info() { echo -e "${GREEN}[INFO]${NC} $1"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; }
get_latest_version() {
echo "[DEBUG] get_latest_version aufgerufen"
curl -fsSL "https://api.github.com/repos/${REPO}/releases/latest" | grep -Po '"tag_name": *"\K[^"]+'
}
download_newt() {
version="$1"
arch=$(uname -m)
echo "[DEBUG] download_newt aufgerufen mit Version=$version"
echo "[DEBUG] Architektur erkannt: $arch"
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}"
temp_target="${target}.tmp"
mkdir -p "$INSTALL_DIR"
info "⬇️ Lade $url herunter …"
curl -fsSL "$url" -o "$temp_target" || { error "Download fehlgeschlagen."; rm -f "$temp_target"; exit 1; }
chmod +x "$temp_target"
mv "$temp_target" "$target"
ln -sf "$target" "$SYMLINK"
info "✅ newt ${version} installiert als ${target}"
}
cleanup_old_versions() {
echo "[DEBUG] cleanup_old_versions aufgerufen"
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() {
# ID, Secret und Endpoint zwingend vom echten Terminal lesen (nicht stdin)
read -rp "🆔 Bitte gib die Pangolin-ID ein: " PANGOLIN_ID </dev/tty
read -rp "🔑 Bitte gib das Secret ein: " PANGOLIN_SECRET </dev/tty
read -rp "🌐 Bitte gib den Endpoint (z.B. https://pangolin.domain.de) ein: " PANGOLIN_ENDPOINT </dev/tty
cat <<EOF > "$SERVICE_FILE"
[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
info "🛠️ systemd-Dienst ${SERVICE_NAME} neu erstellt."
systemctl daemon-reload
systemctl enable "$SERVICE_NAME"
systemctl restart "$SERVICE_NAME"
info "✅ Dienst ${SERVICE_NAME} gestartet."
}
perform_reinstall() {
echo "[DEBUG] perform_reinstall aufgerufen"
version=$(get_latest_version)
version=${version#v}
echo "[DEBUG] Version ist: '$version'"
info "📦 Neueste Version: ${version}"
download_newt "$version"
cleanup_old_versions
rm -f "$SERVICE_FILE" || true
setup_systemd_service
info "🚀 Reinstallation abgeschlossen!"
}
main() {
echo "[DEBUG] main aufgerufen mit Mode=reinstall"
perform_reinstall
}
main "$@"