Okay folks, having waded through pages and pages of speculation, both on MacRumors and elsewhere via Google, I have concluded the following, and it makes sense. I have the Snow Leopard "Up-to-date" upgrade DVD, disc code: "2Z691-6557-A" which I purchased through the Apple store.
Now, many people have said that this DVD will allow "erase and install", but noone seems to say why this is possible. One guy, CATEGORICALLY told me that the DVD searches for ANY volume on Macintosh HD, or any other connected disk, for a volume containing a Leopard installation, which then qualifies the machine for the "erase and install" method of deployment, and if it doesn't find an existing Leopard installation (on ANY disk or partition) it will fail and disallow the "erase and install".
I *HAD* to test this theory out, because I believe that the installer scans the *HARDWARE* and compares the precise hardware ID for qualification... and it seems I am correct. I unplugged __ALL__ drives from my *2009* Mac mini, and proceeded to boot from the UTD DVD, partitioned the internal drive COMPLETELY AS ONE BLANK VOLUME, and installed Snow Leopard FRESH, without a single hitch.
I therefore propose that the file "CheckForOSX" located at: /Volumes/Mac OS X Install DVD/System/Installation/CDIS/ is either checking for Leopard installs, OR it is checking the hardware ID if there is no previous system ( or possibly BOTH).
Here is the perl code - can anyone work out what this script does?:
I find it impossible to believe speculation, until I have tried something out for myself, ESPECIALLY when the speculation is as vague as it appears right now. It could also be possible that the script "CheckForOSX" is failing, but I doubt that somehow.
You can check your Macs model ID by typing this into terminal:
(then press [RETURN])
Now, many people have said that this DVD will allow "erase and install", but noone seems to say why this is possible. One guy, CATEGORICALLY told me that the DVD searches for ANY volume on Macintosh HD, or any other connected disk, for a volume containing a Leopard installation, which then qualifies the machine for the "erase and install" method of deployment, and if it doesn't find an existing Leopard installation (on ANY disk or partition) it will fail and disallow the "erase and install".
I *HAD* to test this theory out, because I believe that the installer scans the *HARDWARE* and compares the precise hardware ID for qualification... and it seems I am correct. I unplugged __ALL__ drives from my *2009* Mac mini, and proceeded to boot from the UTD DVD, partitioned the internal drive COMPLETELY AS ONE BLANK VOLUME, and installed Snow Leopard FRESH, without a single hitch.
I therefore propose that the file "CheckForOSX" located at: /Volumes/Mac OS X Install DVD/System/Installation/CDIS/ is either checking for Leopard installs, OR it is checking the hardware ID if there is no previous system ( or possibly BOTH).
Here is the perl code - can anyone work out what this script does?:
Code:
#!/usr/bin/perl
########################################################
my $TARG = $ARGV[0];
my $SYSTEM_VERS = $TARG . "/System/Library/CoreServices/SystemVersion.plist";
my $EXIT_VALUE = 0;
########################################################
DO_CHECKS: {
unless (-e $SYSTEM_VERS) {
$EXIT_VALUE = 1;
last;
}
if (CheckVersion("$SYSTEM_VERS", "8G1165", "ProductBuildVersion", "<")) {
$EXIT_VALUE = 1;
last;
}
unless(SystemPaths($TARG)) {
$EXIT_VALUE = 1;
last;
}
}
exit($EXIT_VALUE);
########################################################
sub SystemPaths {
my $targ = shift();
while(<DATA>) {
chomp();
if($_ eq "") {
next;
}
-e($targ . $_) || return(0);
}
return(1);
}
sub CheckVersion {
my $path = $_[0];
my $version = $_[1];
my $keyName = $_[2];
my $operator = $_[3];
if (! -e $path) {
return 0;
}
if (!$operator) {
$operator = "==";
}
my $oldSeperator = $/;
$/ = \0;
open( PLIST, "$path") || do {
return 0;
};
$plistData = <PLIST>;
$plistData =~ /<dict>(.*?)<\/dict>/gis;
@items = split(/<key>/, $plistData);
shift @items;
foreach $item (@items) {
$item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
$versiondata{ $1 } = $2;
}
close(PLIST);
$/ = $oldSeperator;
# ProductBuildVersion style keys
$versiondata{$keyName} =~ /(\d+)([A-Z])(\d+)/ && ($versiondata{$keyName} = "$1.".ord($2).".$3");
$version =~ /(\d+)([A-Z])(\d+)/ && ($version = "$1.".ord($2).".$3");
@theVersionArray = split(/\./, $versiondata{$keyName});
for ($i = 0; $i < 3; $i++) {
if(!$theVersionArray[$i]) {
$theVersionArray[$i] = '0';
}
}
@versionArray = split(/\./, $version);
my $actualVersion;
for ($i = 0; $i < 3; $i++) {
if (($theVersionArray[$i] != $versionArray[$i]) or ($i == 2)) {
$actualVersion = $theVersionArray[$i];
$version = $versionArray[$i];
last;
}
}
my $expression = '$actualVersion ' . $operator . ' $version';
if( eval ($expression) )
{
return 1;
}
else
{
return 0;
}
}
__DATA__
/System/Library/CoreServices/Dock.app/Contents/MacOS/Dock
/System/Library/CoreServices/Finder.app/Contents/MacOS/Finder
/System/Library/CoreServices/Automator Launcher.app/Contents/MacOS/Automator Launcher
/System/Library/CoreServices/Certificate Assistant.app/Contents/MacOS/Certificate Assistant
/System/Library/CoreServices/Finder.app/Contents/MacOS/Finder
/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow
/System/Library/CoreServices/Network Setup Assistant.app/Contents/MacOS/Network Setup Assistant
/System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/MacOS/ARDAgent
/System/Library/CoreServices/SecurityAgent.app/Contents/MacOS/SecurityAgent
/System/Library/CoreServices/SystemUIServer.app/Contents/MacOS/SystemUIServer
/System/Library/PrivateFrameworks/ProKit.framework
/System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine
/System/Library/Frameworks/Quartz.framework/Versions/A/Frameworks/QuartzComposer.framework/Versions/A/Resources/ExtraPatches.plugin/Contents/MacOS/ExtraPatches
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/Resources/SpeechSynthesisServer.app/Contents/MacOS/SpeechSynthesisServer
I find it impossible to believe speculation, until I have tried something out for myself, ESPECIALLY when the speculation is as vague as it appears right now. It could also be possible that the script "CheckForOSX" is failing, but I doubt that somehow.
You can check your Macs model ID by typing this into terminal:
Code:
sysctl hw.model
(then press [RETURN])