<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Managing OS X</title>
	<atom:link href="http://managingosx.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://managingosx.wordpress.com</link>
	<description>Trials and Tribulations of an OS X Administrator</description>
	<lastBuildDate>Tue, 09 Feb 2010 22:26:46 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='managingosx.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/cc4e14a7be2cce7be3ce3a3f75862051?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Managing OS X</title>
		<link>http://managingosx.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://managingosx.wordpress.com/osd.xml" title="Managing OS X" />
		<item>
		<title>Add a user to the admin group via command line 3.0</title>
		<link>http://managingosx.wordpress.com/2010/01/14/add-a-user-to-the-admin-group-via-command-line-3-0/</link>
		<comments>http://managingosx.wordpress.com/2010/01/14/add-a-user-to-the-admin-group-via-command-line-3-0/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 17:58:49 +0000</pubDate>
		<dc:creator>GregN</dc:creator>
				<category><![CDATA[DirectoryService]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://managingosx.wordpress.com/?p=304</guid>
		<description><![CDATA[One of the more visited articles on this site is several years old &#8211; this one on adding a user to the local admin group.
I thought I should update that information since it is somewhat out of date. Apple&#8217;s preferred and recommended way to add a user to the local admin group is to use [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=304&subd=managingosx&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>One of the more visited articles on this site is several years old &#8211; <a href="http://managingosx.wordpress.com/2006/09/15/add-a-user-to-the-admin-group-via-command-line-20/">this one</a> on adding a user to the local admin group.</p>
<p>I thought I should update that information since it is somewhat out of date. Apple&#8217;s preferred and recommended way to add a user to the local admin group is to use <code>dseditgroup</code>, like so:</p>
<p><code><br />
/usr/sbin/dseditgroup -o edit -a gneagle -t user admin<br />
</code></p>
<p>This -a(dds) &#8220;gneagle&#8221;, which is an object of -t(ype) &#8220;user&#8221;, to the group &#8220;admin&#8221;.</p>
<p>To delete a user from the local admin group:</p>
<p><code><br />
/usr/sbin/dseditgroup -o edit -d gneagle -t user admin<br />
</code></p>
<p>You can also use <code>dseditgroup</code> on a network directory service if you have admin credentials for the directory server:</p>
<p><code><br />
dseditgroup -o edit -n /LDAPv3/ldap.company.com -u dsadminusername -p -a gneagle -t user group_on_network_directory<br />
</code></p>
<p>This will prompt you for the dsadminusername&#8217;s password interactively.  You can include the dsadminuser&#8217;s password like so:</p>
<p><code><br />
dseditgroup -o edit -n /LDAPv3/ldap.company.com -u dsadminusername -P dsadminuserpassword -a gneagle -t user group_on_network_directory<br />
</code></p>
<p><code>dseditgroup</code> can do many other things, like create and delete groups, add nested groups to an existing group, and check membership of a given user for a given group.</p>
<p><code>man dseditgroup</code> for more info.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/managingosx.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/managingosx.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/managingosx.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/managingosx.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/managingosx.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/managingosx.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/managingosx.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/managingosx.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/managingosx.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/managingosx.wordpress.com/304/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=304&subd=managingosx&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2010/01/14/add-a-user-to-the-admin-group-via-command-line-3-0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e1088e2a7d9b1e45999c4ba13389b232?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">managingosx</media:title>
		</media:content>
	</item>
		<item>
		<title>Firefox global extensions</title>
		<link>http://managingosx.wordpress.com/2010/01/13/firefox-global-extensions/</link>
		<comments>http://managingosx.wordpress.com/2010/01/13/firefox-global-extensions/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 20:05:47 +0000</pubDate>
		<dc:creator>GregN</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://managingosx.wordpress.com/?p=299</guid>
		<description><![CDATA[
On the MacEnterprise list recently, there was a discussion about installing Firefox extensions.
Specifically, the originator of the thread wanted to install a PDF plugin for Firefox so all users of a machine could use it without having to manually install it.
I had looked at this issue a while back, and didn&#8217;t find a satisfactory solution.
Here [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=299&subd=managingosx&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p><a href="http://managingosx.files.wordpress.com/2008/08/firefox.jpg"><img src="http://managingosx.files.wordpress.com/2008/08/firefox.jpg?w=128&#038;h=128" alt="firefox icon" title="firefox" width="128" height="128" class="alignleft size-full wp-image-138" /></a><br />
On the MacEnterprise list recently, there was a <a href="http://lists.psu.edu/cgi-bin/wa?A2=ind1001&amp;L=macenterprise&amp;T=0&amp;F=&amp;S=&amp;P=140972">discussion about installing Firefox extensions</a>.</p>
<p>Specifically, the originator of the thread wanted to install a PDF plugin for Firefox so all users of a machine could use it without having to manually install it.</p>
<p>I had looked at this issue a while back, and didn&#8217;t find a satisfactory solution.</p>
<p>Here were the options I saw:</p>
<ol>
<li>Just let users install it themselves. Since by default, Firefox extensions install in their Firefox profile in their home directory, this is possible. But the user has to know to look for the extension, download it and install it. Plus, as a policy, you may not want to encourage users to download and install software themselves.</li>
<li>Follow the instructions in <a href="http://kb.mozillazine.org/Installing_extensions">this mozillaZine article</a> to install a global extension. This installs the extension inside the Firefox application bundle and makes it available to all users. But each time a new version of Firefox is released, you&#8217;ll have to do this again, which quickly becomes a pain.  Additionally, in my testing, this method doesn&#8217;t actually make the extension directly available; instead, on the next launch the user is prompted to install it.</li>
</ol>
<p>Neither option appealed to me, but since the first was no more work for me, I went with that. But in the MacEnterprise discussion <a href="https://developer.mozilla.org/en/Installing_extensions">this Mozilla link</a> was brought up, which describes a new option for Firefox 3 and later.</p>
<p>Basically, you just need to copy the extension to </p>
<p><code><br />
/Library/Application Support/Mozilla/Extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}<br />
</code></p>
<p>and it becomes available to all users of the machine. Since it&#8217;s not in the Firefox application bundle, it can survive updates to the Firefox application.</p>
<p>I found that instead of copying the .xpi file there, I got better results by first installing the extension into my user profile, then copying the installed extension to the directory above.  The PDF plugin installs in a directory named &#8220;colesbury@gmail.com&#8221;, so the process looks something like this:</p>
<p><code><br />
cd /Users/gneagle/Library/Application\ Support/Firefox/Profiles/cuak0rwz.default/extensions<br />
cp -R colesbury@gmail.com /Library/Application\ Support/Mozilla/Extensions/\{ec8030f7-c20a-464f-9b0e-13a3a9e97384\}/<br />
</code></p>
<p>The extension is now available to all users, and the users are NOT prompted to install it &#8212; it just works. Even better, you can package it up and deliver it to all your machines via radmind, ARD, Casper, etc.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/managingosx.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/managingosx.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/managingosx.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/managingosx.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/managingosx.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/managingosx.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/managingosx.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/managingosx.wordpress.com/299/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/managingosx.wordpress.com/299/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/managingosx.wordpress.com/299/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=299&subd=managingosx&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2010/01/13/firefox-global-extensions/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e1088e2a7d9b1e45999c4ba13389b232?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">managingosx</media:title>
		</media:content>

		<media:content url="http://managingosx.files.wordpress.com/2008/08/firefox.jpg" medium="image">
			<media:title type="html">firefox</media:title>
		</media:content>
	</item>
		<item>
		<title>Firefox default settings revisited</title>
		<link>http://managingosx.wordpress.com/2010/01/11/firefox-default-settings-revisited/</link>
		<comments>http://managingosx.wordpress.com/2010/01/11/firefox-default-settings-revisited/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 00:56:18 +0000</pubDate>
		<dc:creator>GregN</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://managingosx.wordpress.com/?p=292</guid>
		<description><![CDATA[One of the most-visited articles I&#8217;ve written here is one on managing Firefox default settings. I continue to get questions about this, so I thought it was time to revisit the issue. 
I still use the basic techniques described in the original article. But I&#8217;ve made two changes worth pointing out.
Originally, I edited two existing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=292&subd=managingosx&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p><a href="http://managingosx.files.wordpress.com/2008/08/firefox.jpg"><img src="http://managingosx.files.wordpress.com/2008/08/firefox.jpg?w=128&#038;h=128" alt="firefox icon" title="firefox" width="128" height="128" class="alignright size-full wp-image-138" /></a>One of the most-visited articles I&#8217;ve written here is one on <a href="http://managingosx.wordpress.com/2008/08/18/firefox-default-settings/">managing Firefox default settings</a>. I continue to get questions about this, so I thought it was time to revisit the issue. <span id="more-292"></span></p>
<p>I still use the basic techniques described in the <a href="http://managingosx.wordpress.com/2008/08/18/firefox-default-settings/">original article</a>. But I&#8217;ve made two changes worth pointing out.</p>
<p>Originally, I edited two existing files and added a third file. But now, I just add two files.</p>
<p>The first file tells Firefox to use your new config file.</p>
<p>Create a new file: /Applications/Firefox.app/Contents/MacOS/defaults/pref/local-settings.js</p>
<p>(Note: an earlier version of the post took the MozillaZine article at its word and used a different path: /Applications/Firefox.app/Contents/MacOS/greprefs/local-settings.js &#8211; and I posted without testing.  I&#8217;ve actually been using the /Applications/Firefox.app/Contents/MacOS/defaults/pref/local-settings.js path, and it works&#8230;)</p>
<p>Edit the contents like so:</p>
<p><code><br />
// MyOrganization additions<br />
pref("general.config.obscure_value", 0);<br />
pref("general.config.filename", "firefox_AA.cfg");<br />
</code></p>
<p>Now the actual configuration file:</p>
<p>Create a new file: /Applications/Firefox.app/Contents/MacOS/firefox_AA.cfg.<br />
For our implementation , the contents are similar to:</p>
<p><code><br />
// This file sets some default prefs for use at MyOrg<br />
// and locks down some other prefs.<br />
//<br />
// proxy<br />
pref("network.proxy.autoconfig_url", "http://www.myorg.com/auto.proxy");<br />
pref("network.proxy.type", 2);<br />
//<br />
// application updates<br />
lockPref("app.update.enabled", false);<br />
lockPref("app.update.autoUpdateEnabled", false);<br />
lockPref("extensions.update.autoUpdate", false);<br />
lockPref("extensions.update.enabled", false);<br />
lockPref("browser.search.update", false);<br />
//<br />
// Password Manager<br />
pref("signon.rememberSignons", false);<br />
//<br />
// Default browser check<br />
pref("browser.shell.checkDefaultBrowser", false);<br />
//<br />
// Home page<br />
pref("browser.startup.homepage","http://www.myorg.com");<br />
pref("browser.startup.homepage_reset","http://www.myorg.com");<br />
</code></p>
<p>Make sure the first line starts with double slashes as in the example above &#8211; if the first line isn&#8217;t comment, it doesn&#8217;t work.</p>
<p>We&#8217;ve moved the homepage settings into our Firefox_AA.cfg file; previously we were editing /Applications/Firefox.app/Contents/MacOS/browserconfig.properties.</p>
<p>Since we&#8217;re now dropping in two new files, instead of editing existing files, this is much easier to package up and deploy.</p>
<p>For more information about this technique, and more info on how to find more settings you can manage, check out this mozillaZine article:<br />
<a href="http://kb.mozillazine.org/Lock_Prefs">http://kb.mozillazine.org/Lock_Prefs</a></p>
<p>Note that in the mozillaZine article, they encode the .cfg file using ROT13. I don&#8217;t bother for my deployment, but if you need to obscure the values in the .cfg file, you can. If you do so, be sure to remove the &#8220;pref(&#8220;general.config.obscure_value&#8221;, 0);&#8221; line from the local-settings.js file.</p>
<p>If you try this and have problems, make sure the two files are plain text and the names don&#8217;t have a hidden extra extension &#8212; some people tried using TextEdit with its default settings to make these files and ended up with files named &#8220;local-settings.js.rtf&#8221; or &#8220;local-settings.js.txt&#8221;&#8230;</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/managingosx.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/managingosx.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/managingosx.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/managingosx.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/managingosx.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/managingosx.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/managingosx.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/managingosx.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/managingosx.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/managingosx.wordpress.com/292/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=292&subd=managingosx&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2010/01/11/firefox-default-settings-revisited/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e1088e2a7d9b1e45999c4ba13389b232?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">managingosx</media:title>
		</media:content>

		<media:content url="http://managingosx.files.wordpress.com/2008/08/firefox.jpg" medium="image">
			<media:title type="html">firefox</media:title>
		</media:content>
	</item>
		<item>
		<title>Partial installs of Final Cut Studio 3</title>
		<link>http://managingosx.wordpress.com/2010/01/08/partial-installs-of-final-cut-studio-3/</link>
		<comments>http://managingosx.wordpress.com/2010/01/08/partial-installs-of-final-cut-studio-3/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 19:07:58 +0000</pubDate>
		<dc:creator>GregN</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://managingosx.wordpress.com/?p=278</guid>
		<description><![CDATA[When doing unattended installs of suites of software, sometimes you want to install something other than the default set of applications and add-ons. For example, if you are doing a remote/unattended install of iLife &#8216;09, maybe you want to install only iDVD, iPhoto, and iMovie, and leave off iWeb and GarageBand.
With most Apple packages, you [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=278&subd=managingosx&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>When doing unattended installs of suites of software, sometimes you want to install something other than the default set of applications and add-ons. For example, if you are doing a remote/unattended install of iLife &#8216;09, maybe you want to install only iDVD, iPhoto, and iMovie, and leave off iWeb and GarageBand.<span id="more-278"></span></p>
<p>With most Apple packages, you can specify a &#8220;ChoiceChangesXML&#8221; file, which tells the command-line installer to make changes to the choices of what to install.  For example, this XML file tells /usr/sbin/installer to install only iPhoto from the iLife &#8216;09 install media:</p>
<p><code></p>
<pre>
&lt;array&gt;
    &lt;dict&gt;
        &lt;key&gt;attributeSetting&lt;/key&gt;
        &lt;false/&gt;
        &lt;key&gt;choiceAttribute&lt;/key&gt;
        &lt;string&gt;selected&lt;/string&gt;
        &lt;key&gt;choiceIdentifier&lt;/key&gt;
        &lt;string&gt;iDVD&lt;/string&gt;
    &lt;/dict&gt;
    &lt;dict&gt;
        &lt;key&gt;attributeSetting&lt;/key&gt;
        &lt;false/&gt;
        &lt;key&gt;choiceAttribute&lt;/key&gt;
        &lt;string&gt;selected&lt;/string&gt;
        &lt;key&gt;choiceIdentifier&lt;/key&gt;
        &lt;string&gt;iMovie&lt;/string&gt;
    &lt;/dict&gt;
    &lt;dict&gt;
        &lt;key&gt;attributeSetting&lt;/key&gt;
        &lt;false/&gt;
        &lt;key&gt;choiceAttribute&lt;/key&gt;
        &lt;string&gt;selected&lt;/string&gt;
        &lt;key&gt;choiceIdentifier&lt;/key&gt;
        &lt;string&gt;GarageBand&lt;/string&gt;
    &lt;/dict&gt;
    &lt;dict&gt;
        &lt;key&gt;attributeSetting&lt;/key&gt;
        &lt;false/&gt;
        &lt;key&gt;choiceAttribute&lt;/key&gt;
        &lt;string&gt;selected&lt;/string&gt;
        &lt;key&gt;choiceIdentifier&lt;/key&gt;
        &lt;string&gt;iLifeSoundEffects&lt;/string&gt;
    &lt;/dict&gt;
    &lt;dict&gt;
        &lt;key&gt;attributeSetting&lt;/key&gt;
        &lt;false/&gt;
        &lt;key&gt;choiceAttribute&lt;/key&gt;
        &lt;string&gt;selected&lt;/string&gt;
        &lt;key&gt;choiceIdentifier&lt;/key&gt;
        &lt;string&gt;iWeb&lt;/string&gt;
    &lt;/dict&gt;
    &lt;dict&gt;
        &lt;key&gt;attributeSetting&lt;/key&gt;
        &lt;true/&gt;
        &lt;key&gt;choiceAttribute&lt;/key&gt;
        &lt;string&gt;selected&lt;/string&gt;
        &lt;key&gt;choiceIdentifier&lt;/key&gt;
        &lt;string&gt;iPhoto&lt;/string&gt;
    &lt;/dict&gt;
&lt;/array&gt;
</pre>
<p></code></p>
<p>It&#8217;s used like this:</p>
<p><code>/usr/sbin/installer -applyChoiceChangesXML <em>choicesXMLpath</em> -pkg <em>pkgPath</em> -target /</code></p>
<p>Variations on this XML can be used to install various combination of the individual tools in iLife &#8216;09.</p>
<p>Unfortunately, at least in my testing, this technique fails completely when trying to install parts of Final Cut Studio 3. No matter what I tried, the installer seemed to ignore the ChoiceChangesXML file.</p>
<p>But I wanted to be able to install only Final Cut Pro (and the required helper apps) on some machines, and not install DVD Studio Pro, Soundtrack Pro, Motion, and Color.  Other machines might get only Final Cut Pro and DVD Studio Pro. Here&#8217;s how I solved the problem.</p>
<p>In the Final Cut Studio 3 install media, the actual install package is a metapackage located at &lt;path to Final Cut Studio Install media&gt;/Installer/FinalCutStudio.mpkg.</p>
<p>FinalCutStudio.mpkg is a bundle, and inside the bundle&#8217;s Contents directory is a FinalCutStudio.dist file. This .dist file is actually an XML file, and included within are the various choices and paths to the actual install packages for each choice.</p>
<p>So: I made a read/write disk image of the install DVD and mounted it. I then duplicated the FinalCutStudio.mpkg and named it FinalCutProOnly.mpkg. Inside the bundle, I renamed &#8220;FinalCutStudio.dist&#8221; to &#8220;FinalCutoProOnly.dist&#8221;. Then I set to work editing the .dist file.</p>
<p>Within the .dist XML are a series of &lt;choice&gt; items, each describing an installation choice. Each choice has some interesting attributes: &#8220;start_enabled&#8221; and &#8220;start_selected&#8221;. In the original XML, some of these are set to true, some are set of false, some are set to the value of a JavaScript function. I went through these items slowly and for the items I did not want installed, I set &#8220;start_selected&#8221; to false:</p>
<p><code>start_selected='false'</code></p>
<p>When I was done, I had a new metapackage that installed only Final Cut Pro from the Final Cut Studio media. I repeated the technique with the other major apps in the Suite, and now I can install any required combination of the core apps.  The Installer directory now looks like this:</p>
<p><code><br />
ls -1 /Volumes/Final\ Cut\ Studio\ Install/Installer<br />
ColorOnly.mpkg/<br />
DVDStudioProOnly.mpkg/<br />
FinalCutProOnly.mpkg/<br />
FinalCutStudio.mpkg/<br />
MotionOnly.mpkg/<br />
Packages/<br />
SoundtrackProOnly.mpkg/<br />
</code></p>
<p>Since the actual packages are in the Packages sub-directory, the additional mpkgs don&#8217;t take up much additional space.  I then converted the disk image back to read-only compressed.</p>
<p>Editing the dist files was tedious and required trial-and-error to get to the result I wanted. So I&#8217;ve zipped them up and you can <a href="http://homepage.mac.com/gregneagle/files/FCS3dists.zip">download them here</a>.</p>
<p>To use them, you&#8217;ll still need to duplicate the FinalCutStudio.mpkg as described above, but instead of having to edit the dist file yourself, you can just replace it with mine.  Be sure to test &#8211; while this works for me on the machines I manage, there&#8217;s always a chance that things may behave differently in different environments.</p>
<p>You could use this technique with any dist-based metapackage installer, so this might be applicable for other install problems.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/managingosx.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/managingosx.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/managingosx.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/managingosx.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/managingosx.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/managingosx.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/managingosx.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/managingosx.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/managingosx.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/managingosx.wordpress.com/278/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=278&subd=managingosx&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2010/01/08/partial-installs-of-final-cut-studio-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e1088e2a7d9b1e45999c4ba13389b232?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">managingosx</media:title>
		</media:content>
	</item>
		<item>
		<title>Silent installs for Acrobat Pro 9 updates</title>
		<link>http://managingosx.wordpress.com/2010/01/06/silent-installs-for-acrobat-pro-9-updates/</link>
		<comments>http://managingosx.wordpress.com/2010/01/06/silent-installs-for-acrobat-pro-9-updates/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 23:42:33 +0000</pubDate>
		<dc:creator>GregN</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://managingosx.wordpress.com/?p=270</guid>
		<description><![CDATA[Silent installs of Adobe products are a bane of an OS X administrator&#8217;s existence.  However, there are some officially supported methods to do silent installs of CS3/CS4 apps, and even to install updates to those apps.
Some links:
CS3 Deployment
CS4 Manual Deployment
CS4 Enterprise Deployment Toolkit
But updates to Acrobat Pro 9 are in a completely different format [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=270&subd=managingosx&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>Silent installs of Adobe products are a bane of an OS X administrator&#8217;s existence.  However, there are some officially supported methods to do silent installs of CS3/CS4 apps, and even to install updates to those apps.</p>
<p>Some links:</p>
<p><a href="http://www.adobe.com/support/deployment/cs3_deployment.pdf">CS3 Deployment</a><br />
<a href="http://www.adobe.com/aboutadobe/openoptions/pdfs/manualenterprisedeployment_cs4_help.pdf">CS4 Manual Deployment</a><br />
<a href="http://www.adobe.com/devnet/creativesuite/">CS4 Enterprise Deployment Toolkit</a></p>
<p>But updates to Acrobat Pro 9 are in a completely different format than all other Adobe installers/updaters and can&#8217;t be silently installed with any of the supported methods.</p>
<p>I started tearing apart the patching app on one of the update disk images and discovered it was running some shell and Python scripts to do the actual patching. That got the wheels turning&#8230;</p>
<p>The result: <a href="http://homepage.mac.com/gregneagle/files/updateAcrobatNine.py">a Python script</a> you can use to silently install all of the (so far) released updates to Acrobat Pro 9.</p>
<p>This script skips all of the process checking done by the original patching app, so it&#8217;s best to run it when no-one is logged in.</p>
<p>You could use this script via SSH or ARD to install the updates:</p>
<p>Install the script itself somewhere on the target machine. Copy the needed disk images to the target machine. Install each update in order, something like this:</p>
<p><code><br />
./updateAcrobatNine.py /path/to/AcroProUpd910_all.dmg<br />
./updateAcrobatNine.py /path/to/AcroProUpd911_all.dmg<br />
./updateAcrobatNine.py /path/to/AcroProUpd912_all.dmg<br />
./updateAcrobatNine.py /path/to/AcroProUpd913_all.dmg<br />
./updateAcrobatNine.py /path/to/AcroProUpd920_all.dmg<br />
</code></p>
<p>Here&#8217;s some output from an install session:</p>
<p><code><br />
root# ./updateAcrobatNine.py AcroProUpd910_all.dmg<br />
Mounting disk image AcroProUpd910_all.dmg<br />
Searching for Adobe Acrobat Pro.app<br />
Getting info on currently installed applications...<br />
Updating Adobe Acrobat Pro.app<br />
Updater log at /var/root/Library/Logs/Adobe/Acrobat/Acrobat 9 Pro Patch0.log<br />
Patching Adobe Acrobat Pro.app complete.<br />
Searching for Acrobat Distiller.app<br />
Updating Acrobat Distiller.app<br />
Updater log at /var/root/Library/Logs/Adobe/Acrobat/Acrobat 9 Pro Patch1.log<br />
Patching Acrobat Distiller.app complete.<br />
Searching for Acrobat Uninstaller.app<br />
Updating Acrobat Uninstaller.app<br />
Updater log at /var/root/Library/Logs/Adobe/Acrobat/Acrobat 9 Pro Patch2.log<br />
Patching Acrobat Uninstaller.app complete.<br />
Done.<br />
</code></p>
<p>Enjoy.</p>
<p><strong>ADDENDUM:</strong></p>
<p>If you do install Acrobat Pro 9 updates, unattended uninstalls using the methods from the Adobe Enterprise Deployment Toolkit now fail, because Adobe Setup no longer thinks Acrobat Pro 9 is installed and gets very confused.  Manual uninstalls using the uninstaller in /Applications/Utilities/Adobe Installers still work, though.  Grrrr&#8230;.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/managingosx.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/managingosx.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/managingosx.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/managingosx.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/managingosx.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/managingosx.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/managingosx.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/managingosx.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/managingosx.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/managingosx.wordpress.com/270/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=270&subd=managingosx&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2010/01/06/silent-installs-for-acrobat-pro-9-updates/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e1088e2a7d9b1e45999c4ba13389b232?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">managingosx</media:title>
		</media:content>
	</item>
		<item>
		<title>Apple Software Update wishes</title>
		<link>http://managingosx.wordpress.com/2009/10/13/apple-software-update-wishes/</link>
		<comments>http://managingosx.wordpress.com/2009/10/13/apple-software-update-wishes/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 15:26:19 +0000</pubDate>
		<dc:creator>GregN</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[MCX]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://managingosx.wordpress.com/?p=267</guid>
		<description><![CDATA[Since we&#8217;ve examined some ways to script around Software Update&#8217;s limitations, I thought maybe now would be a good time to describe changes I&#8217;d like to see to Apple&#8217;s Software Update so we don&#8217;t have to hack at it&#8230;

When a client is managed via MCX to use an internal Software Update Server, there should be [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=267&subd=managingosx&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p><img src="http://managingosx.files.wordpress.com/2009/10/software-update.png?w=150&#038;h=150" alt="Software Update" title="Software Update" width="150" height="150" class="alignright size-thumbnail wp-image-251" />Since we&#8217;ve examined some ways to script around Software Update&#8217;s limitations, I thought maybe now would be a good time to describe changes I&#8217;d like to see to Apple&#8217;s Software Update so we don&#8217;t have to hack at it&#8230;<br />
<span id="more-267"></span></p>
<p>When a client is managed via MCX to use an internal Software Update Server, there should be an additional management option that causes Apple Software Update to behave in the following manner:</p>
<ol>
<li>Available updates are downloaded in the background. (This exists currently)</li>
<li>When all available updates have been downloaded, if a user is logged in, the user is notified that updates are available (This also exists currently)</li>
<li>When the user clicks &#8220;Install&#8221;, the updates should be installed <em>without</em> requiring administrator credentials. Since the admin has &#8220;approved&#8221; the updates by making them available on the internal Software Update Server, and has enabled the proposed &#8220;non-admin&#8221; install option via MCX client management, no further administrative approval should be needed/required. (This would be new behavior).</li>
<li>If no user is currently logged in, all managed updates (those on the internal SUS) are installed, but there is a progress window displayed over/instead of the loginwindow so a user does not login or power off a machine during a software update session. (This would be new behavior).</li>
</ol>
<p>These changes would allow systems administrators to deploy Apple software updates to a group of machines without resorting to scripting hacks, running background command-line processes that can interfere with active users, or third-party tools that largely (and incompletely) duplicate Apple&#8217;s solutions.</p>
<p>In addition:</p>
<ol>
<li>Admins should be able to mark updates on their internal Software Update Servers as mandatory.</li>
<li>When an OS X Client is managed to use an internal SUS, updates marked as mandatory should not be able to be deselected by the user.</li>
</ol>
<p>This change would allow systems administrators to use an internal Software Update Server to deploy critical updates (like Security Updates) without resorting to scripting hacks or third-party tools.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/managingosx.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/managingosx.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/managingosx.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/managingosx.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/managingosx.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/managingosx.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/managingosx.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/managingosx.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/managingosx.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/managingosx.wordpress.com/267/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=267&subd=managingosx&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2009/10/13/apple-software-update-wishes/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e1088e2a7d9b1e45999c4ba13389b232?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">managingosx</media:title>
		</media:content>

		<media:content url="http://managingosx.files.wordpress.com/2009/10/software-update.png?w=150" medium="image">
			<media:title type="html">Software Update</media:title>
		</media:content>
	</item>
		<item>
		<title>Apple Software Update options</title>
		<link>http://managingosx.wordpress.com/2009/10/12/apple-software-update-options/</link>
		<comments>http://managingosx.wordpress.com/2009/10/12/apple-software-update-options/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 15:35:56 +0000</pubDate>
		<dc:creator>GregN</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://managingosx.wordpress.com/?p=248</guid>
		<description><![CDATA[At work, I&#8217;ve been working on a solution for handling Apple Software Updates for non-administrative users.  Each approach I&#8217;ve tried has serious obstacles.  Here&#8217;s a brief history of what I&#8217;ve tried and what worked and what didn&#8217;t.

First, a little background: Apple provides a Software Update Server as part of Mac OS X Server. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=248&subd=managingosx&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p><img src="http://managingosx.files.wordpress.com/2009/10/software-update.png?w=150&#038;h=150" alt="Software Update" title="Software Update" width="150" height="150" class="alignleft size-thumbnail wp-image-251" />At work, I&#8217;ve been working on a solution for handling Apple Software Updates for non-administrative users.  Each approach I&#8217;ve tried has serious obstacles.  Here&#8217;s a brief history of what I&#8217;ve tried and what worked and what didn&#8217;t.<br />
<span id="more-248"></span></p>
<p>First, a little background: Apple provides a Software Update Server as part of Mac OS X Server.  This allows you to cache Apple&#8217;s updates on a local server for more efficient use of Internet bandwidth, and more importantly, a local Software Update Server allows you to choose which items you want to make available to your organization &#8212; for example, you can choose to not make an update available to machines in your organization until after you&#8217;ve finished testing it in your environment.</p>
<p>But hosting a local Software Update Server does not solve a fundamental problem: how to get the updates onto a machine without requiring administrator privileges for the machine&#8217;s user(s). Hosting a local Software Update Server is no different than relying on Apple&#8217;s servers in this regard; someone must authorize Software Update.app with administrative credentials.</p>
<p>So if you want to use Software Update to distribute updates to your machine, this means either providing all your users with administrative credentials, or having admins visit each machine. It would be better if we could find a way to install updates without requiring a user to type in an admin password.</p>
<p>If you are using a third-party solution for installing software and handling non-Apple updates, something like radmind, LANrev, FileWave, or Casper, these products may have their own mechanisms for handling Apple Software Updates. If they don&#8217;t, you always have the option of downloading the updates from Apple and importing them into your management system just as you would any third-party software.</p>
<p>But a downside to doing this is that you may lose the logic Apple uses to determine which updates are applicable to each machine. You may find yourself having to replicate this logic in some way. The larger the number of unique hardware and software configurations you have, the harder and more tedious this becomes.  So you may want to find a way to leverage Apple&#8217;s tools.</p>
<p>The obvious first approach: as root (via cron, launchd, ARD or ssh), run the command-line Software Update tool:</p>
<p><code>/usr/sbin/softwareupdate -i -a</code></p>
<p>This is simple, but has several problems:</p>
<ol>
<li>The only safe time to do this is when no-one is logged in, since a restart may be required, or applications that are in use might be updated. But if you do it when no-one is logged in, and you provide no user feedback as to what is happening, you run the risk that the user will shutdown, restart, or log in while the process is happening.  The  first two could cause you to have an unbootable machine; a user logging in could be a problem if a restart is required or the user attempts to use applications that are being updated.</li>
<li>Since a user might be waiting to use the machine while this process is happening, ideally you&#8217;d want to have some sort of progress indicator, and also you&#8217;d like to do the downloads separately from the install so that the time your users are forced to be logged out is minimized.  But <code>/usr/sbin/softwareupdate</code>&#8217;s output is almost impossible to use to construct meaningful progress info, and it has no way to download items in advance.</li>
<li>You are thinking &#8220;But what about <code>softwareupdate -d -a</code>? Doesn&#8217;t that download all the available updates?&#8221; Why yes, it does. Unfortunately, there&#8217;s no way to tell softwareupdate to <em>use</em> those downloads, if you later run <code>softwareupdate -i -a</code>, it will download them all over again.</li>
</ol>
<p>If you are willing to make the user wait for the entire download and install process while the machine is logged out with no real progress feedback, then this approach might work. If you have a bunch of desktop machines that will be on (or can be set to wake up/power up) in the wee hours of the morning, this approach might work, as the lengthy updating can happen when no-one is around. If, on the other hand, you have a large number of laptop machines, this approach is less likely to be accepted by your users. They&#8217;ll have to participate in the updating of their machines, and won&#8217;t like having no indication of how long an update might take. They are more likely to get annoyed or impatient and simply turn off the machine in the middle of the update, because it may appear that the machine is locked up.</p>
<p>So that brings us to the next approach: again, with a script running as root, use <code>softwareupdate -d -a</code> to find and download the available updates, then use <code>/usr/sbin/installer</code> to install them.  This seems promising, because <code>/usr/sbin/installer</code> gives reasonable progress feedback that you could then pass to the user.</p>
<p>Unfortunately, not everything downloaded via <code>softwareupdate -d -a</code> is  in a format that <code>/usr/sbin/installer</code> knows how to install.  And so far, I haven&#8217;t been able to preflight these items to know in advance what can be successfully installed and what cannot  &#8212; you just have to try and see if <code>/usr/sbin/installer</code> throws an installation error back at you.  So unless we can figure out how to detect and deal with  the &#8220;broken&#8221; downloads, this is not an ideal solution, as there will be updates that are not installable via this method.</p>
<p>Now for the third approach.</p>
<p>It is possible to trigger the process that downloads updates in the background into /Library/Updates/ &#8212; the same one that, when updates are available, then opens the Software Update.app and prompts you to install them. (On Snow Leopard, this is essentially the same thing as running <code>softwareupdate -d -a</code>; on Leopard, <code>softwareupdate -d -a</code> does something different, downloading them into the Downloads directory of the current user.)</p>
<p>Once these items are staged in /Library/Updates, you can re-write the /Library/Updates/index.plist  and touch a file to tell Software Update to install these upon restart; this is a variation of the built-in behavior when you use the Software Update app and choose to install items that require a restart &#8211; you are logged out, the items are  installed, and then the machine is restarted.</p>
<p>Here&#8217;s a shell script that gets the basic steps done:</p>
<pre style="overflow:scroll;">
<code>
#!/bin/sh

defaults -currentHost write com.apple.SoftwareUpdate AgreedToLicenseAgrement -bool YES
defaults -currentHost write com.apple.SoftwareUpdate AutomaticDownload -bool YES
defaults -currentHost write com.apple.SoftwareUpdate LaunchAppInBackground -bool YES

#Take away execute &amp; read rights so Software Update doesn't open during a user session
chmod 700 /System/Library/CoreServices/Software\ Update.app
#Check for new updates
/System/Library/CoreServices/Software\ Update.app/Contents/Resources/SoftwareUpdateCheck
#Put execute and read rights back
chmod 755 /System/Library/CoreServices/Software\ Update.app

#This sets up all the files so that it will install on restart
installarray=`defaults read /Library/Updates/index ProductPaths | grep -v "[{}]" | awk -F "=" '{print $1}' | grep -o "[^\" ]\+"`
defaults write /Library/Updates/index InstallAtLogout -array "$installarray"
touch /var/db/.SoftwareUpdateAtLogout
chmod og-r /var/db/.SoftwareUpdateAtLogout
</code>
</pre>
<p>Leveraging this has several attractions: you are using Apple&#8217;s processes and logic for installing updates; you get progress feedback for free, since you are using Apple&#8217;s tools, and the updates can be downloaded in advance, minimizing the time required at logout to install the updates.</p>
<p>There are some drawbacks:</p>
<ul>
<li>You have to trigger a restart to initiate the install; even for items that don&#8217;t require a restart.</li>
<li>When the restart is triggered, a dialog appears telling the user there are updates to be installed and giving them two choices  &#8220;Restart&#8221;, or &#8220;Install and Restart&#8221;.  While it&#8217;s good to have the choice, it&#8217;s an additional bit of noise if you&#8217;ve already asked them to restart to install the updates.</li>
<li>And the big one: there&#8217;s no clean, Apple-supported way to programmatically  trigger the install if you are already sitting at the loginwindow.
<p>If a user is logged in, you can do this:</p>
<p><code>osascript -e 'tell application "System Events" to restart</code></p>
<p>But if no user is logged in, the above doesn&#8217;t work. If you do <code>shutdown -r now</code>, the machine just restarts without installing.  If you click the Restart button in the loginwindow, you are prompted to allow the installs to happen, which is what we want. It turns out that in Leopard and Snow Leopard, after a little setup, we can do just that programmatically with:</p>
<p><code>osascript -e 'tell application "System Events" to tell process "SecurityAgent" to click button "Restart" of window 1'</code></p>
<p>This doesn&#8217;t work, obviously, if the administrator (or user!) has disabled the Restart button from appearing in the loginwindow, so it&#8217;s not particularly robust, but it&#8217;s the best we have right now.</li>
</ul>
<p>A fourth approach:</p>
<p>A script running as root launches the Software Update.app:</p>
<pre style="overflow:scroll;">
<code>
#/bin/sh
/System/Library/CoreServices/Software\ Update.app/Contents/MacOS/Software\ Update
</code>
</pre>
<p>Ideally, you&#8217;d use a launchd job that watched a path writable by non-privileged users. When that path was modified, the launchd job would fire, launching Software Update as root.</p>
<p>Advantages:</p>
<ul>
<li>Once Software Update is running as root, the user can download and install anything Software Update makes available without having to enter administrative credentials.</li>
<li>You&#8217;re using even more of Apple&#8217;s code and relying less on your own, making this a robust solution.</li>
</ul>
<p>Possible disadvantages:</p>
<ul>
<li>The user can choose to not install some items &#8212; this could make it more difficult to apply Security Updates in a timely manner</li>
<li>Since Software Update.app is running as root, there are potential security risks; it might be possible to use a flaw in Software Update.app to can root privileges elsewhere.</li>
<li>This approach doesn&#8217;t help you install updates when no-one is logged in; it only works with user involvement and cooperation.</li>
</ul>
<p>So there you are.  Four ways to get Apple Software Updates installed on machines without requiring your end users have administrative credentials.</p>
<p>No one approach works in all situations, but perhaps one of these approaches will work for you.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/managingosx.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/managingosx.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/managingosx.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/managingosx.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/managingosx.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/managingosx.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/managingosx.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/managingosx.wordpress.com/248/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/managingosx.wordpress.com/248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/managingosx.wordpress.com/248/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=248&subd=managingosx&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2009/10/12/apple-software-update-options/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e1088e2a7d9b1e45999c4ba13389b232?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">managingosx</media:title>
		</media:content>

		<media:content url="http://managingosx.files.wordpress.com/2009/10/software-update.png?w=150" medium="image">
			<media:title type="html">Software Update</media:title>
		</media:content>
	</item>
		<item>
		<title>Adobe Product Codes</title>
		<link>http://managingosx.wordpress.com/2009/10/08/adobe-product-codes/</link>
		<comments>http://managingosx.wordpress.com/2009/10/08/adobe-product-codes/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 16:13:12 +0000</pubDate>
		<dc:creator>GregN</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://managingosx.wordpress.com/?p=240</guid>
		<description><![CDATA[While digging into the Adobe install process, I needed to be able to translate from &#8220;AdobeCodes&#8221; like &#8220;{27B54140-8302-4B5D-83DD-AEE4B18BC7A4}&#8221; to product names like &#8220;Adobe Encore CS4&#8243; and the installer payload name like &#8220;AdobeEncore4All&#8221;.
I ended up writing a Python script to crawl through the payloads directory of Adobe install media to generate a table.  The script [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=240&subd=managingosx&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>While digging into the Adobe install process, I needed to be able to translate from &#8220;AdobeCodes&#8221; like &#8220;{27B54140-8302-4B5D-83DD-AEE4B18BC7A4}&#8221; to product names like &#8220;Adobe Encore CS4&#8243; and the installer payload name like &#8220;AdobeEncore4All&#8221;.</p>
<p>I ended up writing a Python script to crawl through the payloads directory of Adobe install media to generate a table.  The script is below, and called like:</p>
<p><code>python adobeparser.py /path/to/payloads</code></p>
<p>It&#8217;s probably not generally useful, though I include it just for completeness&#8230;</p>
<pre style="overflow:scroll;">
<code>
#!/usr/bin/env python
# encoding: utf-8
"""
adobeparser.py

Created by Greg Neagle on 2009-10-07.
"""

import sys
import os
import optparse
from xml.dom import minidom

def parseAdobeProxyXML(filename):
    payloadinfo = {}
    dom = minidom.parse(filename)
    installer_properties = dom.getElementsByTagName("InstallerProperties")
    if installer_properties:
        properties = installer_properties[0].getElementsByTagName("Property")
        if properties:
            for prop in properties:
                if 'name' in prop.attributes.keys():
                    propertyname = prop.attributes['name'].value
                    propertyvalue = ""
                    for node in prop.childNodes:
                        propertyvalue += node.nodeValue
                    payloadinfo[propertyname] = propertyvalue

    return payloadinfo

def analyzePayloads(dirname):
    payloads = []
    dirname = dirname.rstrip("/")
    if dirname.endswith('payloads'):
        for payloaditem in os.listdir(dirname):
            payloaditempath = os.path.join(dirname, payloaditem)
            if os.path.isdir(payloaditempath):
                for item in os.listdir(payloaditempath):
                    if item.endswith(".proxy.xml"):
                        proxyxmlfile = os.path.join(payloaditempath, item)
                        payloadinfo = parseAdobeProxyXML(proxyxmlfile)
                        payloadinfo['ComponentName'] = payloaditem
                        if payloadinfo:
                            payloads.append(payloadinfo)
                        break

    return payloads

def main():
    p = optparse.OptionParser()
    options, arguments = p.parse_args()
    if arguments:
        payloads = analyzePayloads(arguments[0])
        print "Adobe Code\tName\tVersion"
        for payload in payloads:
            print "%s\t%s\t%s\t%s" % (payload['AdobeCode'], payload['ProductName'], payload['ProductVersion'], payload['ComponentName'])

if __name__ == '__main__':
	main()
</code>
</pre>
<p>I ran this script against the payloads folder on the Adobe CS4 Master Collection installation media. I then sorted the output by AdobeCode and added a header line, and <a href="http://homepage.mac.com/gregneagle/files/adobecodes.txt">here</a> is the result: a tab-delimited list of AdobeCodes, ProductNames, ProductVersions, and PayloadNames.</p>
<p>I hope this list is useful to someone other than me!  Combine this with the info <a href="http://blogs.adobe.com/OOBE/2009/03/cs4_component_payload_descript.html">here</a> and you can get a pretty good idea of everything that&#8217;s installed.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/managingosx.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/managingosx.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/managingosx.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/managingosx.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/managingosx.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/managingosx.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/managingosx.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/managingosx.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/managingosx.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/managingosx.wordpress.com/240/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=240&subd=managingosx&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2009/10/08/adobe-product-codes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e1088e2a7d9b1e45999c4ba13389b232?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">managingosx</media:title>
		</media:content>
	</item>
		<item>
		<title>More Adobe Enterprise Deployment Toolkit FAIL</title>
		<link>http://managingosx.wordpress.com/2009/10/07/more-adobe-enterprise-deployment-toolkit-fail/</link>
		<comments>http://managingosx.wordpress.com/2009/10/07/more-adobe-enterprise-deployment-toolkit-fail/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 18:58:43 +0000</pubDate>
		<dc:creator>GregN</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://managingosx.wordpress.com/?p=226</guid>
		<description><![CDATA[This post will act as a running log of today&#8217;s struggles with the CS4 Deployment Toolkit.  This post was updated several times today, so if you read it earlier today, there may be new stuff added&#8230;. 

Start with the install media for Adobe CS4 Master Collection.
Run the CS4 Deployment Toolkit app and create a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=226&subd=managingosx&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>This post will act as a running log of today&#8217;s struggles with the CS4 Deployment Toolkit.  This post was updated several times today, so if you read it earlier today, there may be new stuff added&#8230;. </p>
<ul>
<li>Start with the install media for Adobe CS4 Master Collection.</li>
<li>Run the CS4 Deployment Toolkit app and create a &#8220;package&#8221; that installs only Flash, Dreamweaver, Fireworks, and Contribute.</li>
<li>Move the package and install media files to the test machine</li>
<li>Run the AdobeUberInstaller</li>
</ul>
<p>Result?</p>
<p>Flash, Dreamweaver, Fireworks and Contribute are installed. But&#8230;</p>
<p>So are:<br />
After Effects, Encore, Premiere Pro, and Soundbooth.  Or are they?</p>
<p>The application folders are there, but inside: broken apps.</p>
<p>Sheesh.<br />
<span id="more-226"></span></p>
<p>If you look at the AdobeUberInstaller.xml generated by the CS4 Deployment Toolkit, and go through the painful process of translating &#8220;AdobeCodes&#8221; like &#8220;{3EE73408-5536-4C99-9CEB-06C2A7A726B4}&#8221; into product names, we find that After Effects, Encore, Premiere Pro, and Soundbooth are not referenced at all in the XML file.  I definitely unchecked them in the CS4 Deployment Toolkit, but they are not mentioned at all. Perhaps the default behavior is supposed to be &#8220;donotinstall&#8221;, but in actual practice, it seems to be something else.</p>
<p>In my case, the observed behavior is &#8220;partially install as broken&#8221;.</p>
<p>So I tried a few things; including manually editing the AdobeUberInstall.xml file, adding explicit &#8220;donotinstall&#8221; actions for the four unwanted apps:</p>
<p><code></p>
<pre style="overflow:scroll;">
	&lt;!--added by gneagle--&gt;
        &lt;!--Adobe After Effects CS4--&gt;
        &lt;Payload adobeCode="{F706302E-1402-4D8D-8ABB-26B18ECAEFBB}"&gt;
          &lt;Action&gt;donotinstall&lt;/Action&gt;
        &lt;/Payload&gt;
        &lt;!--Adobe Encore CS4--&gt;
        &lt;Payload adobeCode="{27B54140-8302-4B5D-83DD-AEE4B18BC7A4}"&gt;
          &lt;Action&gt;donotinstall&lt;/Action&gt;
        &lt;/Payload&gt;
        &lt;!--Adobe Premiere Pro CS4--&gt;
        &lt;Payload adobeCode="{21EEB50A-C615-4B7B-928B-4262121A7C78}"&gt;
          &lt;Action&gt;donotinstall&lt;/Action&gt;
        &lt;/Payload&gt;
        &lt;!--Adobe Soundbooth CS4--&gt;
        &lt;Payload adobeCode="{5AC26AE4-130C-4296-9BA8-563A99AE1946}"&gt;
          &lt;Action&gt;donotinstall&lt;/Action&gt;
        &lt;/Payload&gt;
</pre>
<p></code></p>
<p>But still no go &#8211; directories were still created under /Applications with broken application bundles for Premiere, After Effects, Soundbooth, and Encore.</p>
<p>So I started poking through the install log in /Library/Logs/Adobe/Installers, in this case named &#8220;Adobe Creative Suite 4 Master Collection 4.0 10-07-2009.log&#8221;.</p>
<p>I found a section that looked like this:</p>
<pre style="overflow:scroll;">
BEGIN InstallOperationsQueue Unordered operations
  {02FD2912-C5C4-41f0-B7D2-0C1871EB9565} Adobe Flash CS4 Extension - Flash Lite STI es: with operation none
  {046EB5D9-BDAB-4D5A-BC23-45583F6B8EF0} Adobe Premiere Pro CS4 Functional Content: with operation none
  {064F0D64-1F54-4F4B-953E-BAED5D7E69B2} PDF Settings CS4: with operation install
</pre>
<p>This looked promising.  Buried in this section of the log were these lines (they weren&#8217;t all next to one another; I&#8217;ve put them all together here for brevity):</p>
<pre style="overflow:scroll;">
{0AEC3900-1F89-4649-9D10-B0469D5F6A0B} Adobe Premiere Pro CS4 Third Party Content: with operation install
{D5AD1A24-F381-4D67-BA1C-A2661AEB06A5} Adobe Soundbooth CS4 Codecs: with operation install
{575C8FA0-8180-4554-828A-1AD52446CAA1} Adobe Encore CS4 Codecs: with operation install
{568E0A79-996C-4B04-B613-F06CBE7B320B} Adobe After Effects CS4 Third Party Content: with operation install
</pre>
<p>Aha!</p>
<p>Somehow, some subcomponents for Premiere, Soundbooth, Encore, and After Effects were being selected for install.  A peek inside the broken application bundles seemed to match the payload descriptions above, so I think I&#8217;ve found the culprit.</p>
<p>Now to figure out how I can get these items deselected for install&#8230;</p>
<p>Back to CS4 Deployment Toolkit.</p>
<p>Start creating a package.  Point it at the install files for the CS4 Master Collection. Proceed to the Product Options screen and search for:</p>
<p>Adobe After Effects CS4 Third Party Content<br />
Adobe Premiere Pro CS4 Third Party Content<br />
Adobe Soundbooth CS4 Codecs<br />
Adobe Encore CS4 Codecs</p>
<p>They do not exist in the GUI, and cannot be deselected!  Grrrr&#8230;.</p>
<p>No matter &#8211; I&#8217;ll just add them manually to the AdobeUberInstaller.xml file:</p>
<pre style="overflow:scroll;">
<code>
&lt;!--added by gneagle--&gt;
&lt;!--Adobe Premiere Pro CS4 Third Party Content--&gt;
&lt;Payload adobeCode=&quot;{0AEC3900-1F89-4649-9D10-B0469D5F6A0B}&quot;&gt;
  &lt;Action&gt;donotinstall&lt;/Action&gt;
&lt;/Payload&gt;
&lt;!-- Adobe Soundbooth CS4 Codecs--&gt;
&lt;Payload adobeCode=&quot;{D5AD1A24-F381-4D67-BA1C-A2661AEB06A5}&quot;&gt;
  &lt;Action&gt;donotinstall&lt;/Action&gt;
&lt;/Payload&gt;
&lt;!--Adobe Encore CS4 Codecs--&gt;
&lt;Payload adobeCode=&quot;{575C8FA0-8180-4554-828A-1AD52446CAA1}&quot;&gt;
  &lt;Action&gt;donotinstall&lt;/Action&gt;
&lt;/Payload&gt;
&lt;!--Adobe After Effects CS4 Third Party Content--&gt;
&lt;Payload adobeCode=&quot;{568E0A79-996C-4B04-B613-F06CBE7B320B}&quot;&gt;
  &lt;Action&gt;donotinstall&lt;/Action&gt;
&lt;/Payload&gt;
</code>
</pre>
<p>And now to test&#8230;</p>
<p>FAIL.  Broken app bundles for After Effects, Encore, Premiere Pro, and Soundbooth.</p>
<p>Is this thing just broken?  Let&#8217;s go back a bit.</p>
<p>I remove all the Adobe apps and shared files from my test machine (AdobeUberUninstall plus some manual cleanup), and then manually run the Setup.app from the CS4 Master Collection media, and choose the same options I chose with the CS4 Deployment Toolkit.</p>
<p>Same result. Broken app bundles for apps I didn&#8217;t choose to install.</p>
<p>So in this case, it&#8217;s not the Enterprise Deployment Toolkit that&#8217;s failing, it&#8217;s the underlying install process &#8212; you get the same broken results with a manual install.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/managingosx.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/managingosx.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/managingosx.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/managingosx.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/managingosx.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/managingosx.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/managingosx.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/managingosx.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/managingosx.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/managingosx.wordpress.com/226/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=226&subd=managingosx&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2009/10/07/more-adobe-enterprise-deployment-toolkit-fail/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e1088e2a7d9b1e45999c4ba13389b232?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">managingosx</media:title>
		</media:content>
	</item>
		<item>
		<title>Adobe Enterprise Deployment Toolkit versus disk images&#8230;</title>
		<link>http://managingosx.wordpress.com/2009/10/06/adobe-enterprise-deployment-toolkit-versus-disk-images/</link>
		<comments>http://managingosx.wordpress.com/2009/10/06/adobe-enterprise-deployment-toolkit-versus-disk-images/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 23:02:17 +0000</pubDate>
		<dc:creator>GregN</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://managingosx.wordpress.com/?p=220</guid>
		<description><![CDATA[After getting lots of suggestions, and spending a few days tearing apart the JavaScript files that are part of the Adobe setup/install process, I have some progress to report on the task of getting Adobe Enterprise Deployment Toolkit &#8220;packages&#8221; to work from disk images.

I was hoping to wrap up the installation files, the AdobeUber* programs [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=220&subd=managingosx&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<br /><p>After getting lots of suggestions, and spending a few days tearing apart the JavaScript files that are part of the Adobe setup/install process, I have some progress to report on the task of getting Adobe Enterprise Deployment Toolkit &#8220;packages&#8221; to work from disk images.<br />
<span id="more-220"></span></p>
<p>I was hoping to wrap up the installation files, the AdobeUber* programs and the AdobeUber*.xml files into a disk image. I could then copy that disk image to a given machine, mount it, and run AdobeUberInstaller.</p>
<p>My initial testing failed miserably &#8211; Adobe&#8217;s Setup application failed with &#8220;Exit Code 7&#8243; when I tried to run the install from a mounted disk image, yet the same files copied to a local folder installed fine.</p>
<p>A little more digging into the various logs, and I found this:</p>
<pre>
Found deployment properties:
Setting property "INSTALLDIR" to: /Applications
Setting property "installLanguage" to: en_US
[       0] Fri Oct  2 10:23:26 2009 DEBUG
Supported languages:
[       0] Fri Oct  2 10:23:26 2009 FATAL
Exception: Could not get the list of supported languages
Exit code: 7
[       0] Fri Oct  2 10:23:26 2009  INFO
</pre>
<p>I tore into the various JavaScript files that are part of the install process, and even added some debugging/logging code to some of the JavaScripts so I could see what was happening.  I eventually determined that it failed to get the list of supported languages because it was looking in the wrong place for the payloads! Instead of looking under the InstallerLocation path as specified in the AdobeUberInstaller.xml file, it was looking in &#8220;/Volumes/Adobe Photoshop CS4/Adobe Photoshop CS4/payloads/&#8221;.</p>
<p>Hmmm.  That would be the path if we had mounted the original ESD disk media from Adobe.  So as an experiment, I simply mounted the original ESD disk image, and tried again with a new AdobeUberInstaller.xml pointing to this path.</p>
<p>Success.</p>
<p>It appears that there is a bug somewhere in the Setup code (and I have looked at the JavaScripts to no avail, so it&#8217;s probably buried in the Setup.app itself) that checks to see if the payloads are on a disk image, and then just assumes the original disk image path from there on, ignoring any other info.</p>
<p>You should then be able to get an Adobe deployment to work from disk image one of these ways:</p>
<ol>
<li>Convert the ESD disk to a read-write image and add the AdobeUber* files to it.  Optionally convert it back to read-only.</li>
<li>Create a separate disk image containing the AdobeUber* files. Deliver this disk image _and_ the ESD diskimage to the target machine. Mount them both, then invoke AdobeUberInstaller from its disk image.</li>
<li>Create a new disk image with the AdobeUber* files and the same folder structure to the payloads as the original ESD disk image. Make sure it has the same name for the mounted volume as the original ESD image.</li>
<li>Create a new diskimage with the AdobeUber* files, and embed the original ESD disk image inside that image.</li>
<li>Some other variation on these.</li>
</ol>
<p>For all of these, you must mount the disk image containing the installation payloads at the &#8220;normal&#8221; place &#8211; i.e.: /Volumes/Adobe Photoshop CS4 or whatever. No mounting under /tmp or any other fancy handling. You can pass -nobrowse to hdiutil to prevent the mounted disk from showing up in the Finder.</p>
<p>There is one more way to get diskimages to work without jumping through all these hoops, and that is to trick the Setup.app into thinking it&#8217;s not a diskimage. </p>
<p><code>hdiutil attach diskimage.dmg -notremovable -kernel</code></p>
<p>This makes the OS treat the mounted filesystem as a non-removable disk, and the Adobe Setup.app now acts just like it would if the files are on the local disk. (It&#8217;s the &#8216;-notremovable&#8217; switch that does the magic, but for some reason I kept getting &#8220;No mountable filesystems&#8221; until I added the &#8216;-kernel&#8217; switch.) You can even mount it somewhere other than /Volumes (I like -mountRandom /tmp) and you almost certainly want to use -nobrowse.</p>
<p>Thanks to Brian Ling for this method &#8212; he originally suggested the &#8216;-notremovable&#8217; switch and mentioned he needed to add &#8216;-kernel&#8217; to get this to work in Snow Leopard; it may not be needed in Leopard, but probably doesn&#8217;t hurt, either.</p>
<p>There&#8217;s a big downside to this approach, however.  When you attach a disk image as -notremovable, you cannot detach it completely without a restart. You can unmount any volumes mounted from the image, but the unmounted disk(s) will still show up in `diskutil list` until a reboot.</p>
<p>This is a bit ugly, but may not be a real issue for you, especially if you restart anyway after the installation.</p>
<p>In any case, we now have a few ways to wrap the Adobe Enterprise Deployment packages and their installation files into a disk image we can store on a fileserver which may not support HFS or AFP.</p>
<p>Of course, all is not rosy yet.  I&#8217;m still fighting with the actual _results_ of the Adobe Enterprise Deployment Toolkit install &#8211; it seems to sometimes install things even though I&#8217;ve unchecked them using the CS4 Deployment Toolkit&#8230;.  And the format of the AdobeUberInstaller.xml file, where each component is identified by an &#8220;AdobeCode&#8221; like &#8220;{3EE73408-5536-4C99-9CEB-06C2A7A726B4}&#8221; makes investigating this stuff really tedious.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/managingosx.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/managingosx.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/managingosx.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/managingosx.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/managingosx.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/managingosx.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/managingosx.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/managingosx.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/managingosx.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/managingosx.wordpress.com/220/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=220&subd=managingosx&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2009/10/06/adobe-enterprise-deployment-toolkit-versus-disk-images/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e1088e2a7d9b1e45999c4ba13389b232?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">managingosx</media:title>
		</media:content>
	</item>
	</channel>
</rss>