MacEnterprise: Modularity
Volume Number: 24 (2008)
Issue Number: 04
Column Tag: MacEnterprise
Modularity
Continuing our look at creating deployment images, with an intro to InstaDMG
By Philip Rinehart, Yale University
MODULARITY
Recently, the MacEnterprise list has been talking quite heavily about a topic from last month's article: image modularity. This month, let's take a look at new ways of creating images, focusing on a new tool from afp548.com, InstaDMG. The idea here is that any image can be created quickly, is not machine dependent, and can be deployed across the entire population of managed machines.
INSTADMG
InstaDMG, from afp548.com, starts to address the issues that we talked about in previous articles: scalability, modularity, and flexibility. At its core, a large shell script drives this solution. By using a shell script to drive the process, it is quite transparent, and can be easily understood. The first step to begin using the process is to insert a retail version of Leopard and creating a disk image of it. Wait, doesn't the break the cardinal rule of always using the disks that came with the machine. It does, but read on, and you'll begin to understand why you can break this rule with InstaDMG. At the time of this writing, once the dmg has been created, drop it into the BaseOS folder. You can keep the name as Mac OS X Install DVD.
Next, download each installation package from the Apple download site. As you are working off the retail version of Leopard, each and every download has to be applied to the image. This is where the beauty of InstaDMG begins to come through. Take all of the updates, and place them one at a time in individual folders in the AppleUpdates folder of the InstaDMG tree. There is one caveat, order is important for some packages, and you will have to know that when you create the tree. How do you know? It's a bit of a black art, in that there is nothing that will definitively give you that answer. In general, I've resorted to taking a base installation, taking a base install, and applying all software updates from the command line, paying attention to order of application.
After all of the Apple updates have been ordered, and placed in their correct folders, do the same for any software that you want to add to the base image. Again, placing the installation packages in folders controls order. Note though, that everything has to be packaged, as InstaDMG relies on being driven from the command line installer. These means no VISE installers, no ZeroG installers, nothing but Apple packages. Fortunately on Leopard, this task isn't as difficult as it once was thanks to the new Packagemaker snapshot option. Some packages may also need to be repackaged, as they aren't installed correctly from the command line. I ran into this straight away, as the CiscoVPN installer is a package, but doesn't install correctly from the command line. After repackaging, it was much happier and did work.
Automagic
One of the interesting things that recently was added is a new feature for the installer in Leopard. It allows for item selection directly with the use of an XML file. How does it work? In simple terms, an xml file is fed to installer at the command line, and options are selected or deselected. I'll summarize an excellent post from Patrick Fergus found on the afp548 forums,http://www.afp548.com/forum/viewtopic.php?showtopic=18907.
First, run the installer from the command line in the following way:
sudo installer -showChoicesXML -pkg my.pkg
This dumps an XML list showing all of the choices available in any package installer. Run this command on the OSInstall.pkg from an OS X Installation. Look for the xml tag, choiceIdentifier. Note how they are formed, they should look somewhat similar to the choices provided in a GUI installation dialog. The choice should show as being selected using 1 for selected or 0 for unselected.
Now, create a plain text file, with an array of strings, like so:
<array>
<string>choice1</string>
<string>choice2</string>
</array>
Save it as an xml file. One quick note, you can select/deselect options, even nested ones. Enter the option as many times as you need to click the option to enable it in the GUI. It sounds a bit more complicated than it is. After you have the xml file, check your options using the following command:
sudo installer -showChoicesAfterApplyingChangesXML my.xml -pkg my.pkg
Compare it to the first command above. If the installer doesn't reflect the changes that you entered, then your xml file is incorrect. How does this new ability apply to InstaDMG? Creating an InstallerChoices.xml file can control the options that are installed with the operating system during image creation. Place this file at the root level of the directory. Here's how mine looks:
<array>
<string>AdditionalFonts</string>
<string>X11</string>
</array>
This file installs the Additional Fonts package, as well as the X11 package. Right now, InstaDMG only deals with an InstallerChoices.xml file for the Base OS. In the future, it will accommodate xml files for any other package that can use options.
Last steps
Once all of the packages and updates have been added, it really is simply a matter of running the bash shell script in the InstaDMG package. Launch it, and it will create an ASR scanned image in a rather short period of time. Note, the speed at which the image is created is entirely dependent on the computer that is creating the image. After the ASR image has been created, use whatever method you have to apply the image to a machine. In my usage of this product, I was able to build an image that I could apply to a MacBook Air! Pretty darn cool!
One last note this month, even though I've talked about InstaDMG, there are other programs that are attempting to do similar things. You could also use System Image Utility or PKGImage to do similar things. I just find InstaDMG to be straightforward and simple. With it, I no longer have to maintain a "build" sheet, and any of my staff can use the process a major plus. Until next month, see you on the lists!
Philip Rinehart is co-chair of the steering committee leading the Mac OS X Enterprise Project (macenterprise.org) and is the Lead Mac Analyst at Yale University. He has been using Macintosh Computers since the days of the Macintosh SE, and Mac OS X since its Developer Preview Release. Before coming to Yale, he worked as a Unix system administrator for a dot-com company. He can be reached at: philip.rinehart@yale.edu.
The MacEnterprise project is a community of IT professionals sharing information and solutions to support Macs in an enterprise. We collaborate on the deployment, management, and integration of Mac OS X client and server computers into multi-platform computing environments.