Final Cut Studio 3 and Munki

From AFP548 Wiki
Jump to navigation Jump to search

Installing Final Cut Studio 3 with Munki might seem rather insane at first, but it really isn't that difficult. This guide will go over how to install FCS3, including all the content DVDs.

What You Need

  • FCS3 Install DVDs (Or Disk images, but I am going to assume you are starting with Physical media)
  • Munki
  • Text Editor of choice (VIM is nice, as is Text Wrangler, etc)

First things first

The first thing we need to do is get the files off the DVDs and onto your computer.

Final Cut Studio Install

  • Pop in the Final Cut Studio Install DVD.
  • Open Disk Utility and create a read/write disk of the Install DVD.

DVD Studio Pro Content

  • Insert DVD Studio Pro Content DVD
  • Using Disk Utility, create a read/write disk of the DVD.

Audio Content DVDs 1,2 and 3

These are a tiny bit more tricky. We need to combine them all into one big honking disk image so that munki can install them properly.

  • In Disk Utility with nothing selected, create a "New Image." Name it "Audio Content.dmg", make sure the Size is 30gb to be safe and save it wherever you'd like.
  • Mount the new disk image.
  • Now put Audio Content DVD 1 into your DVD drive.
  • Using Terminal, copy the contents of DVD 1 onto your new disk image (should be /Volumes/Audio\ Content/)
