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


DP版ユーザーとして先走って3ヶ月前から使っていました。たぶん修正されないであろう問題があったので、ここに書いておきます。

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.

1.8の正式なバージョンが無いのでSVNのtrunkから手動でリビルドします。

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

全てのportsを削除します

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

全てのgemsの削除

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.

rubygemsに64bitアーキテクチャを使わせる

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”

aliasの設定

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"
これで問題なけりゃ動きますよ!\o/



以上。これ、たぶん正式版でも修正されない問題だと思います。これ以外にどんな影響が出るか、僕は詳しくないのでわかりません!