All pastes #896117 Raw Edit

Stuff

public text v1 · immutable
·published 2008-02-08 11:04 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){
		return true;
	}
	
	function checkSupportedBootRom(machineType){
		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>