cp -R /Volumes/Audio\ Content\ 1/* /Volumes/Audio\ Content/
  • This should copy everything over to the new disk image. Make sure it all looks right in terminal (compare the DVD to the disk image).
  • Remove Audio Content DVD 1, insert Audio Content DVD 2.
  • Now the tricky bit. All the packages are really kept in a hidden folder on the disk image. The location is as follows:
/Volumes/Audio Content/Installer/AudioContentforSoundtrackPro.mpkg/Contents/Packages
  • So for DVD 2 and 3, you'll want to copy the packages into that location. This command should look something like this:
cp -R /Volumes/Audio\ Content\ 2/Installer/* /Volumes/Audio\ Content/Installer/AudioContentforSoundtrackPro.mpkg/Contents/Packages/
  • If all goes well, this will have copied all the packages from the Installer folder into the Packages folder on the new Image we've created. You now have DVD 1 and 2 all on one disc.
  • Do the same thing for Audio Content DVD 3. Should be the same command as in the example above, but with "Audio Content 3" or whatever your disk name is.
  • Thats it for this one. Once the content of all three DVDs are on our new Disc, it should look like this:
cd /Volumes/Audio\ Content/Installer/AudioContentforSoundtrackPro.mpkg/Contents/Packages
ls
AudioContentforSoundtrackPro1A.pkg	AudioContentforSoundtrackPro2A.pkg	AudioContentforSoundtrackPro5A.pkg
AudioContentforSoundtrackPro1B.pkg	AudioContentforSoundtrackPro2B.pkg	AudioContentforSoundtrackPro5B.pkg
AudioContentforSoundtrackPro1C.pkg	AudioContentforSoundtrackPro3.pkg	AudioContentforSoundtrackPro7.pkg
  • If yours looks like this, you are set. If not, then figure out where it went wrong.

Motion Content

Motion Content is similar to Audio Content, yet a slight bit different. We are still creating a new image and copying stuff over, but the packages live in a different folder.

  • Open Disk Util, create a new disk image, read/write and make it around 15gb. Name it "Motion Content.dmg"
  • Put your Motion Content DVD 1 in. Just as before, copy its contents to your disk image.
cp -R /Volumes/Motion\ Content\ 1/* /Volumes/Motion\ Content/
  • Once that is done, put Motion DVD 2 in.
  • Now lets copy the Packages from Motion DVD over to our new image. Instead of going inside a mpkg, this time they go in a less convoluted location.
cp -R /Volumes/Motion\ Content\ 2/Packages/* /Volumes/Motion\ Content/Installer/Packages/
  • This should copy everything over for you. To be sure, it should look like this:
cd /Volumes/Motion\ Content/Installer/Packages/
ls
CollectorsSeriesLiveFonts.pkg	MotionInstalledMedia1.pkg	MotionSeriesLiveFonts.pkg
MotionContentTemplates.pkg	MotionInstalledMedia2.pkg	ProSeriesLiveFonts.pkg
  • If it doesn't look like this for you, make sure it is fixed before you move on.

Editing the dist files

Now comes the exciting part. We need to edit the .dist files so that the installer will run regardless of being run silently or not and so it knows the new location of the packages (In the case of Motion and Audio Content). How do we do this? Its not that bad, I promise.

Final Cut Studio Installer Dist

  • Final Cut Studio seems to just work. If it doesn't, you can dig around the .dist file a bit if you'd like. ( /Volumes/Final\ Cut\ Studio\ Install/Installer/FinalCutStudio.mpkg/Contents/FinalCutStudio.dist ).

DVD Studio Pro Content Dist

We need to edit the .dist file here so that it installs without complaining about anything. The edits are pretty straight forward.

  • Mount your read/write DVD Studio Pro Content image.
  • Open the dist file in your favorite text editor ( /Volumes/DVD\ Studio\ Pro\ Content/Installer/DVDStudioProContent.mpkg/Contents/DVDStudioProContent.dist ).
  • Basically, find any start_selected="blah blah blah" key and change it to start_selected="Yes"
  • Here is what my working dist file looks like. This may or may not work properly for you:
<?xml version="1.0"?>
<installer-gui-script minSpecVersion='1.0040'>
    <platforms>
        <client arch="i386,ppc"/>
    </platforms>
    <title>TITLE_DIST</title>
    <welcome file='Welcome.rtf'/>
    <license file='License.rtf'/>
    <background file='background.tiff' alignment='topleft'/>
    <options customize='always'/>
    <options allow-external-scripts='yes'/>
    <options mpkg='com.apple.mpkg.DVDStudioProContent'/>
    <script>

		function isNotDowngrade()
		{
			var action = my.choice.packageUpgradeAction;
			
			if( (action == 'downgrade') || (action == 'mixed') )
			{
				// my.choice.tooltip = system.localizedStringWithFormat('TT_NEWERALREADYINSTALLED');
				return false;
			}
			
			return true;
		}
		
	</script>
    <choices-outline>
        <line choice="DSPContentGroup">
            <line choice="NTSCTemplates">
                <line choice="HDDVDNTSC"/>
                <line choice="SDDVDNTSC"/>
            </line>
            <line choice="PALTemplates">
                <line choice="HDDVDPAL"/>
                <line choice="SDDVDPAL"/>
            </line>
        </line>
    </choices-outline>
    <choice id="DSPContentGroup" title="TITLE_DSPCONTENT" description='DESCRIPTION_DSPCONTENT' customLocation='/Library/Application Support/Final Cut Studio/DVD Studio Pro/' customLocationAllowAlternateVolumes='YES'></choice>
    <choice id="NTSCTemplates" title="TITLE_NTSCTEMPLATES" start_enabled='isNotDowngrade()' start_selected="Yes" description='DESCRIPTION_NTSCTEMPLATES'></choice>
    <choice id="HDDVDNTSC" title="TITLE_HDDVDNTSC" start_enabled='isNotDowngrade()' start_selected="Yes" description='DESCRIPTION_HDDVDNTSC'>
        <pkg-ref id='com.apple.pkg.HDDVDNTSC' auth='Root' installKBytes="1955771" version="1.0.0.170000.68">./Contents/Packages/HDDVDNTSC.pkg</pkg-ref>
    </choice>
    <choice id="HDDVDPAL" title="TITLE_HDDVDPAL" start_enabled='isNotDowngrade()' start_selected='Yes'>
        <pkg-ref id='com.apple.pkg.HDDVDPAL' auth='Root' installKBytes="1937974" version="1.0.0.170000.68">./Contents/Packages/HDDVDPAL.pkg</pkg-ref>
    </choice>
    <choice id="PALTemplates" title="TITLE_PALTEMPLATES" start_enabled='isNotDowngrade()' start_selected='Yes'></choice>
    <choice id="SDDVDNTSC" title="TITLE_SDDVDNTSC" start_enabled='isNotDowngrade()' start_selected='Yes'>
        <pkg-ref id='com.apple.pkg.SDDVDNTSC' auth='Root' installKBytes="2576723" version="1.0.0.170000.68">./Contents/Packages/SDDVDNTSC.pkg</pkg-ref>
    </choice>
    <choice id="SDDVDPAL" title="TITLE_SDDVDPAL" start_enabled='isNotDowngrade()' start_selected='Yes'>
        <pkg-ref id='com.apple.pkg.SDDVDPAL' auth='Root' installKBytes="2413788" version="1.0.0.170000.68">./Contents/Packages/SDDVDPAL.pkg</pkg-ref>
    </choice>
    <pkg-ref id='com.apple.mpkg.DVDStudioProContent' auth='Root'>.</pkg-ref>
</installer-gui-script>
  • Once you are happy with the edits and you are confident there are no typos, save and close the dist file and unmount the image file. (There is a reason we are keeping a read/write copy around...typos DO happen!).
  • Thats it for this edit.

Audio Content Dist

  • Mount your read/write Audio Content image.
  • Open the dist file in your favorite text editor ( /Volumes/Audio\ Content/Installer/AudioContentforSoundtrackPro.mpkg/Contents/AudioContentforSoundtrackPro.dist ).
  • Basically, find any start_selected="blah blah blah" key and change it to start_selected="Yes"
  • Also, because we merged the three DVDs into one disk Image, you need to change the references to the package location. You'll want to replace "x-disc://Audio%20Content%202/Installer/" with "file:./Contents/Packages/"
  • This one is a bit more complicated then the previous. Because I am so nice, here is what my working .dist file looks like:
<?xml version="1.0"?>
<installer-gui-script minSpecVersion='1.0040'>
    <platforms>
        <client arch="i386,ppc"/>
    </platforms>
    <options allow-external-scripts='yes'/>
    <options mpkg='com.apple.mpkg.AudioContentforSoundtrackPro'/>
    <options customize='always'/>
    <options hostArchitectures='i386,ppc'/>
    <title>TITLE_DIST</title>
    <welcome file='Welcome.rtf'/>
    <license file='License.rtf'/>
    <background file='background.tiff'/>
    <choices-outline>
        <line choice="STPContent">
            <line choice="SoundtrackProSoundEffects"/>
            <line choice="SoundtrackProMusicBeds"/>
            <line choice="SoundtrackProMusicLoops"/>
        </line>
    </choices-outline>
    <choice id="STPContent" title="TITLE_STPCONTENT" description='DESCRIPTION_STPCONTENT' start_selected="true" customLocation='/Library/Audio/Apple Loops/Apple/' customLocationAllowAlternateVolumes='YES'></choice>
    <choice id="SoundtrackProSoundEffects" title="TITLE_SOUNDTRACKSOUNDEFFECTS" description='DESCRIPTION_SOUNDTRACKSOUNDEFFECTS' start_selected='YES'>
        <pkg-ref id='com.apple.pkg.AudioContentforSoundtrackPro1A' auth='Root' installKBytes="2929051" version="1.1.0.260000.97">file:./Contents/Packages/AudioContentforSoundtrackPro1A.pkg</pkg-ref>
        <pkg-ref id='com.apple.pkg.AudioContentforSoundtrackPro1B' auth='Root' installKBytes="2849051" version="1.1.0.260000.97">file:./Contents/Packages/AudioContentforSoundtrackPro1B.pkg</pkg-ref>
        <pkg-ref id='com.apple.pkg.AudioContentforSoundtrackPro1C' auth='Root' installKBytes="2616500" version="1.1.0.260000.97">file:./Contents/Packages/AudioContentforSoundtrackPro1C.pkg</pkg-ref>
        <pkg-ref id='com.apple.pkg.AudioContentforSoundtrackPro2A' auth='Root' installKBytes="2941592" version="1.1.0.260000.97">file:./Contents/Packages/AudioContentforSoundtrackPro2A.pkg</pkg-ref>
        <pkg-ref id='com.apple.pkg.AudioContentforSoundtrackPro2B' auth='Root' installKBytes="2956582" version="1.1.0.260000.97">file:./Contents/Packages/AudioContentforSoundtrackPro2B.pkg</pkg-ref>
        <pkg-ref id='com.apple.pkg.AudioContentforSoundtrackPro3' auth='Root' installKBytes="2033642" version="1.1.0.260000.97">file:./Contents/Packages/AudioContentforSoundtrackPro3.pkg</pkg-ref>
    </choice>
    <choice id="SoundtrackProMusicBeds" title="TITLE_SOUNDTRACKMUSICBEDS" description='DESCRIPTION_SOUNDTRACKMUSICBEDS' start_selected='YES'>
        <pkg-ref id='com.apple.pkg.AudioContentforSoundtrackPro5A' auth='Root' installKBytes="3001525" version="1.1.0.260000.97">file:./Contents/Packages/AudioContentforSoundtrackPro5A.pkg</pkg-ref>
        <pkg-ref id='com.apple.pkg.AudioContentforSoundtrackPro5B' auth='Root' installKBytes="2860639" version="1.1.0.260000.97">file:./Contents/Packages/AudioContentforSoundtrackPro5B.pkg</pkg-ref>
    </choice>
    <choice id="SoundtrackProMusicLoops" title="TITLE_SOUNDTRACKMUSICLOOPS" description='DESCRIPTION_SOUNDTRACKMUSICLOOPS' start_selected='YES'>
        <pkg-ref id='com.apple.pkg.AudioContentforSoundtrackPro7' auth='Root' installKBytes="1638189" version="1.1.0.260000.97">file:./Contents/Packages/AudioContentforSoundtrackPro7.pkg</pkg-ref>
    </choice>
    <pkg-ref id='com.apple.mpkg.AudioContentforSoundtrackPro' auth='Root'>.</pkg-ref>
</installer-gui-script>
  • Thats it! Unmount the Disk Image and move on to the next step.

Motion Content Dist

  • Mount your read/write Motion Content image.
  • Open the dist file in your favorite text editor ( /Volumes/Motion\ Content/Installer/MotionContent.mpkg/Contents/MotionContent.dist ).
  • Find any start_selected="blah blah blah" key and change it to start_selected="Yes"
  • Also, because we merged the two DVDs into one disk Image, you need to change the references to the package location. You'll want to replace "x-disc://Motion%20Content%202/" with "file:../"
  • Here is a working .dist file for this one:
<?xml version="1.0"?>
<installer-gui-script minSpecVersion='1.0040'>
    <platforms>
        <client arch="i386,ppc"/>
    </platforms>
    <title>TITLE_DIST</title>
    <welcome file='Welcome.rtf'/>
    <license file='License.rtf'/>
    <background file='background.tiff' alignment='topleft'/>
    <options customize='always'/>
    <options allow-external-scripts='yes'/>
    <options mpkg='com.apple.mpkg.MotionContent'/>
    <script>

		function isNotDowngrade()
		{
			var action = my.choice.packageUpgradeAction;
			
			if( (action == 'downgrade') || (action == 'mixed') )
			{
				// my.choice.tooltip = system.localizedStringWithFormat('TT_NEWERALREADYINSTALLED');
				return false;
			}
			
			return true;
		}
		
	</script>
    <choices-outline>
        <line choice="MotionContentGroup">
            <line choice="MotionContentTemplates"/>
            <line choice="MotionInstalledMedia"/>
            <line choice="MotionInstalledMedia2"/>
        </line>
        <line choice="MotionLiveFonts"/>
    </choices-outline>
    <choice id="MotionContentGroup" title="TITLE_MOTIONCONTENT" description='DESCRIPTION_MOTIONCONTENT' customLocation='/Library/Application Support/Final Cut Studio/Motion/' customLocationAllowAlternateVolumes='YES'></choice>
    <choice id="MotionContentTemplates" title="TITLE_MOTIONCONTENTTEMPLATES" start_enabled='isNotDowngrade()' start_selected='YES' description="DESCRIPTION_MOTIONCONTENTTEMPLATES">
        <pkg-ref id='com.apple.pkg.MotionContentTemplates' auth='Root' installKBytes="1738905" version="1.5.0.3140000.1590">file:../Packages/MotionContentTemplates.pkg</pkg-ref>
    </choice>
    <choice id="MotionInstalledMedia" title="TITLE_MOTIONINSTALLEDMEDIA" start_enabled='isNotDowngrade()' start_selected='YES' description="DESCRIPTION_MOTIONINSTALLEDMEDIA">
        <pkg-ref id='com.apple.pkg.MotionInstalledMedia1' auth='Root' installKBytes="2225353" version="1.5.0.3140000.1590">file:../Packages/MotionInstalledMedia1.pkg</pkg-ref>
    </choice>
    <choice id="MotionInstalledMedia2" title="TITLE_MOTIONINSTALLEDMEDIA2" selected="isNotDowngrade() &amp;&amp; (choices.MotionInstalledMedia.selected || choices.MotionContentTemplates.selected)" start_visible='false'>
        <pkg-ref id='com.apple.pkg.MotionInstalledMedia2' auth='Root' installKBytes="4132134" version="1.5.0.3140000.1590">file:../Packages/MotionInstalledMedia2.pkg</pkg-ref>
    </choice>
    <choice id="MotionLiveFonts" title="TITLE_MOTIONLIVEFONTS" start_enabled='isNotDowngrade()' start_selected='YES' description="DESCRIPTION_MOTIONLIVEFONTS" customLocation='/Library/Application Support/' customLocationAllowAlternateVolumes='YES'>
        <pkg-ref id='com.apple.pkg.MotionSeriesLiveFonts' auth='Root' installKBytes="1252062" version="4.0.0.3140000.1590">file:../Packages/MotionSeriesLiveFonts.pkg</pkg-ref>
        <pkg-ref id='com.apple.pkg.CollectorsSeriesLiveFonts' auth='Root' installKBytes="1874246" version="4.0.0.3140000.1590">file:../Packages/CollectorsSeriesLiveFonts.pkg</pkg-ref>
        <pkg-ref id='com.apple.pkg.ProSeriesLiveFonts' auth='Root' installKBytes="5151537" version="4.0.0.3140000.1590">file:../Packages/ProSeriesLiveFonts.pkg</pkg-ref>
    </choice>
    <pkg-ref id='com.apple.mpkg.MotionContent' auth='Root'>.</pkg-ref>
</installer-gui-script>
  • We are done with the dist file editing. Onward to converting the disk images!

Converting the Disk Images to Compressed (Read-Only) .dmgs

This is the easy part.

  • Open Disk utility and drop all four disk images in there (Audio Content.dmg, DVD Studio Pro Content.dmg, Final Cut Studio Install.dmg and Motion Content.dmg).
  • Select one of the image files, click "Convert".
  • Make sure Image Format is set to "compressed" and save it to a location of your choice.
  • Do this for all four of the disk images.

Getting them into munki

Now lets import all three of these into munki. For this, we'll be using the makepkginfo command using the -p option.

  • First, upload all the disk images to your munki repo. I placed them in Apps/Apple/Final\ Cut\ Studio\ 3/ and will use that location for this example.
  • After they are all on your repo, we must make pkginfo files for them. It takes a while to generate this pkginfo files for these, so be patient!
  • Using /usr/local/munki/makepkginfo -p, create the pkg info files. With this command we essentially tell munki the relative path to the installer pkg (since it is not in the root of the .dmg) and then point it to the .dmg itself. Finally, we redirect to the location of the pkginfo file.
  • Here are all the commands I used to make the pkginfo files:
/usr/local/munki/makepkginfo -p Installer/FinalCutStudio.mpkg /Volumes/munki/pkgs/Apps/Apple/Final\ Cut\ Studio\ 3/Final\ Cut\ Studio\ Install.dmg > /Volumes/munki/pkgsinfo/Apps/Apple/Final\ Cut\ Studio\ 3/FinalCutStudio-3.pkginfo
/usr/local/munki/makepkginfo -p Installer/DVDStudioProContent.mpkg /Volumes/munki/pkgs/Apps/Apple/Final\ Cut\ Studio\ 3/DVD\ Studio\ Pro\ Content.dmg > /Volumes/munki/pkgsinfo/Apps/Apple/Final\ Cut\ Studio\ 3/DVDStudioProContent.pkginfo
/usr/local/munki/makepkginfo -p Installer/AudioContentforSoundtrackPro.mpkg /Volumes/munki/pkgs/Apps/Apple/Final\ Cut\ Studio\ 3/Audio\ Content.dmg > /Volumes/munki/pkgsinfo/Apps/Apple/Final\ Cut\ Studio\ 3/AudioContent.pkginfo
/usr/local/munki/makepkginfo -p Installer/MotionContent.mpkg /Volumes/munki/pkgs/Apps/Apple/Final\ Cut\ Studio\ 3/Motion\ Content.dmg > /Volumes/munki/pkgsinfo/Apps/Apple/Final\ Cut\ Studio\ 3/Motion\ Content.pkginfo
  • Check all the pkginfo files and make sure everything is happy.
  • You must make an edit to the pkginfo file for DVD Studio Pro Content. The Dist file lies about which version is being installed, so we need to correct that. It says it is version 1.0.3047134 (some crazy number). Correct it to say versino 1.0 in the receipts section.
  • It is also suggested that you make an installs item for Final Cut Studio 3's pkginfo file. I choose to make the installs item for only "Final Cut Pro.app" To do so, run this command:
	
 /usr/local/munki/makepkginfo -f /Applications/Final\ Cut\ Pro.app
  • For all the content pkginfo files, add the following key:
	
<key>update_for</key>
<array>
	<string>FinalCutStudio</string>		
</array>
  • Here are the pkginfo files for your reference:

FinalCutStudio-3.pkginfo
DVDStudioProContent.pkginfo
AudioContent.pkginfo
Motion Content.pkginfo

  • Last but not least, you must package up the licensing for Final Cut Studio (ONLY do this if you have a Volume license version and have an agreement with Apple).
  • Get Final Cut Studio installed on a clean test machine and enter your license information upon first launch.
  • Once FCS3 is licensed, grab the the following file and package it up into a FCS3 Licensing package
//Library/Application\ Support/ProApps/ProAppsSystemID
  • Import the package into munki and add this key to its pkginfo:
	
<key>update_for</key>
<array>
	<string>FinalCutStudio</string>		
</array>
  • The permissions on this file MUST be root:admin and 766 for the mode. If they are not 766, non-admins will prompted to serialize the installation.
  • One last small Detail. Upon first launch, Final Cut Pro wants to write to /Library/Applications/Final Cut Pro System Support . You may be able to simply grant rights, but I hit a deadline and didn't have time to do more testing, so I threw a crazy ACL at it, which fixed the problem. Add this as a postinstall script to either the FCS3 package itself, or your seperate licensing package.
	<key>postinstall_script</key>
	<string>#!/bin/sh
#Non-Admins need write access in order for FCP First-run to work properly.
chmod -R 777 "/Library/Application Support/Final Cut Pro System Support"
chmod +a "everyone allow list,add_file,search,delete,add_subdirectory,delete_child,file_inherit,directory_inherit,read,write,delete,append,execute" "/Library/Application Support/Final Cut Pro System Support/"
</string>
  • Thats it! You are done. Now when you add "FinalCutStudio3" to your manifest, the machine should pull down and install FCS3 + all content discs and apply the licensing information. The end result is a fully automated install of FCS3! Grab a cup of coffee, you deserve it.

Credits

Many thanks to Greg Neagle for his Blog post regarding FCS3 ( http://managingosx.wordpress.com/2010/01/08/partial-installs-of-final-cut-studio-3/ ) and Dave Weale for giving me the method for combining the DVDs into one disk image.