Compare commits
No commits in common. "69b8a914cac75ac40c1338f92cbb1f5a14fc4cb3" and "cc8b33798757943da892a512a44a10a25d94773f" have entirely different histories.
69b8a914ca
...
cc8b337987
1
.gitignore
vendored
1
.gitignore
vendored
@ -32,4 +32,3 @@ core
|
|||||||
.logs/
|
.logs/
|
||||||
|
|
||||||
.fleet
|
.fleet
|
||||||
.idea
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
|
||||||
}
|
|
||||||
@ -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
|
|
||||||
}
|
|
||||||
@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user