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!
