よんちゅBlog

― このブログは自分用のメモや日々の問題などを共有するためのものです ―

20121005185841 お知らせ:  2013/07/17 ブログデザインをリニューアルしました。

Macのパッケージ管理をMacPortsからhomebrewへ

だいぶ前にMacのパッケージ管理をMacPortsからhomebrewに移行してみて、ここまで特に不便なこともなく使えているので、移行時に調べたりメモったりした内容を忘れないように書いときます。

なお、homebrewをインストールするためには以下の条件を満たす必要があります。
(Xcode と Command Line Tools for Xcode のインストール方法は後述します)

Requirements

  1. An Intel CPU
  2. OS X 10.5 or higher
  3. Command Line Tools for Xcode or Xcode 3

via: Installation · mxcl/homebrew Wiki

homebrewのインストール手順

1.MacPortsのアンインストール

MacPorts と homebrew は競合してしまうのであらかじめMacPortsをアンインストールしておきます。
また、MacPortsをアンインストールするとMacPortsでインストールしたパッケージもアンインストールされてしまうので注意

$ sudo port -fp uninstall installed
$ sudo rm -rf \
    /opt/local \
    /Applications/DarwinPorts \
    /Applications/MacPorts \
    /Library/LaunchDaemons/org.macports.* \
    /Library/Receipts/DarwinPorts*.pkg \
    /Library/Receipts/MacPorts*.pkg \
    /Library/StartupItems/DarwinPortsStartup \
    /Library/Tcl/darwinports1.0 \
    /Library/Tcl/macports1.0 \
    ~/.macports

アンインストール手順の詳細は以下のページを参照して下さい。

2.Xcode と Command Line Tools for Xcode をインストール

homebrewを使用するには Xcode と Command Line Tools for Xcode が必要になります。

Xcodeをインストール
XcodeはAppStoreからインストールできます。

Command Line Tools for Xcode をインストール
Xcodeを起動し、メニューから以下のページを開き、Command Line Tools をインストールします。
[Xcode] > [Preferences] > [Downloads]
f:id:yonchu:20121009232112p:plain

インストールにはAppleDeveloperのIDとパスワードが必要になります。
未登録の場合は以下から登録を行なって下さい。

Xcodeの更新を行うと、Command Line Tools for Xcode をインストール済みの場合でも、Command Line Tools for Xcode が自動的に更新されないことがあります。
Xcode更新時は Command Line Tools for Xcode も更新するようにしましょう。

3.homebrewをインストール

homebrewのインストールは非常に簡単で、下記のコマンドを実行するだけです。

$ ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"

実行後に「Installation successful!」と表示されればインストール成功です。

注意
※ インストールコマンドは何度か変更されているため、最新ではない可能性があります。
念のため、公式ページまたはWikiにて確認して下さい。
[2012/10/10 に表記のコマンドを更新しました]

4.Gitのインストールとhombrewの更新

homebrew本体の更新には "Git" が必要になります。
Gitはhomebrew経由でイントールします。

$ brew install git

続いてhomebrew本体を最新の状態に更新します。

$ brew update

また、この更新(brew update)ではhomebrew本体と、後述するFormula情報(xxx.rb)のみ更新されます。
homorewでインストールしたパッケージは更新されません。

5.homebrewの正常性を確認

以下のコマンドにてhomebrewの正常性を確認します。

$ brew doctor
Your system is raring to brew.

上記のように表示されれば成功です。

6.環境変数PATHを設定

homebrewでインストールされるコマンドを優先的に使用するために環境変数"PATH"を設定します。

コマンドの検索では環境変数PATHに登録されているディレクトリを前から順に検索し、一番初めに見つかったコマンドが使用されます。
よって、homebrewでインストールされたコマンドの格納先である "/usr/local/bin" と "/usr/local/sbin" をPATHの先頭に追加します。

※ "/usr/local/sbin" ディレクトリはまだ存在しないかもしれませんが、後々のために追加しておきます。

環境変数PAHTの設定方法は使用しているシェルによって異なります。

bashの場合

"~/.bash_profile" に以下の記述を追加します。
※ "~/.bash_profile" が存在しない場合は適宜作成して下さい。

PATH=/usr/local/bin:/usr/local/sbin:$PATH
export PATH

"~/.bashrc" でも構いませんが、環境変数は"~/.bash_profile" に設定するほうが良いでしょう。

zshの場合

bashと同じ記述を"~/.zshrc" に追加します。

設定確認

設定後、シェルを再起動(または設定の再読み込み)し、
以下のコマンドを実行してパスが設定されていればOKです。

$ echo "$PATH" | sed 's/:/\
/g'

以上でhomebrewのインストール作業は終了です。

homebrewについて

homebrew本体のインストール場所(デフォルト)

