MacPorts 使用 Git 替代 Rsync 同步源

Sep 05, 2022 • 预计阅读时间 2 分钟

在使用 sudo port -v selfupdate 更新源的时候,发生了一个错误:

Error: Failed to verify signature for MacPorts source!
Error: Follow https://guide.macports.org/#project.tickets if you believe there
is a bug.
Error: /opt/local/bin/port: port selfupdate failed: Failed to verify signature for MacPorts source!

无法验证源的签名,暂时不确定是不是服务端的源有问题还是本地环境出了问题。

rsync 同步源的方式不能使用了,只能使用本地源来替代。

MacPorts 的源是存放在目录:/opt/local/var/macports/sources

MacPorts 同时也把源托管在 GitHub 上,而且接受 PR:https://github.com/macports/macports-ports

可以把 GitHub 上的源克隆到本地,让 MacPorts 使用本地源来解决这个签名无效的问题。

  1. 克隆 GitHub 源到本地:

    cd /opt/local/var/macports/sources
    sudo mkdir -p github.com/macports/macports-ports
    sudo git clone https://github.com/macports/macports-ports.git github.com/macports/macports-ports
    
  2. 配置 MacPorts 使用本地源: 编辑 MacPorts 的源配置文件:/opt/local/etc/macports/sources.conf,把 rsync 的地址替换为本地路径:

    file:///opt/local/var/macports/sources/github.com/macports/macports-ports [default]
    
  3. 重建/更新源索引: 如果是首次操作,这一步需要消耗比较多的时间。

    sudo port -v sync
    

以后不能使用 sudo port -v selfupdate 来更新源了,因为这个命令使用的是 rsync。

需要使用 git pull 提取最新的源然后再更新索引:

cd /opt/local/var/macports/sources/github.com/macports/macports-ports
sudo git pull
sudo port -v sync

以上,/opt/local 是 MacPorts 的默认安装路径,需要按自己的实际情况做修改。

为了以后更新方便,可以写一个 shell 脚本,port-update

#!/usr/bin/env bash

if [[ $(id -u) != 0 ]]; then
  echo you are not root.
  exit -1
fi

pushd /opt/macports/var/macports/sources/github.com/macports/macports-ports
git pull
port -v sync
popd

以后更新的时候只需要执行:sudo port-update

例如要更新全部已安装的 ports:

sudo port-update
sudo port upgrade outdated

单独更新某个 port 到最新版本:

sudo port-update
sudo port upgrade gnupg2

参考资料

https://trac.macports.org/wiki/howto/SyncingWithGit

https://guide.macports.org/chunked/using.html#using.port

macports
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

aria2 并发下载

SwiftPM 编译命令参数