2008-02-10

Mac OS Xでのパッケージ管理

趣味のコーディング環境をVMのUbuntuからMac OS Xに移動するにあたって、考えどころはパッケージ管理。VMを介さずともPOSIXネイティブコードが動く環境を手に入れた代償に、Ubuntuの「aptだけでほぼ完結」という、メンテナたちの不断の努力の成果を手放さなければならないのだ。Mac OSでのアプリケーション配布はいろいろ形式があるようだ:
*.pkg
いわゆるインストーラ。でもアンインストールの機能はない。/Library/Receipts配下にインストールログっぽい証跡が残るので、*.domlsdomコマンドに通すと削除すべきファイルは分かるようになっている。でもパッケージによっては何も残してくれない。
*.mpkg
*.pkgを束ねたものっぽい。メタパッケージみたいなものか。
*.app
アプリケーションバンドル。実体はディレクトリで、その下にバイナリとかリソースファイルが転がってる。/Applicationsにそのままコピーするとインストール完了。アンインストールも基本は削除だけっぽいが、ものによっては/Libraryとか~/Libraryの配下にファイルを残しているので、それも消さないとだめっぽい。
*.dmg
ディスクイメージ。実行するとマウントされる。中をみるとたいてい*.m?pkgか*.appが入っている。
なんとどれもアンインストール機構を備えていない。この辺は強く改善を要望したいところ。別にインストール厨じゃなくても、パッケージのバージョンアップとかは普通に必要になるし、この辺は確実にできる仕組みが備わってるのが「現代的OS」じゃなかろうか。

で、ことPOSIXなアプリケーションであれば、アンインストール機構まできちんと備えたパッケージングシステムがサードパーティでメンテナンスされている:こういうのは、メンテナとパッケージの数が多い方が強いので、さしあたりMacPortsを選択。多勢が決したら乗り換えるかもしれないけど。MacPortsはLeopardなら先にXcodeを入れて、X11をXquartsの配布でアップデートしろと言ってるので、その通りやった。この辺の手順は検索すればいつでも出てくるので書かない。

ちょっと困ったのが、Pythonのライブラリ。MacPortsだと/opt/local配下にインストールされるので、OSに標準でついてくるPythonから読ませるためにはPYTHONPATHを変更しなきゃいけないし、2.5向けのパッケージで致命的に抜けているのがあったり、結局tracは開発版を使うことになるので、どこかでPython-eggとかで手で入れなきゃいけないのが出てくるし、そうするとportで完全にアンインストールできなくなるし。中途半端に一元化するのはあとあと面倒ということで、Pythonは当面OS付属のを使うことにする。
MacPortsのメンテナンスが強化されるか、自分がメンテナンスに乗り出すかすれば、Portsを使うことにすると思うんだけど。

標準で入っているPythonは2.5.1で、/System/Library/Frameworks/Python.framework/Versions/2.5へのシンボリックリンクになっている。setuptoolsとか、Subversionバインディングとかは、件のディレクトリに入ってる状態。easy_installすればたいていのものは揃いそう。インストール先は件のディレクトリでも/usr/lib/python2.5/site-packagesでもなく、/Library/Python/2.5/site-packagesになる。ここはPython-eggs専用らしい。またコンソールスクリプトは/usr/local/binにインストールされる。システムにビルトインされているのと、自分が入れたのが明確に分離されるというのも、標準のPythonで何とかなると思った理由だったり。うーむ。python setup.py bdist_mpkgでせっかくパッケージが作れるのに、アンインストール機能がパッケージャについてないのは残念だなぁ。

とりあえず、easy_installで入れたパッケージ達:
  • Mercurial
  • hgsvn
  • Pygments
  • pytz
  • Genshi -- trunkから
  • Trac -- trunkから

0 件のコメント: