QNAP automatisch starten lassen mit Debaininstallation

Dieser Beitrag erklärt, wie man bei einem QNAP NAS mit Debaininstallation die automatische An- und Abschaltung einrichtet. Es ist zwar kein echtes WOL (Wake on LAN), aber schon mal besser als es immer per Hand zu starten. Dazu ist ein Kernelpatch nötig. Bei der originalen Firmware gibt es die Möglichkeit das NAS zu einer bestimmten Uhrzeit anzuschalten und auch wieder auszuschalten. Diese Funktion ist leider im Debiankernel noch nicht angekommen. Hier hat ein findiger Kernelentwickler mit einem QNAP einen Patch geschrieben der dieses Problem löst. Der Link zu dem Originalbeitrag ist hier zu finden. Die Befehle sind alle auf dem QNAP auszuführen.

1. Ausschalten
Das einfachste kommt immer zuerst. 🙂 Man brauch nur in der /etc/crontab eine Zeile einfügen. 9:30 Uhr fährt das System runter

30 09 * * * root halt

Wenn man noch einen Ton ausgeben möchte, dann dieses Script unter /usr/local/bin/beep.sh speichern, ausführbar machen und vor dem Herunterfahren starten.
Download: beep.sh

#!/bin/bash
#
# beep for QNAP by Candyman
SOCKET=/var/run/qcontrol.sock

if [ -f $SOCKET ]; then
rm -f $SOCKET
fi
qcontrol -d >/dev/null & disown
sleep 1
pid=$(pidof qcontrol)
qcontrol buzzer long || true
sleep 2
qcontrol buzzer short || true
sleep 2
kill -TERM $pid
rm -f $SOCKET
exit 0

Dann sollte so etwas in die /etc/crontab eingetragen werden.

30 09  * * *   root    /usr/local/bin/beep.sh; sleep 5; halt

2. Automatischer PowerOn – Fehlersuche

nas:/home# dmesg | grep rtc
[   23.651364] rtc-mv rtc-mv: internal RTC not ticking
[   23.661739] rtc-s35390a 0-0030: rtc core: registered rtc-s35390a as rtc0
[   23.861512] rtc-s35390a 0-0030: setting system clock to 2012-06-01 17:35:49 UTC (1338572149)

Hier steht das der interne Taktgeber (RTC-Clock) nicht funktioniert. Wer es genauer wissen möchte, der sollte sich den oberen Link zur englischen Originalseite von BlackGod durchlesen.

nas:/home# cat /proc/driver/rtc
rtc_time        : 11:04:21
rtc_date        : 2012-06-22
24hr            : yes

Bei diesem Befehl sieht man das keine Alarminfos zu sehen sind.

3. Vorbereitung Kernel kompilieren
Sourcen und benötigte Software zum erstellen des Kernels downloaden und installieren.

aptitude install linux-source-2.6.32 build-essential lzma libncurses-dev patch

4. Kernel bauen
Bei diesen Befehlen werden die Sourcen entpackt der Patch heruntergeladen und eingespielt.
Download: rtc-s35390a.patch

cd /usr/src
tar jxvf linux-source-2.6.32.tar.bz2
cd linux-source-2.6.32/
wget -O /root/rtc-s35390a.patch https://www.mehr4u.de/images/scripts/rtc-s35390a.patch
patch drivers/rtc/rtc-s35390a.c /root/rtc-s35390a.patch
make oldconfig
make menuconfig

Nach dem letzten Befehl wird die Kernelkonfiguration gestartet. Hier muß nur noch ein Zusatz zum Kernelname angegeben werden.
Dazu solltet ihr zu folgender Einstellung navigieren General setup –> Local version – append to kernel release –> jetzt tragt ihr einen eigenen Namen ein gefolgt von der entsprechenden Plattform. In meinem Fall habe ich -candyman-kirkwood eingetragen.
Der letzte Teil ist für das Flashen wichtig. Mit dem nächten Befehl geht es los. Der Kernel wird gebaut.

make

5. Kernel installieren

make modules_install
cat /usr/src/linux-source-2.6.32/arch/arm/boot/zImage > /boot/vmlinuz-2.6.32-candyman-kirkwood
update-initramfs -c -k 2.6.32-candyman-kirkwood

Hier werden die Module installiert, das Kernelimage ins /boot Verzeichnis kopiert und die initrd erzeugt.
Jetzt werden die alten Symlinks gelöscht und neue angelegt.

cd /boot
rm initrd.img
rm vmlinuz
ln -s initrd.img-2.6.32-candyman-kirkwood initrd.img
ln -s vmlinuz-2.6.32-candyman-kirkwood vmlinuz
flash-kernel

Wie sich vermuten läßt wird mit dem letzten Befehl der neue Kernel geflascht. Danach ein reboot und der neue Kernel kann gestartet werden.
Jetzt noch überprüfen ob auch alles geklappt hat.

# uname -a
Linux QNAPTS112 2.6.32-candyman-kirkwood #1 Sun Jun 3 19:00:03 CEST 2012 armv5tel GNU/Linux

Das schlimmste ist geschafft.

5. PowerON Zeit einstellen
Überprüfen der Alarmzeiten mit cat /proc/driver/rtc

rtc_time        : 13:43:10
rtc_date        : 2012-06-22
alrm_time       : 05:00:00
alrm_date       : 1900-01-**
alarm_IRQ       : no
alrm_pending    : no
24hr            : yes

Jetzt können wir eine PowerOn Zeit angeben zu der das NAS hochfahren soll.

echo 0 > /sys/class/rtc/rtc0/wakealarm
echo `date „+%s“ -d „+5 minutes“` > /sys/class/rtc/rtc0/wakealarm
dmesg|grep -i rtc

Der letzte Befehl ist nur zur Überprüfung der Einstellungen. Nicht nervös machen lasse durch die Abweichungen in der Stundenanzeige. Die Uhr läuft mit UTC Zeit. Deshalb ist es besser immer einen relativen Startzeitpunkt anzugeben. Mein NAS fährt zum Beispiel jeden Morgen um 7Uhr hoch.
Folgender Code wird in die /etc/rc.local eingetragen. Dies wird direkt nach dem Starten ausgeführt.

# Automatische Einschaltzeit festlegen. Jeden Morgen 7:00
echo 0 > /sys/class/rtc/rtc0/wakealarm
echo `date „+%s“ -d „+1 day 7:00″` > /sys/class/rtc/rtc0/wakealarm