Linux als Apple-AFP Share mit Timemachine Support -> Backups über das LAN auf NAS/ Update 3 (Lion 10.7 & Timemachine)


Apple bietet mit der eingebauten Backup-Funktion Timemachine eine leicht zu bedienende und immer im Hintergrund laufende Backupsoftware an, die ohne weiteres Zutun die Daten des Mac’s sichert und diese im „Desasterfall“ (oder bei einer Neuinstallation) zur Verfügung stellt. Oder auch für den Fall, dass man mal eine Datei gelöscht hat, die man nicht löschen wollte.
Timemachine ist somit eine super Geschichte. Man schließt eine externe Festplatte über USB oder Firewire an seinen Mac an und sichert auf dieser automatisch alle Backups. Alternativ bietet Apple (natürlich) auch eine externe, über LAN & WLAN erreichbare Speicherplatte (Timecapsule) an. Auch schön, dann kann diese irgendwo stehen und muss nicht direkt mit dem Mac verbunden sein. Macht sich zum Beispiel im Wohnzimmer ganz gut, wenn dort nicht noch mehr Kabel durch die Gegend liegen.
Leider hat aber auch die Timecapsule wieder einen kleinen (monetären) Nachteil: Günstig ist die nicht. Dafür kann die halt noch eine ganze Menge mehr als „nur“ Daten speichern: Gigabit Switch, PPPoE Einwahl (man kann ein xDSL Modem anschließen und für DSL Einwahl nutzen), WLAN AP 2,4 und 5GHz und noch einiges mehr. Für einen Großteil sicherlich einfach zu viel, da ein Großteil eh schon mit vorhandener Hardware abgedeckt wird (man hat seinen Router, man braucht keinen Gigabit Switch). Also häufig einfach zu teuer und nicht individuell auf den eigenen Bedarf anpassbar….

Die Ausgangssituation:
Man hat sowieso schon einen Linux Rechner im lokalen Netz für Netzwerkdienste (NFS; Mail, Web usw.) laufen und besitzt eine „normale“ Netzwerkausstattung mit Router inkl. Switchports, Verkabelung oder WLAN. Auf dem Rechner befinden sich noch genug Gigabytes freier Festplattenplatz (sinnigerweise im RAID…) und könnten für einen weiteren im Netzwerk befindlichen Mac Rechner genutzt werden. Der Mac soll den Speicherplatz sowohl für Backups über Timemachine als auch als „Netzwerklaufwerk“ nutzen, zum Beispiel für den Austausch zwischen anderen nicht-Mac Rechnern und dem Mac selber. Auf diesem Rechner existieren NFS Freigaben für Linux Clients, die der Mac auch selber nutzen kann.

Problem
Leider ist es mit den NFS Freigaben nicht so einfach, diese auch für Timemachine Backups zu nutzen. NFS unterstützt eine Funktion nicht, die der Mac bei Timemachine einsetzt: Die Rückmeldung, ob die Daten nun auch wirklich geschrieben wurden. Somit kann man zwar Sparse-Bundles, die man auf sein NFS Share legt als Timemachine Ziel einrichten. Allerdings habe zumindest ich es nicht (trotz einiger Doku) hinbekommen, diese auch mit Timemachine zu nutzen. Jeder Versuch bricht nach einiger Zeit mit einer Fehlermeldung ab.
Schade. Damit fällt diese Variante leider flach. Eine andere Variante muss ran…

Die Idee:
Unterstützung für das Apple-File-Protokoll (AFP) auf dem Linux Rechner einrichten. Hierbei gleichzeitig den Timemachine Support für Freigaben anlegen. Die Freigabe für Timemachine auf dem Mac einrichten und hierdrauf seine Daten sichern. Gleichzeitig kann nun der von Timemachine genutzte Speicherplatz auf dem Linux Rechner über andere Mechanismen (Festplatten im RAID? Backup der Timemachine-Verzeichnisstruktur über Software-Backup? rsync?…) gesichert werden. Also hat man gleich auch noch von seinem Timemachine-Backup ein Backup. Ideal Daten-GAU-Paranoiker 😉

Die Durchführung
Wir müssen verschiedene Schritte erfüllen, um eine nutzbare AFP Integration in das Linux auf dem Rechner (wir nennen ihn mal Datenbunker) für den Mac (Datensklave) zu integrieren.

  • AFP Integration (netatalk) auf dem Datenbunker installieren
  • einen Bonjour-ähnlichen Dienst (dient der automatischen Bekanntgabe von Freigaben und Services im Mac-Netzwerk) installieren
  • Zugriffsrechte überlegen
  • Freigaben auf dem Datenbunker anlegen
  • Freigaben auf  dem Datensklaven einrichten
  • Bonjour-Dienst einrichten
  • Timemachine konfigurieren und testen

