Netatalk bringt von Haus aus keine Verwaltungsoberfläche mit. Administriert wird über drei Hebel: die Konfigurationsdateien, die Dienststeuerung und eine Handvoll Kommandozeilenwerkzeuge. Welche davon überhaupt existieren, hängt allerdings von der Hauptversion ab — und zwar so drastisch, dass eine Anleitung für die eine Reihe auf der anderen komplett ins Leere läuft. Diese Referenz stellt beide nebeneinander: die 2.2er-Reihe, wie sie auf dem ODROID dieses Projekts läuft, und die aktuelle 4er-Reihe.
Erste Frage: welche Version?
Alles Weitere hängt an dieser Antwort. Der Daemon beantwortet sie selbst:
afpd -V 2>&1 | head -20
Das 2>&1 ist kein Zierrat — zumindest netatalk 2.2 schreibt die Versionsausgabe auf stderr, ein schlichtes afpd -V | head zeigt deshalb nichts. Die Ausgabe nennt neben der Version auch die einkompilierten AFP-Protokollversionen, ob DDP (AppleTalk) an Bord ist, welche CNID-Backends verfügbar sind und — am nützlichsten — die tatsächlich verwendeten Pfade der Konfigurationsdateien.
Ergänzend auf Debian/Ubuntu: dpkg -l | grep netatalk. Auf alten Systemen gibt es apt noch nicht; apt-cache policy netatalk tut es auch.
flowchart TD
A["afpd -V"] --> B{Hauptversion?}
B -->|"1.x / 2.x"| C["afpd.conf + AppleVolumes.default
AppleTalk an Bord"]
B -->|"3.0 bis 3.2"| D["afp.conf
kein AppleTalk"]
B -->|"ab 4.0"| E["afp.conf
AppleTalk optional zurück"]
Der Bruch bei 3.0 — und die Rolle rückwärts bei 4.0
Netatalk 3.0 hat 2012 zwei Dinge auf einmal getan: die vielen Konfigurationsdateien in eine einzige INI-Datei zusammengefasst und den kompletten AppleTalk-Unterbau entfernt. Mit ihm verschwanden die Daemons atalkd, papd, timelord und a2boot samt Werkzeugkasten sowie die alten AFP-Versionen 1.1 bis 2.1 — also genau das, was ein Mac mit System 6 oder 7 braucht.
Netatalk 4.0 hat diese Entscheidung im September 2024 teilweise zurückgenommen. Erklärtes Ziel der 4er-Reihe ist eine einzige Suite, die vom Apple //e bis zum aktuellen macOS bedient. AppleTalk ist dabei nicht automatisch aktiv, sondern muss zweifach freigeschaltet werden: das Paket mit -Dwith-appletalk=true gebaut und in der afp.conf die Option appletalk = yes gesetzt. Der atalkd wird dann vor dem netatalk-Dienst gestartet, sonst steht die Transportschicht beim Start des Fileservers nicht bereit.
Praktische Konsequenz: Wer auf 2.2 sitzt und AppleTalk nutzt, ist nicht auf einer Sackgasse — der Weg nach 4.x existiert wieder. Er führt allerdings über eine vollständige Neuformulierung der Konfiguration.
| Reihe | Konfiguration | AppleTalk | Dienststeuerung |
|---|---|---|---|
| 1.x / 2.x | afpd.conf, AppleVolumes.default, netatalk.conf | eingebaut (atalkd, papd, timelord, a2boot) | Daemons einzeln per Initskript |
| 3.0 bis 3.2 | afp.conf (INI) | vollständig entfernt | netatalk als Service-Controller |
| ab 4.0 | afp.conf (INI) | optional wieder verfügbar | atalkd, danach netatalk |
Konfiguration in der 2.2er-Reihe
| Datei | Zuständig für |
|---|---|
/etc/netatalk/afpd.conf | Serveroptionen: UAM-Liste, Gastkonto, Transport, Logging |
/etc/netatalk/AppleVolumes.default | Volumes, eine Zeile je Freigabe |
/etc/netatalk/AppleVolumes.system | Endung zu Type/Creator für Classic-Clients |
/etc/netatalk/atalkd.conf | AppleTalk: Interfaces, Netznummern, Zonen |
/etc/netatalk/papd.conf | Druckerwarteschlangen über PAP |
/etc/default/netatalk | welche Daemons das Initskript überhaupt startet |
Ein Volume ist hier eine Zeile aus Pfad, Name und optionalen Feldern:
/srv/AppleShare AppleShare allow:@staff options:upriv,usedots
Der lohnendste Fallstrick dieser Reihe: Wenn im Prozessbaum Startparameter auftauchen, die aus /etc/default/netatalk stammen, heißt das nicht, dass sie gewinnen. Die Gegenprobe mit asip-status.pl gegen den eigenen Server zeigt, was der Daemon tatsächlich anbietet — und dort setzen sich die Angaben aus afpd.conf durch. Wer den Gastzugang abschalten will, muss deshalb dort ansetzen. Der ausführliche Nachweis steht im Projektlog zu diesem Server.
Konfiguration ab 3.0
Eine Datei im INI-Stil, ähnlich der smb.conf von Samba: /etc/netatalk/afp.conf (in manchen Paketen direkt /etc/afp.conf). Der Abschnitt [Global] trägt die Servereinstellungen, [Homes] die Heimatverzeichnisse, jeder andere Abschnittsname ist ein Volume. Verschachtelte Volumes sind nicht erlaubt und werden beim Start mit einer Warnung übersprungen.
[Global]
log level = default:info
log file = /var/log/netatalk.log
hosts allow = 192.168.1.0/24
appletalk = yes
[Homes]
basedir regex = /home
[Daten]
path = /srv/daten
valid users = @staff
[TimeMachine]
path = /srv/tm
time machine = yes
vol size limit = 1000000
Die Typ/Creator-Zuordnungen leben getrennt in der extmap.conf und sind dort — anders als in 2.x — standardmäßig auskommentiert.
Wo die alten Dateien geblieben sind
| 2.x | ab 3.0 |
|---|---|
afpd.conf | in afp.conf aufgegangen |
AppleVolumes.default | in afp.conf aufgegangen |
AppleVolumes.system | extmap.conf |
afp_ldap.conf | in afp.conf aufgegangen |
netatalk.conf bzw. /etc/default/netatalk | entfallen, Daemons steuert netatalk(8) |
~/.AppleVolumes | entfallen |
Umbenannte Optionen, Auswahl
Fast alle Optionsnamen haben sich geändert. Die Sammelstelle ist die Upgrading-Seite des Handbuchs; die Kandidaten, die am häufigsten stolpern lassen:
| alt | neu | Anmerkung |
|---|---|---|
-uamlist | uam list | Standard ist heute nur noch uams_dhx2.so |
-ddp | appletalk | in 4.0.0 eingeführt, Standard no |
AFPD_MAX_CLIENTS | max connections | Standard von 20 auf 200 gestiegen |
allow: / deny: | valid users / invalid users | pro Volume |
options:tm | time machine | pro Volume |
options:upriv | unix priv | seit 3.0 standardmäßig an |
dbpath: | vol dbpath | CNID-Datenbanken liegen jetzt zentral unter /var/lib |
-setuplog | log level und log file | getrennte Optionen |
zeroconf name | server name | seit 4.2.0, gilt nun auch für Classic-Clients |
Der TCP-Transport lässt sich ab 3.0 nicht mehr abschalten — -notcp und -transall haben keine Entsprechung mehr. Wer AFP über TCP auf einem reinen AppleTalk-Server loswerden will, braucht dort einen Paketfilter statt einer Option.
Dienste steuern
Ab 3.0 gibt es einen Service-Controller: der Daemon netatalk startet und überwacht afpd und cnid_metad. Verwaltet wird also genau eine Unit:
systemctl restart netatalk
systemctl status netatalk
journalctl -u netatalk -f
Ist AppleTalk im Spiel, kommt atalkd als eigener Dienst davor. In 2.x steuert stattdessen /etc/default/netatalk über die Schalter AFPD_RUN, CNID_METAD_RUN, ATALKD_RUN, PAPD_RUN, TIMELORD_RUN und A2BOOT_RUN, welche Daemons das Initskript hochfährt.
Eine Regel gilt über alle Versionen: einzelne afpd-Prozesse niemals mit SIGKILL beenden. Das kann die CNID-Datenbank in einem inkonsistenten Zustand zurücklassen. Sauber ist SIGTERM; an den Elternprozess gesendet, reicht das Signal an alle Kinder durch. Für das Neuladen der Konfiguration unter Beibehaltung offener Sitzungen ist kill -HUP vorgesehen.
Werkzeugkasten
| Werkzeug | Zweck | Verfügbar |
|---|---|---|
asip-status | fragt den Server über AFP ab: Servername, angebotene AFP-Versionen, UAMs, Flags — die verlässlichste Kontrolle, was wirklich aktiv ist | alle Reihen, in 2.x als asip-status.pl |
afpstats | verbundene Sitzungen und Laufzeitstatistiken | ab 3.0; bis 4.4 über D-Bus, ab 4.5 über einen Unix-Socket |
macusers | Vorgänger von afpstats, listet angemeldete Benutzer | 2.x |
dbd | CNID-Datenbank prüfen, reparieren, konvertieren | alle Reihen |
afppasswd | Passwortdatei für das RandNum-Verfahren | alle Reihen |
addump / apple_dump | AppleDouble-Metadaten einer Datei anzeigen | alle Reihen |
nbplkup | NBP-Namensauflösung: wer meldet sich im AppleTalk-Netz an | 2.x und ab 4.0 |
aecho | Ping über AppleTalk | 2.x und ab 4.0 |
getzones | vorhandene AppleTalk-Zonen abfragen | 2.x und ab 4.0 |
pap, papstatus | Druckaufträge und Druckerstatus über PAP | 2.x und ab 4.0 |
macipgw | MacIP-Gateway: TCP/IP für LocalTalk-Macs | ab 4.0 |
fce_listen | Dateisystem-Ereignisse mitlesen, gut zum Debuggen | ab 3.0 |
afp_lantest, afp_speedtest | Durchsatz- und Verhaltensmessung gegen den eigenen Server | ab 3.0 |
CNID-Backends
Die CNID-Datenbank bildet Apples File-IDs auf Unix-Dateien ab; ist sie beschädigt, verhält sich der Finder unerklärlich. Verfügbar sind je nach Bau: dbd (Berkeley DB, jahrzehntelang Standard, inzwischen als veraltet markiert), sqlite (seit 4.3, ohne externen Daemon), mysql (für große Installationen mit eigener Datenbank) sowie in 2.x zusätzlich last und tdb. Welche Ihr Build kennt, zeigt wieder afpd -V.
Ein wichtiger Ortswechsel: In 2.x lagen die Datenbanken im jeweiligen Volume-Verzeichnis, seit 3.0 zentral unter dem Zustandsverzeichnis des Systems, üblicherweise /var/lib/netatalk/CNID. Wer nach dem Upgrade alte .AppleDB-Ordner im Volume findet, sieht Reste.
Reparatur eines Volumes im laufenden Betrieb vermeiden; sauber ist Dienst stoppen, dann:
dbd -r /srv/daten
Weboberfläche
Es gibt ein offizielles Webmin-Modul. Es liest und schreibt direkt die afp.conf; nach jeder Änderung muss der Dienst neu geladen werden. Seit 4.0 wird es mit Netatalk zusammen ausgeliefert, für 3.x lässt es sich aus dem eigenen Repository nachinstallieren.
Die Einschränkung ist offensichtlich: Ohne afp.conf kein Modul. Für einen 2.2er-Server gibt es kein fertiges Frontend — das ist der Grund, warum in diesem Projekt ein eigenes CGI-Werkzeug entstanden ist, das die zeilenweise AppleVolumes.default bearbeitet und dabei mit einem Netscape Navigator 3 als Client auskommt.
NAS-Distributionen bringen eigene Oberflächen mit, die ihrerseits nur eine Teilmenge der Optionen abdecken und den Rest über ein Freitextfeld in die Konfiguration durchreichen.
Sicherheit im Blick behalten
Drei Punkte, die bei alten Installationen regelmäßig offenstehen:
- Gastzugang. Taucht in der
asip-status-Ausgabe unter den UAMsNo User Authentauf, kann jeder ohne Anmeldung mounten. Zugriffslisten pro Volume sind dann Zäune mit offenem Tor daneben. - CVE-2018-1160. Netatalk vor 3.1.12 hat einen Out-of-bounds-Write im DSI-Pfad, ausnutzbar ohne Authentifizierung, mit Root-Rechten, CVSS 9.8. Betroffen ist AFP über TCP — auf reinen AppleTalk-Servern liegt der verwundbare Pfad brach, offen steht der Socket trotzdem.
- Herkunft einschränken.
hosts allowin derafp.confbeziehungsweise TCP-Wrapper in 2.x kosten nichts und begrenzen den Schaden.
Merksätze
- Zuerst die Version klären, dann die Anleitung suchen — nicht umgekehrt.
afpd -Vschreibt auf stderr.- In 2.2 gewinnt
afpd.confgegen/etc/default/netatalk. asip-statussagt, was der Server anbietet; der Prozessbaum sagt nur, womit er gestartet wurde.SIGTERM, nieSIGKILL.
Quellen
- Netatalk Manual — Configuration: https://netatalk.io/manual/en/Configuration.html
- Netatalk Manual — Upgrading (Stand 4.5.1): https://netatalk.io/manual/en/Upgrading.html
- Netatalk Release Notes 4.0.0: https://netatalk.io/4.0/ReleaseNotes4.0.0
- afpd(8) Manpage: https://netatalk.io/manual/en/afpd.8.html
- afp.conf(5) Manpage: https://netatalk.io/manual/en/afp.conf.5.html
- Netatalk Webmin-Modul: https://github.com/Netatalk/netatalk-webmin
