如何在自制程序中安装特定版本的公式?例如,postgresql-8.4.4而不是最新的9.0。
当前回答
最接近@Lance的答案,但这对我来说并不奏效,在2023年,使用M1macOS13并尝试安装特定版本的opencv@4.
底线是:您应该用brew的GitHub repo中找到的远程opencv.rb文件的内容覆盖本地opencv.r文件的内容,该文件对应于您要安装的opencv版本。
本质上,我们希望更新包的.rb文件中的url和sha256。但是sha256在opencvReleases Github页面上不可用,在本地创建sha256会给我带来校验和错误。但是从提交历史记录中获取.rb文件可以解决这个问题。
分解:5个简单步骤
首先卸载包:brew卸载opencv@4查找要安装的软件包的正确版本的.rb文件在Github上的Homebrew>Homebrew core>Formula下搜索在opencv.rb文件的历史记录中:https://github.com/Homebrew/homebrew-core/commits/master/Formula/opencv.rb选择与所需版本相对应的提交,例如opencv:update 4.6.0_1 bottle。和查看文件。复制/下载文件的内容在系统上打开.rb文件:breweditopencv@4用从Github下载的文件替换此文件的内容使用.rb文件路径再次安装软件包:brew Install/opt/homebrew/Library/Taps/homebrew/homebrew core/Formula/oppencv.rb
这对我来说非常有效,然而,@Lance使用brew install的回答给出了一个错误:您的命令行工具(CLT)不支持macOS 13。
其他答案对我来说也不管用。
其他回答
brew版本和brew安装https://raw.githubusercontent.com/Homebrew/homebrew-core/现在不支持<COMMIT-HASH>/Formula/<Formula>.rb。
您可以这样尝试:
$ brew extract --version 5.6.2 gradle vitahlin/core
$ brew install gradle@5.6.2
我决定,违背我更好的判断,为Maven 3.1.1创建一个公式,而自制程序/版本没有。要执行此操作:
我在github上分叉了自制程序/版本。我从$(brew-prefix)/Library/Taps符号链接到我的fork的本地工作副本。我将其称为我的自制程序/版本。我通过将公式指定为我的自制程序/版本/<公式>进行测试。我向自制程序/版本发送了新公式的拉取请求。
Yay.
简单工作流
现在Homebrew/versions已经被弃用,Homebrew/core支持一些具有新命名格式的公式版本。
要安装特定版本,例如postgresql 9.5,只需运行:
$ brew install postgresql@9.5
要列出可用版本,请使用@进行搜索:
$ brew search postgresql@
==> Searching local taps...
postgresql@10.1 ✔ postgresql@9.4 postgresql@9.5 postgresql@9.6
TLDR:brew安装postgresql@8.4.4有关更多详细信息,请参阅下面的答案。
*(我已经重新编辑了我的答案,以便为安装/使用自制软件的旧版本提供更全面的工作流程。如果您发现旧版本更好,请随时添加备注。)
让我们从最简单的案例开始:
1) 检查版本是否已安装(但未激活)
当自制程序安装一个新公式时,它会将其放在版本化的目录中,如/usr/local/Cellar/postgresql/9.3.1。然后,仅全局安装指向此文件夹的符号链接。原则上,这使得在两个已安装版本之间切换非常容易。(*)
如果您使用自制程序的时间较长,并且从未删除过旧版本(例如,使用brew cleanup),那么您的程序的某些旧版本可能仍然存在。如果您想简单地激活以前的版本,brew开关是最简单的方法。
使用brew-info-postgresql(或brew-switch-postgresql<TAB>)检查是否安装了旧版本:
$ brew info postgresql
postgresql: stable 9.3.2 (bottled)
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.1.5 (2755 files, 37M)
Built from source
/usr/local/Cellar/postgresql/9.3.2 (2924 files, 39M) *
Poured from bottle
From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/postgresql.rb
# … and some more
我们看到已经安装了一些旧版本。我们可以使用brew开关激活它:
$ brew switch postgresql 9.1.5
Cleaning /usr/local/Cellar/postgresql/9.1.5
Cleaning /usr/local/Cellar/postgresql/9.3.2
384 links created for /usr/local/Cellar/postgresql/9.1.5
让我们仔细检查激活的内容:
$ brew info postgresql
postgresql: stable 9.3.2 (bottled)
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.1.5 (2755 files, 37M) *
Built from source
/usr/local/Cellar/postgresql/9.3.2 (2924 files, 39M)
Poured from bottle
From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/postgresql.rb
# … and some more
请注意,星号*已移至新激活的版本
(*)请注意,brew开关仅在旧版本的所有依赖项仍然存在的情况下工作。在某些情况下,可能需要重建旧版本。因此,当想要在两个相距不太远的版本之间切换时,使用brew开关最有用。
2) 检查版本是否可用
特别是对于大型软件项目,很可能对某个软件的几个(可能不兼容API)主要版本有足够高的需求。截至2012年3月,Homebrew 0.9提供了一种机制:brew tap和自制版本存储库。
该版本存储库可能包含多个公式的旧版本的后端。(大多数只有大型和著名的,但当然,它们也有几个postgresql公式。)
brew search postgresql将向您显示查找位置:
$ brew search postgresql
postgresql
homebrew/versions/postgresql8 homebrew/versions/postgresql91
homebrew/versions/postgresql9 homebrew/versions/postgresql92
我们可以通过键入
$ brew install homebrew/versions/postgresql8
Cloning into '/usr/local/Library/Taps/homebrew-versions'...
remote: Counting objects: 1563, done.
remote: Compressing objects: 100% (943/943), done.
remote: Total 1563 (delta 864), reused 1272 (delta 620)
Receiving objects: 100% (1563/1563), 422.83 KiB | 339.00 KiB/s, done.
Resolving deltas: 100% (864/864), done.
Checking connectivity... done.
Tapped 125 formula
==> Downloading http://ftp.postgresql.org/pub/source/v8.4.19/postgresql-8.4.19.tar.bz2
# …
请注意,这已经自动点击自制程序/版本。(使用brew tap进行检查,使用brew untap自制程序/版本进行删除。)以下内容等效:
$ brew tap homebrew/versions
$ brew install postgresql8
只要后端口版本公式保持最新,这种方法可能是处理旧软件的最佳方法。
3) 尝试一些过去的公式
列出以下方法主要是为了完整性。两人都试图从酿造库中复活一些不死配方。由于依赖关系的改变,公式规范中的API改变,或者下载URL的改变,事情可能会发生,也可能不会发生。
由于整个公式目录是一个git存储库,因此可以使用普通的git命令安装特定版本。然而,我们需要找到一种方法,在旧版本可用的地方进行提交。
a) 历史性时代
在2011年8月至2014年10月期间,自制程序有一个brew版本命令,它会将所有可用版本与各自的SHA散列一起输出。从2014年10月起,你必须在使用之前先自制/装骨机。正如水龙头的名称所暗示的,你可能只能在万不得已的情况下这样做。
E.g.
$ brew versions postgresql
Warning: brew-versions is unsupported and may be removed soon.
Please use the homebrew-versions tap instead:
https://github.com/Homebrew/homebrew-versions
9.3.2 git checkout 3c86d2b Library/Formula/postgresql.rb
9.3.1 git checkout a267a3e Library/Formula/postgresql.rb
9.3.0 git checkout ae59e09 Library/Formula/postgresql.rb
9.2.4 git checkout e3ac215 Library/Formula/postgresql.rb
9.2.3 git checkout c80b37c Library/Formula/postgresql.rb
9.2.2 git checkout 9076baa Library/Formula/postgresql.rb
9.2.1 git checkout 5825f62 Library/Formula/postgresql.rb
9.2.0 git checkout 2f6cbc6 Library/Formula/postgresql.rb
9.1.5 git checkout 6b8d25f Library/Formula/postgresql.rb
9.1.4 git checkout c40c7bf Library/Formula/postgresql.rb
9.1.3 git checkout 05c7954 Library/Formula/postgresql.rb
9.1.2 git checkout dfcc838 Library/Formula/postgresql.rb
9.1.1 git checkout 4ef8fb0 Library/Formula/postgresql.rb
9.0.4 git checkout 2accac4 Library/Formula/postgresql.rb
9.0.3 git checkout b782d9d Library/Formula/postgresql.rb
正如你所看到的,它建议不要使用它。Homebrew用它的内部启发式方法吐出了它能找到的所有版本,并向你展示了一种检索旧公式的方法。让我们试试看。
# First, go to the homebrew base directory
$ cd $( brew --prefix )
# Checkout some old formula
$ git checkout 6b8d25f Library/Formula/postgresql.rb
$ brew install postgresql
# … installing
现在安装了旧的postgresql版本,我们可以重新安装最新的公式,以保持存储库的清洁:
$ git checkout -- Library/Formula/postgresql.rb
brew switch是你在新旧之间转换的朋友。
b) 史前时代
对于特殊需求,我们也可以尝试自己通过自制回购进行挖掘。
$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb
gitlog-S查找文件Library/Taps/homebrew/homebrew core/Formula/postgresql.rb中添加或删除了字符串“8.4.4”的所有提交。结果得到两次提交。
commit 7dc7ccef9e1ab7d2fc351d7935c96a0e0b031552
Author: Aku Kotkavuo
Date: Sun Sep 19 18:03:41 2010 +0300
Update PostgreSQL to 9.0.0.
Signed-off-by: Adam Vandenberg
commit fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
Author: David Höppner
Date: Sun May 16 12:35:18 2010 +0200
postgresql: update version to 8.4.4
显然,fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422是我们感兴趣的提交。由于这个提交很旧,我们将尝试降级完整的自制程序安装(这样,公式API或多或少保证有效):
$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4
您可以跳过最后一个命令,将引用保存在git存储库中。
一个注意事项:在检查旧的提交时,您会暂时降级自制程序的安装。因此,您应该小心,因为自制程序中的某些命令可能与最新版本不同。
4) 手动编写公式
这并不太难,然后您可以将其上传到自己的存储库中。以前是自制版本,但现在已经停产。
A.)奖金:固定
如果你想保留的某个版本,比如postgresql,在你进行自然酿造更新时停止更新;brew升级程序,您可以固定公式:
$ brew pin postgresql
固定公式列在/usr/local/Library/PinnedKegs/中,一旦您希望引入最新的更改和更新,就可以再次取消固定:
$ brew unpin postgresql
解决方案
brew extract --version=8.4p1 openssh homebrew/cask
brew install openssh@8.4p1
最新的openssl@8.5p1在我运行brew升级后出现错误,因此我通过上述方式成功地备份到了以前的版本。
推荐文章
- homebrew、macports或其他软件包安装工具的区别/用途是什么?
- Ruby Bundle Symbol not found: _SSLv2_client_method (LoadError)
- Virtualenvs中的破引用
- brew install XXX和brew cask install XXX有什么区别
- Brew安装docker不包括docker引擎?
- 我如何使用brew安装Python作为默认的Python?
- 如何用自制程序更新公式?
- 在安装Homebrew后,我得到' zsh:命令未找到:brew '
- 升级所有通过家酿桶安装的桶
- 如何在OSX上更新Xcode到最新版本?
- 如何找到Homebrew的可安装软件包列表?
- 错误2002 (HY000):无法通过套接字/tmp/ MySQL .sock连接到本地MySQL服务器
- 家酿酒桶选项不被认可?
- Gem eventmachine致命错误:'openssl/ssl.h'文件未找到
- 如何避免“无法加载这样的文件- utils/popen”从自制的OSX