The iPhone Configuration Utility is used to “image” iPhone, iPad and iPod Touch. The reason I quoted image was because you aren’t laying bits down as you would in a traditional imaging scenario. Instead, you are sending a profile and possibly some applications to the device. This is done through a configuration profile, which is a property list, prefixed with a .mobileconfig extension.
The iPhone Configuration Utility stores its data in the ~/Library/MobileDevice directory. Here, you will find two directories:
- Devices – Contains the Device data for each device that has been docked to the iPhone Configuration Utility.
- Configuration Profiles – Contains the profiles that you will assign to devices in the form of .mobileconfig plists.
Both of these can be managed from the command line and therefore generated en masse. First, let’s look at creating Devices. If you go into the Devices directory you will see a .deviceinfo file for each device that you have interacted with through iPhone Configuration Utility, prefixed by the UDID of the device. Here, you can view one as a standard property list, which appears in a very simplistic fashion as follows:
<?xml version=”1.0″ encoding=”UTF-8″?><!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”><plist version=”1.0″><dict><key>UniqueChipID</key><integer>0</integer><key>applicationDictionaries</key><array/><key>configurationProfiles</key><array/><key>deviceActivationState</key><string>WildcardActivated</string><key>deviceBuildVersion</key><string>7E18</string><key>deviceCapacityKey</key><integer>15333203968</integer><key>deviceIdentifier</key><string>12a0b688649cfe0ce5df2ab8b4f9eaaee0d000fc</string><key>deviceLastConnected</key><date>2010-05-27T00:17:17Z</date><key>deviceName</key><string>Charles Edge’s iPhone</string><key>devicePhoneNumber</key><string>1 (310) 555-1212</string><key>deviceProductVersion</key><string>3.1.3</string><key>deviceSerialNumber</key><string>12345678901</string><key>deviceType</key><string>iPhone</string><key>provisioningProfiles</key><array/></dict></plist>
<?xml version=”1.0″ encoding=”UTF-8″?><!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”><plist version=”1.0″><dict><key>PayloadContent</key><array><dict><key>FullScreen</key><false/><key>IsRemovable</key><true/><key>Label</key><string></string><key>PayloadDescription</key><string>Configures Web Clip</string><key>PayloadDisplayName</key><string>Web Clip</string><key>PayloadIdentifier</key><string></string><key>PayloadOrganization</key><string></string><key>PayloadType</key><string>com.apple.webClip.managed</string><key>PayloadUUID</key><string>80222944-B43C-4A43-AB93-2998CDCBE808</string><key>PayloadVersion</key><integer>1</integer><key>Precomposed</key><false/><key>URL</key><string></string></dict></array><key>PayloadDescription</key><string>Profile description.</string><key>PayloadDisplayName</key><string>Profile Name</string><key>PayloadOrganization</key><string></string><key>PayloadRemovalDisallowed</key><false/><key>PayloadType</key><string>Configuration</string><key>PayloadUUID</key><string>5B0879F3-9BA9-41E7-AC8F-F4703D4400DB</string><key>PayloadVersion</key><integer>1</integer></dict></plist>
krypted August 31st, 2010
Posted In: iPhone
For some time, Juniper has been agressively trying to win converts from Cisco. Not only in terms of sales, but also the hearts and minds of the engineers who influence purchasing decisions. Aggressively going after engineers has meant that for years, Juniper has made their certifications essentially free for those of us who were certified with Cisco. But now, they’re starting to cast their net a little wider and go after getting anyone and everyone certified for free, provided of course that you can pass the test.
Juniper’s Junos is being offered for free for a limited time. If you’re interested in beefing up your security and/or networking skills, this might not be a bad certification to look at (can’t beat the price and all):
krypted August 28th, 2010
Posted In: Network Infrastructure
When connecting to a server from Mac OS X, what name will your system use when you bring up the Connect to Server dialog box? By default it shows the full name of the user authenticated to a client computer. But, not everyone wants this behavior. Therefore, you can change it by altering the /Library/Preferences/com.apple.NetworkAuthorization.plist file.
The first thing you can do is add a key called UseDefaultName, which will tell the system to use a static value to populate the user field. That static value is then put into a string for Default Name. To make the UseDefaultName field true:
defaults write /Library/Preferences/com.apple.NetworkAuthorization UseDefaultName -bool YES
To then set the string for that default name field:
defaults write /Library/Preferences/com.apple.NetworkAuthorization DefaultName “Charles”
Or if you wanted nothing to default into the field, you’d leave it static but give it nothing to put into the field (you do still need the key there though, so don’t skip this step):
defaults write /Library/Preferences/com.apple.NetworkAuthorization DefaultName “”
To have the field populated with the short name instead of long name, you would change UseDefaultName back to NO (after all, it isn’t a static setting, the short name):
defaults write /Library/Preferences/com.apple.NetworkAuthorization UseDefaultName -bool NO
And you would then add a key for UseShortName and set it to true:
defaults write /Library/Preferences/com.ap
ple.NetworkAuthorization UseShortName -bool YES
Or, if you wanted to To change everything back, just delete the keys we created earlier:
defaults delete /Library/Preferences/com.apple.NetworkAuthorization UseDefaultName
defaults delete /Library/Preferences/com.apple.NetworkAuthorization UseShortName
defaults delete /Library/Preferences/com.apple.NetworkAuthorization DefaultName
krypted August 27th, 2010
At some point, you may find that you would like to remove all episodes from Podcast Producer that were brought in using a specific workflow, or based on a specific keyword, a string in the title, a date, or the user that created the episodes. All of these attributes are trapped in the db.sqlite3 database for Podcast Producer. This database is stored in the Server directory of your shared library. Within this database there is a table called episodes. Using that table you can locate all episodes that match the given pattern. To query, you will use the sqlite3 command and identify the database path. A very basic incantation of this command would be to show all of the data for a given table, which in our example would be “episodes”:
sqlite3 /Volumes/xsanVolume/Library/PodcastProducer/Shared/Server/db.sqlite3 ‘SELECT * FROM episodes’
You could then expand this to limit results based on a pattern match. Here, we will have sqlite3 return the uuid for episodes that have a workflow_uuid of AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE:
sqlite3 /Volumes/xsanVolume/Library/PodcastProducer/Shared/Server/db.sqlite3 ‘SELECT uuid FROM episodes WHERE workflow_uuid=”AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE”‘
We could also change it up slightly and look for episodes that were created by a user with a shortname of cedge:
sqlite3 /Volumes/xsanVolume/Library/PodcastProducer/Shared/Server/db.sqlite3 ‘SELECT uuid FROM episodes WHERE author_shortname=”cedge”‘
The sqlite3 commands will return a set of uuids. Once you have a list of uuids, you can go into the Content directory in your shared library and you will see each listed there based on the date they were created (inside of their date folders). Date is also a field in the sqlite3 database, but given the ease of recursively performing tasks I’m not sure it will be required. The uuids will have a .prb extension and you can then piped paths with the added extension out of your command, into an array or use them for some other action, thus allowing for archiving, removing and even performing further tasks to the assets that live within the actual bundle, including hooking into transmogrifier to link to Final Cut Server.
krypted August 26th, 2010
Posted In: Mac OS X Server
Podcast Producer works by publishing video to an RSS feed known as the Podcast Library. There are feeds for workflows, Users, Keywords, Days (the podcasts are stored in day folders within Podcast Producer) and custom feeds. When you’re first getting started with and testing Podcast Producer you are likely to create a lot of test podcasts and feeds. Content is stored in the day folders in the Podcast Producer shared file system, and can be removed based on those days. To see the root of the shared file system (and therefore find the Content folder), you can use the following command (where VOLUMENAME is the name of the volume hosting:
serveradmin settings pcast:shared_filesystem
Within the Shared folder you will see Content and within Content you will see a directory for each day that an episode was created. Within the day folders you will see a long string (which is the generated ID of the episode) followed by a prb file extension. I call the prb a podcast resource bundle, although I’m not sure that’s official. Inside that bundle are all of the assets for the episode that the bundle represents, including property lists used to associate the corresponding podcast episode with various sorts of metadata and membership.
Removing the bundle for each episode alone does not remove it from the list in a feed. Therefore, to avoid broken links for episodes, you will then need to run
But if you leave the feed in place you can still see the feed itself, and even if you remove a workflow you will still see its corresponding feed listed in the Workflow Feeds, which can be pretty confusing. Feeds are defined in a pwf bundle, which I call a Podcast Workflow bundle. These can be found in the Server directory of your shared file system, within the Workflows directory. Here, you will see a number of long strings (the trend continues as these are the generated ID of the workflows) followed by the pwf extension indicating they are bundles.
These will correspond to the output of the following serveradmin command to show you which workflow is associated with which ID.
serveradmin settings pcast:workflows:_array_id:*:name
Or for a more robust albeit less human readable output, you can look at using the podcast command (a front end for many common Podcast Producer tasks) along with the –listfeeds option:
The feeds should not be removed directly from the file system. Instead, remove them using the –removefeed option, available with the podcast command. The following would remove a feed with an ID of AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE:
podcast –removefeed –feed_uuid AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE
Still working on a way to get all assets in a feed/workflow to tar or rm. I’m trying to use a curl against the atom feed at feed://SERVERNAME:8171/podcastproducer/atom_feeds/$FEEDGUID, where the $FEEDGUID is the output from –listfeeds.
krypted August 25th, 2010
Posted In: Mac OS X Server
I just can’t help myself. Every now and then I get a bug up my butt to go messing around with Krypted.com. In this case, I was tired of looking at some broken elements from the page and the front end of the site in general (just felt like something I might have built in college). I also needed to upgrade the site to the latest and greatest WordPress and some of the plug-ins that I was using were broken in 3. And thus, the lightest version of the site that I think has ever gone up. The posts are all still there, so no change to the content, but a lot of stuff was removed and the site in general (I think) looks and navigates much better.
Hope you like, and thank you for continuing to come to the site and read my random meanderings!
krypted August 24th, 2010
Regrettably, I’m on my way to the airport, but if you’re in Minneapolis today and looking for something fun to do, check out Minnebar-b-que down in Maple Grove. There is sure to be plenty of brats, some beer and maybe a tablet PC or 4:
krypted August 22nd, 2010
Posted In: personal
You can run VMware Fusion 2 in what is commonly referred to as headless mode. This option is not yet available in Fusion 3, but is handy when you do not want to authenticate at the loginwindow of Mac OS X in order to run virtual machines using the vmware-vmx process. To enable headless mode, first run the following command:
defaults write com.vmware.fusion fluxCapacitor -bool YES
defaults write com.vmware.fusion fluxCapacitor -bool NO
RemoteDisplay.vnc.enabled = “TRUE”RemoteDisplay.vnc.port = “5901”
krypted August 21st, 2010
LANDesk stores its data files in the /Library/Application Support/LANDesk/data directory. However, there is a uuid file for LANDesk that, if you put the LANDesk client in your image will need to be deleted. The uuid is in the /Library/Preferences/com.landesk.uuid.plist property list. If you rm this file as a postflight imaging task then your client can be deployed on your image:
krypted August 20th, 2010