Raspberry Pi als TimeCapsule

Besitzer von Mac OSX-Rechnern kennen natürlich Apples geniale TimeCapsule, eine Festplatte, die man irgendwo hinstellen kann und das Betriebssystem macht regelmäßig automatische Datensicherungen übers WLAN, ohne dass man sich um irgendwas kümmern muss.

Mit einem Raspberry Pi, einer externen Festplatte und etwas Software erhält man die gleiche Lösung. Sieht zwar nicht so gut aus, ist dafür aber etwas günstiger :-)

Ein Hinweis vorweg: Mittlerweile setze ich diese Lösung aus folgenden Gründen nicht mehr ein:

  • Die Datenübertragungsrate ist unerträglich langsam.
  • Von Zeit zu Zeit meint TimeMachine, dass das Backup beschädigt sei und nun ein komplett neues erstellt werden müsse. Dabei verliert man natürlich die komplette Backup-Historie.
  • Ein vollständiges Backup ist aufgrund der Datenübertragungsrate nicht praktikabel durchführbar. Bei meinem MacBook Pro mit etwa 300 GB Plattenplatzbelegung würde das etwa 3 Tage dauern (!).

Ich werde diese Anleitung daher nicht mehr weiter pflegen und nicht mehr aktuell halten. Wer es trotzdem versuchen möchte, kann sich an die angegebenen Schritte halten.

In der folgenden Anleitung wird davon ausgegangen, dass der Raspberry Pi in der Grundkonfiguration fertig eingerichtet und ins Netzwerk eingebunden ist. Anleitungen dazu gibt es zuhauf auf den entsprechenden Seiten. Außerdem empfehle ich, den Raspberry Pi direkt per LAN-Kabel an den Router anzuschließen und nicht per WLAN.

Auch zur Einrichtung des Raspberry Pi als TimeCapsule gibt es mehrere Anleitungen im Netz, ich habe viele davon gelesen und probiert (z.B. hier und hier). Keine davon hat auf Anhieb bei mir funktioniert, es gab immer irgendwelche Probleme. Daher habe ich mich entschlossen, meine Vorgehensweise und Erfahrungen hier zu veröffentlichen.

Festplatte vorbereiten

Es empfiehlt sich, eine externe Festplatte mit separatem Netzteil zu verwenden. Viele Probleme entstehen dadurch, dass die USB-Anschlüsse des Raspberry Pi nicht genügend Strom liefern können.

Die Festplatte muss am Mac mit dem Festplattendienstprogramm partitioniert werden und mit dem MacOS Extended (journaled) Dateisystem formatiert werden. Anschließend die Platte an den Raspberry Pi anschließen und per ssh auf dem Raspberry Pi einloggen.

HFS+ Unterstützung installieren:

[code]sudo apt-get install hfsplus hfsutils hfsprogs[/code]

Mountpoint /media/TimeCapsule erstellen und mit den entsprechenden Rechten versehen:

sudo mkdir /media/TimeCapsule
sudo chown pi:pi /media/TimeCapsule
sudo chmod 777 /media/TimeCapsule

Jetzt müssen wir herausfinden, mit welchem Device die Platte ins System eingebunden ist:

[code]sudo blkid[/code]

Dies liefert eine Liste aller aktuell angeschlossenen Platten. Wichtig ist der Eintrag mit TYPE="hfsplus". Bei mir sieht das z.B. so aus:

pi@raspberrypi ~ $ sudo blkid
/dev/mmcblk0p1: SEC_TYPE="msdos" UUID="C522-EA52" TYPE="vfat"
/dev/mmcblk0p2: UUID="62ba9ec9-47d9-4421-aaee-71dd6c0f3707" TYPE="ext4"
/dev/sda1: LABEL="EFI" UUID="67E3-17ED" TYPE="vfat"
/dev/sda2: UUID="5d70a32f-9437-3e79-90e5-b094bde9c67c" LABEL="TimeMachine" TYPE="hfsplus"

Hier erkennt man, dass die Backup-Partition als /dev/sda2 eingebunden ist. Jetzt kann die Platte zunächst mal manuell gemountet werden:

[code]sudo mount -t hfsplus -o force /dev/sda2 /media/TimeCapsule/[/code]

Ein ls -l /media/TimeCapsule sollte jetzt einige Dateien und Verzeichnisse auflisten.

Bei meinen Versuchen hatte ich keine Schreibrechte vom Mac, die Lösung brachte ein nochmaliges Setzen der Rechte bei gemounteter Platte:

[code]sudo chmod 777 /media/TimeCapsule[/code]

TimeCapsule Server im Netzwerk

