Unter Ubuntu 10.4 TimeMachine verwenden

Ubuntu + Apple Fileserver + TimeMachine

Auf der Suche meinen Wohzimmer PC, der ja mit Ubuntu 8.10 und XBMC ausgestattet ist, noch ein wenig mehr Funktionalität zukommen zulassen, habe ich mir gedacht es wäre ja eigentlich ganz schön, wenn die Medien im Netz verfügbar wären.

Also habe ich überlegt, welche Protokolle ich dafür verweden kann.

  • NFS – Das Network File System ( Hier gibt es auch für Windows einen Client, der Schneller als Samba ist )
  • SMB – Der Klassiker Samba
  • AFP – Das Apple File Protocol

Da ich zu Hause ein gemichtes Netz habe, mit Linux und OS X clients, habe ich gedacht, es wäre gut, wenn ich jedem System sein bestes Protokoll zukommen lasse. Also für die Linuxe NFS und für die OS Xe AFP. Ich hatte schon mal vor Jahren etwas ähnliches gemacht, und konnte mich an den Namen AppleTalk erinnern.

Auf der Suche nach einem Tutorial bin ich auf den Blog von Matthias Kretschmann aufmerksam geworden, der ein ähnliches Vorhaben hatte und schon dokumentiert hat. Mit seiner Erlaubnis, habe ich sein Tutorial hier übersetzt. Gleichzeitig habe ich auch sichergestellt, dass es unter Ubuntu 8.10 läuft, er hat es mit Ubuntu 8.04 gemacht. Den Link zu seinem Blog und dem orginal Artikel findet ihr am Ende des Artikels.

Für das Howto braucht man unter Ubuntu die Konsole und das Rootkennwort, da die ganzen Kommandos mit Superuserrechten ausgeführt werden.

Ubuntu als Appple Fileserver und Timemachine Volume

  1. Installation von Netatalk einer OpenSource Implementierung von AFP
  2. Einrichten von Netatalk
  3. Einrichten der Freigaben ( und der TimeMachine Freigabe )
  4. Installation von Avahi ( OpenSource Implementierung des Bonjour Dienstes )
  5. Einrichten von Avahi
  6. Configuration von TimeMachine
  7. Danksagung

Netatalk Homepage auf SourceforgeNetatalk ist eine OpenSource Implementierung des AFP – Protokolls. Damit man mit OSX darauf zugreifen kann, wird die SSL Verschlüsselung benötigt. Das Standardpaket von Ubuntu hat dieses Feature leider nicht aktiviert. Darum müssen wir uns ein eigenes Paket aus den Quellen bauen.
Dazu ist es notwendig, dass man unter Administration->Software Quellen die Entwicklungsquellen aktiviert hat. Wenn dies nicht schon der Fall ist ;-) .

Jetzt brauchen wir die Konsole und geben folgende Befehle ein:

sudo apt-get build-dep netatalk
sudo apt-get install cracklib2-dev fakeroot libssl-dev
sudo apt-get source netatalk
cd netatalk-2*

Mit diesen Befehlen solltet Ihr alle notwendigen Tools und Entwicklungsabhängigkeiten für Netatalk installiert haben. Die letzte Zeile wechselt in das Verzeichnis netatalk-2*, wobei “*” die aktuell verwendete Versionsnummer ist.

Als nächstes bauen wir das Netatalk Paket mit zusammen mit der SSL Verschlüsselung. Dazu giben wir folgende Zeile in die Konsole ein:

sudo DEB_BUILD_OPTIONS=ssl dpkg-buildpackage -rfakeroot

Jetzt kommt es auf deinen Rechner an wie lange es dauert. Es kommen einige Konsolenausgaben.
Wenn alles durchgelaufen ist und wir keine Fehlermeldung (Error …..) erhalten habt könnt, ihr mit der Installation des erzeugten .deb Paketes weitermachen. Dazu geben wir folgendes auf der Konsole ein:

sudo dpkg -i ~/netatalk_2*.deb

Damit Ubuntu nicht unser neues Paket überschreibt, falls es an dem offiziellen Paket mal ein Update gibt, teilen wir das dem Paketmanager noch mit folgendem Kommando auf der Konsole mit

echo "netatalk hold" | sudo dpkg --set-selections

So ist sicher gestellt, dass unsere eigene Version beibehalten bleibt und von den Softwareupdates via apt-get und Synaptic ausgeschlossen wird.

Als erstes sollen wir in diesem Schritt alle Dienste deaktivieren die wir nicht brauchen. Das beschleunigt den Start des Netatalk Dienstes deutlich. Um dies zu tun geben wir folgendes in der Konsole ein:

sudo gedit /etc/default/netatalk

Darauf hin startet der Editor gedit mit root Rechten, die brauchen wir um in den Ordner /etc/default  schreiben zu dürfen. Springe jetzt in der Datei zu der Stelle  #Set which daemons to run und ersetzte die Standardwerte mit den folgenden:

