如何强制自制软件安装本地文件?

How to force homebrew to install a local file?

我尝试 运行:

brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb

但得到了

curl: (56) Recv failure: Connection reset by peer

因为 http://sourceforge.net/projects/sshpass/files/sshpass/1.06/sshpass-1.06.tar.gz 需要通过 运行s JavaScript 的浏览器下载。无论如何,现在我有了这个文件,我又把它放在 $(brew --cache) 和 运行 brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb 中,但它没用。自制软件中是否有强制安装本地 tar.gz 文件或允许 sshpass.rb 以本地文件而不是 url 为目标的命令?

简单的回答:你不能;没有办法做到这一点。

不过您可以自己覆盖缓存下载。不要使用 $(brew --cache):这是一般的缓存位置,但 Homebrew 可能会为此公式的缓存下载使用不同的名称。要知道确切的路径,请使用 brew --cache <formula>:

brew --cache https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb

我的 Linuxbrew 安装的示例输出:

/home/me/.cache/Homebrew/downloads/b46bd79ca1d250486d5a0e0fcd455ed1d78eea689cf0612dffcdd7056b153efc--sshpass-1.06.tar.gz

将您下载的文件放在这个确切的位置,并使用这个确切的名称。

Homebrew 仍会尝试向 URL 发出 HEAD 请求以检查其 Last-Modified header 但如果该请求不成功也不会失败.

现在运行你的命令和以前一样:

$ brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb

它应该打印类似“Downloading https://…”的内容,然后是 Already downloaded: …

  1. 运行
brew install -b <formulae>
  1. 如果包下载失败,查找缓存位置名称和 url 下载
Downloading https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.31.1.tar.xz

...

/Users/home/Library/Caches/Homebrew/downloads/713e2ded9f716221e9b99f888e7c5e69b927b45d91be630596ea80c93ff5448e--git-2.31.1.tar.xz.
incomplete https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.31.1.tar.xz

curl: (35) SSL peer handshake failed, the server most likely requires a client certificate to connect

注意响应中的 3 件事:

  1. 访问下载url

    下载包
  2. 下载后,将文件名准确更改为缓存文件名,并将该文件放在缓存文件夹位置。

  3. 运行 brew install again

brew install -b <formulae>

这对我有用!如果您无法使用 brew install

下载多个软件包,您可能需要执行这些步骤几次