/usr/local/Library/Homebrew

Formulaとは

homebrewにてインストール可能な各パッケージのインストール情報は、Formula(フォーミュラ)と呼ばれるファイル(xxx.rb)に記述されています。
また、FormulaはRubyで記述されていて自作することも可能です。

Formulaの格納先

/usr/local/Library/Formula

現在使用可能なFormulaが格納されており、ファイル名が "パッケージ名.rb" となっています。
また、Formulaを検索する場合は後述する検索コマンドを使用します。

各パッケージのインストールはFormulaの情報に従って行われるため、Formulaが最新でない状態でパッケージのインストールを行うとインストールされるパッケージも最新にならない可能性があります。
パッケージのインストールは、"brew update" にてFormulaを最新の状態にしてから行うようにしましょう。

homebrew界ではFormulaの更新が非常に頻繁に行われているため、時代に取り残されないよう常に最新の状態にしておきましょう。

homebrewでインストールしたパッケージの管理

インストールしたパッケージの本体は、"/usr/local/Cellar" 配下にバージョン毎にディレクトリが作成され管理されます。

$ ls -la /usr/local/Cellar/git
total 0
drwxr-xr-x  7 yonchu staff  238  8 22 07:48 ./
drwxr-xr-x 54 yonchu staff 1.8K 10  9 15:39 ../
drwxr-xr-x 10 yonchu staff  340  4  7  2012 1.7.10/
drwxr-xr-x 10 yonchu staff  340  5 11 21:36 1.7.10.1/
drwxr-xr-x 10 yonchu staff  340  5 19 17:04 1.7.10.2/
drwxr-xr-x 10 yonchu staff  340  7 27 16:19 1.7.11.3/
drwxr-xr-x 10 yonchu staff  340  8 22 07:49 1.7.12/

古いバージョンのものはユーザが明示的に削除しない限り残り続けます。
(古いバージョンの削除方法は後述)

また、各パッケージの最新バージョンのコマンドは、 "/usr/local/bin" または "/usr/local/sbin" 配下にシンボリックリンクが作成されます。

よく使うコマンド

頻繁に使われるであろうコマンドをまとめておきます。

パッケージのインストール

"-v" オプションを付けることで詳細情報を表示します。

$ brew install [-v] <Formula名>

パッケージのアンインストール

$ brew uninstall <Formula名>

Formulaの検索

/検索ワード/ で正規表現による検索も可能

$ brew search <検索ワード>
または
$ brew -S <検索ワード>

Formulaの情報表示

$ brew info <Formula名>

Formulaの更新履歴をブラウザ上のGithubで表示

$ brew info --github [Formula名]

インストール済みパッケージの一覧

("list" は "ls" でも可)
"--versions" オプションにてパッケージのバージョンを表示

$ brew list [--versions]

インストール済みパッケージの中で最新ではないものを表示

$ brew outdated

最新ではない(outdated)なパッケージを最新のものにする

Formulaではなくパッケージ本体を最新のものにします。
Formula名を指定しなかった場合は全てのパッケージが最新ものに更新されます。

$ brew upgrade [Formula名]

古いバージョンのパッケージを削除
パッケージを指定しなかった場合は、全パッケージの古いバージョンが削除されます

$ brew cleanup [パッケージ名]

homebrew本体を更新

$ brew update

homebrew本体の情報を表示

$ brew --config

homebrewの環境情報を表示

$ brew --env

homebrewの状態確認

homebrewの調子が悪い時はこれでエラー探索

$ brew doctor

ヘルプ

よく使うコマンドの簡単な説明が表示されます。
詳しい情報は載っていません。
より詳しい情報が見たい場合は ”man brew” で確認しましょう。

$ brew help

パッケージを個別に更新する場合

インストール済みパッケージを全て最新のもの更新する場合は、前述の "brew upgrade" にて行うことができますが、このコマンでは個別更新は行えません。

追記(2012/10/09):
"brew upgrade"コマンドにてパッケージの個別更新が行えるようになったようです。

パッケージを個別に更新したい場合は、再度 "brew install" コマンドを実行します。
また、以前のバージョンのものは削除されずに残されるため、いつでも前のバージョンに戻すこともできます。

例えば、
homebrewでインストールしたnmapコマンドを更新したい場合

バージョンアップ前の状態を確認

$ brew outdated
nmap (5.35DC1 < 5.51)

