All pastes #895966 Raw Edit

Stuff

public text v1 · immutable
·published 2008-02-08 05:57 UTC
rendered paste body
<?xml version="1.0"?>

<installer-gui-script minSpecVersion='1'>

	<options
		eraseOptionAvailable='true'
		hostArchitectures='ppc,i386'
	/>
	
	<title>MacOSX_Server_Title</title>
	<license file="License.rtf" sla="EA0395"/>
	<welcome file='Welcome.rtfd'/>

	<script>
        var minRam = 1024;
	
	function checkSupportedMachine(machineType){
		// Fail on G3
		if (1 != system.sysctl('hw.vectorunit') ) {
			return false;
		}

		var badMachines = ['MacBook3,1','iMac','PowerBook1,1','PowerBook2,1', 'AAPL,Gossamer', 'AAPL,PowerMac G3', 'AAPL,PowerBook1998', 'AAPL,PowerBook1999'];
		
		if(machineType){
			var length = badMachines.length;
			
			// Fail if any of the compatible values match the list of badMachines
			for( var j = 0; j &lt; length; j++ ){
				if(machineType == badMachines[j]){
						return false;
				} 

			}
			
		}
	
		// require 800Mhz+
		if (system.sysctl("hw.cpufrequency") &lt; 799000000) {
			return false;	
		}
			
		return true;
	}
	
	function checkSupportedBootRom(machineType){
		var machinesNeedingROMUpdate = new Array();
		machinesNeedingROMUpdate['PowerMac2,1'] = 'f2';
		machinesNeedingROMUpdate['PowerMac2,2'] = '$0003.30f3';
		
		try{
			var bootROMEntry = system.ioregistry.matchingName('boot-rom','IODeviceTree');
			var bootROM;
			if ( bootROMEntry.length > 0 ) {
				var bootROM = bootROMEntry[0]['BootROM-version'];
			} else {
				return true;
			}

			// Fail if any of the compatible values match the machine/ROM pairs that need updating
			for( k in machinesNeedingROMUpdate ){
				if((machineType == k) &amp;&amp; (bootROM == machinesNeedingROMUpdate[k])){						
					return false;
				}
			}
		} catch(e) {
			system.log('checkSupportedBootRom threw exception ' + e);
		}
		
		// if we can't find it, assume it's supported
		return true;
	}

