Netatalk

If you don’t speak German but would like to work on this project, please let me know by adding a comment in the forum.

Stand der Dinge

Netatalk ist im Beta-Test. Bitte Probleme und Anregungen im Bugtracker Github Issues erfassen, zuerst aber unbedingt “Konfiguration” weiter unten lesen!

Wer bereits eine Netatalk-Version von vor dem 4.12.2010 installiert hat, muss zusätzlich folgende Kommandos ausführen, um libdb zu patchen und neu zu bauen:

cd freetz/trunk
sed -i 's%enable-smallbuild%enable-smallbuild\n$(PKG)_CONFIGURE_OPTIONS += --with-mutex=MIPS/gcc-assembly%' make/libs/db.mk
make db-dirclean

Leute

Im Moment schrauben nur ich (Sven) und dg1kjd (Jens) an diesen Paketen. Um mit mir Kontakt aufzuznehmen, schreibe eine Reply ins Forum, schicke mir auf Github eine Message an “svoop” oder suche mich auf IRC (nick: “svoop”).

Installation

Zuerst sollte das Git Repo geforked werden:
http://github.com/svoop/freetz-netatalk

Danach die Entwicklungsumgebung erzeugen. Anstelle von {USERNAME} sollte der eigene Github-Username eingesetzt werden:

mkdir freetz
cd freetz
svn checkout http://svn.freetz.org/trunk
git clone git@github.com:{USERNAME}/freetz-netatalk.git netatalk
ln -s ../../netatalk trunk/make/
sed -i 's%ncftp/Config.in%ncftp/Config.in\nsource make/netatalk/Config.in%' trunk/make/Config.in
sed -i 's%enable-smallbuild%enable-smallbuild\n$(PKG)_CONFIGURE_OPTIONS += --with-mutex=MIPS/gcc-assembly%' trunk/make/libs/db.mk
cd trunk
make menuconfig

Das Netatalk-Paket befindet sich hier:

FREETZ_PACKAGE_NETATALK
  Package selection -> Testing -> Netatalk

Konfiguration

Netatalk und andere Protokolle

AFP (Netatalk) unterscheidet sich fundamental von SMB (Samba)! Der wichtigste Unterschied besteht darin, dass AFP zum Referenzieren der Dateien und Verzeichnisse nicht die Pfade, sondern eine in gewisser Weise redundante CNID (Catalog Node ID) benutzt. Für das Mapping zwischen Pfad und CNID wird eine Datenbank im Verzeichnis .AppleDB angelegt.

Diese Datenbank ist natürlich eine potentielle Fehlerquelle. Sehr schlecht ist Beispielsweise ein plötzlicher Tod des Datenbank-Daemons cnid_dbd mit SIGKILL oder durch einen Stromausfall. In diesem Fall muss die Datenbank vor dem nächsten Mounten unbedingt mit dbd repariert werden. Der Prozess darf nur mit SIGTERM abgeschossen werden.

Eine weitere Nebenwirkung ist, dass alle Änderungen am Filesystem via AFP geschehen müssen, d.h. auf ein AFP-Share darf mit anderen Methoden (SMB, SFTP, Shell etc) nicht geschrieben werden, denn nur AFP aktualisiert die CNID Datenbank. Wird z.B. mit SMB eine neue Datei erstellt, ist sie für AFP nicht sichtbar. Künftige Versionen von Netatalk werden möglicherweise einen Filesystem-Crawler beinhalten.

Volsizelimit

Damit die CNID Datenbank immer geschrieben werden kann, ist es wichtig, dass die von Netatalk gemeldete Kapazität des Shares eine Ecke geringer ist als die physikalische Kapazität. Die gemeldete Kapazität kann man mit volsizelimit:100000 definieren.

TimeMachine

Wer ein Share als TimeMachine-Medium benutzen möchte, sollte sich die Option options:tm näher anschauen und das Volsizelimit nicht zu knapp setzen.

Shell

Wer lieber in der Shell herumprobiert, muss einmal Netatalk über das Webinterface starten und stoppen. Dadurch werden die folgenden Konfigurationsdateien angelegt und können danach direkt bearbeitet werden:

  • /mod/etc/netatalk/afpd.conf
  • /mod/etc/netatalk/AppleVolumes.default

Starten der Daemons:

pre.
cnid_metad -s /sbin/cnid_dbd -l LOG_INFO
afpd -F /mod/etc/netatalk/afpd.conf -f /mod/etc/netatalk/AppleVolumes.default -P /var/run/afpd.pid

Stoppen der Daemons:

pre.
killall -SIGTERM afpd
killall -SIGTERM cnid_metad

Links