Backup der gesamten FFP-Installation

Dieser Artikel wurde von Simon als Gastartikel eingereicht!

Wozu Backups?

Ich habe mir schon häufig gewünscht, ich könnte eine Sicherungskopie meines FFP-Ordners zurückspielen. Vorgestern z.B. habe ich ausversehen den gesamten ownCloud Kalender samt Sicherungskopie gelöscht. Meistens hatte ich mich aber versehentlich aus dem NAS ausgesperrt. Einmal ist mir ein chmod-Befehl missglückt und hat den gesamten FFP-Ordner lesbar gemacht. In der Folge verweigert SSH den Dienst, weil die öffentlichen Schlüssel nicht lesbar sein dürfen. Aber es geht auch trivialer: Ein simpler Upgrade-Befehl hat einmal eine inkompatible Version von openSSL installiert. Auch daraufhin kam ich nicht mehr mit SSH auf die Box.

Um mir aus der Patsche zu helfen habe ich in Ulis fun_plug Script herumgeschrieben, das ja bei jedem Start ausgeführt wird.
Ihr erinnert euch? Das haben wir zur Installation von FFP gebraucht.
Darin habe ich gesehen, dass das Script im Falle einer Ersteinrichtung von FFP die damals heruntergeladene tgz-Datei entpackt.
So kam mir die Idee, meinen fertig konfigurierten FFP-Ordner in eben solch eine tgz-Datei zu stecken. Dann könnte man ihn von dem Installationsscript ganz einfach wiederherstellen lassen.

Zusammenfassung dessen, was das Script tut

  • Es kopiert den FFP-Ordner wöchentlich (automatisch, zeitgesteuert) in eine tgz-Datei (das ist kurz gesagt eine Linux Zip-Datei).
    Dabei wird alles gesichert, das irgendwie mit FFP zu tun hat:
    Alle installierten Pakete, pyLoad, twonky, mySQL Datenbanken, ownCloud (mit allen Dateien) usw.
  • Von diesen FFP-Sicherungsdateien behalten wir die drei aktuellsten. (Sie können einige hundert MB groß sein).
  • Ist FFP einmal zerschossen oder die Platte gecrasht, kann es sehr leicht wiederhergestellt werden (siehe unten).

Zur Struktur von FFP

Das FunPlug liegt komplett im Ordner „ffp“. Es besteht aus diesem Ordner und dem Script namens fun_plug.
Beides liegt auf der ersten Festplatte. Das FunPlug wird nicht in die Firmware des NAS installiert, sondern eher wie ein Rucksack obendrauf geschnallt. Das bedeutet, dass es komplett deinstalliert ist, sobald ihr die Festplatte herauszieht oder der Ordner „ffp“ gelöscht
wird. Für uns heißt das: Wenn wir das FunPlug auf seinen Ursprungszustand wiederherstellen wollen, müssen wir das alte FunPlug löschen und unsere Backup-TGZ Datei installieren lassen. Diese beiden Aufgaben werden von zwei Scripten übernommen und sind eigentlich ganz einfach zu initiieren (siehe unten). Aber zunächst installieren wir das Script in’s FunPlug und legen ein Backup an:

Download und Installation

mkdir /ffp/opt/ffp-backup && cd /ffp/opt/ffp-backup
wget https://wolf-u.li/u/481 -O ffp-backup.tgz
tar xfj ffp-backup.tgz && rm *.tgz
mv add-cron-ffp-backup.sh /ffp/start && chmod a+x /ffp/start/add-cron-ffp-backup.sh

Das eigentliche Script ist nun unter /ffp/ffp-backup/ffp-backup.sh gespeichert. Das „add-cron-ffp-backup.sh“ Script wird bei jedem Start ausgeführt. Es sorgt dafür, dass der Cronjob auch nach einem Neustart des NAS wieder neu festgeschrieben wird (dabei gehen sie nämlich eigentlich verloren, wenn wir nichts dagegen tun).

