Feat: Passt die Skripte so an, dass keine IP-Adresse mehr angegeben werden muss

This commit is contained in:
DragonSlayer_14 2025-03-05 19:21:22 +01:00
parent a7be7b39b6
commit 69b8a914ca
2 changed files with 26 additions and 19 deletions

View File

@ -7,20 +7,19 @@ source "$SCRIPT_DIR/../Utility/Log.sh"
# === Hilfe-Seite === # === Hilfe-Seite ===
if [[ "$*" == *"-h"* ]]; then if [[ "$*" == *"-h"* ]]; then
echo "Benutzung: $0 <DEVICE_MAC> <DEVICE_IP> <WEBDAV_URL> <NFS_PATH>" echo "Benutzung: $0 <DEVICE_MAC> <WEBDAV_URL> <NFS_PATH>"
echo echo
echo "Optionen:" echo "Optionen:"
echo " -h Zeigt diese Hilfenachricht an" echo " -h Zeigt diese Hilfenachricht an"
echo " DEVICE_MAC Die MAC-Adresse des Geräts" 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 " WEBDAV_URL Die WebDAV-URL des Dateisystems"
echo " NFS_PATH Der NFS-Pfad des Dateisystems" echo " NFS_PATH Der NFS-Pfad des Dateisystems"
echo echo
echo "Dieses Skript muss als root ausgeführt werden! Bsp. sudo $0" 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 "Folgende Pakete müssen installiert sein: davfs2, nfs-common, nmap-common, wakeonlan, wget"
echo echo
echo "Dieses Skript bindet HiDrive als Dateisystem ein bzw. ein lokales NAS, sollte dieses vorhanden sein." echo "Dieses Skript bindet HiDrive als Dateisystem ein bzw. ein lokales NAS, sollte dieses vorhanden sein."
echo "WakeOnLan-Pakete werden zum starten versendet." echo "WakeOnLan-Pakete werden zum Starten versendet."
exit 0 exit 0
fi fi
@ -31,19 +30,17 @@ if [[ $EUID -ne 0 ]]; then
fi fi
# === PARAMETER-ÜBERPRÜFUNG === # === PARAMETER-ÜBERPRÜFUNG ===
if [[ "$#" -ne 4 ]]; then if [[ "$#" -ne 3 ]]; then
echo "Benutzung: $0 <DEVICE_MAC> <DEVICE_IP> <WEBDAV_URL> <NFS_PATH>" echo "Benutzung: $0 <DEVICE_MAC> <WEBDAV_URL> <NFS_PATH>"
exit 1 exit 1
fi fi
DEVICE_MAC="$1" DEVICE_MAC="$1"
DEVICE_IP="$2" WEBDAV_URL="$2"
WEBDAV_URL="$3" NFS_PATH="$3"
NFS_PATH="$4"
# === KONFIGURATION === # === KONFIGURATION ===
MOUNT_POINT="/media/HiDrive" # Gemeinsamer Einhängepunkt für NFS/WebDAV 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 WEBDAV_CREDENTIALS="/etc/davfs2/secrets" # WebDAV-Passwortdatei
# === FUNKTIONEN === # === FUNKTIONEN ===
@ -101,8 +98,11 @@ mount_webdav() {
# === HAUPTLOGIK === # === HAUPTLOGIK ===
log "Starte Wake-on-LAN-Prozess..." log "Starte Wake-on-LAN-Prozess..."
if wake_device "$DEVICE_MAC" "$DEVICE_IP"; then DEVICE_IP=$(wake_device "$DEVICE_MAC")
log "Gerät ist erreichbar, versuche NFS-Mount..."
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 if check_nfs_installed; then
mount_nfs mount_nfs
fi fi

21
Utility/WakeOnLan.sh Normal file → Executable file
View File

@ -32,22 +32,25 @@ check_wol_installed() {
wake_device() { wake_device() {
local device_mac="$1" local device_mac="$1"
local device_ip="$2"
if [[ -z "$device_mac" || -z "$device_ip" ]]; then if [[ -z "$device_mac" ]]; then
log "Fehler: MAC- und IP-Adresse müssen angegeben werden!" log "Fehler: MAC-Adresse muss angegeben werden!"
log "Verwendung: wake_device <MAC-Adresse> <IP-Adresse>"
return 1 return 1
fi fi
wait_for_internet_connection wait_for_internet_connection
if is_reachable "$device_ip" "$PING_RETRIES_BEFORE_WOL"; then # Versuche, die IP aus der MAC-Adresse zu ermitteln
local device_ip
device_ip=$(get_ip_from_mac "$device_mac")
if [[ -n "$device_ip" ]] && is_reachable "$device_ip" "$PING_RETRIES_BEFORE_WOL"; then
log "Gerät ist bereits an, kein WOL nötig." log "Gerät ist bereits an, kein WOL nötig."
echo "$device_ip" # Nur die IP-Adresse ausgeben
return 0 return 0
fi fi
check_wol_installed || return 1 # WOL-Tool prüfen, wenn nicht da, Abbruch check_wol_installed || return 1
for ((attempt = 1; attempt<=WOL_RETRIES; attempt++)); do for ((attempt = 1; attempt<=WOL_RETRIES; attempt++)); do
log "Wake-on-LAN Versuch $attempt/$WOL_RETRIES..." log "Wake-on-LAN Versuch $attempt/$WOL_RETRIES..."
@ -55,8 +58,12 @@ wake_device() {
log "Warte $WOL_WAIT Sekunden..." log "Warte $WOL_WAIT Sekunden..."
sleep "$WOL_WAIT" sleep "$WOL_WAIT"
if is_reachable "$device_ip" "$PING_RETRIES_AFTER_WOL"; then # IP-Adresse erneut abrufen
device_ip=$(get_ip_from_mac "$device_mac")
if [[ -n "$device_ip" ]] && is_reachable "$device_ip" "$PING_RETRIES_AFTER_WOL"; then
log "Gerät ist jetzt erreichbar!" log "Gerät ist jetzt erreichbar!"
echo "$device_ip" # Erfolgreich: Nur die IP-Adresse ausgeben
return 0 return 0
fi fi
done done