
Netatalk是开源的AFP和AppleTalk文件共享服务器软件,可以在Unix和类Unix系统中运行。OpenWrt路由器甚至都可以部署Netatalk。
Netatalk有v2和v3两个大版本,对AFP支持的协议也不同。v2支持AppleTalk(包括时间服务器和打印服务器),AFP协议从1.1版支持到3.3版,可以支持Apple II、Mac System 6到Mac OS 9,也支持Mac OS X。 v3 不支持AppleTalk,但支持AFP 3.4协议,支持Spotlight索引,客户端至少需要System 7.5。Netatalk如果在Mac OS X中运行,那将不支持AppleTalk网络的搭建。
因此要搭建AppleTalk网络,还需要选择Netatalk v2版本,主要用于文件和打印机共享。服务器硬件是OrangePi 4,RK3399开发板,运行Armbian(Jammy Jellyfish版)。Netatalk v2版本选用2.3.1版本,非git版本。 Debian和Ubuntu源里的Netatalk已经是v3版本了,因此需要手动编译安装v2版本。编译安装教程可以参考Netatalk wiki:
Installing Netatalk 2 on Debiannetatalk.io/docs/Installing-Netatalk-2-on-Debian
安装
这里简要说一下步骤:
先安装编译工具和基本依赖:
sudo apt install build-essential libssl-dev libdb-dev autotools-dev automake libtool libtool-bin pkg-config libcups2-dev cups libavahi-client-dev libgcrypt20-dev tcpd libcrack2-dev libacl1-dev libldap2-dev quota libtirpc-dev
下载v2.3.1版本,解压
tar xf netatalk-2.3.1.tar.xz
cd netatalk-2.3.1
编译,安装需要root权限
./configure --enable-systemd --sysconfdir=/etc --with-uams-path=/usr/lib/netatalk
make
sudo make install
配置
这里简单介绍一下配置一个单区域(zone)的AppleTalk网络,设置文件共享和CUPS打印机共享。Netatalk的配置文件存放在/etc/netatalk目录中。默认的区域(zone)名称是当前的主机名。
默认AFP共享的文件夹是每位用户的Home目录,如果需要建立共享文件夹,需要单独建立。
共享文件夹
新建共享文件夹,如~/afpshare,并设置权限
mkdir ~/afpshare
chmod 2775 ~/afpshare
编辑AppleVolumes.default,设置共享文件夹
sudo nano /etc/netatalk/AppleVolumes.default
在文件末尾插入一行(将USER替换成自己的用户名),引号内的File Server为共享名,可以更改。
/home/USER/afpshare "File Server"
用户鉴定方式及文件编码
设置用户鉴定方式,编辑文件afpd.conf
sudo nano /etc/netatalk/afpd.conf
在文件末尾插入
- -transall -uamlist uams_guest.so,uams_clrtxt.so,uams_dhx2.so -maccodepage MAC_CHINESE_SIMP
-maccodepage MAC_CHINESE_SIMP 表示Mac客户端使用的Codepage是简体中文,如果客户端使用繁体中文则改成-maccodepage MAC_CHINESE_TRAD。不指定-maccodepage则默认使用Mac_Roman编码,如果客户端存储了中文文件名的资料,则在服务器和现代Mac OS X中会显示乱码文件名。服务器端默认的编码通常是utf8,因此不需要单独指定-unixcodepage utf8,除非服务器上用的编码不是utf8。如果不希望客户端保存用户名和密码,还可以加入-nosavepassword参数。
设置使用网卡
设置AppleTalk使用的网卡,一般为eth0,编辑文件atalkd.conf
sudo nano /etc/netatalk/atalkd.conf
在文件末尾加入一行eth0
设置打印服务器
Netatalk可以自动共享CUPS打印机。在设置完CUPS打印机后,编辑文件papd.conf
sudo nano /etc/netatalk/papd.conf
在末尾加入一行
cupsautoadd:op=root:
启动Netatalk服务
运行命令
sudo systemctl enable atalkd.service afpd.service cnid.service papd.service
sudo systemctl start atalkd.service afpd.service cnid.service papd.service
如果不需要运行打印机共享,可以去掉papd.service。
Netatalk服务启动后,可以先检查AppleTalk内核模块是否加载:
lsmod | grep appletalk
如果appletalk内核模块没有加载,可以尝试重新启动atalkd.service服务。
检查当前网络的AppleTalk设备,运行
nbplkup
如果看到了AFPServer和LaserWriter,说明文件共享和打印机共享设置成功。
nbplkup示例输出:
Canon G3800 OPi4:LaserWriter 65280.114:130
orangepi4:AFPServer 65280.114:128
Mac OS客户端连接
AppleTalk不依赖TCP/IP协议,也可以在以太网中使用。Mac OS客户端插入网线后,在同一网络内一般可以直接发现。要访问共享文件,需要AppleShare功能扩展;而打印机共享需要LaserWriter功能扩展,其版本需要是7.x/8.x,建议使用LaserWriter 8版本。
访问文件服务器
在苹果菜单中打开“选配器”,选取AppleShare

选择一个文件服务器,输入用户名密码

选取要访问的项目


早期AppleShare只支持AppleTalk网络,因此如果是Netatalk v3,则无法在列表中找到服务器。System 7.5版本开始,AppleShare支持通过输入IP地址来查找服务器,如果是Netatalk v3则需要System 7.5客户端。
如果使用AirPort网卡上网,也不能通过选配器查找AppleTalk网络,只能用有线网。如果要连接AFP文件服务器,可以指定IP地址访问。(更正:AirPort网卡也支持AppleTalk网络,需要在AppleTalk控制板中设置使用的端口为AirPort而不是以太网。)
Mac OS 9中有一个“网络浏览器”应用程序,也可以浏览AppleTalk网络。但如果遇到用户登录失败的情况,还需要在选配器中使用AppleShare。

连接共享打印机

在“选配器”中选择LaserWriter,在列表中选取共享的打印机,点击设置。在选择PPD文件的对话框中选取“通用”。

在自动配置完成后,桌面上会出现打印机的图标。之后便可以使用这台打印机来打印文档了。至于原理,LaserWriter打印机使用的是PostScript打印语言,而CUPS也支持PostScript语言,因此只需要CUPS能正常打印即可。

服务器管理WebUI
Netatalk开发了Webmin管理模块,用于远程管理。
先安装Webmin
curl -o setup-repos.sh https://raw.githubusercontent.com/webmin/webmin/master/setup-repos.sh
sudo sh setup-repos.sh
sudo apt install webmin --install-recommends
安装Netatalk模块的依赖
sudo apt install libcgi-ajax-perl libcgi-application-perl
下载Webmin模块
使用root账户登录管理界面
https://sourceforge.net/projects/netatalk/files/Webmin/netatalk2-wbm-1.2.tgz/download
打开侧边Webmin Configuration,然后找到Webmin Modules,再选择本地的netatalk2-wbm-1.2.tgz进行安装。
安装后,可以在左侧Servers里找到Netatalk Classic Mac File Sharing,便可以管理服务器了。

如果不想用Webmin管理, 也可以参考Netatalk v2的手册,手动编辑配置文件。
Comment