Compare commits

..

No commits in common. "69b8a914cac75ac40c1338f92cbb1f5a14fc4cb3" and "cc8b33798757943da892a512a44a10a25d94773f" have entirely different histories.

6 changed files with 37 additions and 86 deletions

1
.gitignore vendored
View File

@ -32,4 +32,3 @@ core
.logs/ .logs/
.fleet .fleet
.idea

View File

@ -7,19 +7,20 @@ source "$SCRIPT_DIR/../Utility/Log.sh"
# === Hilfe-Seite === # === Hilfe-Seite ===
if [[ "$*" == *"-h"* ]]; then if [[ "$*" == *"-h"* ]]; then
echo "Benutzung: $0 <DEVICE_MAC> <WEBDAV_URL> <NFS_PATH>" echo "Benutzung: $0 <DEVICE_MAC> <DEVICE_IP> <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, nmap-common, wakeonlan, wget" echo "Folgende Pakete müssen installiert sein: davfs2, nfs-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
@ -30,17 +31,19 @@ if [[ $EUID -ne 0 ]]; then
fi fi
# === PARAMETER-ÜBERPRÜFUNG === # === PARAMETER-ÜBERPRÜFUNG ===
if [[ "$#" -ne 3 ]]; then if [[ "$#" -ne 4 ]]; then
echo "Benutzung: $0 <DEVICE_MAC> <WEBDAV_URL> <NFS_PATH>" echo "Benutzung: $0 <DEVICE_MAC> <DEVICE_IP> <WEBDAV_URL> <NFS_PATH>"
exit 1 exit 1
fi fi
DEVICE_MAC="$1" DEVICE_MAC="$1"
WEBDAV_URL="$2" DEVICE_IP="$2"
NFS_PATH="$3" WEBDAV_URL="$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 ===
@ -98,11 +101,8 @@ mount_webdav() {
# === HAUPTLOGIK === # === HAUPTLOGIK ===
log "Starte Wake-on-LAN-Prozess..." log "Starte Wake-on-LAN-Prozess..."
DEVICE_IP=$(wake_device "$DEVICE_MAC") if wake_device "$DEVICE_MAC" "$DEVICE_IP"; then
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

View File

@ -1,32 +0,0 @@
#!/bin/bash
# === IMPORTS ===
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/Log.sh"
# === Funktionen ===
get_ip_from_mac() {
local mac="$1"
# Aktuelle Netzwerkschnittstelle und Subnetz ermitteln
local subnet=$(ip -o -4 addr show | awk '$2 != "lo" {split($4, a, "/"); print a[1] "/" a[2]}' | head -n 1)
if [[ -z "$subnet" ]]; then
log "Fehler: Konnte Subnetz nicht ermitteln."
return 1
fi
log "Scanne Netzwerk $subnet nach MAC-Adresse $mac..."
# Netzwerk nach der MAC-Adresse scannen
local ip=$(sudo nmap -sn "$subnet" | grep -B 2 -i "$mac" | awk '/Nmap scan report/{print $5}')
if [[ -z "$ip" ]]; then
log "Fehler: Keine IP für MAC-Adresse $mac gefunden."
return 1
fi
echo "$ip"
return 0
}

View File

@ -1,24 +0,0 @@
#!/bin/bash
# === IMPORTS ===
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/Log.sh"
# === Funktionen ===
is_reachable() {
local device_ip="$1"
local max_retries="$2" # Zweiter Parameter gibt die Anzahl der Versuche an
for ((i = 1; i<=max_retries; i++)); do
log "Teste Erreichbarkeit von $device_ip - Versuch $i/$max_retries..."
if ping -c 1 -W 2 "$device_ip" &>/dev/null; then
log "Gerät $device_ip ist erreichbar."
return 0
fi
sleep "$PING_WAIT"
done
log "Gerät $device_ip ist NICHT erreichbar."
return 1
}

View File

@ -13,5 +13,5 @@ log() {
touch "$LOGFILE" touch "$LOGFILE"
fi fi
echo "$(date +'%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOGFILE" >/dev/tty echo "$(date +'%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOGFILE"
} }

View File

@ -3,8 +3,6 @@
# === IMPORTS === # === IMPORTS ===
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/NetworkCheck.sh" source "$SCRIPT_DIR/NetworkCheck.sh"
source "$SCRIPT_DIR/IsReachable.sh"
source "$SCRIPT_DIR/IpFromMac.sh"
source "$SCRIPT_DIR/Log.sh" source "$SCRIPT_DIR/Log.sh"
# === KONFIGURATION === # === KONFIGURATION ===
@ -16,6 +14,23 @@ WOL_WAIT=60 # Wartezeit nach WOL (Sekunden)
# === FUNKTIONEN === # === FUNKTIONEN ===
is_reachable() {
local device_ip="$1"
local max_retries="$2" # Zweiter Parameter gibt die Anzahl der Versuche an
for ((i = 1; i<=max_retries; i++)); do
log "Teste Erreichbarkeit von $device_ip - Versuch $i/$max_retries..."
if ping -c 1 -W 2 "$device_ip" &>/dev/null; then
log "Gerät $device_ip ist erreichbar."
return 0
fi
sleep "$PING_WAIT"
done
log "Gerät $device_ip ist NICHT erreichbar."
return 1
}
send_wol() { send_wol() {
local device_mac="$1" local device_mac="$1"
log "Sende Wake-on-LAN Signal an $device_mac..." log "Sende Wake-on-LAN Signal an $device_mac..."
@ -32,25 +47,22 @@ check_wol_installed() {
wake_device() { wake_device() {
local device_mac="$1" local device_mac="$1"
local device_ip="$2"
if [[ -z "$device_mac" ]]; then if [[ -z "$device_mac" || -z "$device_ip" ]]; then
log "Fehler: MAC-Adresse muss angegeben werden!" log "Fehler: MAC- und IP-Adresse müssen angegeben werden!"
log "Verwendung: wake_device <MAC-Adresse> <IP-Adresse>"
return 1 return 1
fi fi
wait_for_internet_connection wait_for_internet_connection
# Versuche, die IP aus der MAC-Adresse zu ermitteln if is_reachable "$device_ip" "$PING_RETRIES_BEFORE_WOL"; then
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 check_wol_installed || return 1 # WOL-Tool prüfen, wenn nicht da, Abbruch
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..."
@ -58,12 +70,8 @@ wake_device() {
log "Warte $WOL_WAIT Sekunden..." log "Warte $WOL_WAIT Sekunden..."
sleep "$WOL_WAIT" sleep "$WOL_WAIT"
# IP-Adresse erneut abrufen if is_reachable "$device_ip" "$PING_RETRIES_AFTER_WOL"; then
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