ATALKD_RUN=no
PAPD_RUN=no
CNID_METAD_RUN=yes
AFPD_RUN=yes
TIMELORD_RUN=no
A2BOOT_RUN=no

Sollten wir einen Drucker, der an der Ubuntu Kiste hängt, verfügbar machen wollen müssen wir hier den PAPD_RUN auf yes stellen. Der CNID_METAD_RUN Deamon ist hier für uns der wichtigste Dienst. Er ist der Vermittler zwischen den beiden eingesetzten Dateisystemen EXT3 ( bei mir ) für Linux und HFS+ für den Mac. Wenn er nicht läuft, gehen diverse Metainformationen vom HFS+ verloren. Solltest du noch Mac OS < X Kisten ankoppeln wollen solltest du auch den ATALKD_RUN auf yes stellen. Er startet den AppleTalk Dienst, der von ältenren Mac Systemen verwendet wird.
Wenn wir nun die notwendigen Änderungen in der Datei gemacht haben können wir abspeichern ( Stgr + s ) und den Editor zu machen. Als nächstes nehmen wir uns die Hauptkonfigurationsdatei vor und öffnen diese, wie zuvor in gedit mit Rootrechten und geben dazu folgenden Befehl ein:

sudo gedit /etc/netatalk/afpd.conf

Nun gehen wir zum Ende der Datei und ersetzten, falls dort schon etwas in diese Richtung steht, das Vorhandene mit folgendem:

- -transall -uamlist uams_randnum.so,uams_dhx.so -nosavepassword -advertise_ssh

Sollte dort noch nichts stehen, fügen wir die obige Zeile ein und achten darauf, zum Schluß noch eine Leerzeile einzufügen. Auch diese Datei speichern wir ab ( Strg +s ) und machen den Editor wieder zu.

Jetzt müssen wir dem AFP Dienst noch mitteilen welche Freigaben wir ins Netz stellen wollen. Die Freigaben sind in der Datei AppleVolumes.default definiert. Diese finden wir im Ordner /etc/netatalk. Dazu verwenden wir wieder den Editor gedit und starten diesen mit foldendem Befehl aus einer Konsole:

sudo gedit /etc/netatalk/AppleVolumes.default

Nun gehen wir ans Ende der Datei und legen unsere Freigaben fest. Folgende Zeile gibt jedem Benutzer sein Heimatverzeichnis frei. Achtet darauf, das ihr username1,username2 mit den Linuxusernamen eures Systems ersetzt.

~/ "$u" allow:username1,username2 cnidscheme:cdb

Da wir den Dienst im Netzwerk auch als TimeMachine Backupvolume verwenden möchten legen wir auch dessen Freigabe in der Datei an. Achtet darauf, das bei der Anweisung in eurer AppleVolumes.default kein Zeilenumbruch gamacht wird.

/home/username/TimeMachine TimeMachine allow:username1,username2 cnidscheme:cdb options:usedots,upriv

Die Option usedots wird benötigt, wenn wir versteckte Datein haben möchten. Diese fangen mit einem“.” an. Sollten wir diese Option hier nicht setzten, können wir mit versteckten Dateien und deren Dateinamen Schwierigkeiten bekommen. Die Option upriv schaltet das AFP3 Protokoll mit erweiterten Unix Rechten frei. Das macht aber nur Sinn wenn wir nur Leoparden im Netz haben. Sollten wir in diesem Netz auch Tiger haben, also ein Netzwerk mit unterschiedlichen Mac OS Variaten dann verwenden wir nur die Option usedots. Die Zeile sieht dann so aus:

/home/username/TimeMachine TimeMachine allow:username1,username2 cnidscheme:cdb options:usedots

Wenn wir schließlich Wert auf die Stabilität legen und den Datendurchsatz vernachlässigen können schalten wir noch das dbd cnidscheme (cnidscheme:dbd) dazu.

Nun speichern wir die Datei ab (Strg +s ) und machen gedit zu. Natürlich kannst du in dieser Datei weitere Freigaben definieren. Nach jeder Änderung an dieser Datei muss der Netatalk Dienst neu gestartet werden, damit er die Änderungen auch weiterreichen kann. Das machen wir auf der Konsole mit dem Befehl

sudo /etc/init.d/netatalk restart

Obwohl wir jetzt einen voll funktionalen Apple Fileserver haben wird er uns im Finder, dem Mac OS Datei Manager, noch nicht angezeigt. Dazu benötigen wir einen weiteren Dienst. Unter Mac OS übernimmt diese Aufgabe der Bonjour Dienst. Er lauscht auf dem Netzwerk nach Servern und Clients und deren freigegebenen Diensten, damit man schnell und einfach darauf zugreifen kann. Für Linux gibt dafür es eine OpenSource implementierung namens Avahi

