update-iventoy.sh hinzugefügt

This commit is contained in:
2026-09-07 01:12:25 +02:00
commit c31b9107f5
+286
View File
@@ -0,0 +1,286 @@
#!/bin/bash
set -euo pipefail
BASE="/opt"
CURRENT="/opt/iventoy"
PERSIST="/srv/iventoy"
ISO_DIR="${PERSIST}/iso"
CONFIG_DIR="${PERSIST}/config"
CONFIG_FILE="${CONFIG_DIR}/config.dat"
SERVICE="iventoy"
TMP="/tmp/iventoy-update"
GITHUB_REPO="ventoy/PXE"
echo "=========================================="
echo " iVentoy Update"
echo "=========================================="
echo
# --------------------------------------------------
# Root check
# --------------------------------------------------
if [ "$(id -u)" -ne 0 ]; then
echo "ERROR: Dieses Script muss als root laufen."
exit 1
fi
# --------------------------------------------------
# Dependencies
# --------------------------------------------------
apt-get update -qq
apt-get install -y -qq curl tar >/dev/null
# --------------------------------------------------
# Persistent directories
# --------------------------------------------------
mkdir -p "$ISO_DIR"
mkdir -p "$CONFIG_DIR"
# --------------------------------------------------
# Existing config sichern / initial übernehmen
# --------------------------------------------------
if [ ! -f "$CONFIG_FILE" ]; then
if [ -f "${CURRENT}/data/config.dat" ]; then
echo "Übernehme bestehende iVentoy Config..."
cp -a "${CURRENT}/data/config.dat" "$CONFIG_FILE"
else
echo "WARNUNG: Keine bestehende config.dat gefunden."
fi
fi
# Backup
if [ -f "$CONFIG_FILE" ]; then
BACKUP="${CONFIG_FILE}.bak-$(date +%Y%m%d-%H%M%S)"
echo "Sichere Config nach:"
echo " $BACKUP"
cp -a "$CONFIG_FILE" "$BACKUP"
fi
# --------------------------------------------------
# Latest Version ermitteln
# --------------------------------------------------
echo
echo "Ermittle aktuelle iVentoy-Version..."
LATEST_TAG=$(
curl -fsSL \
-o /dev/null \
-w '%{url_effective}' \
"https://github.com/${GITHUB_REPO}/releases/latest" \
| awk -F/ '{print $NF}'
)
VERSION="${LATEST_TAG#v}"
if [ -z "$VERSION" ]; then
echo "ERROR: Konnte aktuelle Version nicht ermitteln."
exit 1
fi
echo "Neueste Version: $VERSION"
TARGET="${BASE}/iventoy-${VERSION}"
# --------------------------------------------------
# Prüfen ob bereits installiert
# --------------------------------------------------
if [ -d "$TARGET" ]; then
echo
echo "Version $VERSION ist bereits unter"
echo " $TARGET"
echo "vorhanden."
else
# --------------------------------------------------
# Download
# --------------------------------------------------
rm -rf "$TMP"
mkdir -p "$TMP"
ARCHIVE="iventoy-${VERSION}-linux-x86_64-free.tar.gz"
URL="https://github.com/${GITHUB_REPO}/releases/download/v${VERSION}/${ARCHIVE}"
echo
echo "Lade herunter:"
echo " $URL"
curl -fL \
"$URL" \
-o "${TMP}/${ARCHIVE}"
# --------------------------------------------------
# Entpacken
# --------------------------------------------------
echo
echo "Entpacke iVentoy..."
tar -xzf "${TMP}/${ARCHIVE}" -C "$TMP"
EXTRACTED="${TMP}/iventoy-${VERSION}"
if [ ! -d "$EXTRACTED" ]; then
echo "ERROR: Erwartetes Verzeichnis $EXTRACTED nicht gefunden."
exit 1
fi
mv "$EXTRACTED" "$TARGET"
fi
# --------------------------------------------------
# Symlinks vorbereiten
# --------------------------------------------------
echo
echo "Setze persistente Verzeichnisse..."
# ISO
rm -rf "${TARGET}/iso"
ln -s "$ISO_DIR" "${TARGET}/iso"
# Config
if [ -f "$CONFIG_FILE" ]; then
rm -f "${TARGET}/data/config.dat"
ln -s \
"$CONFIG_FILE" \
"${TARGET}/data/config.dat"
fi
# --------------------------------------------------
# Service stoppen
# --------------------------------------------------
echo
echo "Stoppe iVentoy..."
systemctl stop "$SERVICE" 2>/dev/null || true
sleep 2
# --------------------------------------------------
# Bestehende /opt/iventoy Installation migrieren
# --------------------------------------------------
#
# Falls /opt/iventoy beim allerersten Lauf noch ein echtes
# Verzeichnis und kein Symlink ist.
#
if [ -e "$CURRENT" ] && [ ! -L "$CURRENT" ]; then
OLD="${BASE}/iventoy-old-$(date +%Y%m%d-%H%M%S)"
echo
echo "Bestehende Installation wird verschoben:"
echo " $CURRENT -> $OLD"
mv "$CURRENT" "$OLD"
fi
# --------------------------------------------------
# Current Symlink atomar setzen
# --------------------------------------------------
echo
echo "Aktiviere iVentoy $VERSION..."
ln -sfn "$TARGET" "${CURRENT}.new"
mv -Tf "${CURRENT}.new" "$CURRENT"
# --------------------------------------------------
# Start
# --------------------------------------------------
echo
echo "Starte iVentoy..."
systemctl start "$SERVICE"
sleep 3
# --------------------------------------------------
# Health Check
# --------------------------------------------------
FAILED=0
if ! systemctl is-active --quiet "$SERVICE"; then
echo "ERROR: systemd Service läuft nicht."
FAILED=1
fi
if ! ss -lntH | awk '{print $4}' | grep -Eq '[:.]26000$'; then
echo "ERROR: TCP 26000 lauscht nicht."
FAILED=1
fi
if ! ss -lntH | awk '{print $4}' | grep -Eq '[:.]16000$'; then
echo "ERROR: TCP 16000 lauscht nicht."
FAILED=1
fi
if [ "$FAILED" -ne 0 ]; then
echo
echo "=========================================="
echo " UPDATE FEHLGESCHLAGEN"
echo "=========================================="
echo
echo "iVentoy Log:"
tail -n 40 "${CURRENT}/log/log.txt" || true
exit 1
fi
# --------------------------------------------------
# Cleanup
# --------------------------------------------------
rm -rf "$TMP"
echo
echo "=========================================="
echo " Update erfolgreich"
echo "=========================================="
echo
echo "Aktive Version:"
echo " $VERSION"
echo
echo "Installation:"
echo " $CURRENT -> $TARGET"
echo
echo "Config:"
echo " ${CURRENT}/data/config.dat -> $CONFIG_FILE"
echo
echo "ISO:"
echo " ${CURRENT}/iso -> $ISO_DIR"
echo