$ nmap --version
Nmap version 5.35DC1 ( http://nmap.org )

$ ls -l /usr/local/Cellar/nmap/
total 0
drwxr-xr-x  6 user staff 204 2010-11-21 22:37 5.35DC1/

$ ls -l `which nmap`
lrwxr-xr-x 1 user staff 31 2010-11-21 22:37 /usr/local/bin/nmap -> ../Cellar/nmap/5.35DC1/bin/nmap*

バージョンアップを実行

$ brew install nmap
==> Downloading http://nmap.org/dist/nmap-5.51.tar.bz2
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/nmap/5.51 --without-zenmap
==> make
==> make install
/usr/local/Cellar/nmap/5.51: 283 files, 13M, built in 104 seconds

バージョンアップ後の状態

$ nmap --version
Nmap version 5.51 ( http://nmap.org )

$ ls -l /usr/local/Cellar/nmap/
total 0
drwxr-xr-x 6 user staff 204 2010-11-21 22:37 5.35DC1/
drwxr-xr-x 6 user staff 204 2011-02-26 18:53 5.51/

$ ls -l `which nmap`
lrwxr-xr-x 1 user staff 28 2011-02-26 18:53 /usr/local/bin/nmap -> ../Cellar/nmap/5.51/bin/nmap*

バージョンアップ後は、nmapコマンドへのシンボリックリンクが変更され、最新のnmapコマンドが使用できるようになりました。

また、Formulaが既に最新の状態でinstallコマンドを実行すると、以下のように「既にインストールされています」と表示されます。

$ brew install nmap
Formula already installed: /usr/local/Cellar/nmap/5.51

応用編その1

知っておくと役に立つかもしれない情報

homebrewのHPをブラウザで表示

$ brew home

FormulaのHPをブラウザで表示

$ brew home <Formula名>

Formulaの中身を表示

$ brew cat <Formula名>

インストール時に指定できるオプションを表示します。

$ brew options <Formula名>

指定パッケージのインストール可能なバージョンを表示

$ brew versions <Formula名>

HEADバージョンのパッケージをインストール
"--force" オプションにて強制インストール

$ brew install -v --HEAD <Formula名>

シンボリックリンクを作成

通常はinstall時に自動で行われますが、Macに元からインストールされているコマンド等の場合は、明示的に行わなければならい場合があります。
システムに影響が出る場合があるため使用は慎重に
ただし、下記のリンク削除コマンドにて削除したリンクを元に戻す場合はその限りではありません。

$ brew link <Formula名>

シンボリックリンクを削除
シンボリックリンクを削除することで、パッケージをアンインストールしないで一時的に無効にすることができます。
元に戻す場合は "brew link" コマンドを使用

$ brew unlink <Formula名>

デッドリンクの削除

$ brew prune

依存関係を表示

"--installed" オプションにてインストール済みFormulaに限定して表示

$ brew uses --installed <Formula名>

homebrewのインストールディレクトリのプレフィクスを取得

prefixデフォルト: /usr/local
cellarデフォルト: /usr/local/Cellar
シェルスクリプトを書く場合などに使用するとインストールディレクトリに依存しないスクリプトが書けます。

$ brew --prefix
$ brew --cellar

応用編その2 - リポジトリの追加

"brew tap" コマンドを用いて公式にはないリポジトリを自由に登録することができます。

以下のリポジトリを登録しておくと思わぬところで役に立つかもしれません。

非公式のフォーミュラ全般を扱うリポジトリ

$ brew tap adamv/alt

追記(2013/01/15):
使用するとWarningが表示される ようになったので削除

Warning: adamv-alt is deprecated; please untap it

Macに元からインストールされているソフトのフォーミュラを扱うリポジトリ
新しいバージョンのものを使用したい場合などに重宝
(e.x. 最新のgrepコマンドを使用したい場合 など)

$ brew tap homebrew/dupes

公式とは異なるバージョンのフォーミュラを扱うリポジトリ
最新とは異なるバージョンのソフトを利用したい場合などに使用
(e.x. Tomcat6, MySQL5.1, Python2.x, Python3.x など)

$ brew tap homebrew/versions

メンテナンス不足や解決できない問題により公式リポジトリから外されたフォーミュラを扱うリポジトリ (boneyard : 墓場, がらくた置き場)
※ ここにあるものをインストールする場合は動作が保証されていないので要注意
不要な方はリポジトリを追加しなくても良いかと

$ brew tap homebrew/boneyard

PHP関連のリポジトリ (PHPを使わない人は不要かと)

$ brew tap josegonzalez/php

設定確認

$ brew tap
homebrew/boneyard
homebrew/dupes
homebrew/versions
josegonzalez/php

削除したい場合

$ brew untap <リポジトリ名>

応用編その3 - zshと併用してさらに便利に

以下にまとめました。

zshを使用している場合はぜひ参照下さい。

homebrewのアンインストール

homebrewでインストールしたzshなどを起動シェルに設定している場合は、アンインストール前に設定を戻して下さい。

アンインストールは以下のURLにあるスクリプトを実行します。

その後環境変数を手動で削除します。