Bonjour IconDer Avahi Dienst wird all unsere Freigaben im lokalen Netzwerk publizieren. Genauso wie es auch der Bonjour Dienst machen würde. Dazu müssen wir den Dienst natürlich noch Installieren und konfigurieren. Dazu brauchen wir den Avahi Deamon und diemDNS Bibliothek. Wenn wir die beiden Dinge richtig konfiguriert haben, werden alle MACs im Netzwerk die Ubuntu Kiste nach Diensten durchsuchen und im Finderautomatisch anzeigen.

Die benötigten Pakete installieren wir über die Konsole mit den Befehlen

sudo apt-get install avahi-daemon
sudo apt-get install libnss-mdns

Damit alles vernünftig läuft müssen wir die nsswitch.conf verändern. Die Datei finden wir im Ordner /etc. Wir machen dazu die Datei mit gedit auf:

sudo gedit /etc/nsswitch.conf

Am Ende der Zeile die mit dem Wort hosts: beginnt fügen wir noch mdns hinzu. Die Zeile sollte dann so aussehen:

hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 mdns

Jeztz speichern wir die Datei (Strg + s) und machen gedit wieder zu.

Bonjour IconAls nächstes müssen wir dem Avahi Dienst noch beibringen, welche Services er im Netzwerk publizieren soll. In unserem Fall möchten wir nur den AFP Service bereit stellen. Dies machen wir mit einer kleinen XML Datei. Für jeden Service den wir bereitstellen möchten ist eine eigene  XML Datei im Ordner /etc/avahi/serviceszuständig. Wir erstellen also die Datei /etc/avahi/services/afpd.service mit dem Befehl

sudo gedit /etc/avahi/services/afpd.service

Es sollte sich nun gedit mit einer leeren Seite öffnen in die wir folgendes einfügen

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_afpovertcp._tcp</type>
<port>548</port>
</service>
<service>
<type>_device-info._tcp</type>
<port>0</port>
<txt-record>model=Xserve</txt-record>
</service>
</service-group>

Die Zeile mit <txt-record>model=Xserve</txt-record> dient dazu dem Service ein Icon zu verpassen. Mit der eingestelleten Option wird die Ubuntu Kiste mit dem Xserve Icon im Finder dargestellt. Folgende Werte sind für model=XXX zulässig
RackMac (das gleiche wie Xserve), PowerBook, PowerMac, Macmini, iMac, MacBook, MacBookPro, MacBookAir, MacPro, AppleTV1,1, AirPort.

Jetzt speichern wir die Datei ab ( Strg +s ) und machen gedit zu. Wie auch im vorherigen Fall müssen wir den Dienst neu starten, damit unsere Änderungen wirksam werden.

sudo /etc/init.d/avahi-daemon restart

Jetzt haben wir den Avahi Dienst konfiguriert, was zur Folge hat, dass die Ubuntu Kiste im ganzen Netzwerk mit ihrer Dateifreigabe publiziert wird. Nach einiger Zeit sollte diese im Finder automatisch auftauchen. Bei Mac OS 10.4 sollte sie unter Netzwerk auftauchen.

Jetzt sollten wir die Verbindung zur Ubuntu Kiste prüfen und klicken dazu im Finder auf diese. Danach klicken wir auf “Verbinden als” im oberen Bereich des Finders und geben die Logindaten eines Nutzers auf der Linux Kiste an. Jetzt sollten wir im Finder die Freigaben des Home-Ordners und die der TimeMachine sehen und können veruschen ob der Datentransfer funktioniert.

TimeMachine IconAuf der Mac Seite müssen wir eine versteckte Option für die Anwendung TimeMachine aktivieren, denn sonst würde unsere Freigabe nicht im Konfigurationsdialog bei der Volume Auswahl zur Verfügung stehen. Dazu brauchen wir auf dem Mac OS X eine Konsole, die wird hier Terminal genannt und befindet sich unterProgramme/Dienstprogramme. Wir müssen hier nur eine Zeile einfügen und können das Terminel danach wieder schließen.

defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

Zuerst mounten wir das TimeMachine Image, bevor wir es als Backuplaufwerk in den Einstellungen von TimeMachine auswählen. TimeMachine wird innerhalb des Images ein weiteres Image anlegen und dieses mounten, da unsere Ubuntu Kiste das HFS+ Protokoll nicht nativ unterstützt und TimeMachine alle Dateiattribute wie Besitzer oder das Erstellungsdatum vorhällt.

Wenn das erste Backup mit TimeMachine gemacht wurde, können wir die gemounteten Freigaben wieder auswerfen. Beim nächsten Start des TimeMachine Backups wird nur das von TimeMachine erstelle Image automatisch eingebunden.

Herzlichen dank an KDE4.de für die Übersetzung!

An dieser Stelle möchte ich mich gerne bei Matthias Kretschmann bedanken, er hat dieses Howto in englisch auf seinem Blog bereitgestellt. Er hat auch für den Ubuntu Server eigene Icons erstellt, die er freundlicherweise dort zum Download anbietet. Sollte euch der Beitrag gefallen, dann kauft ihm einen Kaffee, so hab ich auch gemacht