Als eine Alternative für die Hardware-Lösung in diesem Thread (Gibt es eigentlich ein Stück Hardware was auf Knopfdruck ein WOL packet senden kann? (Teil II)),
wecken meine VDR-Clients den File-Server via WoL bei Bedarf auf. Vielleicht interessiert es ja jemanden.
Für Optimierungs- und Verbesserungsvorschläge bin ich offen.
Evtl. lassen sich ja die sleeps wegoptimieren (in dem zb. versucht wird, den Server anzupingen bis er gestartet ist)
1. VDR mit WoL im initrd
- Normaler x86 Diskless Client (Ubuntu 8.10)
- NFS Root
- Kernel und initrd auf 128MB USB-Stick
Folgende Anpassungen der initrd sind nötig:
Hiermit werden die erforderlichen Binaries (ping und etherwake) und das Kernel-Modul af_packet in die initrd aufgenommen.
Datei: /etc/initramfs-tools/hooks/wakeserver
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
# You can do anything you need to from here on.
#
. /usr/share/initramfs-tools/hook-functions
if [ -x /bin/ping ]; then
copy_exec /bin/ping bin
fi
if [ -x /usr/sbin/etherwake ]; then
copy_exec /usr/sbin/etherwake bin
fi
case "$DPKG_ARCH" in
i386|amd64|ia64|lpia)
force_load af_packet
;;
esac
Alles anzeigen
Das eigentliche Start-Script welches beim Booten ausgeführt wird:
Datei: /etc/initramfs-tools/scripts/nfs-premount/wakeserver
#! /bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
. /scripts/functions
# Do the work here.
SERVERIP=192.168.2.2
SERVERMAC=00:0c:xx:xx:xx:xx
# check if nfs server is actice
ping -c 1 -q ${SERVERIP} > /dev/null
if [ $? = 0 ]
then
echo ----------------------------------
echo server alive
echo ----------------------------------
else
echo ----------------------------------
echo wake server
echo ----------------------------------
modprobe af_packet
for I in 1 2 3 ; do
etherwake ${SERVERMAC}
sleep 2
done
sleep 45
fi
exit 0
Alles anzeigen
Nun noch die initrd updaten:
2. M740AV mit VDR
- Siemens M740AV Box
- Flash Filesystem
- VDR-NG Firmware
Nötige Änderungen:
Datei: /etc/rc.local
[...]
########################################################
# put here your optional stuff
########################################################
SERVERIP=192.168.2.2
SERVERMAC=00:0c:xx:xx:xx:xx
LOCALDIR=/var/media/server
REMOTEDIR=/var/lib/video.00
# create mount directory
mkdir ${LOCALDIR}
# check if nfs server is actice
ping -c 1 -q ${SERVERIP} > /dev/null
if [ $? = 0 ]
then
# mount nfs if online
mount -t nfs -o noatime,nolock ${SERVERIP}:${REMOTEDIR} ${LOCALDIR}
else
# wake server
for I in 1 2 3 ; do
/usr/bin/ether-wake ${SERVERMAC}
sleep 2
done
sleep 60
mount -t nfs -o noatime,nolock ${SERVERIP}:${REMOTEDIR} ${LOCALDIR}
sleep 30
touch ${LOCALDIR}/.update
fi
#######################################################
Alles anzeigen
Datei: /etc/rc.local.conf