commit 380274b913d8d42e0017109912997e6459a43462 Author: Louis-Alexander Kerst Date: Thu Sep 17 12:06:50 2026 +0200 upgrade.sh hinzugefügt diff --git a/upgrade.sh b/upgrade.sh new file mode 100644 index 0000000..bef84ab --- /dev/null +++ b/upgrade.sh @@ -0,0 +1,155 @@ +#!/usr/bin/env bash +# +# NetBox Upgrade Script +# Automates: Download new release, copy over local config/media/plugins, +# swap directories, run upgrade.sh +# +# Usage: sudo ./netbox-upgrade.sh X.Y.Z +# Example: sudo ./netbox-upgrade.sh 4.1.5 + +set -euo pipefail + +# --------------------------------------------------------------------------- +# Config +# --------------------------------------------------------------------------- +OPT_DIR="/opt" +CURRENT_LINK="${OPT_DIR}/netbox" +OLD_LINK="${OPT_DIR}/netbox_old" + +if [[ $# -ne 1 ]]; then + echo "Usage: $0 " + exit 1 +fi + +VERSION="$1" +NEW_DIR="${OPT_DIR}/netbox-${VERSION}" +TARBALL="v${VERSION}.tar.gz" +TARBALL_URL="https://github.com/netbox-community/netbox/archive/refs/tags/${TARBALL}" + +log() { echo -e "\n\033[1;32m==> $*\033[0m"; } +warn() { echo -e "\033[1;33m[WARN] $*\033[0m"; } +err() { echo -e "\033[1;31m[ERROR] $*\033[0m" >&2; } + +if [[ $EUID -ne 0 ]]; then + err "Dieses Skript muss als root (oder mit sudo) ausgeführt werden." + exit 1 +fi + +if [[ ! -d "$CURRENT_LINK" ]]; then + err "Bestehendes NetBox-Verzeichnis nicht gefunden unter ${CURRENT_LINK}" + exit 1 +fi + +if [[ -e "$NEW_DIR" ]]; then + err "Zielverzeichnis ${NEW_DIR} existiert bereits. Abbruch, um nichts zu überschreiben." + exit 1 +fi + +# --------------------------------------------------------------------------- +# 1. Neues Release herunterladen und entpacken +# --------------------------------------------------------------------------- +log "Lade NetBox v${VERSION} herunter" +cd "$OPT_DIR" +wget -q --show-progress "$TARBALL_URL" -O "$TARBALL" + +log "Entpacke ${TARBALL}" +tar -xzf "$TARBALL" + +if [[ ! -d "$NEW_DIR" ]]; then + err "Erwartetes Verzeichnis ${NEW_DIR} nach dem Entpacken nicht gefunden. Version/Tag prüfen." + exit 1 +fi + +# --------------------------------------------------------------------------- +# 2. Konfiguration, Medien, Skripte, Reports, Gunicorn-Konfig kopieren +# --------------------------------------------------------------------------- +log "Kopiere configuration.py" +cp "${CURRENT_LINK}/netbox/netbox/configuration.py" "${NEW_DIR}/netbox/netbox/" + +log "Kopiere ldap_config.py (falls vorhanden)" +cp "${CURRENT_LINK}/netbox/netbox/ldap_config.py" "${NEW_DIR}/netbox/netbox/" 2>/dev/null \ + || warn "Keine ldap_config.py gefunden, wird übersprungen." + +log "Kopiere media/, scripts/, reports/" +cp -pr "${CURRENT_LINK}/netbox/media/" "${NEW_DIR}/netbox/" +cp -pr "${CURRENT_LINK}/netbox/scripts/" "${NEW_DIR}/netbox/" +cp -pr "${CURRENT_LINK}/netbox/reports/" "${NEW_DIR}/netbox/" + +log "Kopiere gunicorn.py (falls vorhanden)" +cp "${CURRENT_LINK}/gunicorn.py" "${NEW_DIR}/" 2>/dev/null \ + || warn "Keine angepasste gunicorn.py gefunden, wird übersprungen." + +# --------------------------------------------------------------------------- +# 3. local_requirements.txt (Plugins) übernehmen +# --------------------------------------------------------------------------- +log "Übernehme local_requirements.txt" +OLD_REQS="${CURRENT_LINK}/local_requirements.txt" +NEW_REQS="${NEW_DIR}/local_requirements.txt" + +if [[ -f "$OLD_REQS" ]]; then + cp "$OLD_REQS" "$NEW_REQS" + log "local_requirements.txt aus der alten Installation übernommen." +else + warn "Keine bestehende local_requirements.txt unter ${OLD_REQS} gefunden." + warn "Erzeuge eine neue mit der Standard-Plugin-Liste. Bitte ${NEW_REQS} bei Bedarf anpassen." + cat > "$NEW_REQS" <<'EOF' +git+https://git.mrblake.cc/MrBlake/mrb-netbox-topology-views.git@develop +netbox-attachments +netbox-ping +netbox-reorder-rack +netbox-secrets +netbox-inventory +git+https://git.mrblake.cc/MrBlake/NetBox-VM-Import.git#egg=netbox_vmware_importer +netbox-plugin-dhcp +git+https://git.mrblake.cc/MrBlake/Netbox-DokiWiki.git@main +netbox-plugin-themes +git+https://github.com/ICTU/netbox_slm.git +git+https://git.mrblake.cc/MrBlake/Netbox-Prefixes.git +git+https://git.mrblake.cc/MrBlake/Netbox-Better-IPs.git +git+https://git.mrblake.cc/MrBlake/Netbox-Utilities.git@main +git+https://git.mrblake.cc/MrBlake/NetBox-Export.git +git+https://git.mrblake.cc/MrBlake/NetBox-Concept.git +EOF +fi + +# LDAP-Requirement automatisch ergänzen, falls ldap_config.py vorhanden ist +if [[ -f "${NEW_DIR}/netbox/netbox/ldap_config.py" ]]; then + if ! grep -qxF "django-auth-ldap" "$NEW_REQS" 2>/dev/null; then + echo "django-auth-ldap" >> "$NEW_REQS" + log "django-auth-ldap zur local_requirements.txt hinzugefügt (LDAP-Konfig erkannt)." + fi +fi + +# --------------------------------------------------------------------------- +# 4. Hinweis: CSRF_TRUSTED_ORIGINS prüfen +# --------------------------------------------------------------------------- +warn "Bitte CSRF_TRUSTED_ORIGINS in folgender Datei prüfen/setzen:" +warn " ${NEW_DIR}/netbox/netbox/configuration.py" +warn "(Dieses Skript ändert diese Datei NICHT automatisch — vorher prüfen!)" +read -r -p "Enter drücken, sobald configuration.py geprüft/angepasst ist (oder Strg+C zum Abbrechen)..." + +# --------------------------------------------------------------------------- +# 5. Verzeichnisse tauschen +# --------------------------------------------------------------------------- +log "Tausche Verzeichnisse: ${CURRENT_LINK} -> ${OLD_LINK}, ${NEW_DIR} -> ${CURRENT_LINK}" + +if [[ -e "$OLD_LINK" ]]; then + err "${OLD_LINK} existiert bereits (von einem vorherigen Lauf?). Bitte erst entfernen/umbenennen." + exit 1 +fi + +mv "$CURRENT_LINK" "$OLD_LINK" +mv "$NEW_DIR" "$CURRENT_LINK" + +# --------------------------------------------------------------------------- +# 6. Upgrade-Skript ausführen +# --------------------------------------------------------------------------- +log "Führe upgrade.sh aus" +cd "$CURRENT_LINK" +./upgrade.sh + +log "Upgrade auf v${VERSION} abgeschlossen." +log "Alte Installation bleibt erhalten unter ${OLD_LINK} — nach erfolgreicher Prüfung kann sie gelöscht werden." + +# Aufräumen: heruntergeladenes tar.gz entfernen +rm -f "${OPT_DIR}/${TARBALL}" \ No newline at end of file