Help us understand the problem. What is going on with this article?

brewでマイナーバージョンを指定してFormulaを入れる方法

More than 3 years have passed since last update.

brewでマイナーバージョンを指定してFormulaを入れる方法
mysqlをマイナーバージョンを固定してインストールさせたかった時にハマったのでメモ。
別にmysql以外にも使える

やりたかったこと

brew install mysql@5.6.37とかやりたかった

問題

  • そもそもbrewにバージョンの概念はあんまりない。
  • mysqlのあとにアットマークがついたものがあるのは、あくまで別パッケージとして配布されてるだけ

調べてわかったこと

  • homebrewのパッケージの中身はrubyのスクリプト
  • スクリプトの中でバイナリをakamaiとかから落としてコピーとかしてる
  • homebrewの実態は、めちゃくちゃ大きいgitでrubyのスクリプト管理してるだけ(https://github.com/homebrew/homebrew-core/)
  • パッケージの中身のスクリプトが更新され、新しいバージョンのパッケージがスクリプトの中から落とされるようになることでアップデートできる
  • homebrewがgit cloneしてきたパッケージ全体は/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core以下にある。嘘だと思ったら上に書いてあるgithubリポジトリと見比べてみて。
  • パッケージのrbファイルはhomrbrew/homebrew-core/Formulaにある(例: https://github.com/Homebrew/homebrew-core/blob/master/Formula/curl.rb)

じゃあ、gitの古いコミットから、入れたいマイナーバージョンの時のrubyスクリプトを見つけて、手元で実行するだけでいいんじゃ?

→それであってた

やったこと

githubで検索をかけて、mysql.rbのコミットを全部みた

だめだった。タイムアウトが起こって(たぶん負荷が大きすぎた)、githubに「ちょっと荷が重いからお前自力でやれ!」って怒られた。

とりあえず自分の手元(/usr/.../homebrew-core/Formula)で、git log mysql@5.6.rbしてみた

なんとlogが一個しか(最新版しか)表示されない。それもそのはず、homebrewでは高速化のために最新コミットしかダウンロードしてきてないらしい。

git fetch --unshallow した

このコマンドで、リポジトリの全コミットを落としてこれると聞いたのでやってみた。
10分くらいかかった。

もう一度git log mysql@5.6.rbしてみた

ずら〜と出てきた。その中に自分が入れたいマイナーバージョンの最終コミットっぽいのがあったので、それのコミットIDをメモった。

例: 8a363290b68c1c6aa8fb22f90443f10b1fb70ecc

githubの方で確認した

コミット番号からソースコードを確認するために、適当なコミットを開いて、URLのコミットIDを書き換えて、ページに飛んだ。

例: https://github.com/Homebrew/homebrew-core/blob/8a363290b68c1c6aa8fb22f90443f10b1fb70ecc/Formula/mysql@5.6.rb

インストールしてみる

  • 直接実行は難しそうだし、そもそもbrewの監視外になってしまう。
  • 自分の手元でcheckoutする手もあるらしいけど、そもそもgit fetchにめちゃくちゃ時間かかるからみんなでやりたくない
  • brew install にURL渡すとよしなに入れてくれるらしい←これに決定

とりあえずデータをそのまま見られるrawのURLをgithubから取ってくる。

例: https://raw.githubusercontent.com/Homebrew/homebrew-core/8a363290b68c1c6aa8fb22f90443f10b1fb70ecc/Formula/mysql%405.6.rb

そして、そのままbrew installに渡してみる。ここで注意なんだけど、chromeとかのアドレスバーからコピペすると、chromeが丁寧に@を%40にURLエンコードしてくれる。これだとうまく動かないので手動で@に直す。

$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8a363290b68c1c6aa8fb22f90443f10b1fb70ecc/Formula/mysql@5.6.rb

インストールできた。めでたしめでたし。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした