re:inventing the wheel

それでも車輪は回っている

Homebrewでパッケージのバージョンを切り替える

前回の記事でdockerをCentOS7にインストールしてみましたが、先述のとおりdockerのバージョンは最新ではありませんでした。 しかし、順当にbrew updateを行なっていくと最新バージョンになってしまい、docker AIPのバージョン差でリモートからコントロールできません。

そこで今回は、homebrewでインストールパッケージのバージョン管理について調べてみました。

インストール済みの旧バージョンへ切り替える。

過去にインストールした旧バージョンがある場合、brew switchコマンドでバージョン指定することができます。

まずは、brew infoを使ってインストール済みのバージョンを確認します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ brew info docker
docker: stable 1.4.1 (bottled)
https://www.docker.com/
/usr/local/Cellar/docker/1.1.1 (9 files, 9.8M)
Poured from bottle
/usr/local/Cellar/docker/1.1.2 (9 files, 9.8M)
Poured from bottle
/usr/local/Cellar/docker/1.2.0 (9 files, 6.6M)
Poured from bottle
/usr/local/Cellar/docker/1.3.0 (9 files, 6.8M)
Built from source
/usr/local/Cellar/docker/1.3.1 (9 files, 6.8M)
Poured from bottle
/usr/local/Cellar/docker/1.3.2 (9 files, 6.9M)
Poured from bottle
/usr/local/Cellar/docker/1.4.1 (9 files, 7.0M) *
Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/docker.rb
==> Dependencies
Build: go ✘
==> Options
--without-completions
Disable bash/zsh completions
==> Caveats
Bash completion has been installed to:
/usr/local/etc/bash_completion.d

zsh completion has been installed to:
/usr/local/share/zsh/site-functions

切り替えたいバージョンがインストール済みであれば、下記のようにしてバージョンを切り替えます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ # ここでは、現在のdocker clientのバージョンを確認
$ docker -v
Docker version 1.4.1, build 5bc2ff8
$
$ # docker clientのバージョンを1.3.2に切り替える
$ brew switch docker 1.3.2
Cleaning /usr/local/Cellar/docker/1.1.1
Cleaning /usr/local/Cellar/docker/1.1.2
Cleaning /usr/local/Cellar/docker/1.2.0
Cleaning /usr/local/Cellar/docker/1.3.0
Cleaning /usr/local/Cellar/docker/1.3.1
Cleaning /usr/local/Cellar/docker/1.3.2
Cleaning /usr/local/Cellar/docker/1.4.1
3 links created for /usr/local/Cellar/docker/1.3.2
$
$ # dockerのバージョンが切り替わったことを確認する。
$ docker -v
Docker version 1.3.2, build 39fa2fa

インストールされていない旧バージョンをインストールする。

上記の操作では旧バージョンがインストールされていることが前提となりますが、いつでも都合よく 旧バージョンがインストールされているとは限りません。
以前はbrew versionsというコマンドが存在していたのですが、無くなってしまったためhomebrew/boneyardを tapすることで復活(?)します。

1
$ brew tap homebrew/boneyard

homebrew/boneyardをtapすると、以下のようにbrew versions <パッケージ名>でバージョン一覧が取得できます。
※以前、golang 1.2をインストールした際にhomebrew/versionsをtapしたのでWarningが出ています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ brew versions docker
Warning: brew-versions is unsupported and will be removed soon.
You should use the homebrew-versions tap instead:
https://github.com/Homebrew/homebrew-versions

1.4.1    git checkout fc4e7d2 /usr/local/Library/Formula/docker.rb
1.3.3    git checkout 21e59c6 /usr/local/Library/Formula/docker.rb
1.3.2    git checkout b11f75b /usr/local/Library/Formula/docker.rb
1.3.1    git checkout f25ec40 /usr/local/Library/Formula/docker.rb
1.3.0    git checkout c42188e /usr/local/Library/Formula/docker.rb
1.2.0    git checkout 9ccfc7e /usr/local/Library/Formula/docker.rb
1.1.2    git checkout c6e04e3 /usr/local/Library/Formula/docker.rb
1.1.1    git checkout 68c6b1e /usr/local/Library/Formula/docker.rb
1.1.0    git checkout 3db0658 /usr/local/Library/Formula/docker.rb
1.0.1    git checkout 7666e02 /usr/local/Library/Formula/docker.rb
1.0.0    git checkout c513c42 /usr/local/Library/Formula/docker.rb
0.11.1   git checkout eefa235 /usr/local/Library/Formula/docker.rb
0.11.0   git checkout f4560d2 /usr/local/Library/Formula/docker.rb
0.10.0   git checkout c26c37d /usr/local/Library/Formula/docker.rb
0.9.1    git checkout 6bd6532 /usr/local/Library/Formula/docker.rb
0.9.0    git checkout a90b40e /usr/local/Library/Formula/docker.rb
0.8.1    git checkout 4ee0389 /usr/local/Library/Formula/docker.rb
0.8.0    git checkout 9880ace /usr/local/Library/Formula/docker.rb

指定のバージョンをインストールします。(ここでは、1.3.2を指定する例です)

1
2
3
4
$ cd /usr/local
$ brew unlink docker # すでに別バージョンがインストールされている場合unlinkする
$ git checkout b11f75b /usr/local/Library/Formula/docker.rb
$ brew install docker

以上です。

参考