Schritt 1:
Wir richten einen Dienst ein, der AFP Unterstützung auf das Linux bringt. Hierzu eignet sich netatalk. Netatalk bringt eine AFP (Apple File Protocol) Integration für Linux und UNIX Derivate (xBSD) mit sich und unterstützt neben der Dateifreigabe zusätzlich noch  eine Druckerunterstützung.
Hierzu installieren wir über einen im Linux integrierten Paketmanager (apt, RPM o.ä.) oder aus den Sourcen selber mindestens Version 2.0.5. Da ich dieses hier exemplarisch an einem Ubuntu Linux erkläre gehe ich von einem apt-ähnlichen Paketmanager aus.
Über den Paketmanager wird das Paket netatalk installiert:
  sudo apt-get install netatalk
Damit wird die derzeit in den Repositorys verfügbare Version 2.0.5.3 inklusive aller Abhängigkeiten installiert. Aktuell seit dem 12. Juli 2010 im Source bei Sourceforge ist die Version 2.1.3. Wer also diese installieren möchte, der nimmt diese.
Alle nötigen Konfigurationsdateien werden unter /etc/netatalk abgelegt. Darin befinden sich nun ein paar Dateien, die uns später interessieren werden.
Unter (Ubuntu) Linux liegt in /etc/default eine Datei netatalk, in welcher ein paar Grundlagen definiert sind.

  #$ cat /etc/default/netatalk

AFPD_MAX_CLIENTS=50
ATALK_NAME=`/bin/hostname --short`
ATALK_MAC_CHARSET='MAC_ROMAN'
ATALK_UNIX_CHARSET='LOCALE'
AFPD_GUEST=nobody
ATALKD_RUN=no
PAPD_RUN=no
CNID_METAD_RUN=yes
AFPD_RUN=yes
TIMELORD_RUN=no
A2BOOT_RUN=no
ATALK_BGROUND=no
export ATALK_MAC_CHARSET
export ATALK_UNIX_CHARSET

Wichtig sind hier die Optionen CNID_METAD_RUN=yes. Diese Option dient der Umsetzung von HFS+ Dateiattributen auf ext3. Sollte man ruhig eingeschaltet lassen, da man auf dem Linux sicherlich kein HFS+ nutzt.
Zweite wichtige Option: AFPD_RUN=yes . Damit wird festgelegt, dass der AFPdaemon gestartet wird. Sollte man nun noch die Druckerunterstützung aktivieren wollen, so muss noch PAPD_RUN=no auf yes gesetzt werden.

