Debian - WAKE ON LAN

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
K (ausgelagert (mal Bitte sortieren))
 
(Saubere Debian-Lösung)
 
(19 dazwischenliegende Versionen von 15 Benutzern werden nicht angezeigt)
Zeile 4: Zeile 4:
  
 
Ich habe diese Zeile einfach in meine /etc/init.d/networking an entsprechender Stelle nach dem Aktivieren des Netzwerks gesetzt.
 
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
+
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 nacht ethool suchen, um die passenden Stellen zu finden):
+
Bei [[Debian]] sieht das dann z. B. so aus: (einfach nach ethtool suchen, um die passenden Stellen zu finden):
 
<pre>
 
<pre>
 
#!/bin/sh
 
#!/bin/sh
Zeile 117: Zeile 117:
 
</pre>
 
</pre>
  
=== Saubere Debian Lösung ===
+
=== 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 den  Script in /etc/init.d/wake_on_lan zeigt. (Erst den Script erzeugen!)
+
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!)
 
<pre>
 
<pre>
 
cd /etc/rc0.d
 
cd /etc/rc0.d
 
ln -s /etc/init.d/wake_on_lan S80wake_on_lan
 
ln -s /etc/init.d/wake_on_lan S80wake_on_lan
 
</pre>
 
</pre>
 +
Info: Die Ausführung des Skripts bei mir mit Priorität S80, also kurz vor 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 der Script 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.
+
''Ergänzung 2010-09-29''
 +
Für das Debian squeeze muss an stelle z.B als S30wake_on_lan z.B. K09wake_on_lan eingetragen werden.
 +
 
 +
 
 +
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.
 
<pre>
 
<pre>
 
#! /bin/sh
 
#! /bin/sh
 
#
 
#
# Ensures that the Wake On Lan works
+
# Ensures that Wake on Lan works
 
#
 
#
  
Zeile 152: Zeile 157:
 
</pre>
 
</pre>
  
Falls ethtool noch nicht installiert ist muß man dies jetzt nachholen:
+
Falls ethtool noch nicht installiert ist, muß man dies jetzt nachholen:
 
<pre>
 
<pre>
 
apt-get install ethtool
 
apt-get install ethtool
 
</pre>
 
</pre>
 +
 +
=== 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:
 +
<pre>
 +
auto eth0
 +
iface eth0 inet dhcp
 +
        pre-down ethtool -s eth0 wol g
 +
</pre>
 +
=== 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 5.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:<br>
 +
<PRE>NETDOWN=no</PRE>
 +
 +
----
 +
 +
<br>
 +
===== Bei Debian etch 4.0 / lenny 5.0 =====
 +
<br>'''''/etc/init.d/halt'''''
 +
<br>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!
 +
 +
[[Kategorie:Debian]]
 +
[[Kategorie:Wakeup]]

Aktuelle Version vom 29. September 2010, 16:51 Uhr

Inhaltsverzeichnis

[Bearbeiten] 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

[Bearbeiten] 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 vor 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

Ergänzung 2010-09-29 Für das Debian squeeze muss an stelle z.B als S30wake_on_lan z.B. K09wake_on_lan eingetragen werden.


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

[Bearbeiten] 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

[Bearbeiten] 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 5.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


[Bearbeiten] Bei Debian etch 4.0 / lenny 5.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!