[macOS] .dmg & .pkgファイルの中身を確認する方法

投稿者: | ↻ : 2019年1月28日

多くのmacOS向けのアプリケーションを配布しているサイトでは、.pkgファイルや.dmgファイルが利用されています。
インストール前に、これらのファイルに何が含まれているかを確認したい場合があると思います。

たとえば、Vagrantの公式サイトで配布されている.dmgファイルとか…
なので、これらのファイルの中身を確認する方法をまとめます。

検証環境


$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.12.6
BuildVersion:	16G29

ファイル形式の説明

.pkgファイルとは

アプリケーションを配布するために、productbuildコマンドで作成した、製品アーカイブ(product archive)と呼ばれるファイルで、拡張子に.pkgが付けられます。

詳細はproductbuildコマンドのmanページで確認できます。

.dmgファイルとは

公式の「Appleサポート」ページのディスクイメージを作成するからの引用

ディスクイメージ
ディスクイメージ(*.dmg ファイル)とは、マウント可能なディスクやボリュームのように表示され、動作するファイルです。「ディスクユーティリティ」または hdiutil を使用して、ディスクイメージを作成できます。

詳細はhdiutilコマンドのmanページで確認できます。

ディスクイメージ(.dmgファイル)をコマンドで操作するには

ディスクイメージ(.dmgファイル)は、システムにマウントすることで使用可能になります。
Finder上でダブルクリックすればマウントされます。
(※ DiskImageMounter.appに関連付けられているためです)

しかし、出来るだけシェル上で作業できるようにコマンドで操作を確認しておきます。

ディスクイメージをマウントするには

hdiutil attachコマンドを使用します。


$ hdiutil attach vagrant_2.0.0_x86_64.dmg 
期待される結果 CRC32 $07F4946A
/dev/disk2          	GUID_partition_scheme          	
/dev/disk2s1        	Apple_HFS                      	/Volumes/Vagrant

/Volumes以下にマウントされ、Finderからもマウントされていることが確認できます。

マウントされているディスクイメージの情報を取得するには

ディスクイメージがマウントされている状態でhdiutil infoを使用すると、マウントされているイメージの情報が取得できます。


$ hdiutil info 
framework       : 444.50.16
driver          : 10.12v444.50.16
================================================
image-path      : /Users/stupiddog/Downloads/vagrant_2.0.0_x86_64.dmg
image-alias     : /Users/stupiddog/Downloads/vagrant_2.0.0_x86_64.dmg
shadow-path     : 
icon-path       : /System/Library/PrivateFrameworks/DiskImages.framework/Resources/CDiskImage.icns
image-type      : UDIF読み出し専用圧縮(zlib)
system-image    : false
blockcount      : 204800
blocksize       : 512
writeable       : false
autodiskmount   : TRUE
removable       : TRUE
image-encrypted : false
mounting user   : stupiddog
mounting mode   : 
process ID      : 43275
/dev/disk2	GUID_partition_scheme	
/dev/disk2s1	48465300-0000-11AA-AA11-00306543ECAC	/Volumes/Vagrant

ディスクイメージをアンマウントするには

hdiutil detachコマンドを使用します。
アンマウントする対象は、マウントポイント(/Volumes/Vagrant)か、デバイスノード(/dev/disk2)で指定できます。
デバイスノードでは対象を判別しづらいので、マウントポイントの指定が良いかと思います。


$ hdiutil detach /Volumes/Vagrant/
"disk2" unmounted.
"disk2" ejected.

$ hdiutil info
framework       : 444.50.16
driver          : 10.12v444.50.16

.pkgファイル内のファイルリストを取得するには

–payload-filesオプションを付けて、.pkgファイルを指定します。


$ pkgutil --payload-files /Volumes/Vagrant/vagrant.pkg
.
./bin
./bin/vagrant
./embedded
./embedded/bin
./embedded/bin/atlas-upload
./embedded/bin/bsdcat
./embedded/bin/bsdcpio
./embedded/bin/bsdtar
./embedded/bin/c_rehash
./embedded/bin/curl
./embedded/bin/curl-config
./embedded/bin/erb
./embedded/bin/gem
./embedded/bin/iconv
./embedded/bin/irb
./embedded/bin/openssl

...省略

まとめ

以上で、.pkgファイルの中身を確認することが出来ます。
pkgutilコマンドは、もっと機能があるので別途調べることにします。

おまけ

hdiutilコマンドに、よく似ているhidutil(HID event system debug utility)なんてコマンドがあるので、打ち間違わないように注意しましょうっノω≦)