upgrade.sh hinzugefügt
This commit is contained in:
+155
@@ -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 <version, z.B. 4.1.5>"
|
||||
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}"
|
||||
Reference in New Issue
Block a user