Netatalk、Linux 和 Macintosh

作者:Richard Parry

Unix 工作站、运行 Windows 3.x/95/NT/Linux、FreeBSD 和其他系统的 PC 必须能够无缝通信和共享数据,无论它们是在工程、商业还是家庭环境中。同一网络上存在多种类型的计算机平台已是常态。幸运的是,借助 Netatalk 等程序,可以轻松地让 Apple Macintosh 计算机和 Linux 系统共存并共享资源。本文介绍了 Netatalk 是什么、它的作用、从哪里获取它,以及如何安装、配置和测试它。我们还包含了一个关于 Netatalk 工作原理的简短技术描述。

如果您有一台 Mac 并且想运行 Linux,可以使用 MkLinux(参见 LJ #31,第 55 页)。如果您有一台 PC 并且想运行 MacOS,可以使用 Executor(参见 LJ #19,第 40 页)。但是,如果您同时拥有这两台机器,并且想让每台机器都发挥其最佳性能,请使用 Netatalk。Netatalk 使您可以保持操作系统分离,同时允许您传输文件和共享打印机资源。我付出了努力才穿上 Linux T 恤——我热爱 Linux。我也热爱我的 Mac——原因完全不同。由于我将这两个系统用于不同的目的,因此这两个系统经常需要进行通信。

您可以使用软盘(又名 SneakerNet)传输小文件。但是,当文件大小超过 1.44MB 软盘限制时,解决方案是 FTP——快速高效,但在移动包含子目录的多个目录时很麻烦。理想的解决方案是在 Mac 桌面挂载 Linux 文件系统,然后像在正常 MacOS 下一样拖放文件和目录。这正是 Netatalk 为您提供的解决方案。您还可以使用 Netatalk 将打印作业从 Mac 发送到 Linux 打印机,从而共享其他系统资源。

Netatalk, Linux and the Macintosh

图 1. Macintosh 桌面上的 Linux 文件和目录

在撰写本文时,最新版本的 Netatalk 是 1.4b2。不要让 beta 后缀吓到您;Netatalk 是稳定的,尤其是对于 PC 平台。当前开发重点是 FreeBSD 和 Solaris 等新平台(参见表 1)——因此得名 beta。Netatalk 的主要主机站点和目录是:ftp://terminator.rs.itd.umich.edu/unix/netatalk/。从该地址,您只需下载单个文件 netatalk-1.4b2.tar.gz 即可。您可以使用正常的 Linux 命令(例如)解压缩和解包 Netatalk

gunzip netatalk-1.4b2.tar.gz
tar xvf netatalk-1.4b2.tar

tar xzvf netatalk-14b2.tar.gz
Netatalk, Linux and the Macintosh

图 2. Netatalk 多个网页之一

请注意,在 Linux 2.x 发布之前,安装 Netatalk 需要将数据报交付协议 (DDP) 软件集成到内核中。现在 DDP 已成为 Linux 内核的一部分,您只需确保在内核配置期间启用 Appletalk 即可。为此,请将内核配置选项指定为

CONFIG_ATALK=y

您应始终使用 Netatalk 发行版附带的 README 文件作为安装说明的最终权威。由于 Netatalk 为多个平台提供,如 表 1 所示,因此实际上有多个不同的 README 文件。每个操作系统都有其自己的文件位置默认值。因此,Netatalk 随附的 Makefile 提供了用户定义的变量,您可以更改这些变量来更改安装以及最终的文件结构。对于 Linux 安装,我使用了默认值,安装工作完美无瑕。

Makefile 中的 DESTDIR 变量指向二进制文件放置的目录。此目录的默认值为 /usr/local/atalk,无需更改。请注意,设置 DESTDIR 会导致所有安装相关的路径名都正确设置。另一个重要变量是 MANDIR,您可以通过它指定 man 页面的位置。此目录的默认值为 /usr/man,同样无需更改。

要开始进行所有二进制文件的安装,请使用无处不在的命令

make

要在源树的根目录安装二进制文件,请键入

make install
非常简单!现在让我们继续配置。
配置 Appletalk

首先,将 Netatalk 发行版附带的 services.atalk 文件的内容添加到您的 /etc/services 数据库中。要添加的行将如下所示

rtmp    1/ddp   # Routing Table Main Protocol
nbp     2/ddp   # Name Binding Protocol
echo    4/ddp   # AppleTalk Echo Protocol
zip     6/ddp   # Zone Information Protocol

接下来,假设您的 Linux 和 Mac 之间的物理连接是 Ethernet,请编辑 /usr/local/atalk/etc/atalkd.conf 文件,使其包含单行

eth0
当系统投入使用时,此行会自动更改。在我的情况下,当我实际连接到网络时,Appletalk 守护进程将 eth() 行(文件配置)更改为
eth0 -phase 2 -net 7540-7544 -addr 7544.197 \
        -zone "Outer-Limits"
Netatalk, Linux and the Macintosh

图 3. 您的眼睛没有欺骗您——这是一个完全致力于 Netatalk 的网站。

导出 Linux

Netatalk 发行版提供了三个需要配置的示例配置文件

  1. AppleVolumes.default

  2. atalkd.conf

  3. papd.conf

这些文件通常放置在 /usr/local/atalk/etc 目录中,并包含注释形式的说明以帮助用户。您可以从 man 页面获取更多信息。我们已经在 Appletalk 配置期间讨论了 atalkd.conf 的配置。

您可以通过编辑文件 /usr/local/atalk/etc/AppleVolumes.system 来指定哪些文件和/或目录可以供 Macintosh 访问。清单 1 中显示了一个示例配置。此配置显示目录 /tmp 和 /pub 可在网络上访问。在 Macintosh 上,Linux 目录显示为一个文件夹,其名称由您分配:在我们的示例中为 tmp 和 pub。目录 /home/user/X 也可以从 Macintosh 访问,名称为 XWindows。您可以使用与 Linux 目录名称不同的第二个参数来指定导出的目录在 Mac 上将具有不同的名称,例如 /home/user/X XWindows。

我们建议您在决定要导出到网络的目录时要谨慎。Netatalk 守护进程 afpd(Apple Filing Protocol Daemon)会创建额外的文件以进行内务管理。具体来说,在每个导出的目录中,都会创建两个不可见的文件(即,以句点字符开头的文件),即 .AppleDesktop 和 .Appledouble。这些文件是在所有导出和访问的 Linux 目录和子目录中创建的。如果您使用 / 字符导出整个文件树,您会发现您的 Linux 系统中布满了 .AppleDesktop 和 .Appledouble 文件。

另请注意,文件 /usr/local/atalk/etc/AppleVolumes.system 包含文件扩展名列表。此列表不是必需的,但扩展名提供了一种在 Macintosh 桌面上显示适当图标的方法。例如,在图 1 中,您可以看到文件 z.mpg、z.rtf 和 zz.jpg 都显示了正确的 Macintosh 应用程序图标。

共享 Linux 打印机

您可以使用 papd(Appletalk 打印机访问协议守护进程)使连接到 Linux 系统的打印机可用于 Appletalk 网络,该守护进程在启动 Linux 时启动。papd 守护进程接受来自 Macintosh 的打印请求,并将作业假脱机到本地行式打印机。要配置打印机,请编辑文件 /etc/local/atalk/etc/papd.conf,使其如下所示

# Sample papd.conf file to allow
# printing on the Linux printer over
# the Appletalk network.
MyLaserW:\
        :pr=lp:op=cg:

此文件中使用的语法与您可以在大多数 Linux 系统的 /etc/printcap 中找到的 Linux printcap 文件中使用的语法相同。

Netatalk 启动

必须在启动时执行 rc.atalk 文件,该文件位于变量 ETCDIR(通常为 /usr/local/atalk/etc)指定的目录中。要在 rc 文件保存在一个位置的 Linux 系统上执行此操作,请将 /usr/local/atalk/etc/rc.atalk 复制到 /etc/rc.d 目录或创建一个符号链接。然后,使用文本编辑器,在 rc.local 文件中插入以下行

sh /etc/rc.d/rc.atalk

有关此脚本的更多信息,请查阅 Netatalk man 页面。

测试

现在到了有趣的部分——转到 Macintosh 选取器并选择 AppleShare,如图 4 所示。Linux 系统主机名将像网络上的任何其他 Appletalk 兼容机器一样出现在桌面上。Mac 上的密码长度限制为 8 个字符,因此如果您的 Linux 密码超过 8 个字符,请更改它。

Netatalk, Linux and the Macintosh

图 4. 使用 Mac 选取器挂载 Linux 文件系统

Netatalk 技术谈话

从技术上讲,Netatalk 是 AppleTalk 协议套件的实现。它包含对 EtherTalk Phase I 和 II、DDP、RTMP、NBP、ZIP、AEP、ATP、PAP、ASP 和 AFP 的支持,如图 5 所示。DDP 现在由新的 Linux 2.x 内核提供。atalkd 守护进程实现 RTMP、NBP、ZIP 和 AEP,这是 Unix routed(路由守护进程)的 AppleTalk 等效项。ATP 和 ASP 以库的形式实现。papd 守护进程允许 Mac 假脱机到 lpd(行式打印机守护进程),而 pap 允许 Unix 机器打印到连接 AppleTalk 的打印机。套件中还提供了 psf,它是 lpd 的 PostScript 打印机过滤器,旨在与 pap 一起使用。PostScript 反向器 psorder 由 psf 调用,以反转打印到面朝上堆叠打印机的页面。最后,也许最重要的是 afpd 守护进程,它为 Mac 提供与 Unix 文件系统的接口。

Netatalk, Linux and the Macintosh

图 5. Netatalk 堆栈

Netatalk 附带了广泛且编写良好的 man 页面,例如 aecho.1、afpd.8、atalk.4、atalkd.8、atalk_aton.3、getzones.1、hqx2bin.1、macbinary.1、megatron.1、nbp.1、nbplkup.1、nbprgstr.1、nbp_name.3、pap.1、papd.8、papstatus.1、psf.8、psorder.1、single2bin.1、unbin.1、unhex.1 和 unsingle.1。

结论

Netatalk 是一个稳定的程序,它使在 Mac 和 Linux 之间移动文件就像拖放一样简单。事实上,您几乎可以在任何类 Unix 平台上安装 Netatalk,并利用它提供的强大功能。现在,通过同时使用 Mac 和 Linux,您真的可以拥有“发挥最佳性能的力量”。

资源

Netatalk, Linux and the Macintosh
Richard Parry (W9IF) 目前就读于加州大学圣地亚哥分校,学习计算机科学。他在高通公司担任软件工程师,高通公司因 Eudora 而闻名。他的妻子告诉我们,他花在 Linux 系统上的时间太多了。您可以通过电子邮件 rparry@qualcomm.com 与他联系,或者您可以访问他的主页 http://www.qualcomm.com/~rparry。
加载 Disqus 评论