function hasAtLeastRam(RAM) {
        var requiredRAM = (RAM * 1024 * 1024);
        var actualRAM = system.sysctl('hw.memsize');

        return (actualRAM &gt; (requiredRAM - 1));
}
	function installCheckScript(){
			
			try{
				var machineType = system.ioregistry.fromPath('IODeviceTree:/')['compatible'];
				
				if ( typeof(machineType) == "string") {
						if(!checkSupportedMachine(machineType)){
							my.result.message = system.localizedStringWithFormat('IC_Machine_message');
							my.result.type = 'Fatal';
							return false;
						}
			
						if(!checkSupportedBootRom(machineType)){
							my.result.message = system.localizedStringWithFormat('IC_Firmware_message');
							my.result.type = 'Fatal';
							return false;
						}
				}
				else {
					for(var i = 0;i &lt; machineType.length; i++){		
						if(!checkSupportedMachine(machineType[i])){
							my.result.message = system.localizedStringWithFormat('IC_Machine_message');
							my.result.type = 'Fatal';
							return false;
						}
			
						if(!checkSupportedBootRom(machineType[i])){
							my.result.message = system.localizedStringWithFormat('IC_Firmware_message');
							my.result.type = 'Fatal';
							return false;
						}
					}
				}
				if(!hasAtLeastRam(minRam)){
					my.result.message = system.localizedStringWithFormat('IC_RAM_message');
					my.result.type = 'Fatal';
					return false;
				}
				
			}catch (e){
				system.log('installCheckScript threw exception ' + e);
			}
			
			return true;
	}

	function volCheckScript(){
			var target = my.target;
			var destSystemVersion = target['systemVersion'];
	
			if(target.mountpoint == '/'){
				my.result.message = system.localizedString('VC_Boot_message');
				my.result.type = 'Fatal';
				
				return false;
			}
						
			if(destSystemVersion){
				//Do not allow downgrades
				if(1 == system.numericalCompare(destSystemVersion['ProductVersion'],system.version['ProductVersion'])){			
					my.result.message = system.localizedString('VC_Newer_message');
					my.result.type = 'MustNotUpgrade';
				
					return false;
				}else if(!destSystemVersion.isServer){	//We cannot install over client
					my.result.message = system.localizedString('VC_Upgrade_message');
					my.result.type = 'MustNotUpgrade';
					
					return false;				
				}else if((-1 == system.numericalCompare(destSystemVersion['ProductVersion'],'10.3.0'))
					|| (0 &lt;= system.numericalCompare(destSystemVersion['ProductVersion'],'10.5.0')) ){
				//We cannot upgrade over anything under 10.3.0 or anything over 10.5
					my.result.message = system.localizedString('VC_Upgrade_message');
					my.result.type = 'MustNotUpgrade';
					
					return false;				
				}
				
				//If the Essential OS bits are not selected, then we can't really install anyways
				if(!choices['EssentialSystemSoftwareGroup'].selected){
					my.result.message = system.localizedString('VC_Newer_message');
					my.result.type = 'MustNotUpgrade';
				
					return false;
				}

			}			

			return true;
	}
	
	//This function checks if a language is already installed on disk.
	//This function could potentially be expensive, but the buffer cache
	//usually means it isn't. 
	function language_installed(langKey){
		var installed = false;
		
		//If we are erasing, then nothing will be installed
		//on the disk
		if(my.target.ignoreContents){
			return installed;
		}
		
		var constructedPath = my.target.mountpoint + '/System/Library/PrivateFrameworks/SetupAssistant.framework/Versions/A/Resources/';
			
		constructedPath += langKey + ".lproj";
			
		if(system.files.fileExistsAtPath(constructedPath)){
			installed = true;
		}else{
			installed = false;
		}

		return installed;
	}
	
	function language_running(langKey){
		var appleLanguages = system.defaults['AppleLanguages'];
	
	
		if(!appleLanguages || (appleLanguages.length == 0))
				return ((langKey == 'English') || (langKey == 'en'))
		
		return (langKey == appleLanguages[0]);
	}
	
	//Global Language Required Cache, this speeds up the many calls to this function
	gLanguageRequired = {
	};
	
	//Function returns true if the langKey is required, it uses a cache so that the logic doesn't
	//have to be run hundreds of times
	function language_required(langKey){
		
		if(! (gLanguageRequired[langKey])){
			var required = false;
			
			//If the exact same package is on disk, then this language is not required
			if(my.choice.packages.length &amp;&amp; !my.target.ignoreContents){
				var thisPackage = my.choice.packages[0];
				var receipt     = my.target.receiptForIdentifier(thisPackage.identifier);
			
				if(receipt){
					//system.log('package = ' + thisPackage.identifier + ':' + thisPackage.version);
					//system.log('receipt = ' + receipt.identifier + ':' + receipt.version);
					if(0 == system.numericalCompare(thisPackage.version,receipt.version)){
						required =  false;
					}
				}
			}

			if(language_installed(langKey) || language_running(langKey)){
				required =  true;
			}
			
			gLanguageRequired[langKey] = required;
		}
		
		return gLanguageRequired[langKey];
	}
	
	function language_enabled(langKey){
		var enabled = !(language_required(langKey));
		
		if(false == enabled){
			my.choice.tooltip = system.localizedString('TT_Language_Required_message');
		}
		
		return enabled;
	}

	function language_selected(langKey){
		var selected = my.choice.selected || language_required(langKey);

		return selected;
	}

	function verCompare(checkVer){
		var sysVer = my.target['systemVersion'];
		if (sysVer) {
			return system.numericalCompare(sysVer['ProductVersion'],checkVer);
		}
		return -1;
	}

	function upgrade_allowed(){
		var argv = upgrade_allowed.arguments;
		var upgradable = true;
		var upgradeAction = my.choice.packageUpgradeAction;
		
		if(argv.length > 0) { 
			upgradeAction = eval('choices.' + argv[0] + '.packageUpgradeAction');	
		}
		
		if((upgradeAction == 'downgrade') || (upgradeAction == 'mixed')){
			my.choice.tooltip = system.localizedString('TT_Newer_Package_Installed_message');	
			upgradable = false;
		}
		
		return upgradable;
	}

	function isServer(){
		if(!my.target['systemVersion'].isServer){  
			return false;
		}
		return true;
	}

	function systemHasDVD(){
		var obj = system.ioregistry.matchingClass("IODVDBlockStorageDriver");
		if (obj) {
			return true;
		}
		return false;
	}

	function isIntel()
	{
		if ( system.sysctl('hw.machine') != 'x86' &amp;&amp; system.sysctl('hw.byteorder') != '1234')
		{
			return false;
		}
		return true;
	}

	
	</script>