Netatalk

出自 Arch Linux 中文维基

Netatalk 是一個 Apple Filing Protocol (AFP) 的開源實現。它為 Unix 風格系統提供了與 Macintosh 文件共享的功能。

安裝[編輯 | 編輯原始碼]

安裝 netatalkAUR 包。

配置[編輯 | 編輯原始碼]

使用 systemd 來啟用或啟動 netatalk.service

除了一併安裝的配置文件(升級的時候會檢查這些文件),另外 Netatalk 可能會生成 /etc/netatalk/afp_signature.conf/var/state/netatalk/afp_signature.conf,來保存系統的 UUID;/etc/netatalk/afp_voluuid.conf/var/state/netatalk/afp_voluuid.conf 來保存 Time Machine 的 UUID。為了消除本地網絡的服務廣播的歧義,移除包的時候可能並不會刪除這些文件。

Netatalk 3.x 只使用一個配置文件 /etc/afp.conf。 查看 man afp.conf 來配置該文件(需要進程擁有 afpd.log 的寫權限):

/etc/afp.conf
[Global]
 mimic model = TimeCapsule6,106
 log level = default:warn
 log file = /var/log/afpd.log
 hosts allow = 192.168.1.0/16

[Homes]
 basedir regex = /home

[TimeMachine]
 path = /mnt/timemachine
 valid users = tmuser
 time machine = yes

[Shared Media]
 path = /srv/share/media
 valid users = joe sam
警吿: 不要在 afp.conf 裏面使用符號連結(symbolic link)

來客訪問[編輯 | 編輯原始碼]

如果要讓來客 只讀 地訪問你的共享文件夾,在 [Global] 這一行的下面加入以下片段:

/etc/afp.conf
[Global]
uam list = uams_guest.so

要讓來客擁有 讀/寫 權限,首先要像上面一樣建立只讀權限,再添加下面這一行到指定的分享片段:

/etc/afp.conf
[Your Share]
path = /mnt/public/share
rwlist = nobody

IP Tables[編輯 | 編輯原始碼]

如果你使用 iptables 包來做防火牆,可能需要加入下面幾行:(如果需要的話,可以用用 -A 來 替換掉 -I)

Bonjour/Zeroconf
iptables -I INPUT -p udp --dport mdns -d 224.0.0.251 -j ACCEPT
iptables -I OUTPUT -p udp --dport mdns -d 224.0.0.251 -j ACCEPT
AFP
iptables -I INPUT -p tcp --dport afpovertcp -j ACCEPT
SLP
iptables -I INPUT -p tcp --dport slp -j ACCEPT
iptables -I OUTPUT -p tcp --dport slp -j ACCEPT
iptables -I INPUT -p udp --dport slp -j ACCEPT
iptables -I OUTPUT -p udp --dport slp -j ACCEPT
AppleTalk
iptables -I INPUT -p tcp -m multiport --dport at-rtmp,at-nbp,at-echo,at-zis -j ACCEPT
iptables -I OUTPUT -p tcp -m multiport --dport at-rtmp,at-nbp,at-echo,at-zis -j ACCEPT

開啟 Bonjour/Zeroconf[編輯 | 編輯原始碼]

Bonjour/Zeroconf 是 Netatalk 的必要組件,在默認狀況下是編譯好了的。不需要額外的配置,Netatalk 就可以使用 dbus 連結來註冊服務。 你要確認設置 -mimicmodel 為你想要的字符串(查看 Mac 上的 /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist 來獲得一個完整的列表)。

如果 avahi-daemon.service 沒有運行的話,可能需要 使用 systemd 啟用或啟動該服務。