scramble cadenza

技術ネタのガラクタ置き場

homebrew の install path を変更して、install 済みパッケージを入れなおすの巻

イントロ

年末になったので、自宅 PC を EL Captain にしました。 噂には聞いてたが、/usr/local 周りの権限問題により、普通に install すると躓くところが出てくる。困る。

おまけに解決方法が sudo chown -R $(whoami):admin /usr/local ってどうことだよ、と。 こんな理不尽な方法があっていいのか。

homebrew/El_Capitan_and_Homebrew.md at master · Homebrew/homebrew

自分以外 mac 使わないし、一度は面倒さに屈して、上記のコマンドをしぶしぶ受け入れましたが もう我慢ならぬ ということで、install path を変更して homebrew を再 install しました。

brew bundle

まずは落ち着いて brew bundle を入れる。

% brew bundle
==> Tapping homebrew/bundle
Cloning into '/Users/argerich/.homebrew/Library/Taps/homebrew/homebrew-bundle'...
remote: Counting objects: 49, done.
remote: Compressing objects: 100% (46/46), done.
remote: Total 49 (delta 2), reused 12 (delta 0), pack-reused 0
Unpacking objects: 100% (49/49), done.
Checking connectivity... done.
Tapped 0 formulae (111 files, 472K)

とやると、勝手に tap してくれる。 引き続き、今 install している package を dump する。

% brew bundle dump

Brewfile が作成されていることを確認する。ついでに中身もチェックしておく。

install path を決める

適当に決める。 Homebrew のインストール先を変更する - Qiita を見ると /opt/homebrew とあるが、私は ~/.homebrew とした。

理由はルートディレクトリのすぐ近くに、ユーザー固有の権限を持つディレクトリを掘りたくなかったから。/usr/local の二の舞い感がする。

どうせユーザー固有の権限を持つディレクトリを掘るなら、ホームディレクトリでいいかなと考えた。本当に適当です。

決めたら先に path を通しておく。 一時的にとはいえ、brew を uninstall すると色々使えなくなるので、やっておくのが無難。

export PATH=$HOME/.homebrew/bin:$PATH

uninstall するその前に

zsh

homebrew で install した zsh を使っている場合は、shell が起動できなくて詰みそうになるので、デフォルトの shell を変えておく。

もし変更しないとターミナルが起動しなくなり、コマンドを打たせてもらえない。
(クリーンインストールをマジで考えた)

この場合は冷静に mac 標準のターミナルから起動する shell を指定し対処する。
Terminal - Mavericksにしたらターミナルが - Qiita

こういう状態にならないためにも、予め適当に変えておくと良いと思う

echo $SHELL
# => /usr/local/bin/zsh なら homebrew で install した zsh を使っている
chsh -s /bin/bash # デフォルトシェルを bash に変更

git

alias git="hub" とやっているそこの君! 安易の homwebrew を uninstall すると、git clone すらできないので、気をつけよう。

% cd ~ && git clone https://github.com/Homebrew/homebrew.git .homebrew
zsh: command not found: hub
_direnv_hook:1: command not found: direnv

uninstall

ようやく homebrew を消し去る。 homebrew/FAQ.md at master · Homebrew/homebrew に方法が書いてある。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

勿論いきなりこれを実行するのではなく、curl 先の ruby スクリプトを念のため読む。 良さそうだと思ったら、勇気を出して実行する。

/usr/local/bin/
/usr/local/etc/
/usr/local/lib/
/usr/local/share/
/usr/local/var/

You may consider to remove them by yourself.
You may want to restore /usr/local's original permissions
  sudo chmod 0755 /usr/local
  sudo chgrp wheel /usr/local

_direnv_hook:1: command not found: direnv # direnv 様がお怒りに….

ゴミが残ってしまった。これは適当に掃除する。
(/usr/local って 0755 だっけ...?)

再 install

消し去ったら homebrew を 再 install する。

ここで注意するのが、tarball を使った install を行わないこと。

homebrew/Installation.md at master · Homebrew/homebrew

tarball なので、.git ディレクトリが含まれてないからです。.git がないと、brew bundle を install できない。

なので普通に clone する。

% cd ~
% /usr/bin/git clone https://github.com/Homebrew/homebrew.git .homebrew

ちゃんと install 先の path が変わっているか確認する HOMEBREW_PREFIX まわりを見れば良さそう。

% brew —config
HOMEBREW_VERSION: 0.9.5
ORIGIN: https://github.com/Homebrew/homebrew.git
HEAD: 8eda6f6417c09a03486353f1c4565bfd2bdbc84b
Last commit: 13 minutes ago
HOMEBREW_PREFIX: /Users/argerich/.homebrew
HOMEBREW_REPOSITORY: /Users/argerich/.homebrew
HOMEBREW_CELLAR: /Users/argerich/.homebrew/Cellar
HOMEBREW_BOTTLE_DOMAIN: https://homebrew.bintray.com
CPU: quad-core 64-bit haswell
OS X: 10.11.2-x86_64
Xcode: 7.2
CLT: 7.2.0.0.1.1447826929
Clang: 7.0 build 700
X11: N/A
System Ruby: 2.0.0-p645
Perl: /usr/bin/perl
Python: /Users/argerich/.pyenv/shims/python => /Users/argerich
Ruby: /usr/bin/ruby => /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
Java: N/A
_direnv_hook:1: command not found: direnv

再度 brew bundle

Brewfile が置かれているディレクトリに移動して以下を実行。

% brew bundle
Succeeded in tapping benswift/extempore
Succeeded in tapping caskroom/cask
Succeeded in tapping homebrew/binary
Succeeded in tapping homebrew/boneyard
Succeeded in tapping homebrew/bundle
...

後は待つだけ。

まとめ

brew bundle と組み合わせれば、sudo chown -R $(whoami):admin /usr/local に屈しないで済む。
package を install すると環境がパワーアップして便利だけど、こういうぬるま湯に浸かってしまうと、イザという時に普段やってることが何もできなくて、とても困ることになる。

そういう時に備えて、せめて vi は素で使えるように訓練したい(実際している)と常々思う。
幸い普段は emacs 使ってるので、vi は何もカスタマイズせずとも普段の生活に支障はない。

みんなも emacs 使おう。