在 Mac 上使用 MacPorts 体验你最喜爱的开源应用

MacPorts 是一种在 macOS 上获取开源应用程序并保持更新的简便方法。
73 位读者喜欢这篇文章。
Getting started with Perlbrew

freephotocc via Pixabay CC0

“软件包管理器”是用于安装、升级和卸载应用程序的通用软件名称。类似 Linux 上的 dnfapt,或 BSD 上的 pkg_add,甚至 Python 上的 pip 和 Lua 上的 luarocks 等命令,使用户可以轻松地向其系统添加新应用程序。一旦你尝试过,你可能会发现没有它很难生活,而且这是每个操作系统都应该包含的便利功能。并非所有操作系统都包含此功能,但开源社区倾向于确保计算领域的最佳创意在所有平台上得到传播。

有几个专为 macOS 设计的软件包管理器,其中最古老的之一是 MacPorts 项目。

Darwin 和 MacPorts

当苹果在本世纪初转向 Unix 时,它基本上构建了一个名为 Darwin 的 Unix 操作系统。此后不久,一群足智多谋的黑客立即开始着手一个名为 OpenDarwin 的项目,旨在创建 Darwin 的独立分支。他们希望 OpenDarwin 和苹果开发人员可以在相关的代码库上工作,并在有用时互相借鉴。不幸的是,OpenDarwin 没有在苹果内部获得支持,最终 走向终结。然而,OpenDarwin 软件包管理器项目 MacPorts 依然活跃且运行良好,并继续为 macOS 提供出色的开源软件。

macOS 已经带有一组健全的默认终端命令,其中一些借用自 GNU,另一些来自 BSD,还有一些是专门为 Darwin 编写的。你可以使用 MacPorts 添加新命令,甚至图形应用程序。

安装 MacPorts

你的 macOS 版本决定了你需要哪个 MacPorts 安装包。因此,首先获取你当前运行的 macOS 版本

$ sw_vers -productVersion
10.xx.y

适用于最新 macOS 版本的 MacPorts 版本可在 macports.org/install.php 上找到。你可以从网站下载安装程序,或者只复制链接并使用 curl 命令下载

$ curl https://distfiles.macports.org/MacPorts/MacPorts-2.6.3-10.14-Mojave.pkg \
--output MacPorts-2.6.3-10.14-Mojave.pkg

下载安装程序后,你可以双击安装它,或使用终端安装它

$ sudo installer -verbose \
-pkg MacPorts*.pkg
-tgt /

配置 MacPorts

安装软件包后,你必须将相关路径添加到你的系统,以便你的终端知道在哪里找到新的 MacPorts 命令。通过将以下内容添加到 ~/.bashrc,将 MacPorts 的路径及其手册页添加到你的 PATH 环境变量中

export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export MANPATH=/opt/local/share/man:$MANPATH

加载你的新环境

$ source ~/.bashrc

运行更新,以便你的 MacPorts 安装可以访问最新版本的软件

$ sudo port -v selfupdate

使用 MacPorts

一些软件包管理器从服务器将预构建的软件安装到你的本地系统上。这称为二进制安装,因为它安装的代码已编译成可执行的二进制文件。其他软件包管理器(包括 MacPorts)从服务器拉取源代码,将其编译成计算机上的二进制可执行文件,并将其安装到正确的目录中。最终结果是相同的:你拥有了你想要的软件。

它们到达那里的方式不同。

两种方法都有优点。二进制安装速度更快,因为所需的唯一事务是将文件从服务器复制到你的计算机上。这是 Homebrew 使用其“瓶子”所做的事情,但有时会出现 不可重定位 构建的问题。从源代码安装意味着你可以轻松修改软件的构建方式以及安装位置。

MacPorts 提供 port 命令,并将软件包称为 ports(继承自 NetBSD 的 Pkgsrc 和 FreeBSD 的 port 系统等项目的术语。)典型的 MacPorts 工作流程是搜索应用程序,然后安装它。

搜索应用程序

如果你知道你需要安装的特定命令或应用程序,请搜索它以确保它在 MacPorts 树中

$ sudo port search parallel

默认情况下,port 会同时搜索软件包的名称和描述。你可以通过添加 --name 选项仅搜索名称字段

$ sudo port search --name parallel

你可以使用常见的 shell 通配符使你的搜索“模糊”。例如,要仅在名称字段的开头搜索 parallel

$ sudo port search --name --glob "parallel*"

列出所有 port

如果你不知道你要搜索什么,并且想查看所有可用的软件包(或 MacPorts 和 BSD 术语中的“ports”),请使用 list 子命令

$ sudo port list

列表很长但完整。当然,你可以将输出重定向到文本以供参考,或者将其管道传输到 moreless 以进行更仔细的检查

