使用 brew 降级软件包

Author Avatar
EpLiar 4月 29, 2020
license Anti%20996 blueLast Updated: 20-04-29

前言

最近 Node.Js 升级到了 14,按照我个人的习惯,软件嘛,最新的还是好一些。但是升级到 14 之后我的博客页面炸了,在生成页面的时候给了我几个警告,打开就是一片白。于是赶紧把 Node.Js 降级到了 13 版本,这个问题也就解决了。

最近配了一台新的台式机,由于桌子太小也就很少用 Mac 了,博客什么的放在了台式机里的 Arch 虚拟机里,博客的撰写和生成、与服务器的同步都在虚拟机里完成 (当然用 sshfs 挂载了磁盘到宿主机中)。Node 的降级我先是在虚拟机里完成了,Mac 上的 Node 使用的是 Homebrew 包管理器,和 Pacman 的降级方式不太一样。在我完成降级步骤之后顺手搜索了一下国内是否有相关文章讲 Homebrew 的降级步骤,只搜出了两篇,而且写的非常差劲,因此就在这里详细写写 Homebrew 降级包的步骤吧。

一些准备

写本文的时候我是已经降级了 Node 到 13 版本,不过为了方便写本文,我又升级了回去 (。为了呈现更真实的降级过程,本文以 Node 14 降 13 作为例子撰写步骤。在你阅读的时候,记得把包名改成你自己需要降级的包名。

详细步骤

brew info

brew info 命令可以查看与包相关的信息,例如:

  • 简介

  • 编译依赖

  • 使用依赖

  • 安装次数

  • 版本信息

  • 主仓链接

除了最后两项,其他信息与本文都没有太大关系,因此就不做讨论了。

要降级,需要拿到包在 Homebrew 仓库的链接,只需要执行 brew info node 即可。

$ brew info node
node: stable 14.0.0 (bottled), HEAD
Platform built on V8 to build network applications
https://nodejs.org/
/usr/local/Cellar/node/14.0.0 (4,659 files, 60.8MB) *
  Poured from bottle on 2020-04-29 at 13:41:57
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/node.rb
==> Dependencies
Build: pkg-config ✔, [email protected] ✔
Required: icu4c ✔
==> Options
--HEAD
    Install HEAD version
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Analytics
install: 395,888 (30 days), 1,097,737 (90 days), 4,254,419 (365 days)
install-on-request: 285,896 (30 days), 787,981 (90 days), 3,079,669 (365 days)
build-error: 0 (30 days)

从返回的结果可以看出,Node 在 Homebrew 的链接为 https://github.com/Homebrew/homebrew-core/blob/master/Formula/node.rb。把链接在浏览器中打开,下一步会用到。

查看 raw 链接

众所周知,在 GitHub 要想看原始的代码是要在 raw 下的,直接打开是方便阅读的状态。

raw button

找到 raw 并打开,复制地址栏的链接。如 node.rb 的 raw 链接就是:https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/node.rb

查看版本的 commit

Homebrew 使用 git commit 来管理包的安装信息,每当有包更新就会在主仓进行一次 commit,因此 commit 信息可以帮助我们回退版本。回到命令行,执行 brew log node 来查看 node 的 commit。

$ brew log node

执行之后会进入 less 查看 commit log,每一个 commit 都会有版本号的信息。找到你想回退的版本,复制 commit 信息的 sha-1 哈希值后按键盘的 q 键即可退出 less。

commit 节选
commit 909f04b6bd82ca4c7c54a13ce4f6e74ddc4c364f
Author: Issy Long <[email protected]>
Date:   Thu Apr 23 21:53:40 2020 +0000

    node: update 14.0.0 bottle.

commit 973891d1bce08434b424bee1fe413a1ab329775c
Author: James Billingham <[email protected]>
Date:   Thu Apr 23 15:58:41 2020 +0100

    node 14.0.0

commit 44c81305cf707d181a87086386ad2e63846cbe75
Author: Bo Anderson <[email protected]>
Date:   Thu Apr 23 14:37:03 2020 +0000

    node: update 13.13.0_2 bottle.

commit c6a9d1208a06998382e9dbb5c096457341c9aefd
Author: Pavel Omelchenko <[email protected]>
Date:   Fri Apr 3 01:02:39 2020 +0300

    node: revision for icu4c

commit c87055190aedbb6f82d5393b75c90e5903284fa3
Author: Alexander Bayandin <[email protected]>
Date:   Thu Apr 16 17:03:12 2020 +0000

    node: update 13.13.0_1 bottle.

commit e6f96a7e9b4db767d45e10b13b77a5b5bff6b02e
Author: Alexander Bayandin <[email protected]>
Date:   Thu Apr 9 13:37:29 2020 +0100

    node: revision bump [email protected]

例如要降级到 node: update 13.13.0_2 bottle. 这次 commit 的版本,复制下 44c81305cf707d181a87086386ad2e63846cbe75,进入下一个步骤。

替换 url 并删除新版本

在第二步拿到了 raw 链接,需要将链接中的 master 换成 commit 的哈希值,如 https://raw.githubusercontent.com/Homebrew/homebrew-core/44c81305cf707d181a87086386ad2e63846cbe75/Formula/node.rb,接着删除掉当前版本。

$ brew uninstall node

下载指定版本

更改链接之后,使用链接安装包即可。

$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/44c81305cf707d181a87086386ad2e63846cbe75/Formula/node.rb
Warning: Unsupported installation from a commit URL!
Consider using `brew extract node ...` instead!"
This will extract your desired node version to a stable tap instead of
installing from a commit URL that cannnot receive updates or fixes!

######################################################################## 100.0%
Warning: node 14.0.0 is available and more recent than version 13.13.0_2.
==> Downloading https://homebrew.bintray.com/bottles/node-13.13.0_2.catalina.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/6d/6d057a10950415900f12d062585f242e99cf0c8840e0c571f6009319aed
######################################################################## 100.0%
==> Pouring node-13.13.0_2.catalina.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Summary
🍺  /usr/local/Cellar/node/13.13.0_2: 4,660 files, 60.3MB
Removing: /Users/epi/Library/Caches/Homebrew/node--13.13.0_2.catalina.bottle.tar.gz... (16.2MB)

过程会提示旧版本会缺少 bug 修复和某版本比当前安装版本更新,忽略即可。

(可选) 忽略更新

旧版本安装结束后,可能哪天你 brew upgrade 的时候就又回去了。如果不希望这种尴尬局面发生,使用 brew pin 命令让包停留在当前版本。

$ brew pin node

至此,brew 降级的所有工作也就结束了。

CC BY 4.0
本文链接:https://epliar.com/articles/downgrade-fomula-on-brew/