その他
    ホーム技術発信DoRubydmgファイルの作り方

    dmgファイルの作り方

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    初めまして、もじら組組長ことたろちゃんです。はてなではid:smellmanで通っております。もっともメインのハンドルネームはbtmだったりするのですが、最近smellmanの方が有名だったりしてちょっとへこみ気味です。

    さて、今回はMacOSXでよく使われているdmgファイルの作り方について説明をしたいと思います。

    まず、dmgファイルを作成する手順を簡単にまとめてみましょう。

    1. 空のdmgファイルを作成し、マウントする
    2. マウント先にファイルをコピーする
    3. マウントを解除する
    4. dmgファイルを配布用DMGファイルに変換する。

    まずは空のdmgファイルを用意するのですが、その前に必要なディスク容量を計測しておきましょう。ディスク容量を計測する手っ取り早い方法は du -sk を使う方法です。このコマンドではキロバイト単位でファイルが利用している容量がわかります。$ du -sk /Applications/My\ App.app
    42464    /Applications/My App.app

    今回は42464kbで大体42MB必要だという事がわかります。実際空のディスクを作る際には少し多めにディスク容量を設定します。今回は50MBを取りましょう。

    空のdmgファイルを作成するには以下のコマンドを入力します。$ hdiutil create -size 50m -type UDIF -fs HFS+ -volname “My App” -layout NONE myapptest.dmg
    …………………………………………………………………….
    created: /Users/tmatsuzawa/tmp/disk/myapptest.dmg

    これで空のdmgファイルが作成されたので、マウントをしましょう。マウントを行うには hdid コマンドを利用します。$ hdid myapptest.dmg
    /dev/disk1                                                 /Volumes/My App

    これで/dev/disk1に/Volumes/My App というボリュームがマウントされた事になります。もちろんFinderからも閲覧可能です。

    あとはマウント先にファイルをコピーをするのですが、Finderごしに行うと.DS_storeファイルが生成されてしまうので、 ditto コマンドを使ってコピーをしましょう。また、リソースフォークを含めるように -rsrcFork オプションを追加します。$ ditto -rsrcFork /Applications/My\ App.app /Volumes/My\ App/My\ App.app

    次にhdiutil eject コマンドでマウントを解除します。$ hdiutil eject disk1
    “disk1” unmounted.
    “disk1” ejected.

    最後に配布用のdmgファイルに変換します。変換には hdiutil convert を利用します。 -format オプションで生成するイメージの形式を指名します。 UDZO では zlibを使って圧縮されたリードオンリーなディスクイメージとなります。$ hdiutil convert -format UDZO -o myapp.dmg myapptest.dmg
    イメージ作成エンジンを準備中…
    ディスク全体 (Apple_HFS : 0) を読み込み中…
    …………………………………………………………………….
      (CRC32 $4482ED93:ディスク全体 (Apple_HFS : 0))
    リソースを追加中…
    …………………………………………………………………….
    経過時間: 2.096s
    ファイルサイズ:18126020 バイト、チェックサム:CRC32 $555590C7
    処理されたセクタ数:102400、87361 圧縮されました
    速度:20.3M バイト/秒
    節約率:65.4%
    created: /Users/tmatsuzawa/tmp/disk/myapp.dmg

    ファイルが作成できたら myapp.dmg を試しにマウントしてみましょう。$ open myapp.dmg

    中身が正常に表示されていていれば成功です。あとはこのファイルを自由に配布する事ができます。