Tuesday, December 16, 2008

Installing a .dmg application from the command line

An intrepid reader asked the following question:

How do you install a .dmg package from the command line?

Many applications are distributed as disk images, a compressed binary format. If you double click a disk image in the Finder, it is mounted automatically. Once mounted, installation of the application is typically done by dragging an icon to the Applications folder. The same can be accomplished from the command line using two commands, hdiutil and cp.

The following steps show the installation of a popular VNC client for OS X called "Chicken of the VNC". It can be used as a remote desktop client for Linux, Mac, or Windows hosts.

The download file is named "cotvnc-20b4.dmg". Here are the steps needed to install it remotely from the command line.
note: this technique can be used from a local Terminal window or a remote SSH connection.

Mount the disk image

The first step is to mount (or attach) the disk image. From the command line, use:
hdiutil mount cotvnc-20b4.dmg
I received the following output:

Checksumming Driver Descriptor Map (DDM : 0)…
Driver Descriptor Map (DDM : 0): verified CRC32 $767AD93D
Checksumming Apple (Apple_partition_map : 1)…
Apple (Apple_partition_map : 1): verified CRC32 $DD66DE0F
Checksumming disk image (Apple_HFS : 2)…
..............................................................................
disk image (Apple_HFS : 2): verified CRC32 $EF1F362F
Checksumming (Apple_Free : 3)…
(Apple_Free : 3): verified CRC32 $00000000
verified CRC32 $F5A3FFA1
/dev/disk1 Apple_partition_scheme
/dev/disk1s1 Apple_partition_map
/dev/disk1s2 Apple_HFS /Volumes/Chicken of the VNC

A mounted disk image appears on the Desktop, in the Finder, and more importantly shows up as a directory in /Volumes. In this case, the last line of output from hdiutil showed exactly where the disk image was mounted.

Sometimes when a disk image is mounted, it will prompt you to agree to a license first. In that case, the text that would normally appear in a GUI dialog box instead appears in the Terminal window. Once you scroll to the bottom of the agreement, you can type in Y to continue or N to stop. The Firefox disk image is one example of a package that displays a license before mounting.

Install the application

Use the cp command to copy the application to /Applications:

sudo cp -R "/Volumes/Chicken of the VNC/Chicken of the VNC.app" /Applications

The -R switch means to copy recursively, in other words, copy everything from that location including all subdirectories and files below. It is important to leave off the trailing "/" from the "Chicken of the VNC.app" directory, or the command will not copy the directory itself, just the contents. After entering your password, the application will be installed and ready to use.

Most applications can simply be copied to the /Applications directory. However, some are distributed in a .pkg format and must be installed using the installer command instead of cp. To install a .pkg, use this command:

sudo installer -package /path/to/package -target "/Volumes/Macintosh HD"

Unmount the disk image

To tidy up, return to your home directory and unmount the disk image:

cd ~
hdiutil unmount "/Volumes/Chicken of the VNC/"

You should see this message after the unmount:

"/Volumes/Chicken of the VNC/" unmounted successfully.

Installing applications from a .dmg package at the command line is not something you need to do every day. But it is a nice tool to have if you want to install an application on a remote server or script the installation of a package to a group of desktop Macs.