// Update 31.07.2010 //
In der Datei /etc/netatalk/afpd.conf nehmen wir den default-Wert zur Authentifizierung am System.
Hierzu entfernen wir das Raute-Zeichen (‚#‘) am Anfang der Datei vor der Zeile:
  - -transall -uamlist uams_dhx.so,uams_dhx2.so -nosavepassword
Alternativ kann man hier weitere Optionen wie Authentifizierungsarten, Begrüßungsmeldung im Finder und Logging setzen. Leider ist das Logging kaputt, die Option -setuplog... kann man sich sparen…
// Update ENDE //

Schritt 2:
Installation und Einrichtung von Avahi, einem Dienst, der unter Linux den im LAN befindlichen Macs einen Bonjour-ähnlichen Service-Übersichtsdienst zur Verfügung stellt.
Avahi wird über

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

installiert. Automatisch werden im Verzeichnis /etc/avahi und dem Unterverzeichnis services/ Dateien für den Dienst angelegt.
Wir erstellen eine Datei /etc/avahi/services/afpd.services mit dem Inhalt:

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

Mit dieser Datei wird der Avahi Dienst angewiesen, den Macs in der Netzwerkübersicht einen Eintag mit dem Hostname des Linux-Hosts sowie einem Symbol anzuzeigen. Die Symbole lassen sich mit dem Wert model=XYZ in der Zeile definieren. Verschiedene Werte lassen sich einstellen, so dass unterschiedliche Symbole im Finder des Mac angezeigt werden. Mögliche Werte (vll. auch mehr?) sind: Xserve, Mac, MacBook, MacBookPro, Powerbook, MacBookAir, MacPro, AppleTV1,1, AirPort, Macmini und natürlich TimeCapsule.
Wir wählen, da wir quasi sowas wie eine TimeCapsule errichten, das entsprechende Icon über den Wert <txt-record>model=TimeCapsule</txt-record> aus. Auch, wenn es nicht ganz korrekt ist 😉
Der Übersichtlichkeit halber setzen wir noch Datenbunker %h. Damit wird nicht nur der Hostname des Linuxhosts sondern noch ein etwas erkärender Name angezeigt. Zudem kann es auch vorkommen, dass man mehrere AFP Shares von verschiedenen Hosts mounten möchte.

Letzte nötige Änderung für Avahi: Wir fügen an das Ende der mit hosts: beginnenden Zeile der Datei /etc/nsswitch.conf den Wert mdns an. Die Zeile sieht dann so aus:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 mdns

Schritt 3:
Freigaben einrichten: Die Freigaben werden über die Datei /etc/netatalk/AppleVolumes.default definiert. Hierdrin legen wir zwei Einträge an. Der erste Eintrag ist für Die Homeverzeichnisse der Benutzer, der zweite Eintrag für die Timemachine Freigabe. Man kann nach belieben weitere Einträge (z.B. für verschiedene Zwecke: MP3s, filme usw.) einfügen.
Freigaben der Homeverzeichnisse:
In der Datei /etc/netatalk/AppleVolumes.default ist die Zeile
    ~/ "Heimverzeichnisse auf Datenbunker"
zuständig. Wir verzichten auf weitere Einschränkungen (wie zum Beispiel die Angabe, welche Benutzer erlaubt sind; wir erlauben hiermit alles).

Zweite Zeile (alles in einer Zeile!) zur Freigabe für Timemachine:
    /freigabe/auf/host allow:erlaubterUser,@erlaubteGruppe Datenbunker dbpath:/var/AppleDB options:usedot,noadouble,nohex,upriv,tm

Kurze Erklärung zu den einzelnen Werten:
  /freigabe/auf/host: Hiermit geben wir auf auf dem Host das benannte Verzeichnis frei.
  erlaubterUser: Diesmal eine Beschränkung auf den Benutzer erlaubterUser, mehrere werden mit Kommata getrennt.
  @erlaubteGruppe: Wir beschränken den Zugriff auf die Gruppe
  Datenbunker: Wir geben einen Namen für das Share mit, wird im Finder bei der Anmeldung in der Übersicht zur Auswahl angezeigt.
  dbpath:/var/AppleDB: Pfad, wo auf dem Host die für AFP nötige File-DB hinterlegt wird.
  options:usedot,noadouble,nohex,upriv,tm: Default-Werte. Wichtig hier die Option tm. Damit wird das Share für Timemachine nutzbar gemacht.

Schritt 4:
Wir starten die zwei Dienste avahi-daemon und netatalk:

  sudo /etc/init.d/avahi-daemon start
  sudo /etc/init.d/netatalk start

Laufen die Dienste u.U. schon (ps -aux | grep avahi), so müssen die restartet werden. Aber das versteht sich ja von selbst 😉

Schritt 5:
Den Mac davon überzeugen, dass er das Share nun f. Timemachine nehmen soll.
Hierzu öffnen wir ein Terminal, geben dort defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1 ein. Fertig. Damit akzeptiert der Mac auch die nicht-wirklich-Apple-Timemachine-Shares.

Schritt 6:
Freigabe im Finder mounten, Timemachine einrichten, testen.
Im Finder „Mit Server verbinden“ auswählen. Als Hostname afp://IP_DES_LINUXHOSTs eingeben, verbinden auswählen. Man wird nach einem Benutzer und Passwort gefragt. Hier den Benutzernamen auf dem Linux und das dazugehörige Passwort eingeben. Der Finder zeigt beim Verbindeversuch nun die zwei oben definierten Freigaben zur Auswahl an. Auswählen, fertig.
Man ist nun mit dem Share verbunden und kann im Finder darauf zugreifen.
In der Timemachine-Konfiguration kann nun dieses Share als Timemachine-Backup-Ziel ausgewählt werden. Timemachine fängt nun an und legt auf dem Share die passenden Verzeichnisse f. das Backup an. Man kann auf dem Host einmal nachsehen und sieht, dass nun einige Verzeichnisse dazu gekommen sind. Das wichtigste ist wohl das Timemachine-Backup-Spare.
Das Verzeichnis heißt zum Beispiel Besitzer des Macs.sparsebundle. Zusätzlich werden noch weitere Verzeichnisse angelegt.

Fehlende Schreibrechte:
Wird der Zugriff im Finder verweigert und es kann nicht geschrieben werden (Fehlermeldung: Fehlende Rechte), einfach mal die Rechte der Freigabe /freigabe/auf/host auf dem Linux Host vergleichen. Vll. fehlen hier noch ein paar Rechte.

Fazit:
Für wenig Geld (und eigentlich auch recht wenig Aufwand) kann eine für den Mac erreichbare Speicherlösung aufgebaut werden. Natürlich ist es nicht so einfach wie eine Timecapsule (auspacken, anschließen und Apple-Voodo abwarten), aber sicherlich eine ideale Ergänzung im Netzwerk und mit Sicherheit ein Stück flexibler. Schließlich kann man auf dem Linux Host noch weitere Dienste einrichten und nutzen, die es auf der Timecapsule nicht gibt. Selbst mit einer (Neu-)Investition in eine große Festplatte und vll. einen Nettop als Linux-Host kommt man noch günstig(er) weg.
Was man nun noch mal testen müsste: Restore über das Share. Aber das kommt irgendwann später….


Update 17. August 2011/ Mac OS-X Lion
ACHTUNG Lion Benutzer!
Lion hat ein neues Problem hervorgebracht. Apple hat sich vorgenommen, ein paar Dinge am AFP Support zu ändern. Die derzeitige Netatalk Versionen aus den offiziellen Repositorys ist veraltet und noch nicht in der Lage, diese neuen Anforderungen zu erfüllen. D.h., dass ein Zugriff von Lion auf ein AFP Share mit Timemachine-Support auf Linux/ Netatalk nicht mehr möglich ist. Eine neue Netatalk Version ist wohl in der Mache. Nun muss man sich nur noch gedulden…


Update 27.August 2011/ Mac OS-X Lion

Nun hatte ich das Thema Timemachine auf meinem NAS auch einigermaßen vernachlässigt. Backup war nicht zwingend erforderlich, da es ein aktuelles über USB Platte gibt…
Trotzdem wollte ich das Thema nun mal wieder voran bringen. Zumal das doch umständlich ist, sein MacBookAir nur für’n Backup an eine USB Platte anzustecken. Total uncool 😉

Mittlerweile gibt es eine Netatalk 2.2beta4. Herunterladbar unter http://netatalk.sourceforge.net/ oder für Ubuntu 11.04 über fertige Binary-Pakete, die man sich schnell und einfach installieren kann.
Zu finden wären fertige .deb Pakete von Stefano Rivera (für i368 oder amd64). Diese können mit dpkg -i netatalk_2.2~beta4-0~ppa1_i386/amd64.deb installiert werden.

Nun noch die Datei /etc/avahi/services/afpd.services um ein paar Zeilen (MAC Adresse usw.) erweitert:

<?xml version=“1.0″ standalone=’no‘?><!–*-nxml-*–>
<!DOCTYPE service-group SYSTEM „avahi-service.dtd“>
<service-group>
<name replace-wildcards=“yes“>FreigabeName</name>
<service>
<type>_afpovertcp._tcp</type>
<port>548</port>
</service>
<service>
<type>_device-info._tcp</type>
<port>0</port>
<txt-record>model=TimeCapsule</txt-record>
<service>
<type>_adisk._tcp</type>
<port>9</port>
<txt-record>sys=waMA=00:11:22:33:44:55,adVF=0x100</txt-record>
<txt-record>dk0=adVF=0x83,adVN=FreigabeName</txt-record>
</service>
</service-group>

(Die oben fett geschriebenen Werte sind entsprechend anzupassen.
Die MAC Adresse kriegt man über ifconfig ethX heraus.
Ob man den Typ mit „model=“ ändern oder anpasst ist unwichtig und nicht zwingend erforderlich.)

Nun entweder alle nötigen Dienste neu starten oder einfach den Ubuntu Rechner komplett rebooten. Macht man zwar nicht, aber geht einfach am schnellsten…

Damit sollte nun der TimeMachine Support wieder funktionieren. Einfach auf dem MAC mit dem Share neu verbinden. Danach in den Einstellungen das Device für das TimeMachine Backup auswählen und fertig 😉

(Sollte es nicht gehen, bitte mal eine Info an mich. Ich hatte gleichzeitig noch an an anderen „Schrauben“ gedreht…)


Also rundum eine gute Geschichte. Schnell, leicht und flexibel. Und zudem günstig….

Weitere Infos/ Quellen
http://www.kde4.de/?page_id=389#InstallationAvahi
http://buffalo.nas-central.org/wiki/Time_Machine_%26_Time_Capsule_support_on_your_LinkStation
http://thomas.pelletier.im/2010/01/time-machine-freebsd-and-afp-are-on-a-little-boat/
http://www.micromux.com/2010/04/28/timemachine-backups-to-nfs/

Dieser Beitrag wurde unter Apple Mac & Co., Dokus und Tipps, Linux/ UNIX, Technikspielkram abgelegt und mit , , , , , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

6 Antworten zu Linux als Apple-AFP Share mit Timemachine Support -> Backups über das LAN auf NAS/ Update 3 (Lion 10.7 & Timemachine)

  1. Thomas Kilian sagt:

    Genial!

    Hatte schon einiges gegoogled aber immer kam das Problem, dass Time Machine irgend eine AFP-Funktion vermisst. Aber so hat es geklappt. Ich habe eine alte OpenSuse auf der ich kürzlich netatalk (statt nfs) installiert hatte. File service klappte schon, aber Time Machine ging nicht. Mit der oben beschriebenen Lösung klappte es auf Anhieb.

    Vielen Dank!

    P.S. Jetzt werde ich mir endlich auch mal einen Flattr-Account klicken…

  2. Chris sagt:

    Einfach perfekt.
    Musste zwar bei Fedora auf FC 15 upgraden, da Netatalk in der neuen
    Version die alte Fc13 nicht mehrunterstuetzte aber das war es allemal Wert.

    Mir ist da allerdings ein kleiner Fehler aufgefallen in der letzten XML.
    Du öffnest da einen neuen der vorher nicht geschlossen war.

    Und zwar genau hier:

    model=TimeCapsule
    <—– der fehlte

    _adisk._tcp

    Weiterhin muss man beachten, das die init-Routine bei Netatlk
    schon ein paar Parameter vor dem Start einstellt.

    Hier werden ggf. Werte die in der conf auskomentiert
    oder nicht definiert wurden gesetzt.

    In der XMl gab es auch noch einen umstrittenen Wert und zwar den hier:

    dk0=adVF=0×83

    In zig anderen dokus ist er mit dem Parameter definiert:
    dk0=adVF=0×81 <– 81

    81 Soll angeblich bedeuten:
    0×81=TimeMachine support, muss hinter jedes TimeMachine Volume

    Ich habs erstmal auf 81 belassen aber ich weis nicht ob es von bedeutung ist.

    Weiterhin hatte ich den Fehler beim Zugrif auf das Timemachine Share
    das der Finder sagte:

    Die urls vom Typ adisk werden nicht unterstutzt. Timemachine rennt aber denoch. Ich denke das liegt daran das Finder nicht direkt auf ein AFP Share zugreifen darf/kann was auch nicht verkehrt ist

    Alles in allem noch mal recht herzlichen dank für deine ausführliche
    Anleitung.

    Gruß Chris

  3. Chris sagt:

    Ups anscheinend hat er was mit Tags:

    Hier nochmal ohne:

    (…)
    Mir ist da allerdings ein kleiner Fehler aufgefallen in der letzten XML.
    Du öffnest da einen neuen der vorher nicht geschlossen war.

    Und zwar genau hier:

    „model=TimeCapsule“
    “ <—– der fehlte"
    "“
    „_adisk._tcp“

    Ich hoffe er stellt es jetzt richtig dar.

    Gruß Chris

    • rotzoll sagt:

      Danke dir. Werde ich mir mal ansehen. Hatte noch wg. anderer Dinge mit Netatalk gekämpft…..

      Wenn ich mir das angesehen habe, berichte ich.

      Danke.

      Gruß,
      Malte

  4. Leon Tropp sagt:

    Hallo ich habe alles ordnungsgemäß durchgeführt kann mich auch an meinem mac mit meinem Datenbunkerverbinden via afp jedoch bei time machine kann ich es nicht finden. Hab aber extra nochmal darauf geachtet dass ich den befehl im terminal eingegeben hab um auch nicht offieziele festplatten anzuzeigen.

    Jedoch sollte man ja in ihrem letzten update noch die mac adresse hinzufügen. ABer die mac adresse von was? Vom mac? oder vom linux Datenbuker Ubuntu?

  5. marcel sagt:

    ich hatte den spaß vor nem jahr oder so schonmal, wie oben beschrieben, zum laufen gebracht. die weihnachtslangeweile und mavericks hatten michveranlasst, mich der sache nochmal anzunehmen. inzw. ist ja netatalk 3.1 am start. habs mir eben mal übersetzt und auf einem ubuntu 12.04 installiert. das bringt ja schon alles mit, was man so braucht.
    ist also alles wesentlich einfacher geworden. ein glück.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert