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 启用或启动该服务。