Um den Raspberry Pi mit der Festplatte als TimeCapsule Server sichtbar zu machen, muss noch etwas Software installiert werden.

Avahi

sudo apt-get install avahi-daemon libavahi-client-dev libdb5.3-dev db-util db5.3-util libgcrypt11 libgcrypt11-dev

Netatalk

Netatalk ist die freie, Open Source Lösung des AFP (Apple File Protocol). Diese steht nicht als Package für apt-get zur Verfügung, es müssen daher die Sourcen manuell heruntergeladen, konfiguriert und compiliert werden. Die folgenden Schritte beziehen sich auf die Version 3.0.4, am besten auf der Sourceforge-Seite nachsehen, welche Version aktuell ist und die Dateinamen entsprechend anpassen:

cd /home/pi
wget http://downloads.sourceforge.net/project/netatalk/netatalk/3.0.4/netatalk-3.0.4.tar.bz2
tar -xvf netatalk-3.0.4.tar.bz2
cd netatalk-3.0.4/
./configure --with-init-style=debian --with-zeroconf
make
sudo make install

Das Compilieren (Aufruf von make) dauert auf dem Raspberry Pi gute 20 Minuten. Wenn alles erfolgreich durchgelaufen ist, können die Sourcen wieder gelöscht werden:

cd /home/pi
rm -rf netatalk-3.0.4 netatalk-3.0.4.tar.bz2

Anschließend muss die Konfigurationsdatei /usr/local/etc/afp.conf angepasst werden:

sudo nano /usr/local/etc/afp.conf

Die Datei so editieren, dass sie folgenden Inhalt hat:

[Global]
hostname = TimeCapsule Pi
log file = /var/log/netatalk.log
log level = default:info
uam list = uams_guest.so
zeroconf = yes
save password = no
mimic model = TimeCapsule
[Homes]
basedir regex = /home

[TimeMachine]
path = /media/TimeCapsule
time machine = yes

Die Zeile hostname = TimeCapsule Pi legt fest, unter welchem Namen der Server später auf dem Mac unter Freigaben auftauchen wird. Der Eintrag in eckigen Klammern [TimeMachine] ist der Name, unter dem das Backup-Volume in den Systemeinstellungen von TimeMachine aufgelistet wird. Wer hier noch weitere Optionen oder Anpassungen vornehmen will, kann in der Dokumentation zu netatalk nachlesen.

Die Datei /etc/avahi/services/timecapsule_afpd.service so editieren…:

sudo nano /etc/avahi/services/timecapsule_afpd.service

…dass sie folgenden Inhalt hat:

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
</service-group>

Startscript

Damit die Services nach einem Neustart des Raspberry Pi automatisch gestartet werden, fehlt jetzt noch ein Startscript, das wir mit

sudo nano /etc/init.d/TimeCapsule

anlegen. Das Script mit folgendem Inhalt füllen:

#!/bin/bash
if [ "$(id -u)" != "0" ]; then
	echo "This script must be run as root" 1>&2
	exit 1
fi
case "$1" in
	start)
		service netatalk stop
		service avahi-daemon stop
		umount -l /media/TimeCapsule
		mount -t hfsplus -o force /dev/sda2 /media/TimeCapsule/
		service netatalk start
		service avahi-daemon start
	;;
	stop)
		service netatalk stop
		service avahi-daemon stop
		umount -l /media/TimeCapsule
	;;
	*)
		echo "Usage: /etc/init.d/TimeCapsule {start|stop}"
		exit 1
	;;
esac
exit 0

Wichtig: Das device /dev/sda2 muss durch das passende device, das zuvor oben mit sudo blkid ermittelt wurde, ersetzt werden.

Jetzt das Script ausführbar machen, in die automatischen Startscripte einpflegen und anschließend einmal manuell starten:

sudo chmod 755 /etc/init.d/TimeCapsule
sudo update-rc.d TimeCapsule defaults
sudo /etc/init.d/TimeCapsule start

Damit sind wir auf dem Raspberry Pi fertig. Das Backup-Volume sollte jetzt unter dem Namen TimeCapsule Pi auf dem Mac unter Freigaben auftauchen:

TimeMachine auf dem Mac konfigurieren

Auf dem Mac wählen wir jetzt in den Systemeinstellungen für TimeMachine den Raspberry Pi als Backup Volume aus. Bei der Frage nach den Anmeldeinformationen wählen wir als Gast anmelden. Anschließend kann das Backup gestartet werden.

Hinweis: Es wird dringend empfohlen, das erste (vollständige) Backup nicht über WLAN durchzuführen, sondern den Mac dazu mit dem Kabelnetzwerk zu verbinden.

Fortan macht der Mac stündliche Backups von den geänderten Dateien.