El Capitan now runs on unsupported hardware, but that was only step one. We have a few more hurdles to take. Let’s start with the installation process. Take a look at this snippet from ia.log:
Extracting boot files from /Volumes/OS X Install ESD/BaseSystem.dmg Extracting Boot Bits from Inner DMG: Copied prelinkedkernel Copied Boot.efi Copied PlatformSupport.plist Ejecting disk images Generating the com.apple.Boot.plist file com.apple.Boot.plist: { "Kernel Cache" = "/.IABootFiles/prelinkedkernel"; "Kernel Flags" = "container-dmg=file:///Applications/Install%20OS%20X%2010.11.1.app/Contents/SharedSupport/InstallESD.dmg root-dmg=file:///BaseSystem.dmg"; } Done generating the com.apple.Boot.plist file Blessing /Volumes/MacintoshHD -- /Volumes/MacintoshHD/.IABootFiles
After which the InstallAssistantTool takes over:
Blessing Mount Point:/Volumes/MacintoshHD Folder:/Volumes/MacintoshHD/.IABootFiles plist:com.apple.Boot.plist ***************************** Setting Startup Disk ***************************** ****** Path: /Volumes/MacintoshHD ****** Boot Plist: /Volumes/MacintoshHD/.IABootFiles/com.apple.Boot.plist /usr/sbin/bless -setBoot -folder /Volumes/MacintoshHD/.IABootFiles -bootefi /Volumes/MacintoshHD/.IABootFiles/boot.efi -options config="\.IABootFiles\com.apple.Boot" -label OS X Installer Bless on /Volumes/MacintoshHD succeeded
Note: The boot drive (ElCapitanSSD) had El Capitan 10.11.1 installed on it and the target drive (MacintoshHD) had Yosemite 10.10.5 installed on it.
But if I install El Capitan straight from the Yosemite drive (MacintoshHD) – after downloading it from the AppStore – then bless looks like this:
/usr/sbin/bless -setBoot -folder /OS X Install Data -bootefi /OS X Install Data/boot.efi -options config="\OS X Install Data\com.apple.Boot" -label OS X Installer
The only difference here is the folder name i.e. OS X Install Data instead of .IABootfiles. And after all required files are extracted from the DMG and are saved in the target folder, then your computer will reboot. The firmware will then load/execute boot.efi which will fail, of course… if that isn’t the 32-bit one!
You can setup the initial OS X Install Data directory by entering the following terminal commands:
cd /Applications/Install OS X 10.11 El Capitan.app/Contents/Resources sudo ./startosinstall --applicationpath "/Applications/Install OS X El Capitan.app" --volume /Volumes/MacintoshHD
This installation phase is called “Boot 1” by Apple and also sets a (visible) NVRAM variable with the name rc_imgsrc_info and the data contains a binary plist with the UUID of the installation target. Other NVRAM variables written by the InstallAssitantTool include:
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14:IASCurrentInstallPhase
4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14:IASInstallPhaseList
8D63D4FE-BD3C-4AAD-881D-86FD974BC1DF:boot-info-payload
But I have yet to find its content.
Ok. Fine. So how are we going to solve this problem? Well. I was wondering if anyone had tried using a launch daemon. Something my late sister used for FileGuard:
<?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>Label</key> <string>com.fileguard.watcher</string> <key>ProgramArguments</key> <array> <string>/Extra/FileGuard/Daemon/daemon</string> </array> <key>WatchPaths</key> <array> <string>/.IABootFiles/boot.efi</string> <string>/.IABootFiles/PlatformSupport.plist</string> <string>/OS X Install Data/boot.efi</string> <string>/OS X Install Data/PlatformSupport.plist</string> <string>/usr/standalone/i386/boot.efi</string> <string>/System /Library/CoreServices/boot.efi</string> </array> <key>StandardErrorPath</key> <string>/var/log/FileGuardDaemon.log</string> <key>StandardOutPath</key> <string>/var/log/FileGuardDaemon.log</string> </dict> </plist>
What this does is actually quite simple. It checks for changes/removal of the files in the above list (see array) and when that happens it triggers the daemon, where we can restore the file(s) that we want to use. This should work for the first two file in the list (array) – so that you don’t have to modify the DMG(?) – but I don’t know if it also works for the other two files. We need to verify this. And if it doesn’t work, then we can boot from the RecoveryHD and replace the files.
Update: The installer extracts bootbase.efi from the DMG and saves it as /.IABootfiles/boot.efi or /OS X Instal Data/boot.efi. This ‘special version’ of boot.efi has System Integrity Protection disabled and that allows Apple’s installer to work. You may lose track of which is which, but you can easily verify the version info. The shortest way is to enter:
grep 'bootbase.efi' boot.efi
That won’t return anything on the ‘normal’ copies of boot.efi. Only the extracted and renamed copies of bootbase.efi includes the name. Another way is to check the “booter-name” property with ioreg.
Note: I also made a similar version of bootbase.efi so that you can replace the one found in the DMG. Just wait for Peter Holbrook to compile it, and Mike to test it 😉
Update: Confirmed to be working by mikeboss!