Homebrew安装特定版本的公式?

如何在自制软件中安装特定版本的公式? 例如,postgresql-8.4.4而不是最新的9.0。


(我已经重新编辑了我的答案,以便为安装/使用带有自制软件的旧版本软件提供更加全面的工作流程。如果您发现旧版本更好,请随时添加注释。)

我们从最简单的情况开始:

1)检查版本是否已安装(但未激活)

当自制软件安装一个新的公式时,它会把它放在一个版本化的目录中,比如/usr/local/Cellar/postgresql/9.3.1 。 只有符号链接到这个文件夹然后全局安装。 原则上,这使得在两个安装版本之间切换变得非常容易。 (*)

如果您一直使用自制软件的时间更长,并且从未删除旧版本(例如使用brew cleanup ),那么您的程序的某些旧版本可能仍然存在。 如果你想简单地激活以前的版本, brew switch是最简单的方法。

使用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 switch来激活它:

$ 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 switch工作。 在某些情况下,可能需要重建旧版本。 因此,当用户想要在不太相距的两个版本之间切换时,使用brew switch非常有用。

2)检查版本是否可作为轻敲使用

特别是对于较大的软件项目,很可能对于某个软件的几个主要版本(可能API不兼容)有足够高的需求。 截至2012年3月,Homebrew 0.9为此提供了一种机制: brew tap和自制软件版本库。

该版本库可能包括几个公式的旧版本的backports。 (大多数只有大型和着名的,但当然他们也有几个公式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
# …

请注意,这已自动点击homebrew/versions水龙头。 (使用brew tap检查,使用brew untap homebrew/versions取消brew untap homebrew/versions 。)以下内容相同:

$ brew tap homebrew/versions
$ brew install postgresql8

只要backported版本公式保持最新,这种方法可能是处理较旧软件的最佳方式。

3)尝试从过去的一些公式

以下方法主要是为了完整性而列出的。 两者都试图从brew仓库中重新生成一些不死生物配方。 由于改变了依赖关系,公式规范中的API更改或仅更改了下载URL,因此事情可能会或可能不会起作用。

由于整个公式目录是一个git仓库,所以可以使用普通的git命令来安装特定的版本。 但是,我们需要找到一种方法来获得旧版本可用的提交。

a)历史时期

20118月和2014年10月之间 ,自制软件有一个brew versions命令,它将所有可用的版本与它们各自的SHA哈希散列在一起。 截至2014年10月,您必须先使用brew tap homebrew/boneyard然后才能使用。 正如水龙头的名称所暗示的那样,您应该只将这作为最后的手段。

例如

$ 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)史前时代

对于特殊需求,我们也可以尝试自己挖掘自制回购。

$ git log -S'8.4.4' -- Library/Formula/postgresql.rb

git log -S查找在文件Library/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)手动编写一个公式

这并不难,你可以将它上传到Homebrew-Versions。

A.)奖金:固定

如果你想保留一定的版本,比如说postgresql,并且在你进行自然brew update; brew upgrade时停止brew update; brew upgrade brew update; brew upgrade程序,你可以制定一个公式:

$ brew pin postgresql

固定公式列在/usr/local/Library/PinnedKegs/ ,一旦你想引入最新的变化和更新,你可以再次取消固定:

$ brew unpin postgresql

简单的工作流程

现在Homebrew /版本已被弃用,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

现在有一种更简单的方法来安装先前安装的旧版公式的旧版本。 简单使用

brew switch [formula] [version]

例如,我在Node.js 0.4.12和0.6.5之间定期交替:

brew switch node 0.4.12
brew switch node 0.6.5

由于brew switch只是改变了符号链接,所以速度非常快。 请参阅外部命令下的Homebrew Wiki的进一步文档。

链接地址: http://www.djcxy.com/p/21975.html

上一篇: Homebrew install specific version of formula?

下一篇: How to version REST URIs