Snow Leopardにアップデートした後に気をつけること 主にMacPortsとrubygemsについて


MacPortsRubygemsが怪しい挙動を示すんですね。MacPortsが依存を解決せずに中断したり、gems が モノによっちゃrequireできなかったり・・・。この二つ、開発者にとっちゃ致命的な問題。MacPortsはpkgのバージョンチェックでこけたので自分でビルドしたんですが、それが悪いのかと思って調べていたところ、海外の方に既に報告されていました。(日本だと全く情報がありませんでした)

参考 evolution - Snow Leopard with legacy macports and rubygems


LeopardのユーザーはおそらくOSに載っている標準のRubyを使っていて、既に大量のmacportsrubygemsがあることだと思われます。そして Snow Leopard へそのまま更新することでしょう。(クリーンインストールではなく) 問題は標準のOS 10.6のdynamic libraries は 64bit で動作していて 32 bit コードにリンクが張られないことです。これらはmacportsrubygemsの全てをリビルド、再インストールでなおります。


1. Install the latest Xcode shipped with Snow Leopard.

XcodeSnow Leopardのインストール

2. “port” command will fail with a message about incompatible Tcl architecture. The proper version of macport is 1.8 which is not released yet. You can obtain it from SVN trunk and built it by hand (./configure && make && sudo make install). I have also added trunk version of ports to sources.conf (see the link above for instructions) to be sure that I have the latest SL-compatible ports in the list. Maybe this is was wrong assumption, but it worked for me just fine.


3. Remove all ports:
$ sudo port -f uninstall installed


4. Update rubygems to 1.3.1 at least (please google for instructions).

Rubygemsを1.3.1以上にアップデートします (ググれ)

5. Remove vendor gems (gem uninstall refuses to remove them and fails to do batch remove):

$ gem list | cut -d” ” -f1 > installed_gems
$ sudo mv /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8.bak
$ sudo mkdir /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8

Note: installed_gems file contains a list of all installed gems so that you can cat and xarg it for installing all gems back.

installed_gems file は全てのインストール済み gemsのリストが含まれているのであとで元に戻すために cat してxarg

6. Uninstall all gems
$ sudo gem list | cut -d” ” -f1 | xargs sudo gem uninstall -aIx


7. Make the rubygems use 64 bit architecture.

$ cat installed_gems | xargs sudo env ARCHFLAGS=”-Os -arch x86_64 -fno-common” gem install ―no-ri ―no-rdoc

Note: it is NOT i686 (as I thought it should be), it is x86_64 instead.


Here are convenient aliases for “sudo gem install” for both architectures:

alias sgi32=”sudo env ARCHFLAGS="-Os -arch i386 -fno-common" gem install ―no-ri ―no-rdoc”
alias sgi64=”sudo env ARCHFLAGS="-Os -arch x86_64 -fno-common" gem install ―no-ri ―no-rdoc”


You may also put alias sgi=”sgi64” in your .bash_login on snow leopard.
Now we all can proceed doing productive work. \o/

.bash_login に alias sgi=" sgi64"