Debian - WAKE ON LAN
Inhaltsverzeichnis |
Beschreibung
Für Debian gibt es die Pakete etherwake und wakeonlan. Etherwake kann nur vom root ausgeführt werden, wakeonlan von allen Benutzern.
Ich habe diese Zeile einfach in meine /etc/init.d/networking an entsprechender Stelle nach dem Aktivieren des Netzwerks gesetzt. Falls es noch Fragen gibt, könnt Ihr mich auch direkt anmailen: Thorsten at Gehrig.de
Bei Debian sieht das dann z. B. so aus: (einfach nach ethtool suchen, um die passenden Stellen zu finden):
#!/bin/sh # # manage network interfaces and configure some networking options PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin if ! [ -x /sbin/ifup ]; then exit 0 fi spoofprotect_rp_filter () { # This is the best method: turn on Source Address Verification and get # spoof protection on all current and future interfaces. if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f done return 0 else return 1 fi } spoofprotect () { echo -n "Setting up IP spoofing protection: " if spoofprotect_rp_filter; then echo "rp_filter." else echo "FAILED." fi } ip_forward () { if [ -e /proc/sys/net/ipv4/ip_forward ]; then echo -n "Enabling packet forwarding..." echo 1 > /proc/sys/net/ipv4/ip_forward echo "done." fi } syncookies () { if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then echo -n "Enabling TCP/IP SYN cookies..." echo 1 > /proc/sys/net/ipv4/tcp_syncookies echo "done." fi } doopt () { optname=$1 default=$2 opt=`grep "^$optname=" /etc/network/options` if [ -z "$opt" ]; then opt="$optname=$default" fi optval=${opt#$optname=} if [ "$optval" = "yes" ]; then eval $optname fi } case "$1" in start) doopt spoofprotect yes doopt syncookies no doopt ip_forward no echo -n "Configuring network interfaces..." ifup -a ethtool -s eth0 wol g echo "done." ;; stop) if sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts | grep -q "^/ nfs$"; then echo "NOT deconfiguring network interfaces: / is an NFS mount" elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\1 \2/p' /proc/mounts | grep -q "^/ smbfs$"; then echo "NOT deconfiguring network interfaces: / is an SMB mount" elif sed -n 's/^[^ ]* \([^ ]*\) \([^ ]*\) .*$/\2/p' /proc/mounts | grep -qE '^(nfs[1234]?|smbfs|ncp|ncpfs|coda|cifs)$'; then echo "NOT deconfiguring network interfaces: network shares still mounted." else echo -n "Deconfiguring network interfaces..." ifdown -a --exclude=lo echo "done." fi ;; force-reload|restart) doopt spoofprotect yes doopt syncookies no doopt ip_forward no echo -n "Reconfiguring network interfaces..." ifdown -a --exclude=lo ifup -a ethtool -s eth0 wol g echo "done." ;; *) echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}" exit 1 ;; esac exit 0
Saubere Debian-Lösung
Besser als das Ändern von vorhandenen Dateien ist es, einen extra Mechanismus einzubauen. In Debian (Sarge) wird der runlevel 0 zum Abschalten des Systems benutzt. Daher wird ein link in /etc/rc0.d erzeugt der auf das Skript in /etc/init.d/wake_on_lan zeigt. (Erst das Skript erzeugen!)
cd /etc/rc0.d ln -s /etc/init.d/wake_on_lan S80wake_on_lan
Info: Die Ausführung des Skripts bei mir mit Priorität S80, also kurz for dem S90halt Befehl, führte dazu dass dieses nicht mehr korrekt ausgeführt werden konnte. In diesem Fall muss das Skript mit höherer Priorität ausgeführt(verlinkt) werden: z.B als S30wake_on_lan
Und hier das Skript wake_on_lan. Er muß nach /etc/init.d gespeichert werden und ausführbar sein. Dies geht mit "chmod +x wake_on_lan", wenn man im Verzeichnis ist.
#! /bin/sh # # Ensures that Wake on Lan works # #PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin set -e case "$1" in stop|start|restart|force-reload|reload) echo -n "Turn on: Wake on Magic Packet" /usr/sbin/ethtool -s eth0 wol g echo ;; *) # N=/etc/init.d/hwtools # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 exit 1 ;; esac exit 0
Falls ethtool noch nicht installiert ist, muß man dies jetzt nachholen:
apt-get install ethtool
Alternative /etc/network/interfaces
ethtool kann man auch einfach als pre-down oder post-up (post-down, pre-up haben in meinem Fall nicht funktoniert) in die interfaces-Konfiguration einbauen:
auto eth0 iface eth0 inet dhcp pre-down ethtool -s eth0 wol g
HALT / Reboot
Debian schaltet beim Halt und/oder Reboot die Netzwerkkarten ab. Im reboot bzw. Halt-Skript sollte man daher das "-i" entfernen, damit WOL klappt.
Bei verschiedenen Debian-Versionen (neuste version z.b. Debian 4.0 lenny) ist dafür in der S90halt die Variable NETDOWN. Setzt man diese auf "no", so bleiben die Interfaces aktiv. Die sauber Methode ist, folgende Zeile in /etc/default/halt einzufügen:
NETDOWN=no
Bei Debian lenny 4.0
/etc/init.d/halt
Das Script einfach mit dem Nano oder vi Editor öffnen und in den ersten Zeilen ist der Befehl Netdown zu finden.
Wenn das Script nicht in dem Verzeichnis /etc/init.d/halt zu finden ist einfach find befehl anwenden, um das Script zu finden!