Skripte/Mount/HiDrive.sh

122 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
# === IMPORTS ===
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../Utility/IsWebdavMounted.sh"
source "$SCRIPT_DIR/../Utility/WakeOnLan.sh"
source "$SCRIPT_DIR/../Utility/IsMounted.sh"
source "$SCRIPT_DIR/../Utility/Log.sh"
# === KONSTANTEN ===
MAX_RESTARTS=2 # Maximale Anzahl an Neustarts
RESTART_COUNT_FILE="/tmp/hidrive_restart_count" # Datei zur Speicherung des Neustart-Zählers
# === Neustart-Zähler initialisieren ===
if [[ ! -f "$RESTART_COUNT_FILE" ]]; then
echo 0 >"$RESTART_COUNT_FILE"
fi
RESTART_COUNT=$(<"$RESTART_COUNT_FILE")
# === Hilfe-Seite ===
if [[ "$*" == *"-h"* ]]; then
echo "Benutzung: $0 <DEVICE_MAC> <WEBDAV_URL> <NFS_PATH>"
echo
echo "Optionen:"
echo " -h Zeigt diese Hilfenachricht an"
echo " DEVICE_MAC Die MAC-Adresse des Geräts"
echo " WEBDAV_URL Die WebDAV-URL des Dateisystems"
echo " NFS_PATH Der NFS-Pfad des Dateisystems"
echo
echo "Dieses Skript muss als root ausgeführt werden! Bsp. sudo $0"
echo "Folgende Pakete müssen installiert sein: davfs2, nfs-common, nmap-common, wakeonlan, wget"
echo
echo "Dieses Skript bindet HiDrive als Dateisystem ein bzw. ein lokales NAS, sollte dieses vorhanden sein."
echo "WakeOnLan-Pakete werden zum Starten versendet."
exit 0
fi
# === ROOT-PRÜFUNG ===
if [[ $EUID -ne 0 ]]; then
echo "Dieses Skript muss als root ausgeführt werden! Bitte starte es mit sudo."
exit 1
fi
# === PARAMETER-ÜBERPRÜFUNG ===
if [[ "$#" -ne 3 ]]; then
echo "Benutzung: $0 <DEVICE_MAC> <WEBDAV_URL> <NFS_PATH>"
exit 1
fi
DEVICE_MAC="$1"
WEBDAV_URL="$2"
NFS_PATH="$3"
# === KONFIGURATION ===
MOUNT_POINT="/media/HiDrive" # Gemeinsamer Einhängepunkt für NFS/WebDAV
WEBDAV_CREDENTIALS="/etc/davfs2/secrets" # WebDAV-Passwortdatei
# === FUNKTIONEN ===
check_nfs_installed() {
if ! command -v mount.nfs &>/dev/null; then
log "Fehler: NFS-Client nicht installiert! Bitte installiere es mit: sudo apt install nfs-common"
return 1
fi
return 0
}
check_webdav_installed() {
if ! command -v mount.davfs &>/dev/null; then
log "Fehler: WebDAV-Client nicht installiert! Bitte installiere es mit: sudo apt install davfs2"
return 1
fi
return 0
}
restart_script() {
if [[ $RESTART_COUNT -lt $MAX_RESTARTS ]]; then
RESTART_COUNT=$((RESTART_COUNT + 1))
echo "$RESTART_COUNT" >"$RESTART_COUNT_FILE"
log "Neustart des Skripts (Versuch $RESTART_COUNT von $MAX_RESTARTS)..."
exec "$0" "$@"
else
log "Maximale Anzahl an Neustarts erreicht ($MAX_RESTARTS). Skript wird beendet."
rm -f "$RESTART_COUNT_FILE" # Neustart-Zähler zurücksetzen
exit 1
fi
}
# === HAUPTLOGIK ===
# Prüfen, ob das Dateisystem bereits gemountet ist
if is_mounted "$MOUNT_POINT"; then
log "Das Dateisystem ist bereits gemountet unter $MOUNT_POINT."
rm -f "$RESTART_COUNT_FILE" # Neustart-Zähler zurücksetzen
exit 0 # Skript beenden, da kein weiteres Mounten erforderlich ist
fi
# Prüfen, ob NFS oder WebDAV installiert ist
if ! check_nfs_installed && ! check_webdav_installed; then
log "Weder NFS noch WebDAV sind installiert. Neustart erforderlich."
restart_script "$@"
fi
# Wenn nicht gemountet, mit der Hauptlogik fortfahren
log "Starte Wake-on-LAN-Prozess..."
DEVICE_IP=$(wake_device "$DEVICE_MAC")
if [[ -n "$DEVICE_IP" ]]; then
log "Gerät ist unter $DEVICE_IP erreichbar, versuche NFS-Mount..."
NFS_SERVER="$DEVICE_IP:$NFS_PATH" # Dynamische NFS-Server-Adresse setzen
if check_nfs_installed; then
mount_nfs
fi
else
log "Gerät konnte nicht geweckt werden, versuche WebDAV-Mount..."
if check_webdav_installed && check_webdav_credentials; then
mount_webdav
fi
fi
# Neustart-Zähler zurücksetzen, wenn erfolgreich
rm -f "$RESTART_COUNT_FILE"