Raspberry als Mac TimeMachine

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.

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.

 

Auch bei mir war es so, mit einer 2,5″ WD 2TB HDD (USB3)
Da die Platte nicht am Pi verfügbar war stellte sich heraus, das das Stromlimit am Pi auf maximal 600mA im default Fall eingestellt war.

Abhilfe schafft die Abschaltung des Limits mit :

The first way is via a new option in /boot/config.txt. Currently you can add:

max_usb_current=1

 

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.
Ein Problem stellte sich jedoch dadurch heraus, das die hfsutils eine „journaled“ Platte nicht als Read/Write mounten kann. Dies klappt dann nur im Read Only mode. Abhilfe schafft hierzu, das Journaling für die entsprechende Partition am Mac zu deaktivieren.

HFS+ Unterstützung installieren:

sudo apt-get install hfsplus hfsutils hfsprogs

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:

sudo blkid

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:

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

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:

sudo chmod 777 /media/TimeCapsule

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

Als nächstes benötigen wir Netattalk....
In den Raspberry Repos ist lediglich Version 2 ohne Spotlight Unterstützung vorhanden.
Also Version 3 von Github herunterladen und selbst kompilieren...

Raspberry Pi: Install Netatalk 3 with Spotlight support

I recently upgraded from Netatalk 2.2 to Netatalk 3.1 on my Raspberry Pi. Since Netatalk 3 isn’t in the repositories, I built it from source. Netatalk 3 also allows for Spotlight searching on network volumes.

Backup configuration files

Netatalk 3 uses a different arrangement of configuration files, but I backed up my current ones for reference:

cp -R /etc/netatalk/ ~/confbackup

Remove Netatalk 2

Start by uninstalling netatalk 2:

sudo apt-get remove netatalk

Install Dependencies

This is a somewhat exhaustive list (you probably have most of these installed already):

sudo apt-get install avahi-daemon bison build-essential checkinstall cracklib-runtime db-util db5.1-util groff libacl1 libacl1-dev libattr1 libavahi-client-dev libavahi-client3 libavahi-common3 libc6 libcomerr2 libcrack2 libcrack2-dev libcups2 libdb-dev libdb5.1 libdbus-1-dev libdbus-glib-1-dev libevent-dev libgcc1 libgcrypt11-dev libgcrypt11 libglib2.0-dev libgnutls26 libgssapi-krb5-2 libk5crypto3 libkrb5-3 libkrb5-dev libldap-2.4-2 libldap2-dev libpam-cracklib libpam-modules libpam0g libpam0g-dev libssl-dev libtool libtracker-extract-0.14-0 libtracker-extract-0.14-dev libtracker-miner-0.14-0 libtracker-miner-0.14-dev libtracker-sparql-0.14-0 libtracker-sparql-0.14-dev libwrap0 libwrap0-dev lsof netbase perl procps quota rc systemtap-sdt-dev tracker tracker-explorer tracker-extract tracker-gui tracker-miner-fs tracker-utils zlib1g

Download and unpack Netatalk 3 source

Go to the Netatalk homepage and download the latest source code. For me this was 3.1.6. Once downloaded, unpack it, e.g.

tar -xf netatalk-3.1.6.tar.bz2

cd netatalk-3.1.6

Configure and build Netatalk

You’ll need to specify the version of Gnome Tracker (Spotlight backend) that you’ve installed. The version in the repositories is 0.14, so the configure line looks like this:

./configure –with-init-style=debian-sysv –with-tracker-pkgconfig-version=0.14

If it configures successfully, then

make

sudo make install

In my case the build failed when building the Spotlight support. I hadn’t installed bison before starting and rather than fail during configure, netatalk failed to build. I ended up installing bison from source as well, though I expect the version in the repositories will work fine too.

Configure Netatalk 3

The new configuration file (only one) is /usr/local/etc/afp.conf. Mine looks like this:

[Global]
hostname = raspberrypi
zeroconf = yes
log file = /var/log/netatalk.log
cnid scheme = dbd
uam list = uams_dhx2.so
save password = yes
spotlight = yes
dbus daemon = /usr/bin/dbus-daemon

[Homes]
basedir regex = /home

[Time Machine]
path = /media/backup/Backups/TimeMachine
time machine = yes

Important lines are the ‘spotlight = yes’ to enable Spotlight indexing, and the ‘dbus daemon’ line which needs an accurate path to the dbus-daemon command in order to connect to the indexer. More information can be found on the Netatalk website.

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.