brew-安装旧版本

序言

今天为了跑一个古老的C程序,安装了 libwebsockets 。本以为 brew install 是一件很简单的事情,没想到耗费了一个上午的时间,特此记录一下。

初步探索

brew install libwebsockets 运行后,发现安装的是 4.3.2 的版本,本来不关心,但是程序编译时报错,看报错信息时结构体成员找不到。很明显,安装的版本过高导致的,遂找到 4.0.21 的版本想安装。
brew search libwebsockets 发现并没有别的版本可供选择。这会,有个选择时下载 libwebsockets 源码,自己编译安装,但是并不想走这条路。哪里有问题就从哪里解决。
直接找到 homebrew 里 libwebsockets.rb,找到其历史版本,运行 brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/fd1f75f399384faa19b4951a404f716507b0808c/Formula/libwebsockets.rb,但是 brew 报错不支持 url 这种方式,提示使用 extract。
又研究了一下 extract,不得要领。去网上搜到这几个真言,如获至宝,自信满满的开始尝试。

1
2
3
4
5
6
# 1. create a new tap
brew tap-new $USER/local-<packageName>
# 2. extract into local tap
brew extract --version=1.2.3 <packageName> $USER/local-<packageName>
# 3. run brew install@version as usual
brew install <packageName>@1.2.3
  1. 执行 brew tap-new xin.ye/local-https://raw.githubusercontent.com/Homebrew/homebrew-core/fd1f75f399384faa19b4951a404f716507b0808c/Formula/libwebsockets.rb,报错,尝试几次发现 packageName 是指 libwebsockets,不指当前计划安装的地址。执行 brew tap-new xy/local-libwebsockets 成功
  2. 执行 brew extract --version=4.0.21 https://raw.githubusercontent.com/Homebrew/homebrew-core/fd1f75f399384faa19b4951a404f716507b0808c/Formula/libwebsockets.rb xy/local-libwebsockets 出现错误,报错信息里还把填的地址都转成小写,让我一度以为是我地址有问题,找了一圈。最后幡然醒悟,它打印的日志 Searching repository history 是不是代表回去历史记录里查,不需要我输入具体地址。执行 brew extract --version=4.0.21 libwebsockets xy/local-libwebsockets 成功。
  3. 执行 brew install [email protected] 成功。

结论

brew extract 会自动去查找 gtihub 安装模块的历史版本,所以其实你不需要关心历史版本的 url 地址,只要知道版本号即可。
一开始被历史版本的 url 地址误导的有点深。特此记录一下。