port是Unix的遗产,用来管理软件包。在Unix时代,软件包大都是以源代码方式分发,所以port所支持的好多软件包都是以源代码方式存在。macOS也是Unix血统,所以macports是一个为macOS提供开源软件包的port系统。

本文记述在Mojave上安装macports所遇到的问题。

安装

macports,macOS不带,需要自己安装。最简单的方式就是从github的release页面下载PKG格式的安装包。

很不幸,我使用PKG安装的时候,末了卡在那里没有响应(需要在ActivityManager里面将Install相关的进程杀掉)。上网查了一下方知道其实安装已经结束,是selfupdate出了问题。

所谓selfupdate,就是port selfudpate命令,用来更新port自身:

sudo port -v -d selfupdate
DEBUG: MacPorts sources location: /opt/local/var/macports/sources/rsync.macports.org/macports/release/tarballs
--->  Updating MacPorts base sources using rsync
DEBUG: system: /usr/bin/rsync -rtzvl --delete-after rsync://rsync.macports.org/macports/release/tarballs/base.tar /opt/local/var/macports/sources/rsync.macports.org/macports/release/tarballs

Willkommen auf dem RSYNC-server auf ftp.fau.de.
Nicht all unsere Mirror sind per rsync verfuegbar.

Welcome to the RSYNC daemon on ftp.fau.de.
Not all of our mirrors are available through rsync.


receiving file list ... done
base.tar

不知道哪里出了问题,反正执行了sudo port -v -d selfupdate卡在上面的步骤进行不下去,需要杀死进程。

按照Mirrors里面的说明,通过修改/opt/local/etc/macports/sources.conf把源替换成北大的镜像:

#rsync://rsync.macports.org/macports/release/tarballs/ports.tar [default]
rsync://pek.cn.rsync.macports.org/macports/release/tarballs/ports.tar [default]

依然无法解决问题。不过不能selfupdate不一定影响使用,使用了北大的镜像之后,port sync可以工作,用来同步macports的软件包描述。之后可以使用port install xxx来安装具体的软件包。

其他

手动编译安装macports

即然selfupdate无法工作,那么也可以手动编译安装macports。

macports的仓库在macports-base,可以下载手动编译,具体参考MacPorts Guide相关章节。

删除macports用户

macports会添加一个叫做macports的同名账户到系统。如果想删除(如果以往的macports没有删除干净,留有此用户,安装新macports的时候会报错),可以使用dscl(Directory Service command line utility):

参考How to delete MacPorts user after using the Migration Assistant

dscl . list /Users | grep -v '^_'
dscl . list /Users
dscl . -search /Users name macports
sudo dscl . -delete "/Users/macports" 

其他镜像

macports支持从Github下载port文件,这样就不需要从rsync获取了。

参考

macports也支持HTTP的方式来获取port文件,其仓库地址为:

https://distfiles.macports.org/ports.tar.gz [default]

Aliyun也提供了macports镜像(https://mirrors.aliyun.com/macports/),不过还没有确认其稳定性。

小结