Toconangoのブログ

プログラミングのユルフワ備忘録です。間違った記載等ありましたらご連絡頂けますと幸いです。

Homebrew Cask で古いバージョンのパッケージを作成、インストールする

MySQL Workbench 6.3.4 をHomebrew でインストールしたかったのですが、

caskroom/versionsにもパッケージが存在していないかったため、自分で作ることにしました。 *1

いくつかの記事を参考にしました。 *2 *3

Githubに/homebrew-versionsリポジトリ作成

cd $(brew --prefix)/Library/Taps/caskroom/homebrew-versions
git remote add <GitHubのユーザ名> https://github.com/<GitHubのユーザ名>/homebrew-versions

Cask のためのトークン(Caskファイルの名称など)を生成

下記のサイトから、6.3.4 のdmgをダウンロードします。

MySQL :: Download MySQL Workbench (Archived Versions)

展開するとMySQLWorkbench.appというファイル(厳密にはディレクトリ)があります。

Caskファイル名を提案してくれるツールがあるので、

展開したappを引数にして実行します。

$ "$(brew --repository)/Library/Taps/caskroom/homebrew-cask/developer/bin/generate_cask_token" \
    '/Applications/MySQLWorkbench.app'
Proposed token:               mysqlworkbench
Proposed file name:           mysqlworkbench.rb
Cask Header Line:             cask 'mysqlworkbench' do

WARNING: the file '/usr/local/Library/Taps/caskroom/homebrew-cask/Casks/mysqlworkbench.rb' already exists. Prepend the vendor name if this is not a duplicate.

すでに名前が重複しているという警告がでます。

そこで、末尾に"-634"をつけてmysqlworkbench-634.rbというファイル名でCaskファイルを作成します。

既存のCask ファイルをコピー

新規作成の場合は、

$ brew cask create アプリ名

で、$(brew --repository)/Library/Taps/caskroom/homebrew-cask/Casks/配下にファイルが作られますが、

今回は、過去バージョンのパッケージを作るため、

$(brew --repository)/Library/Taps/caskroom/homebrew-versions/Casks/配下にファイルを作成します。

下記の通り、既存ファイル$(brew --repository)/Library/Taps/caskroom/homebrew-cask/Casks/mysqlworkbench.rb

別名のmysqlworkbench-634.rbで、$(brew --repository)/Library/Taps/caskroom/homebrew-versions/Casks/配下にコピーします。

$ cd $(brew --repository)/Library/Taps/caskroom/homebrew-versions

$ cp ../homebrew-cask/Casks/mysqlworkbench.rb ./Casks/mysqlworkbench-634.rb

新規Caskファイルmysqlworkbench-634.rbを編集

元ファイルmysqlworkbench.rbを変更して、mysqlworkbench-634.rbを作成します。

変更点は以下の3つです。

  • 最初の cask の行 -> mysqlworkbench-634
  • version の行 -> 6.3.4
  • sha256 の行 -> チェックサムの再計算値

チェックサムは以下のように再計算します。

$ shasum -a 256 ~/Downloads/mysql-workbench-community-6.3.4-osx-x86_64.dmg
af214391dfc9c6bdb7640bf286732ce7d4500721906d9a0ad3b107db8f15e57a  /Users/username/Downloads/mysql-workbench-community-6.3.4-osx-x86_64.dmg

コピー元ファイルmysqlworkbench.rbの内容

cask 'mysqlworkbench' do
  version '6.3.6'
  sha256 '81732bddff9e9d6b71cc565e4d3b4636e0e47db5b344aaef4b7e20c83177d94a'

  url "https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-#{version}-osx-x86_64.dmg"
  name 'MySQL Workbench'
  homepage 'https://www.mysql.com/products/workbench'
  license :gpl
  gpg "#{url}.asc",
      key_id: '8c718d3b5072e1f5'

  app 'MySQLWorkbench.app'

  zap delete: [
                '~/Library/Application Support/MySQL/Workbench',
                '~/Library/Preferences/com.oracle.mysql.workbench.plist',
                '~/Library/Preferences/com.oracle.MySQLWorkbench.plist',
                '~/Library/Saved Application State/com.oracle.mysql.workbench.savedState',
                '~/Library/Saved Application State/com.oracle.MySQLWorkbench.savedState',
                '~/Library/Caches/com.oracle.mysql.workbench',
              ]
