I’ve put together a script for creating DMG files without using OS X…it requires Linux, I’ve tested it on Kubuntu 7.10 but it should work on anything recent.
Run the following commands:
# This gets and builds a patched version of Apple's diskdev_cmds package which will work on Linux
wget http://www.mythic-beasts.com/resources/appletv/mb_boot_tv/diskdev_cmds-332.14.tar.gz
wget http://www.ecl.udel.edu/~mcgee/diskdev_cmds/diskdev_cmds-332.14.patch.bz2
tar xzf diskdev_cmds-332.14.tar.gz
bunzip2 -c diskdev_cmds-332.14.patch.bz2 | patch -p0
cd diskdev_cmds-332.14
make -f Makefile.lnx
# Create symlinks to the mkfs and fsck commands for HFS+
sudo cp newfs_hfs.tproj/newfs_hfs /sbin/mkfs.hfsplus
sudo cp fsck_hfs.tproj/fsck_hfs /sbin/fsck.hfsplus
# Get and enable the hfsplus kernel module
sudo apt-get install hfsplus
sudo modprobe hfsplus
Now that’s done, you can use the following handy bash script (must be run as root) I’ve written to create a DMG file which contains the contents of a directory you specify on the command line.
#!/bin/bash
# DMG Creation Script
# Usage: makedmg <imagename> <imagetitle> <imagesize (MB)> <contentdir>
#
# imagename: The output file name of the image, ie foo.dmg
# imagetitle: The title of the DMG File as displayed in OS X
# imagesize: The size of the DMG you’re creating in MB (Blame Linux for the fixed size limitation!!)
# contentdir: The directory containing the content you want the DMG file to contain
#
# Example: makedmg foo.dmg “Script Test” 50 /home/jon/work/scripts/content
#
# Author: Jon Cowie
# Creation Date: 02/04/2008
if [ ! $# == 4 ]; then
echo “Usage: makedmg <imagename> <imagetitle> <imagesize (MB)> <contentdir>”
else
OUTPUT=$1
TITLE=$2
FILESIZE=$3
CONTENTDIR=$4
USER=`whoami`
TMPDIR=”/tmp/dmgdir”
if [ ${USER} != "root" ]; then
echo “makedmg must be run as root!”
else
echo “Creating DMG File…”
dd if=/dev/zero of=${OUTPUT} bs=1M count=$FILESIZE
mkfs.hfsplus -v “${TITLE}” ${OUTPUT}
echo “Mounting DMG File…”
mkdir -p ${TMPDIR}
mount -t hfsplus -o loop ${OUTPUT} ${TMPDIR}
echo “Copying content to DMG File…”
cp -R ${CONTENTDIR}/* ${TMPDIR}
echo “Unmounting DMG File…”
umount ${TMPDIR}
rm -rf ${TMPDIR}
echo “All Done!”
fi
fi
Hope it’s useful!