$ sudo port list > all-ports.txt
$ sudo port list | less

获取有关软件包的信息

你可以使用 info 子命令获取有关软件包的所有重要详细信息

$ sudo port info parallel
parallel @20200922 (sysutils)

Description:          Build and execute shell command lines from standard input in parallel
Homepage:             https://gnu.ac.cn/software/parallel/

Library Dependencies: perl5
Platforms:            darwin
License:              GPL-3+
Maintainers:          Email: example@example.com

这会显示有关每个应用程序的重要元数据,包括简要描述及其项目主页,以防你需要更多信息。它还列出了依赖项,这些是软件包正确运行所必须在系统上的其他 port。依赖项由 MacPorts 自动解析,这意味着,例如,如果你安装 parallel 软件包,如果你的系统上尚未安装 perl5,MacPorts 也会安装它。最后,它提供许可证和 port 维护者。

安装软件包

当你准备好安装软件包时,请使用 install 子命令

$ sudo port install parallel

编译代码可能需要一些时间,具体取决于你的 CPU、代码库的大小以及要安装的软件包数量,因此请耐心等待。这将是值得的。

安装完成后,新应用程序即可立即使用

$ parallel echo ::: "hello" "world"
hello
world

MacPorts 安装的应用程序放置在 /opt/local 中。

查看已安装的内容

软件包安装到你的系统后,你可以使用 contents 子命令准确查看它在你的驱动器上放置的内容

$ sudo port contents parallel
/opt/local/bin/parallel
[...]

清理

使用 MacPorts 安装软件包通常会在你的 ports 树中留下构建文件。这些文件对于调试失败的安装很有用,但通常你不需要将它们留在那里。使用 port clean 命令从你的系统中清除这些文件

$ port clean parallel

卸载软件包

使用 port uninstall 命令卸载软件包

$ port uninstall parallel

开源软件包管理

MacPorts 项目是早期在 macOS 基础上构建开源工作的运动的遗留产物。虽然这项努力失败了,但已经有努力将其作为名为 PureDarwin 的项目来复兴它。推动开放更多苹果代码是一项重要的工作,这项工作的副产品对每个运行 macOS 的人都很有益。如果你正在寻找一种在 Mac 上获取开源应用程序的简便方法以及一种可靠的方式来保持它们更新,请安装并使用 MacPorts。

接下来阅读什么
标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算行业工作,通常同时进行。

5 条评论

感谢这篇文章。MacPorts 与 Homebrew 有什么不同或相同之处?在 Matt Broberg 六月份的文章之后,我使用 Homebrew 在 Mac 上安装了 GnuCash 和其他一些应用程序。

好问题,Don。

最终结果是相同的:你安装一个应用程序,并且该应用程序在你的计算机上运行。

它们到达那里的方式是唯一的区别。对于某些系统管理员来说,homebrew 绑定到特定安装位置的方式可能有点问题,并且 homebrew 使用 Ruby(我想?)作为其安装脚本,而 MacPorts 使用 Makefile。

作为用户,你不会注意到差异。作为打包者或系统管理员,你可能更喜欢其中一个。

这对我是新信息。现在看看结果是否与 MacOS 辅助功能(尤其是盲人 VoiceOver)兼容。我会注意检查一下。感谢这篇文章。

这在很大程度上取决于苹果如何将 VoiceOver 与其终端应用程序集成,以及苹果如何将 VoiceOver 与 XQuartz(或他们现在使用的任何 X11 支持库)集成。如果苹果已将 VoiceOver 设置为读取终端应用程序的输入和输出,那么你通过 MacPorts 安装的任何新命令都应该是相当可用的。如果苹果让 VoiceOver 读取在 X11 图形服务器中运行的内容,那么它应该甚至能够描述 GUI 应用程序。

如果你尝试一下,我很想听听结果。

苹果没有将其在辅助功能方面的进步作为开源技术发布,这真是太可惜了。他们为改进辅助功能所做的工作似乎可以使每个人受益,但将其锁定在价格标签背后真是太可惜了。

回复 作者 edkenlon

在不可挽回地搞砸了我的 Homebrew 安装 *再次* 之后,我最近又开始使用 MacPorts 了——不,我不记得是怎么搞砸的,而且我的瞎搞是那种持续不断的混乱,大多数人在单用户机器上都不需要担心。Homebrew 的合理默认值对于大多数人来说已经足够好了。

但对我来说呢?我喜欢 MacPorts 处理可选软件包变体的方式。它们在存在时在 port info PACKAGE 中进行了总结,port variants PACKAGE 描述了它们,而 port install PACKAGE +VARIANT 应用了它们。

好东西。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.