rcmdnk's blog

Dr. Homebrew

Brewall というスクリプトを作ってHomebrewのパッケージを簡単に管理しようとしてるのですが、 その管理のためのリストファイルをGitのレポジトリから取ってきたり レポジトリに送ったり出来る様にしました。

Brewall

Brewallについてはこちら。

Brewall: brewパッケージを管理する

Brewallにtapall追加

Homebrewで管理してるパッケージを一括管理して、 リストを更新して一括でインストールしたりアンインストールすることが出来る スクリプトです。

以前からの更新は

  • curlでのインストールスクリプトを追加した。 (Homebrew入れる前でもワンラインコマンドで直接入れられてHomebrewまでインストールしてくれる)
  • brewall installの様なコマンド型の引数を-i等に加えて導入した。
  • Gitのレポジトリでリストファイルを管理できる様にした。

と言った所です。

Gitのレポジトリでリストファイルを管理

初期段階では/usr/local/Library/Brewfileというファイルに リストを書き出してこのファイル中心に管理を行います。

これに対して、

$ brewall set_repo -r [email protected]:user_name/repo_name

等とすると、このレポジトリを/usr/local/Library/user_name-repo_nameへ cloneしてきて、レポジトリ内にあるBrewfileというファイルで管理する様になります。

この際、/usr/local/Library/Brewfileへはこのレポジトリ情報が代わりに書き込まれます。

もし、repo_nameBrewfileというファイルを持ってない場合は、最初に

$ brewall init

とすれば、レポジトリ内にBrewfileというファイルを作りパッケージ情報を書き込みます。

その後、

$ brewall push

とすると、このレポジトリをリモートへpushします。

これで、他のMacから

$ brewall set_repo -r https://github.com/user_name/repo_name
$ brewall install

とすれば、同じパッケージ群をインストール出来るようになります。 いらないパッケージも同期して消したい場合には

$ brewall clean -C

もしてあげればOK。 (上のレポジトリのオプションを-rにしたかったので、 clean upを実際に走らせるオプションをこの-Cへ変更してるのでもし使ってたら注意して下さい。)

まとめて行うには

$ brewall update

行うと、pull, install, brew upgrade, push, cleanと一連のコマンドを実行します。 ただ、自分でインストールしてBrewfileに書き込んで無いものがあると それもcleanしてしまうので注意が必要です。

常にインストールしたものを書き込むにはbrew install <package>の代わりに

$ brewall brew install <package>

brewallコマンドにbrewコマンドを噛ませます。 第一引数がbrewの場合には、brewコマンドを実行してinitをする、 という作業が行われます。

Brewfile用に使うレポジトリは、基本的にはBrewfileと言う名前のファイルだけが必要です。 レポジトリ名はなんでも構いません。 最初にローカルでinitするのであれば空のレポジトリでも構いません。 (適当なREADMEだけとかでも)

レポジトリの指定はGitHubであれば前の部分を除いて

$ brewall set_repo -r user_name/repo_name

だけでも解釈します。

まとめ

ということでリストファイル自体をGitで管理することで、 他の端末との同期を簡単にして、 さらにリストの履歴も簡単に取る事が出来るようになります。

こんな感じ。

今のところ、途中でpull/pushで衝突が起こった際には 手動でレポジトリをいじる必要が有りますが、 Brewfileを下手に書き換えない限りはそんなに衝突する事もないと思います。

管理リストの履歴が残るのは一台の端末だけでも便利だと思うので 良かったら使ってみてください。

Sponsored Links
Sponsored Links

« Windowsでインストーラーを持たないプログラムを簡単にインストールするスクリプト シェアボタンを非同期読み込みでまとめて設定 »

}