end

新規作成したmysqlworkbench-634.rbの内容

cask 'mysqlworkbench-634' do
  version '634'
  sha256 'af214391dfc9c6bdb7640bf286732ce7d4500721906d9a0ad3b107db8f15e57a'

  url "https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-#{version}-osx-x86_64.dmg"
  name 'MySQL Workbench'
  homepage 'https://www.mysql.com/products/workbench'
  license :gpl
  gpg "#{url}.asc",
      key_id: '8c718d3b5072e1f5'

  app 'MySQLWorkbench.app'

  zap delete: [
                '~/Library/Application Support/MySQL/Workbench',
                '~/Library/Preferences/com.oracle.mysql.workbench.plist',
                '~/Library/Preferences/com.oracle.MySQLWorkbench.plist',
                '~/Library/Saved Application State/com.oracle.mysql.workbench.savedState',
                '~/Library/Saved Application State/com.oracle.MySQLWorkbench.savedState',
                '~/Library/Caches/com.oracle.mysql.workbench',
              ]
end

インストールできるか確認

$ brew cask install mysqlworkbench-634.rb 
==> Downloading https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-6.3.4-osx-x86_64.dmg
######################################################################## 100.0%
==> Verifying checksum for Cask mysqlworkbench-634
==> Moving App 'MySQLWorkbench.app' to '/Applications/MySQLWorkbench.app'
🍺  mysqlworkbench-634 staged at '/opt/homebrew-cask/Caskroom/mysqlworkbench-634/6.3.4' (1347 files, 29M)

成功したら、以下の通りチェックして、passed となればOKです。

$ brew cask audit mysqlworkbench-634 --download
==> Downloading https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-workbench-community-6.3.4-osx-x86_64.dmg
Already downloaded: /Users/onoeiko/Library/Caches/Homebrew/mysqlworkbench-634-6.3.4.dmg
==> Verifying checksum for Cask mysqlworkbench-634
audit for mysqlworkbench-634: passed

Caskファイルの変更をプルリクエストする

せっかく作成したので、他の人にも使ってもらえるよう、

Githubでプルリクエストをします。

# Gitリポジトリ
$ cd $(brew --repository)/Library/Taps/caskroom/homebrew-versions

# 新規ブランチ作成
$ git checkout -b 'mysqlworkbench-634'

# コミット
$ git add Casks/mysqlworkbench-634.rb 
$ git commit -v

コミットメッセージを入力します。

(過去のプルリクエスト*4などを参考に、適当なメッセージを入力してください。)

Add MySQL Workbench 6.3.4
    
# Please enter the commit message for your changes. Lines starting
(以下略)

コミットしたら、

GitHub にログインして,caskroom/homebrew-versionsをフォークし、

作成したブランチをプッシュします。

$ git push <ユーザ名> mysqlworkbench-634

※ パスワードはGithubの設定ページ*5から発行したトークンを使用します。(トークン作成にあたって、チェック項目がありますが、とりあえず全部チェックしときました。。)

※ pushでfatal: repository 'https://github.com/<ユーザ名>/homebrew-versions/' not foundと出る場合、参考記事*6の記載の通り、remoteをリセットすると解決するかもです。

プッシュが完了したら、

caskroom/homebrew-versionsからプルリクエストを送信します。

確認、Mergeしてもらうまで待ちましょう。

以上です。

追記

古いバージョンは明示的な理由がないと追加しないということで、Mergeしてもらえませんでした。。

古いバージョンを追加する場合は、追加理由をコミットメッセージか、プルリクエストのコメントに記載したほうが良さそうです。