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
使おう。