286 lines
5.9 KiB
Bash
286 lines
5.9 KiB
Bash
#!/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 |