Dieser Cronjob sagt dem NAS, dass es das Script regelmäßig ausführen soll. Es ist so eingestellt, dass das Backup jeden Sonntagmorgen um 04:00 Uhr startet.

Manueller Start / Speicherort / Log

Nun müsst ihr nichts mehr tun. Das Backup wird wöchentlich angestoßen. Wer gerne jetzt loslegen will, kann das Backup manuell starten:

sh /ffp/ffp-backup/ffp-backup.sh

Die Zeitdauer des Durchlaufs hängt von der Größe des FFP-Ordners ab. Zwischen wenigen Minuten und einigen Stunden ist alles möglich,
je nachdem wie viele Pakete ihr installiert- und wie viele Daten ihr in der Owncloud habt.

Ihr seht keinen Fortschritt. Interessierte können mit einem beliebingen Texteditor die LogDatei „Volume_1/backup/ffp-backup/backup.txt“ öffnen.
Darin sieht man, welche Daten gerade in die Datei gepackt werden.
Das Backup ist auf der ersten Festplatte in einem neu angelegten Ordner „Volume_1/backup/ffp-backup“ gespeichert.
Nach drei Durchläufen (respektive drei Wochen) findet ihr darin folgende Dateien:

  • fun_plug.tgz (aktuellste Version)
  • fun_plug_before.tgz
  • fun_plug_oldest.tgz

Desweiteren ist in diesem Ordner eine Logdatei gespeichert, in der ihr die Ausgabe des letzten Backupdurchlaufes nachverfolgen könnt.

Achtung!


Wenn ihr kein RAID1 nutzt, empfiehlt es sich natürlich, eure TGZ-Sicherungen nochmal auf einer anderen Platte zu speichert, damit ihr auch gegen einen Plattencrash geschützt seid.

Wiederherstellung von FFP

