#!/bin/bash # === IMPORTS === SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/../Utility/WakeOnLan.sh" source "$SCRIPT_DIR/../Utility/IsMounted.sh" source "$SCRIPT_DIR/../Utility/Log.sh" # === Hilfe-Seite === if [[ "$*" == *"-h"* ]]; then echo "Benutzung: $0 " 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 " 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 } check_webdav_credentials() { if [[ ! -f "$WEBDAV_CREDENTIALS" ]]; then log "Fehler: WebDAV-Passwortdatei nicht gefunden unter $WEBDAV_CREDENTIALS!" return 1 fi if ! grep -q "$MOUNT_POINT" "$WEBDAV_CREDENTIALS"; then log "Fehler: Keine Zugangsdaten für den Mountpoint $MOUNT_POINT in $WEBDAV_CREDENTIALS gefunden!" return 1 fi return 0 } mount_nfs() { log "Versuche, NFS-Dateisystem von $NFS_SERVER einzubinden..." mkdir -p "$MOUNT_POINT" if mount -t nfs "$NFS_SERVER" "$MOUNT_POINT"; then log "NFS erfolgreich unter $MOUNT_POINT eingebunden!" return 0 else log "Fehler beim Einbinden von NFS!" return 1 fi } mount_webdav() { log "Versuche, WebDAV-Dateisystem von $WEBDAV_URL einzubinden..." mkdir -p "$MOUNT_POINT" if mount -t davfs "$WEBDAV_URL" "$MOUNT_POINT"; then log "WebDAV erfolgreich unter $MOUNT_POINT eingebunden!" return 0 else log "Fehler beim Einbinden von WebDAV!" return 1 fi } # === HAUPTLOGIK === # Prüfen, ob das Dateisystem bereits gemountet ist if is_mounted "$MOUNT_POINT"; then echo "Das Dateisystem ist bereits gemountet unter $MOUNT_POINT." exit 0 # Skript beenden, da kein weiteres Mounten erforderlich ist 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