Yosemiteをインストールする前に/usr/localをどこかへ退避して時間短縮(ただしインストーラ任せの方が安全)



Yosemite まだ入れてないのですが、 Homebrew とか TeXLive/MacTeX とかで /usr/local をいじっている人向けの tips を拾ったのでご紹介。
その他もろもろも。

2015/10/1追記:El Capitanでは/usr/localを移動させないほうが安全

Yosemite のアップグレード時間を短縮するための hack でやっていたような /usr/local を退避して~というのを何も考えずにやると大いに事故る確率が高いという結果となった。

El Capitan で Homebrew を使いたい場合には別エントリを書きましたのでそちらもご覧ください。

(追記ここまで)

/usr/localを退避しない場合でも時間が掛かるだけ

この記事を見て「死んだ」「遅かった」「あぶねー」などとはてブ又はツイートしてる人が多いようなので、念のために先に掲げておきます。
/usr/local を退避しなかった場合でも単に時間が余計に掛かるだけ で、特に弊害は生じないはずです。更に言えば、この手順に倣って 不用意に /usr/local を移動させたことにより弊害が生じるおそれもあります (責任は負いかねます)。
追記:コメント欄にトラブル報告が上がっています( @marmot1123 さんご報告ありがとうございます)。

tips

  1. Yosemite のインストーラは /usr/local を移動させるので、インストールする前に手動で退避させておくとインストール時間が短くなる
  2. Yosemite インストーラのログは ⌘L で見れる
  3. /usr/local を退避せずに、できるだけ /usr/local を小さくして Yosemite インストール実行という方法もある(後半にその方法を解説しました)
  4. もしかしたら /usr/local/Library/brew.rb の shebang が #!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -W0 のようにRuby 1.8 指定になっているかもしれない(このままだと Yosemite で Homebrew が動かない)。ので #!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby -W0 に変更しておく(なお私の環境での shebangは Current でしたので、 Homebrew を入れた時期によるかも)(追記:2014年6月に変更してますね。brew.rb の shebang の治し方を追記しました。)
  5. OSXFUSE や Trim Enabler など未署名 kext は野良扱いされて読み込まれないらしい。 sudo nvram boot-args="kext-dev-mode=1" で基本的には回避できそう(ただし 自己責任 でヨロ (特に Trim Enabler 。下のAppleちゃんねるリンク参照))
  6. 起動可能な Yosemite インストールディスクを(8GB以上の) USB メモリやSDカードなどに作成しておきましょう
  7. 「残り○分」を信用しない(w

/usr/local退避

警告:シェルを/usr/local/bin以下のものに設定している場合

元に戻しておきましょう。 本当に死にかけますコメント欄参照)。

注意:最近 brew update してない場合

すぐに brew update しましょう。
これだけで上記4番を回避できる(はず)。
brew doctor して brew update というコンボを強くオススメします。

作業手順

前準備を全て終えてから sudo mv /usr/local ~/local 、そして Yosemite インストール。そして sudo mv ~/local /usr/ で戻す。
ただしその際に /usr/localが存在する ならば移動に失敗します。移動に失敗した場合には、 状況を確認しながら移動する必要があります

/usr/local退避が面倒ならば

もう一度書きます。
/usr/local を退避しなかった場合は、単に時間が余計に掛かる だけ です。
ので、上記作業が面倒であれば、寝る前にインストール作業を開始しましょう。朝には終わっているでしょう。 そのほうが安全 だと思います。

/usr/local退避の代わりに/usr/localを整頓/縮小して時間短縮

タイトルと違ってくるのですが… /usr/local の整頓を行うことで Yosemite インストールの時間短縮を図るやりかたもあります。
Faster Mac OS X 10.10 Yosemite Upgrades for Developers – Jim Lindley
の Option 2 に載ってます。
正直なところ、こちらのほうが /usr/local 退避よりも適切な方法かと思われます

  1. 追記:まず brew update を行うことで /usr/local/Library/brew.rb を更新しておく
  2. フルバックアップを取る(Time Machine で取っておけば大丈夫でしょう
  3. brew doctorbrew missing で問題ないことを確認
  4. brew leaves で依存性のない Formula をリストアップし、不要なもの FORMULA をまとめて削除 brew uninstall FORMULA --force する(brew rm / brew remove / brew uninstall は全て同じです)
  5. brew cleanup で古い Formula をまとめて削除
  6. Homebrew 以外で /usr/local に入れたライブラリや実行ファイルなども整頓(一旦アンインストールして Yosemite インストール後に再度インストールするのも一考
  7. 最後にまた brew doctor で確認
  8. Yosemite インストール
  9. Homebrew 動作確認。うまく動かなければ brew doctorbrew update で確認

2015/5/2追記:以下で作られるシェルスクリプトを作成して控えておき、 Yosemite インストール前に Homebrew を全て消してしまい、インストール後にシェルスクリプトを実行する、のも良いと思います。

なお、 Homebrew の全削除は以下で行えます。

How do I uninstall Homebrew?

To uninstall Homebrew, paste the command below in a terminal prompt.
bash
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

homebrew/FAQ

トラブル対策

Yosemite インストールに伴う Homebrew の対策用資料を貼っておきます。
(つまり Yosemite にした あと の対処法)


brewのinstall時を思い出して、慌てず騒がず xcode-select --install を実行して、コマンドラインツールを入れればOK。
- Yosemiteにしてbrew doctorするclangがない!と怒られる場合の対応 - Qiita



/usr/local/Library/brew.rbのshebangをgitコマンドで治す

$ cd /usr/local
$ git fetch origin master:refs/remotes/origin/master -n
$ git checkout origin/master -- Library/brew.rb

参考