Im Idealfall wollt ihr das FFP auf eine frisch formatierte Festplatte wiederherstellen. Hierzu müsst ihr einfach die Datei „fun_plug“ aus der oben verlinkten Anleitung (okay, für Scrollfaule hier nochmal der Link 🙂 zum Installieren des FFP herunterladen, nur dass ihr natürlich eurefun_plug.tgz“ Datei aus dem Backupordner mit dem „fun_plug“ Script auf das jungfräuliche NAS kopiert und neu startet.

Das war’s!

Alle weiteren Schritte entfallen (Telnet / SSH einrichten). Nach einem Neustart
wird euere Sicherung entpackt (das kann eine Weile dauern) und das FunPlug steht mit exakt demselben Funktionsumfang zur Verfügung wie
zum Backup Zeitpunkt.


Weniger ideal ist der Fall, wenn ihr euch aus dem FunPlug ausgesperrt habt. Dann ist der Ordner „ffp“ ja noch vorhanden und das FunPlug läuft noch. Wir müssen es also erst löschen!
Befolgt dazu diese Anleitung zum Deinstallieren des Fun_Plug. Ihr müsst nur die fun_plug Datei ersetzen und neu starten – dann ist das gesamte FFP von der Platte gefegt. Es bleibt nur die Logdatei übrig, die ihr auch löschen könnt.

Daraufhin könnt ihr den eben beschriebenen Idealfall nutzen: Die Platte ist vom alten FFP bereinigt. Ihr kopiert einfach das Installations-„fun_plug“ Script und euer Backup auf die erste Festplatte und startet neu. Da das evtl. sehr große Archiv erst entpackt werden muss, kann das Wiederherstellen eine Zeit lang dauern. Schaut einfach in „ffp.log“ nach. Solange da steht „Installing tarball“ müsst ihr noch warten.

So, viel Erfolg beim (jetzt sicheren) Herumspielen im FFP.

uwchmod: Fix für das Firmwareproblem von D-Link Geräten

Seit langer Zeit wird mir immer wieder berichtet, dass aktuelle D-Link Geräte immer und immer wieder den gleichen Bug in der Firmware haben. Dieser Bug setzt bei jedem Neustart und bei jedem Anschluss eines USB-Gerätes einen chmod 777 auf die Festplatten ab. Wenn man auf seinem NAS fun_plug installiert hat, führt dies dazu, dass unter anderem der SSH-Server nicht mehr startet und ansonsten ALLE Services von fun_plug gestartet werden.

Um das zu umgehen, habe ich eine Lösung gebastelt, die auf einer Idee von KyleK aufbaut. Mein Paket ersetzt die Datei /bin/chmod durch ein Script, welches Prüft, ob der chmod auf eine der Festplatten (/mnt/USB/USB* oder /mnt/HD/HD*) abgesetzt wird. Ist dies der Fall, so wird der chmod einfach übergangen (also nicht durchgeführt). Wenn dies nicht der Fall ist, so wird der chmod regulär ausgeführt.

Wichtig: Bei Non-Dlink-Geräten wird die Installation einfach nicht ausgeführt, insofern ist das Paket dort ungefährlich!

So wirds installiert:

slacker -UaA uli:uwchmod

Hinweis: Wenn du ein Firmware-Upgrade durchführst, musst du das nochmals durchführen. Da bei einem Upgrade die Datei /bin/chmod wieder neu geschrieben wird, wäre sonst mein Fix weg.

uwcron: Cron für das fun_plug

Seit einiger Zeit werde ich immer wieder gefragt, wie man cron-einträge in den NAS Geräten mit fun_plug dauerhaft speichern kann. Das ist nicht so einfach möglich, da die Geräte nach jedem Neustart die crontab zurücksetzen. Daher müsste man nach jedem Neustart die Einträge neu setzen. Ich habe daher ein kleines Script entwickelt, was das für das fun_plug automatisiert.
uwcron: Cron für das fun_plug weiterlesen

Installation von Owncloud auf NAS Geräten mit FFP 0.7

Für die Installation von owncloud sind nach der Ausführung der Installation von MySQL, lighttpd und PHP nur noch wenige Schritte notwendig. Zunächst wird das Installationspaket heruntergeladen:

cd /srv/www/pages/
wget --no-check-certificate https://download.owncloud.org/community/owncloud-latest.tar.bz2
tar xjf owncloud-latest.tar.bz2 && rm owncloud-latest.tar.bz2
chown -R root:root /srv/www/pages/owncloud
mkdir /srv/www/pages/owncloud/data
chmod -R 700 /srv/www/pages/owncloud/data

Nun muss die Datenbank für owncloud angelegt werden. Dazu wird zunächst MySQL geöffnet, das Passwort hast du im Installationstutorial festgelegt:

mysql -p

Dann führe die folgenden Befehle aus. Ersetze bitte YOURSECRETPASSWORD durch dein eigenes:

CREATE DATABASE owncl0ud CHARACTER SET utf8;
GRANT ALL ON owncl0ud.* TO 'owncl0ud'@'localhost' IDENTIFIED BY 'YOURSECRETPASSWORD' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

Installation von owncloudDann gehe auf die adresse deines NAS mit dem zusatz /owncloud/, also z.b. http://nas/owncloud/ oder http://192.168.133.7/owncloud. Dort wird dir wie im Bild links ein Konfigurationsmenü angezeigt werden, die Warnung bezüglich des ungeschützten „data“-Verzeichnis kannst du ignorieren. Trage nun folgende Daten ein:

  • Administrator-Konto:
    • Nutzername: Dein Nutzername
    • Passwort: Dein Passwort
  • Datenverzeichnis:
    • Verzeichnis: /srv/www/pages/owncloud/data
  • Datenbank einrichten:
    • Datenbank: owncl0ud
    • Username: owncl0ud
    • Passwort: YOURSECRETPASSWORD (Passwort von oben)

Klicke dann auf „Installation abschließen“. Nach einigen Sekunden wird sich die Oberfläche wie folgt präsentieren:
Owncloud nach der Installation

Um große Dateien hochladen zu können, solltest du in der Datei /ffp/etc/php.ini einige Werte abändern:

  • upload_tmp_dir: /srv/www/tmp/
  • upload_max_filesize: 513M
  • post_max_size: 513M
  • memory_limit: 512M

Das wars 😉 Nun kannst du die Sync-Clients einbinden.

NTP-Zeitabgleich mit dem fonz fun_plug 0.7

Mit der Installation des fun_plug 0.7 sollte man auch gleichzeitig den Zeitabgleich mit den NTP-Zeitservern aktivieren, um immer eine aktuelle Zeit auf dem NAS zu haben. Meiner Erfahrung nach ist der interne, mitgebrachte Mechanismus nicht besonders gut implementiert, sodass man hier eher aufs FFP setzen sollte. Für den folgenden Artikel benötigst du ein installiertes FFP 0.7. Logge dich in SSH ein.

Zunächst benötigst du die fun_plug.local in /ffp/etc/:

[[ ! -f /ffp/etc/fun_plug.local ]] && cp /ffp/etc/examples/fun_plug.local /ffp/etc

Und jetzt musst du diese Datei so abändern, dass die folgenden Zeilen auf jeden Fall dort so enthalten sind (Teilweise könnten diese auch schon enthalten sein):

# This removes firmware cronjobs that interfere with ntpd.
/bin/crontab -l | grep -vw '/usr/sbin/daylight' | grep -vw 'stime' | grep -vw '/usr/sbin/rtc' | /bin/crontab -
#Now start the ntp every hour
echo "1 * * * * /usr/sbin/sntp -r -P no de.pool.ntp.org">> /var/spool/cron/crontabs/root
# force a cronjob update
echo "root">> /var/spool/cron/crontabs/cron.update

Sofern dein NAS in einer anderen Zeitzone als der Mitteleuropäischen Zeitzone steht, muss in der /ffp/etc/fun_plug.local der richtige String eintragen werden, momentan ist dort „CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00“ unter timezone eingetragen. Alle String sind hier einzusehen.

Fehler während Kompilierung von screen-4.0.3 unter uclibc: sched.h:26: error: redefinition of ’struct event‘

Während der Kompilierung von screen habe ich den folgenden Fehler bekommen:

In file included from screen.h:41,
from screen.c:81:
sched.h:26: error: redefinition of 'struct event'
make: *** [screen.o] Error 1

Der folgende Patch behebt das ganze:

diff -urN screen-4.0.3-orig/sched.h screen-4.0.3/sched.h
--- screen-4.0.3-orig/sched.h	2002-01-08 16:42:43.000000000 +0100
+++ screen-4.0.3/sched.h	2009-01-13 14:53:15.000000000 +0100
@@ -22,6 +22,10 @@
  * $Id: sched.h,v 1.1.1.1 1993/06/16 23:51:13 jnweiger Exp $ FAU
  */
 
+#ifndef _SCHED_H_
+#define _SCHED_H_ 1
+#include <sys/types.h>
+
 struct event
 {
   struct event *next;
@@ -41,3 +45,4 @@
 #define EV_READ		1
 #define EV_WRITE	2
 #define EV_ALWAYS	3
+#endif

Dieser Patch kann mit „patch -p1 “ im screen-source-Verzeichnis eingebaut werden.

Ankündigung von Uli’s Funplug 0.7 Repository

Seit ffp 0.7 gibt es nun die Möglichkeit, dass man über das Zusatzprogramm slacker verschiedene „sites“ einbinden kann, welche Pakete bereitstellen. Nachdem ffp0.7 nun schon einige Zeit verfügbar ist, habe ich mich entschlossen meine Pakete auf ffp0.7 neu zu kompilieren. Ankündigung von Uli’s Funplug 0.7 Repository weiterlesen