#!/bin/bash # === IMPORTS === SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/../Utility/WakeOnLan.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 " DEVICE_IP Die IP-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, 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 4 ]]; then echo "Benutzung: $0 " exit 1 fi DEVICE_MAC="$1" DEVICE_IP="$2" WEBDAV_URL="$3" NFS_PATH="$4" # === KONFIGURATION === MOUNT_POINT="/media/HiDrive" # Gemeinsamer Einhängepunkt für NFS/WebDAV NFS_SERVER="$DEVICE_IP:$NFS_PATH" # Dynamische NFS-Server-Adresse 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 === log "Starte Wake-on-LAN-Prozess..." if wake_device "$DEVICE_MAC" "$DEVICE_IP"; then log "Gerät ist erreichbar, versuche NFS-Mount..." 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