crasch (crasch) wrote,

GEEK: Mount .DMG images remotely via the Terminal

Here is a writeup I did last year on how to download disk images, mount them, and install software from the command line. Very useful when you admin a machine only via SSH.

$ cat HeadlessInstall.txt
10 August 2004 Brett Johnson

This describes some of the steps necessary to perform the
installation of Mac OS X packages via the command line.

1) Download the Package

Download the installation image to a local directory.
I usually download packages to the ~admin/staging directory [a client convention].
Don't try to download it to some target directory like /etc or /usr

I use 'curl' to fetch the package from the net. I usually Ctrl-click
or right-click the package link in Safari (running locally) and select
'Copy link to Clipboard'. This copies the URL to the package to the
clipboard. I then paste the URL into the curl command in a ssh login
window to this server. Note that curl writes its output to stdout,
so be sure to redirect it to a file. For example

% curl > Entropy-PHP-4.3.6-4.dmg

This DOESN'T work for things on SourceForge, where the links are actually
javascript that goes to a mirror. In that case, download it locally,
then use sftp (or Fugu) to move it to this server.

2) If it is a compressed archive, decompress it using the appropriate tool.
For instance suppose you have a .tar.gz file:

% ls

% gunzip xyzzy.pkg.tar.gz
% tar -xvf xyzzy.pkg.tar

3) If it is a disk image file (.dmg) mount it using hdid. By default,
the disk images are mounted under the /Volumes directory. I see no
reason to do otherwise.

% hdid Entropy-PHP-4.3.6-4.dmg
% ls /Volumes
Backup HD Entropy PHP 4.3.6-4 Server HD
% cd "/Volumes/Entropy PHP 4.3.6-4"
% ls
Documentation.html php-4.3.6.pkg

4) Run the command line version of the Mac OS X installer. By default
the installer produces terse output suitable for parsing by scripts
doing installations. We will make the output verbose [human readable].
The installer takes the package name as well as the target Volume.
The installer is /usr/sbin/installer , which should be on the path.
The installer must be run as root, so be prepared to sudo...

% sudo /usr/sbin/installer -verbose -pkg php-4.3.6.pkg -target /

5) Don't forget to unmount the .dmg disk image if you mounted one.
Here we execute the 'mount' command to determine which virtual
disk device our dmg is mounted as (in this case it is /dev/disk2s2).
Then we use 'hdiutil detach' to unmount it.

% mount
/dev/disk0s3 on / (local, journaled)
/dev/disk1s3 on /Volumes/Backup HD (local)
automount -nsl [336] on /Network (automounted)
/dev/disk2s2 on /Volumes/Entropy PHP 4.3.6-4 (local, nodev, nosuid, read-only, mounted by admin)

% hdiutil detach /dev/disk2s2 -force
"disk2" unmounted.
"disk2" ejected.
Tags: dmg, geek, pkg, programming
  • Post a new comment


    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened