Debian - WAKE ON LAN
(typo) |
(→Saubere Debian-Lösung) |
||
| Zeile 123: | Zeile 123: | ||
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 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. | 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. | ||
Version vom 25. Oktober 2007, 20:28 Uhr
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