UPDATE (10/15/09): I’ve gotten mixed results from some individuals who’ve tried the workaround with 10.6.1. I’m working on and testing an extended workaround that should fix the problem for everyone. Look for that info soon.
— — — —
UPDATE (10/13/09): I’ve updated the article (and posted it as new) with a workaround for the issue that prevented additional packages from being installed. I submitted the bug that this workaround avoids to Apple — id #7247968 — on September 23, 2009.
— — — —
This post is a Snow Leopard update to a process I wrote about when Leopard (10.5) came out. This post will tell you how to create a NetInstall image that will upgrade a Mac running Leopard to the latest version of Snow Leopard in one step. It will also work to upgrade a Mac running Tiger to the latest version of Snow Leopard.
What You’ll Need
- A 10.6 software license, or individual retail copy of Leopard, for each computer you are upgrading from Leopard or Tiger to Snow Leopard — this is easily overlooked, so let’s keep things legal.
- A read/write disk image (.dmg) of a Mac OS X v10.6 Snow Leopard Install DVD (i.e. not shipped with a computer). You’ll convert this to read-only after making a small modification to one of the files.
- One build computer running Snow Leopard with the latest version of Snow Leopard’s Server Admin Tools installed (10.6.0 as of this writing).
- A computer running OS X Server providing NetBoot services — Tiger, Leopard, and Snow Leopard Server will all work
- A copy of the OSUpgrade.pkg found on the Install DVD at /Volumes/Mac OS X Install DVD/System/Installation/Packages. This is a hidden folder, so use Go to Folder from the Finder’s Go menu to reveal it.
- Optional: the latest Combo Updater — 10.6.1 as of this writing. (Yes, it’s not a Combo Update, but only because it’s a .1 updater.)
I. Make a Read-Write Installer Disk Image
As of Mac OS 10.5.7, there has been a bug in in the OS installer that prevents you from successfully adding sizeable packages to your System Image Utility. Fortunately, there is a workaround. I’ll walk you through how to implement it here.
- Insert the OS Install DVD into your drive and then launch Disk Utility (found in /Applications/Utilities).
- Select the Install DVD from the list on the left, then click the New Image icon in the toolbar.
- Rename the image if you like, choose a location to save it, and change the Image Format option to read/write. Click Save to create the read/write disk image.
- When the disk image is done, eject the DVD, select the disk image on the left side of the window, and click the Open icon in the toolbar to mount it.
II. Modify the Disk Image
The reason we need to modify the disk image is because, since 10.5.7, the System Image Utility can’t properly handle additional packages that you add into your workflow. During startup — whether from DVD or via NetBoot — the installer creates a RAM disk to hold the contents of the /private/var directory. This is where additional packages get placed. The RAM disk size specified by Apple’s installer is too small to hold anything but payloadless packages. The following instructions walk you through changing the size of this RAM disk to better accommodate additional packages.
- Open Terminal, navigate to the /etc/ directory on the disk image and open the
rc.cdromfile in your favorite text editor. This file is marked as read-only, so I like to use vi as it allows you to easily write to read-only files. This command will open the file in vi:
vi /Volumes/Mac\ OS\ X\ Install\ DVD/etc/rc.cdrom
- The line you’ll need to modify is ‘
RAMDisk /var/run 1024’. Change
1048576and force vi to write the read-only file. 1048576 is equivalent to 512mb — we’re specifying sectors, which are 512 bytes each — which should be sufficient for any additional packages you want to include in your upgrade NetInstall image. If your vi skills are rusty or missing, follow these step to make this change.
- Use the arrow keys to move the cursor down to the ‘
RAMDisk /var/run 1024’ line and onto the
cw— short for “change word”. The
1024will disappear and vi will enter insert mode, which allows you to add characters to the file.
- Press the Esc key to exit insert mode.
:x!to force the read-only file to be saved and exit vi.
- Use the arrow keys to move the cursor down to the ‘
- Exit Terminal.
III. Convert the Disk Image to Read-only/Compressed
- Go back to Disk Utility, select the mounted disk image on the left side of the window and click the Unmount icon in the toolbar.
- Select the disk image and click the Convert icon in the toolbar.
- Choose compressed from the Image Format menu. Rename the disk image so you know it’s the one you’ve modified, or save it in a different location from your read/write image. Click Save to begin the conversion.
- Exit Disk Utility after the conversion is complete.
Keep this disk image in a safe place as you’ll be able to re-use it when you want to create an updated NetInstall image — say when the 10.6.2 Combo Update is released.
IV. Build your NetInstall Image
If you haven’t yet made a DMG from the Mac OS X v10.6 Leopard Install DVD, do it now. (I use Disk Utility to create a default compressed image.) Mount the disk image and then launch the System Image Utility found in /Applications/Server. The program will auto-detect the mounted disk image as a source and select the NetInstall Image build option.
Click Customize at the bottom of the window to bring up the workflow assembly interface.
The idea here is to drag and drop the components you want from the Automator Library window to the workflow area. The Define Image Source item is added for you at the top, with the Create Image item below it. We’re going to build the simplest possible custom upgrade image, so we’ll add only one more item to our workflow.
First, select the Add Packages and Post-Install Scripts item and drag it over in between the two existing items. Now go to the Finder and locate the OSUpgrade package. and the latest Combo Updater for Snow Leopard. You’ll have to grab the package from the mounted update dmg. (10.6.1 isn’t a combo update since there are no previous updates, but it will work just fine.) Drag the package into the list area of the Add Packages and Post-Install Scripts item.
Then, in the Create Image item at the bottom of your workflow, make sure the NetInstall option is selected in the Type section. Click the Save To drop down and select Other. Select your boot drive from the Devices list in the sidebar and click Open. (You can save directly to a network volume if you want to save yourself a step later, but I like to save mine locally so a network hiccup won’t interrupt the image build process.)
You can probably ignore the Installed Volume field since we’re working on an upgrade, but you can supply the standard volume name of the Macs you manage here. In the Image Name field, enter a descriptive name. In the Network Disk field, enter a name that you’d like the NetInstall set to be advertised as on the network. (If your network is set up to advertise your NetBoot server across the network, your NetBoot/NetInstall volumes will appear in the Startup Disk preferences pane of all the Macs on your network.) Enter a Description if you wish, and then enter a unique Index number. Choose a number between 1-4095 if you have a single NetBoot server. Choose a number between 4096-65335 if you have more than one NetBoot server in a load-balanced configuration.
Now click Save to save the workflow. When a new Combo Updater comes out later, you’ll be able to use this workflow and just drag that package in — removing any older Combo Updaters, of course.
To build the image, click Run. In a few moments, you’ll be asked for your admin credentials, after which the build process will begin. If you want to track the progress, go to the View menu and select Show Log. This is a relatively quick build, so hang around unless you really need a coffee. It should take well under 30 minutes, and as little as 10 with recent hardware.
It’s done! Now what?
Ok, so your NetInstall image was created successfully. All that’s left to do now is to copy it to your server’s (or servers’) NetBootSPx share(s). (I have mine shared via AFP, but your environment may be different.) After you’ve transferred it, use Server Admin to enable the new NetBoot image. Assuming your network is set up in a NetBoot-friendly way, you should now be able to upgrade any Mac under your control from Leopard (or Tiger) to Snow Leopard by booting it with this NetInstall image.
Don’t forget to test, test, test before using this in production.