MacPorts でインストールしたものをディスクイメージで配布する?

MacPorts にはポートファイルのパッケージ化に関するコマンドが用意されている。前からちょっと疑問に思っていたので軽く調べてみた。

パッケージ化に関するコマンドの中に dmg っていうコマンドがあるんだけど、 MacPorts-JP によると…

portname の OS X パッケージを内包する、インターネット上にアップロード可能な形態のディスクイメージを作成します。

ってことになってる。

なんかよくわからんのでとりあえずターミナルで実行してみた。

bash
$ sudo port dmg wine-devel

--->  Computing dependencies for wine-devel
--->  Fetching archive for wine-devel
--->  Unpacking tbz2 archive for wine-devel 1.5.15_0
--->  Creating pkg for wine-devel-1.5.15
--->  Creating disk image for wine-devel-1.5.15

そうすると /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_x11_wine-devel/wine-devel/work にファイルが出来上がる。

ディスクイメージをマウントしてみるとパッケージファイルが入っていて開くとインストーラーが起動する。

このパッケージの中身は destroot にあるものっぽい。確認してみると /opt/local 以下の WINE 関連のファイルが入っている。ということは例えば sudo port install wine-devel で長々とビルドしなくてもコピーだけで済むということなんだろうか。

ポートファイル毎のバックアップとして考えるとなかなか便利かもしれない。

sudo port dmg ではなく sudo port mdmg だと依存関係も含めてディスクイメージを作成してくれるらしい。ということは MacPorts をインストールしていない人に「はい、これあげる」って感じで配布してすぐ使ったりすることもできる…のか?

あれ?これってかなり便利じゃないの???

だって Xcode やら MacPorts やら Homebrew やら fink をインストールしなくてもいいわけで。例えば、WINE が使いたいけど Xcode とか MacPorts インストールのインストール方法ワケワカメな人は既に使ってる人に「パッケージくれ」と頼むだけだけでいいんでしょ?

マシンによってはアーキテクチャの問題もありそうだけど。あとはアンインストールするときの方法か…。パッケージインストーラーでインストールしたものってどうなるんだろう。でもこれなら 「Homebrew をメインに使いつつ、MacPorts のアプリケーションも使う」なんてことも出来そうだなぁ(MacPorts 入ってるマシンが必要だけど)。

他のマシンがないから試せないけど機会があったらやってみよう。


追記

mdmg も試してみました。こちらだと .mpkg が入ったディスクイメージが作成され、依存関係にあるものも含まれているようです。.mpkg.pkg でアイコンがちゃんと違うのが面白い。

ポートのバックアップ手段として覚えておこう。