<?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: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, 13 Oct 2009 15:26:20 +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>
			<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[<div class='snap_preview'><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" /></div>]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2009/10/13/apple-software-update-wishes/feed/</wfw:commentRss>
		<slash:comments>4</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[<div class='snap_preview'><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" /></div>]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2009/10/12/apple-software-update-options/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>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[<div class='snap_preview'><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" /></div>]]></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[<div class='snap_preview'><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" /></div>]]></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[<div class='snap_preview'><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" /></div>]]></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>
		<item>
		<title>Adobe Enterprise Deployment Toolkit FAIL</title>
		<link>http://managingosx.wordpress.com/2009/10/01/adobe-enterprise-deployment-toolkit-fail/</link>
		<comments>http://managingosx.wordpress.com/2009/10/01/adobe-enterprise-deployment-toolkit-fail/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 21:12:37 +0000</pubDate>
		<dc:creator>GregN</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://managingosx.wordpress.com/?p=211</guid>
		<description><![CDATA[So I know I&#8217;m late to the party here.  I&#8217;ve just recently started playing with the Adobe Enterprise Deployment Toolkit for deploying CS4 applications.  I&#8217;ve found all sorts of annoyances and oddities that I wanted to do a sanity check and see if I&#8217;m missing anything&#8230;

For the rest of this post, AEDT = [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=211&subd=managingosx&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>So I know I&#8217;m late to the party here.  I&#8217;ve just recently started playing with the <a href="http://www.adobe.com/aboutadobe/openoptions/cs/deployment_toolkit.html">Adobe Enterprise Deployment Toolkit</a> for deploying CS4 applications.  I&#8217;ve found all sorts of annoyances and oddities that I wanted to do a sanity check and see if I&#8217;m missing anything&#8230;<br />
<span id="more-211"></span></p>
<p>For the rest of this post, AEDT = Adobe Enterprise Deployment Toolkit.</p>
<p>1) &#8220;Silent&#8221; install?</p>
<p>One of the points of using the AEDT is to create a &#8220;silent&#8221; installer.  Adobe has a funny idea of what &#8220;silent&#8221; is.  If a user is logged in, you see the Setup icon appear in the Dock (sometimes bouncing _forever_ before finally settling down), and worse, a series of alphanumerically-named disk images appear and disappear from the Desktop and/or Finder sidebar.  It&#8217;s obnoxious and distracting. Yes, it doesn&#8217;t make any _sounds_, so I guess it&#8217;s silent.</p>
<p>If you try to run this same installer when no-one is logged in, it may not complete at all, but instead hang forever in the middle of the install. I could reproduce this problem over and over, but but poking around with &#8216;top&#8217; and &#8216;lsof&#8217; and looking at the system log, I figured out it was hanging while trying to install Adobe AIR.  Funny, I was pretty sure I deselected that when I created the AdobeUberInstaller/Uninstaller.xml files&#8230;  Rebuilt the &#8220;package&#8221; again using AEDT and now that issue seems to have gone away. Still, another reason to avoid Adobe AIR.</p>
<p>2) Disk image?</p>
<p>AEDT &#8220;packages&#8221; are really just copies of the AdobeUberInstaller and AdobeUberUninstaller and two XML files that tell those tools what to do. Each XML file contains a path to the contents of Adobe installation media; typically copied from DVDs or disk images into a folder somewhere. You can put these installation media contents on a file server (AFP only, please, SMB and NFS not supported!), or copy the media to the local machine before installing.  Although the XML files generated by the AEDT contain absolute paths to the installation files, you can edit them using a text editor and provide a relative path (relative to the directory containing AdobeUberInstaller and AdobeUberUninstaller).  So you can set up a folder like so:</p>
<pre>
<code>
PhotoshopCS4/
	AdobeUberInstaller
	AdobeUberInstaller.xml
	AdobeUberUninstaller
	AdobeUberUninstaller.xml
	PhotoshopCS4InstallMedia/
</code>
</pre>
<p>And set the InstallerLocation in the XML files to look like this:<br />
<code><br />
&lt;InstallerLocation&gt;./PhotoshopCS4InstallMedia&lt;/InstallerLocation&gt;<br />
</code></p>
<p>This works if you copy the folder to the target machine &#8211; say to /Users/Shared/, and then run the UberInstaller:</p>
<p><code>/User/Shared/PhotoshopCS4/AdobeUberInstaller</code></p>
<p>Success.  Adobe Photoshop CS4 is installed.  Run the AdobeUberInstaller, and it is uninstalled.  (Except for Adobe Media Player.app, which you specified you didn&#8217;t want installed in the first place, but it did it anyway, but that&#8217;s a rant for another time&#8230;) So far, so good.  Now you want to encapsulate this a bit to make it easier to store and copy to a machine, so you build a read-only, compressed disk image of the PhotoshopCS4 folder.<br />
Next, you mount the disk image and try to run the UberInstaller.</p>
<p><code>/Volumes/AdobePhotoshopCS4/AdobeUberInstaller</code></p>
<p>It churns for a while, then:</p>
<p>FAIL with Exit code 7, which means &#8220;Unable to complete the Silent workflow&#8221;.  That&#8217;s helpful.  The logs are not too helpful either.  Go back to the folder you created the disk image from, and it installs fine.  Uninstall from the folder. OK. Now try the disk image again.</p>
<p>FAIL.</p>
<p>Has anyone gotten this to work from a disk image?  Am I missing something? Gah.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/managingosx.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/managingosx.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/managingosx.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/managingosx.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/managingosx.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/managingosx.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/managingosx.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/managingosx.wordpress.com/211/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/managingosx.wordpress.com/211/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/managingosx.wordpress.com/211/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=211&subd=managingosx&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2009/10/01/adobe-enterprise-deployment-toolkit-fail/feed/</wfw:commentRss>
		<slash:comments>4</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 Lightroom Installer</title>
		<link>http://managingosx.wordpress.com/2009/04/03/lightroom-installer/</link>
		<comments>http://managingosx.wordpress.com/2009/04/03/lightroom-installer/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 23:45:59 +0000</pubDate>
		<dc:creator>GregN</dc:creator>
				<category><![CDATA[Commentary]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://managingosx.wordpress.com/?p=202</guid>
		<description><![CDATA[John Welch has written passionately about Adobe installers many times over the years.  Here&#8217;s another to add to the list, though not as colorfully as Mr. Welch might have done&#8230; 
The Lightroom 2.3 installer is an order of magnitude better than most other Adobe installers:

It is a standard Apple Installer package.
It installs just one [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=202&subd=managingosx&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>John Welch has <a href="http://www.bynkii.com/archives/2009/02/on_installers.html">written</a> <a href="http://www.bynkii.com/archives/2006/12/adobe_reader_8_released_and_th.html">passionately</a> about <a href="http://www.bynkii.com/archives/2008/11/more_adobe_installer_lies.html">Adobe installers</a> many times over the years.  Here&#8217;s another to add to the list, though not as colorfully as Mr. Welch might have done&#8230; <span id="more-202"></span></p>
<p>The Lightroom 2.3 installer is an order of magnitude better than most other Adobe installers:</p>
<ul>
<li>It is a standard Apple Installer package.</li>
<li>It installs just one thing: Adobe Lightroom 2.3.</li>
<li>It does not secretly install Flash, or Air, or Adobe Reader.</li>
<li>It stores its registration info in a separate file from the Adobe CS2, CS3, and CS4 apps, so you don&#8217;t have to worry about registrations clobbering each other.</li>
</ul>
<p>But it&#8217;s not perfect.</p>
<p>Problem #1: the postinstall script at Contents/Resources/postinstall:</p>
<pre style="overflow:scroll;">
<code>
#!/bin/bash
#
# This postinstall script copies the camera raw profiles into the
# application support folder

ditto -kx "$1/Contents/Resources/profiles.zip" "/Library/Application Support/Adobe/CameraRaw/CameraProfiles"
</code>
</pre>
<p>This uses ditto to copy stuff out of a ZIP archive to /Library/Application Support/Adobe/CameraRaw/CameraProfiles/</p>
<p>Why?  Why couldn&#8217;t this just be in the package payload?  Or why couldn&#8217;t this be a metapackage, where one package installed Adobe Lightroom and another installed the CameraProfiles?</p>
<p>As an administrator, I don&#8217;t want to read scripts to see what else a package has installed &#8211; it should be in the bom files for the installer.  Worse, we&#8217;ll never see a useful uninstall capability as long as software vendors pull this sort of thing.  Ideally, we should be able to look at /Library/Receipts to see what has been installed, and in the future, be able to use this same info to uninstall things.  Postflight or postinstall scripts that install additional things break this concept.</p>
<p>But it gets worse.</p>
<p>Let&#8217;s look at the postflight script at Contents/Resources/postflight:</p>
<pre style="overflow:scroll;">
<code>
#!/bin/bash
#
# remove the receipt file, which causes problems if people try to reinstall
# an earlier version

RMPATH="/Library/Receipts/`basename "$1"`"
echo "removing receipt $RMPATH"
rm -rf "$RMPATH"
</code>
</pre>
<p>It removes its own receipt!  Now we&#8217;re really horked if we want to find out what&#8217;s been installed. Adobe destroys the evidence!</p>
<p>Sigh.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/managingosx.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/managingosx.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/managingosx.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/managingosx.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/managingosx.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/managingosx.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/managingosx.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/managingosx.wordpress.com/202/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/managingosx.wordpress.com/202/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/managingosx.wordpress.com/202/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=202&subd=managingosx&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2009/04/03/lightroom-installer/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>
	</item>
		<item>
		<title>Energy Saver scripting</title>
		<link>http://managingosx.wordpress.com/2009/03/31/energysaver-scripting/</link>
		<comments>http://managingosx.wordpress.com/2009/03/31/energysaver-scripting/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 17:12:21 +0000</pubDate>
		<dc:creator>GregN</dc:creator>
				<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://managingosx.wordpress.com/?p=192</guid>
		<description><![CDATA[Here&#8217;s a version of a script we use on all our machines in an attempt to reduce energy usage with a minimum of visible impact on users. Our machines are set to not sleep during the day.  This script runs hourly, and if it&#8217;s after 7pm and the machine has been idle for 20 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=192&subd=managingosx&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><img src="http://managingosx.files.wordpress.com/2009/03/energysaver.jpg?w=128&#038;h=128" alt="energysaver" title="energysaver" width="128" height="128" class="alignright size-full wp-image-196" />Here&#8217;s a version of a script we use on all our machines in an attempt to reduce energy usage with a minimum of visible impact on users. Our machines are set to not sleep during the day.  This script runs hourly, and if it&#8217;s after 7pm and the machine has been idle for 20 minutes or more, it tries to sleep the machine if someone is logged in, or shut it down if no-one is logged in.<br />
The machine is also set to automatically startup or wake at 6am M-F. The net result is that most of our desktop machines go to sleep or shutdown a little after 7pm each weeknight and wake up at 6am each week morning, and our users are none the wiser.<span id="more-192"></span></p>
<pre style="overflow:scroll;">
<code>
#!/bin/sh

# Sleep or shutdown script
# tryin' to be 'green'.....

# look for exception file
if [ -f "/var/db/.dontSleep" ]; then
	exit 0
fi

# if we're a laptop, exit.
# No shutting down laptops (or waking them up unbidden!)
IS_LAPTOP=`/usr/sbin/system_profiler SPHardwareDataType | grep "Model" | grep "Book"`
if [ "$IS_LAPTOP" != "" ]; then
	exit 0
fi

# check the time; exit if it's between 5 am and 7 pm
current_hour=`/bin/date +%H`
if [ $current_hour -gt 5 -a $current_hour -lt 19 ]; then
	exit 0
fi

# now check idle time;
# exit if we've been idle less than 20 minutes
idleTime=`ioreg -c IOHIDSystem | perl -ane 'if (/Idle/) {$idle=int((pop @F)/1000000000); print $idle,"\n"; last}'`
if [ $idleTime -lt 1200 ]; then
	exit 0
fi

# tell Power Manager to wake us up or turn us on at 6am M-F
pmset repeat wakeorpoweron MTWRF 06:00:00

# check to see if a user's logged into the console
login_status=`/usr/bin/who | /usr/bin/awk '{ print $2 }'`
for i in $login_status; do
  if [ $i = "console" ]; then
       # someone's logged in, sleep
       osascript -e 'tell application "System Events" to sleep'
       exit 0
  fi
done

# if we got this far, it's OK to shut down.
/sbin/shutdown -h now
exit 0

</code>
</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/managingosx.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/managingosx.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/managingosx.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/managingosx.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/managingosx.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/managingosx.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/managingosx.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/managingosx.wordpress.com/192/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/managingosx.wordpress.com/192/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/managingosx.wordpress.com/192/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=192&subd=managingosx&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2009/03/31/energysaver-scripting/feed/</wfw:commentRss>
		<slash:comments>11</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/03/energysaver.jpg" medium="image">
			<media:title type="html">energysaver</media:title>
		</media:content>
	</item>
		<item>
		<title>Leopard, MobileAccounts, and NFS homes</title>
		<link>http://managingosx.wordpress.com/2009/02/19/leopard-mobileaccounts-and-nfs-homes/</link>
		<comments>http://managingosx.wordpress.com/2009/02/19/leopard-mobileaccounts-and-nfs-homes/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 18:02:27 +0000</pubDate>
		<dc:creator>GregN</dc:creator>
				<category><![CDATA[DirectoryService]]></category>
		<category><![CDATA[Leopard]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://managingosx.wordpress.com/?p=177</guid>
		<description><![CDATA[On the MacEnterprise maillist, Arjen van Bochoven wrote of problems with automatic HomeSyncs under Leopard with NFS home directories.  Manual syncs worked fine, but the automatic background syncs would fail with errors that looked like this:

1:: [228] Peer "network" is unable to sync. (-[SPeer_FS_PHD mountPeerVolume] (Peer-FS-PHD.m:140): "'((homePath))' is nil")
0:: [228] [2009/02/19 10:45:10.640] Peer "network" [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=177&subd=managingosx&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><img src="http://managingosx.files.wordpress.com/2006/03/HomeSync1.png?w=76&#038;h=71" alt="HomeSync" title="HomeSync" width="76" height="71" class="alignleft size-full wp-image-39" />On the <a href="http://lists.psu.edu/archives/macenterprise.html">MacEnterprise maillist</a>, Arjen van Bochoven wrote of problems with automatic HomeSyncs under Leopard with NFS home directories.  Manual syncs worked fine, but the automatic background syncs would fail with errors that looked like this:</p>
<pre>
1:: [228] Peer "network" is unable to sync. (-[SPeer_FS_PHD mountPeerVolume] (Peer-FS-PHD.m:140): "'((homePath))' is nil")
0:: [228] [2009/02/19 10:45:10.640] Peer "network" is unable to sync. Not enough peers will be available to continue syncing.
0:: [228] [2009/02/19 10:45:10.640] Aborting sync of "HomeSync_Mirror".
</pre>
<p>I saw the exact same problem in my environment. This also affected login and logout syncs. Here&#8217;s the (ugly) fix.<span id="more-177"></span></p>
<p>For each mobile account, you&#8217;ll need to make two modifications to the account info in the local DS:</p>
<p><code>/usr/bin/dscl . create /Users/$USERNAME dsAttrTypeStandard:OriginalHomeDirectory "nfs://$NFSEXPORT$USERNAME"</code></p>
<p>where $USERNAME is the short username, and $NFSEXPORT is the nfsserver and its export. </p>
<p>This gives HomeSync a nfs:// URL to use to mount the network home directory (It shouldn&#8217;t have to do this, since the network home is already available at the autofs mountpoint for the network home, and obviously really doesn&#8217;t need it since manual syncs work), but we have to do it anyway.</p>
<p>The OriginalHomeDirectory attribute has two parts &#8211; a URL describing the mount, and a path describing the path to the actual home dir, relative to the mount.  In my case, when I type `mount`, my home autofs mount looks like this:</p>
<p><code>homeserver:/vol/home/fahome on /home/fahome</code></p>
<p>and my NFS home path is <code>/home/fahome/gneagle</code></p>
<p>So the URL is &#8216;nfs://homeserver/vol/home/fahome/&#8217; and the path is &#8216;gneagle&#8217;.</p>
<p>Depending on how the home mounts are setup in your environment, the division between the URL and the path might be different, for example, we might have had this instead:</p>
<p>URL &#8216;nfs://homeserver/vol/home/&#8217; with a path of &#8216;fahome/gneagle&#8217;.</p>
<p>The next change:<br />
<code>/usr/bin/dscl . append /Users/$USERNAME dsAttrTypeNative:preserved_attributes dsAttrTypeStandard:OriginalHomeDirectory</code></p>
<p>This prevents the OriginalHomeDirectory attribute from being overwritten by the empty value presumably coming from the network.  (If there was a useful value in the network directory, this hack wouldn&#8217;t be needed.)</p>
<p>You may be able to create the accounts &#8220;correctly&#8221; in the first place by using /System/Library/CoreServices/ManagedClient.app/Contents/Resources/createmobileaccount and passing the syncURL with the -u option in the form &#8220;nfs://homeserver/export/home/gneagle&#8221;.  This didn&#8217;t work in my environment, and even if it did, it wasn&#8217;t really an option to use createmobileaccount, so I instead wrote a login hook that &#8220;fixes&#8221; the mobile account if needed. WordPress will cut off the right side of the script when displaying it, but you can select, copy and paste into your favorite text editor for examination:</p>
<pre>
<code>
#!/bin/sh

# Leopard bug workaround as of 10.5.2. March 5 2008
# inserts nfs:// URL into OriginalHomeDirectory attribute
# for mobile accounts so that login/logout/background syncs
# work reliably
#
# Greg Neagle, Walt Disney Animation Studios

# the following is the actual NFS share that is mounted via autofs
NFSEXPORT="homeserver.example.com/vol/home/fahome/"

USERNAME=$1
LOCALACCT=`/usr/bin/dscl . read /Users/$USERNAME 2&gt;/dev/null`
if [ "$LOCALACCT" != "" ]; then
  # $USERNAME is a local account
  NETHOME=`/bin/echo $LOCALACCT | /usr/bin/grep OriginalNFSHomeDirectory`
  if [ "$NETHOME" != "" ]; then
    # $USERNAME is a mobile account
    # in our case, the path and the username are one and the same
    /usr/bin/dscl . create /Users/$USERNAME dsAttrTypeStandard:OriginalHomeDirectory "nfs://$NFSEXPORT$USERNAME"
    PRESERVED_ORIG_HOME=`/usr/bin/dscl . read /Users/$USERNAME dsAttrTypeNative:preserved_attributes | /usr/bin/grep dsAttrTypeStandard:OriginalHomeDirectory`
    if [ "$PRESERVED_ORIG_HOME" = "" ]; then
      /usr/bin/dscl . append /Users/$USERNAME dsAttrTypeNative:preserved_attributes dsAttrTypeStandard:OriginalHomeDirectory
    fi
  fi
fi
</code>
</pre>
<p>The user logs in with their network account. MCX computer group settings cause the user to be asked if they want to create a mobile account, if they agree the mobile account is created and the home directory is encrypted with FileVault. As they log in, the login hook runs and if needed, inserts the additional info into the cached local account info so that automatic HomeSyncs work. </p>
<p>Though this fixed the issue for our environment, I still consider this a bug.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/managingosx.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/managingosx.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/managingosx.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/managingosx.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/managingosx.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/managingosx.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/managingosx.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/managingosx.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/managingosx.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/managingosx.wordpress.com/177/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=177&subd=managingosx&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2009/02/19/leopard-mobileaccounts-and-nfs-homes/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>

		<media:content url="http://managingosx.files.wordpress.com/2006/03/HomeSync1.png" medium="image">
			<media:title type="html">HomeSync</media:title>
		</media:content>
	</item>
		<item>
		<title>Image cleanup script</title>
		<link>http://managingosx.wordpress.com/2009/01/23/image-cleanup-script/</link>
		<comments>http://managingosx.wordpress.com/2009/01/23/image-cleanup-script/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 20:23:26 +0000</pubDate>
		<dc:creator>GregN</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[OS X]]></category>

		<guid isPermaLink="false">http://managingosx.wordpress.com/?p=152</guid>
		<description><![CDATA[UPDATE 1/23/09: some commenters asked about cleanup of the LKDC (new in Leopard) &#8211; I&#8217;ve added that to the script.
At the Macworld Expo 2009 Power Tools System Imaging and Deployment session today, I was asked to share a &#8220;checklist&#8221; of cleanup steps I use when building images the &#8220;classic&#8221; way.  (The InstaDMG methodology of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=152&subd=managingosx&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>UPDATE 1/23/09: some commenters asked about cleanup of the LKDC (new in Leopard) &#8211; I&#8217;ve added that to the script.</p>
<p>At the Macworld Expo 2009 Power Tools System Imaging and Deployment session today, I was asked to share a &#8220;checklist&#8221; of cleanup steps I use when building images the &#8220;classic&#8221; way.  (The InstaDMG methodology of image building makes cleanup steps unneeded.) </p>
<p>Here&#8217;s a cleaned-up version of the script I use, with site-specific stuff removed for the most part.<br />
<span id="more-152"></span><br />
If you use this, you&#8217;ll need to modify the paths to any local user home directories for any local users you have on your image.  There are generic examples for a local admin user named &#8220;admin&#8221; and the root user (which if you never login as root, you shouldn&#8217;t have to clean up!)</p>
<pre style="overflow:scroll;">
<code>#!/bin/sh
#this script does some cleanup in preperation for building an image
#best to run this from single user mode, or at least right before you shutdown
#run this as root, or with sudo rights

#set machine names back to generic
/usr/sbin/scutil --set ComputerName "OSX_Standard_Image"
/usr/sbin/scutil --set LocalHostName "osximg"

#delete swapfiles
rm /private/var/vm/swapfile*

#delete volume info DB
rm /private/var/db/volinfo.database

#cleanup local admin's home dir
rm -rf /Users/admin/Desktop/*
rm -rf /Users/admin/Documents/*
rm -rf /Users/admin/Library/Caches/*
rm -rf /Users/admin/Library/Recent\ Servers/*
rm -rf /Users/admin/Library/Logs/*
rm -rf /Users/admin/Library/Keychains/*
rm -rf /Users/admin/Library/Preferences/ByHost/*
rm -f /Users/admin/Library/Preferences/com.apple.recentitems.plist
rm -rf /Users/admin/Movies/*
rm -rf /Users/admin/Music/*
rm -rf /Users/admin/Pictures/*
rm -rf /Users/admin/Public/Drop\ Box/* 

#cleanup root's home dir
rm -rf /private/var/root/Desktop/*
rm -rf /private/var/root/Documents/*
rm -rf /private/var/root/Downloads/*
rm -rf /private/var/root/Library/Caches/*
rm -rf /private/var/root/Library/Recent\ Servers/*
rm -rf /private/var/root/Library/Logs/*
rm -rf /private/var/root/Library/Keychains/*
rm -rf /private/var/root/Library/Preferences/ByHost/*
rm -f /private/var/root/Library/Preferences/com.apple.recentitems.plist
rm -rf /private/var/root/Public/Drop\ Box/*

#clean up global caches and temp data
rm -rf /Library/Caches/*
rm -rf /System/Library/Caches/*
rm -rf /Users/Shared/*
rm -f /private/etc/ssh_host*

#network interfaces - this is regenerated on reboot and can differ on different hardware
rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist

#Leopard - cleanup local KDC, see http://support.apple.com/kb/TS1245
/usr/sbin/systemkeychain -k /Library/Keychains/System.keychain -C -f
rm -rf /var/db/krb5kdc
/usr/bin/defaults delete /System/Library/LaunchDaemons/com.apple.configureLocalKDC Disabled

#log cleanup.  We touch the log file after removing it since syslog
#won't create missing logs.
rm /private/var/log/alf.log
touch /private/var/log/alf.log
rm /private/var/log/cups/access_log
touch /private/var/log/cups/access_log
rm /private/var/log/cups/error_log
touch /private/var/log/cups/error_log
rm /private/var/log/cups/page_log
touch /private/var/log/cups/page_log
rm /private/var/log/daily.out
rm /private/var/log/ftp.log*
touch /private/var/log/ftp.log
rm -rf /private/var/log/httpd/*
rm /private/var/log/lastlog
rm /private/var/log/lookupd.log*
rm /private/var/log/lpr.log*
rm /private/var/log/mail.log*
touch /private/var/log/lpr.log
rm /private/var/log/mail.log*
touch /private/var/log/mail.log
rm /private/var/log/monthly.out
rm /private/var/log/run_radmind.log
rm -rf /private/var/log/samba/*
rm /private/var/log/secure.log
touch /private/var/log/secure.log
rm /private/var/log/system.log*
touch /private/var/log/system.log
rm /private/var/log/weekly.out
rm /private/var/log/windowserver.log
touch /private/var/log/windowserver.log
rm /private/var/log/windowserver_last.log
rm /private/var/log/wtmp.*
</code>
</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/managingosx.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/managingosx.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/managingosx.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/managingosx.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/managingosx.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/managingosx.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/managingosx.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/managingosx.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/managingosx.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/managingosx.wordpress.com/152/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=managingosx.wordpress.com&blog=98681&post=152&subd=managingosx&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://managingosx.wordpress.com/2009/01/23/image-cleanup-script/feed/</wfw:commentRss>
		<slash:comments>10</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>