MacPorts

一直以来,我都是在macOS上使用 Homebrew ,直到我发现我的古老的 MacBook Pro 15" Late 2013 操作系统 Big Sur 已经不再支持,强制使用 brew 实际上困难重重。

这使得我不得不转向 MacPorts ,一个相对古老的macOS移植软件平台,依然保留了支持历史上多数macOS版本:

“pkg” installers for Tahoe, Sequoia, Sonoma, and Ventura, for use with the macOS Installer. This is the simplest installation procedure that most users should follow after meeting the requirements listed below. Installers for legacy platforms Monterey, Big Sur , Catalina, Mojave, High Sierra, Sierra, El Capitan, Yosemite, Mavericks, Mountain Lion, Lion, Snow Leopard, and Leopard are also available.

安装非常简单,从官方网站下载 .pkg 安装包进行安装。

使用

MacPorts 的执行命令是 ports ,使用简便:

使用 ports 安装 qemu
port install qemu

备注

实际上 qemu 是通过编译源代码完成安装的, ports 会自动下载所有需要依赖的编译工具和库,自动完成 qemu 的编译安装,非常方便。

  • 安装 virt-viewer : 用于管理我远程Linux服务器上的 QEMU 虚拟机图形界面

使用 ports 安装 virt-viewer
sudo port install virt-viewer

安装完 virt-viewer 会有一些提示输出信息,需要按照进行操作:

启动服务: virt-viewer 依赖 avahi 和 dbus 来处理网络发现和进程间通信

virt-viewer 依赖 avahi 和 dbus
sudo port load avahi
sudo port load dbus

安装过程中安装了 Python 3.14: 如果希望在终端输入 python 或 python3 直接调用这个版本

设置系统默认的python和python3为ports安装的python3.14
sudo port select --set python python314
sudo port select --set python3 python314

MacPorts还安装了GNU版本的常用工具(如ls,cp),默认被重命名为gls,gcp。如果希望直接把常用的ls等指向GNU版本,则需要把 /opt/local/libexec/gnubin/ 添加到 ~/.zshrcPATH 环境变量的最前面

备注

如果尝试连接远程服务器上的虚拟机(比如通过 ssh服务 ),则需要在连接自妇产后面手动指定Socket路径:

通过ssh访问远程服务器上的虚拟机
virt-viewer -c qemu+ssh://用户@服务器/system?socket=/var/run/libvirt/libvirt-sock

在运行 virt-viewer 之前,需要在系统中安装一个 xorg-server ,如果没有安装和运行 xort-server ,那么运行 virt-viewer 时会提示报错:

运行X程序(virt-viewer)报错
(virt-viewer:59193): Gtk-WARNING **: 21:54:26.532: cannot open display:

不过,我通过 port install xorg-server 安装的X环境和尝试安装 XQuartz 运行都出现相同报错。gemini推荐采用 Homebrew 来安装更新版本的virt-viewer来解决。暂时放弃

卸载

备注

由于我现在切换到 Rancher Desktop 来使用虚拟机和容器环境,所以我目前不再需要MacPorts提供的独立 Lima: Linux Machines 环境,故实践卸载操作。

要卸载MacPorts,则首先需要将已经安装的所有ports卸载,然后手工移除安装目录,最后再移除 macports 用户和组:

  • 卸载所有安装的ports以及依赖:

卸载ports
sudo port -fp uninstall installed
  • 移除 macports 用户和组:

dscl 工具移除 macports 用户和组
sudo dscl . -delete /Users/macports
sudo dscl . -delete /Groups/macports
  • 移除剩余的MacPorts文件(需要根据实际情况删除目录,例如你安装在不同目录下更改过 applications_dirframeworks_dir 默认值):

删除残留的MacPorts文件
# 如果使用macOS 10.15 Catalina 或更新版本,并且没有关闭System Integrity Protection (SIP)
# 则必须先移除macports用户才能执行以下删除命令
sudo rm -rf \
    /opt/local \
    /Applications/DarwinPorts \
    /Applications/MacPorts \
    /Library/LaunchDaemons/org.macports.* \
    /Library/Receipts/DarwinPorts*.pkg \
    /Library/Receipts/MacPorts*.pkg \
    /Library/StartupItems/DarwinPortsStartup \
    /Library/Tcl/darwinports1.0 \
    /Library/Tcl/macports1.0 \
    ~/.macports

参考