Xserve EFI Firmware Update 1.2 fails to install

cmc09

macrumors newbie
Original poster
Jan 7, 2020
4
0
I cannot get the Xserve EFI Firmware Update 1.2 (firmware XS31.0081.B06) to successfully update on my 2009 XServe. Current firmware is XS31.0081.B04 and current OS is 10.6.8.

1578427719430.png


I've tried every trick I can find but no luck. I don't think it's relevant but I'll mention that the Xserve RAID Card has a dead battery.

1578427773612.png


The boot drive is the internal RAID volume shown above. Here's the disk layout:
/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *16.0 GB disk0
1: EFI 209.7 MB disk0s1
2: Apple_HFS RAID1 15.7 GB disk0s2



The Xserve EFI Firmware Update utility is installed in Applications > Utilities. When run from the GUI, the Shutdown window is displayed as expected.
1578428112920.png

Clicking shutdown causes the machine to restart and then one of two things happens - it comes up with the flashing question mark folder icon or it goes through the motions of updating the firmware but it doesn't actually update it.

Let's run through the process...
First I'm going to completely clear nvram to ensure no residual data will cause an issue.
nvram -c
Next I'll open System Preferences > Startup Disk and set the startup disk so it is stored in nvram
nvram -p now shows

efi-boot-device <array><dict><key>IOMatch</key><dict><key>IOProviderClass</key><string>IOMedia</string><key>IOPropertyMatch</key><dict><key>UUID</key><string>B37F83E7-5E12-490F-80F7-D4B6B1E7A47C</string></dict></dict><key>BLLastBSDName</key><string>disk0s2</string></dict></array>
efi-boot-device-data %02%01%0c%00%d0A%03%0a%00%00%00%00%01%01%06%00%00%01%01%01%06%00%00%00%03%0a,%00%b4%dd%87%d4%8b%00%d9%11%af%dc%00%10%83%ff%caM%00%00%00%00%bd^#%00%07%00%08P%01%00%00%00%00%00%00%00%00%00%01%00%04%01*%00%02%00%00%00(@%06%00%00%00%00%00%b0%8f%d2%01%00%00%00%00%e7%83%7f%b3%12^%0fI%80%f7%d4%b6%b1%e7%a4|%02%02%7f%ff%04%00
prev-lang:kbd en:0


Next I'll run The Xserve EFI Firmware Update utility and select Shutdown when prompted. One more dialog box to enter admin credentials and click OK. The machine shuts down/restarts as expected. This time the firmware update progress bar appears after about 30 seconds of a blank gray screen but the progress indicator doesn't do anything.
1578431881102.png

It's on screen for about 10 seconds then the machine restarts again and boots to the desktop. The Xserve EFI Firmware Update utility is automatically launched. Note that I can run it again and again and get the same behavior.

Let's see what the nvram looks like now:
efi-boot-device <array><dict><key>IOMatch</key><dict><key>IOProviderClass</key><string>IOMedia</string><key>IOPropertyMatch</key><dict><key>UUID</key><string>B37F83E7-5E12-490F-80F7-D4B6B1E7A47C</string></dict></dict><key>BLLastBSDName</key><string>disk0s2</string></dict></array>%00
efi-boot-device-data %02%01%0c%00%d0A%03%0a%00%00%00%00%01%01%06%00%00%01%01%01%06%00%00%00%03%0a,%00%b4%dd%87%d4%8b%00%d9%11%af%dc%00%10%83%ff%caM%00%00%00%00%bd^#%00%07%00%08P%01%00%00%00%00%00%00%00%00%00%01%00%04%01*%00%02%00%00%00(@%06%00%00%00%00%00%b0%8f%d2%01%00%00%00%00%e7%83%7f%b3%12^%0fI%80%f7%d4%b6%b1%e7%a4|%02%02%7f%ff%04%00
efi-apple-payload0 <array><dict><key>IOMatch</key><dict><key>IOProviderClass</key><string>IOMedia</string><key>IOPropertyMatch</key><dict><key>UUID</key><string>3FE85BEE-F5BD-4D4C-8437-32F9A442E0CB</string></dict></dict><key>BLLastBSDName</key><string>disk0s1</string></dict><dict><key>IOEFIDevicePathType</key><string>MediaFilePath</string><key>Path</key><string>\EFI\APPLE\FIRMWARE\XS31_0081_06B_LOCKED.fd</string></dict></array>%00
EFIUpdaterApp_Result %02%06%84%00
prev-lang:kbd en:0
efi-apple-payload0-data %02%01%0c%00%d0A%03%0a%00%00%00%00%01%01%06%00%00%01%01%01%06%00%00%00%03%0a,%00%b4%dd%87%d4%8b%00%d9%11%af%dc%00%10%83%ff%caM%00%00%00%00%bd^#%00%07%00%08P%01%00%00%00%00%00%00%00%00%00%01%00%04%01*%00%01%00%00%00(%00%00%00%00%00%00%00%00@%06%00%00%00%00%00%ee[%e8?%bd%f5LM%8472%f9%a4B%e0%cb%02%02%04%04\%00\%00E%00F%00I%00\%00A%00P%00P%00L%00E%00\%00F%00I%00R%00M%00W%00A%00R%00E%00\%00X%00S%003%001%00_%000%000%008%001%00_%000%006%00B%00_%00L%00O%00C%00K%00E%00D%00.%00f%00d%00%00%00%7f%ff%04%00


From what I know, it appears everything is getting added correctly. Of note is the EFIUpdaterApp_Result code. Anyone know what that value means?

I've also verified that the EfiUpdaterApp2.efi and XS31_0081_06B_LOCKED.fd files reside on the EFI partition at the correct path.

Now let's try doing the remote install originally outlined in this Apple KB article - http://support.apple.com/kb/HT3962 - Xserve (Early 2009): Applying EFI firmware update to a "headless" Xserve. It's long gone but can be found on Web Archive. Again I'll clear nvram to start fresh and reset the startup disk so we have a basic nvram profile. Now let's run the RemoteEFIUpdater

cd /Applications/Utilities/Xserve\ EFI\ Firmware\ Update.app/
sudo ./Contents/Resources/RemoteEFIUpdater


The tool launches and prompts for input as expected:
Your firmware needs to be updated.
Your computer will need to be shut down,
but will automatically power on and complete the update process.
Instructions will be provided.
Run this program with option '-h' for help.
Enter 'y' to confirm you want to update your firmware.


Press Y, enter

2020-01-07 13:37:29.171 RemoteEFIUpdater[204:903] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'launch path not accessible'
*** Call stack at first throw:
(
0 CoreFoundation 0x95ec96ca __raiseError + 410
1 libobjc.A.dylib 0x9698e5a9 objc_exception_throw + 56
2 CoreFoundation 0x95ec93f8 +[NSException raise:format:arguments:] + 136
3 CoreFoundation 0x95ec936a +[NSException raise:format:] + 58
4 Foundation 0x98e27809 -[NSConcreteTask launchWithDictionary:] + 487
5 Foundation 0x98e655f5 +[NSTask launchedTaskWithLaunchPath:arguments:] + 251
6 RemoteEFIUpdater 0x0000307c 0x0 + 12412
7 RemoteEFIUpdater 0x0000339a 0x0 + 13210
8 RemoteEFIUpdater 0x00003541 0x0 + 13633
9 RemoteEFIUpdater 0x000022ee 0x0 + 8942
)
Trace/BPT trap


And it terminates with an error. I found 1 post online referencing this error but no resolution. If we check nvram however, the utility did make some changes:

efi-boot-device <array><dict><key>IOMatch</key><dict><key>IOProviderClass</key><string>IOMedia</string><key>IOPropertyMatch</key><dict><key>UUID</key><string>B37F83E7-5E12-490F-80F7-D4B6B1E7A47C</string></dict></dict><key>BLLastBSDName</key><string>disk0s2</string></dict></array>
prev-lang:kbd en:0
efi-boot-next <array><dict><key>IOMatch</key><dict><key>IOProviderClass</key><string>IOMedia</string><key>IOPropertyMatch</key><dict><key>UUID</key><string>3FE85BEE-F5BD-4D4C-8437-32F9A442E0CB</string></dict></dict><key>BLLastBSDName</key><string>disk0s1</string></dict><dict><key>IOEFIDevicePathType</key><string>MediaFilePath</string><key>Path</key><string>\EFI\APPLE\FIRMWARE\EfiUpdaterApp2.efi</string></dict><dict><key>IOEFIBootOption</key><string>"-x efi-apple-payload0-data"</string></dict></array>
efi-apple-payload0 <array><dict><key>IOMatch</key><dict><key>IOProviderClass</key><string>IOMedia</string><key>IOPropertyMatch</key><dict><key>UUID</key><string>3FE85BEE-F5BD-4D4C-8437-32F9A442E0CB</string></dict></dict><key>BLLastBSDName</key><string>disk0s1</string></dict><dict><key>IOEFIDevicePathType</key><string>MediaFilePath</string><key>Path</key><string>\EFI\APPLE\FIRMWARE\XS31_0081_06B_LOCKED.fd</string></dict></array>
efi-boot-device-data %02%01%0c%00%d0A%03%0a%00%00%00%00%01%01%06%00%00%01%01%01%06%00%00%00%03%0a,%00%b4%dd%87%d4%8b%00%d9%11%af%dc%00%10%83%ff%caM%00%00%00%00%bd^#%00%07%00%08P%01%00%00%00%00%00%00%00%00%00%01%00%04%01*%00%02%00%00%00(@%06%00%00%00%00%00%b0%8f%d2%01%00%00%00%00%e7%83%7f%b3%12^%0fI%80%f7%d4%b6%b1%e7%a4|%02%02%7f%ff%04%00
efi-apple-payload0-data %02%01%0c%00%d0A%03%0a%00%00%00%00%01%01%06%00%00%01%01%01%06%00%00%00%03%0a,%00%b4%dd%87%d4%8b%00%d9%11%af%dc%00%10%83%ff%caM%00%00%00%00%bd^#%00%07%00%08P%01%00%00%00%00%00%00%00%00%00%01%00%04%01*%00%01%00%00%00(%00%00%00%00%00%00%00%00@%06%00%00%00%00%00%ee[%e8?%bd%f5LM%8472%f9%a4B%e0%cb%02%02%04%04\%00\%00E%00F%00I%00\%00A%00P%00P%00L%00E%00\%00F%00I%00R%00M%00W%00A%00R%00E%00\%00X%00S%003%001%00_%000%000%008%001%00_%000%006%00B%00_%00L%00O%00C%00K%00E%00D%00.%00f%00d%00%00%00%7f%ff%04%00
efi-boot-next-data %02%01%0c%00%d0A%03%0a%00%00%00%00%01%01%06%00%00%01%01%01%06%00%00%00%03%0a,%00%b4%dd%87%d4%8b%00%d9%11%af%dc%00%10%83%ff%caM%00%00%00%00%bd^#%00%07%00%08P%01%00%00%00%00%00%00%00%00%00%01%00%04%01*%00%01%00%00%00(%00%00%00%00%00%00%00%00@%06%00%00%00%00%00%ee[%e8?%bd%f5LM%8472%f9%a4B%e0%cb%02%02%04%04R%00\%00E%00F%00I%00\%00A%00P%00P%00L%00E%00\%00F%00I%00R%00M%00W%00A%00R%00E%00\%00E%00f%00i%00U%00p%00d%00a%00t%00e%00r%00A%00p%00p%002%00.%00e%00f%00i%00%00%00%7f%ff%04%00


Note that the efi-boot-next and efi-boot-next-data parameters are present now when they weren't with the GUI tool. That's because we're seeing the data pre-boot this time. Other than that it's writing the same data to nvram. Let's go ahead and restart to see what happens.

shutdown -r now

Same thing this time around, the firmware update progress bar appears for a short while then it restarts and boots to the desktop with no firmware update taking place. Still at XS31.0081.B04.

Prior to all of this I went as far as trying to manually invoke the update using the following command after copying the EfiUpdaterApp2.efi and XS31_0081_06B_LOCKED.fd files to /System/Library/CoreServices/Firmware\ Updates/

bless -mount / -firmware /System/Library/CoreServices/Firmware\ Updates/EfiUpdaterApp2.efi -payload /System/Library/CoreServices/Firmware\ Updates/XS31_0081_06B_LOCKED.fd -options "-x efi-apple-payload0-data" --verbose

Output was:

EFI found at IODeviceTree:/efi
GPT detected
No auxiliary booter partition required
System partition found
Returning booter information dictionary:
<CFBasicHash 0x100201630 [0x7fff702c6ee0]>{type = mutable dict, count = 3,
entries =>
0 : <CFString 0x100019a60 [0x7fff702c6ee0]>{contents = "System Partitions"} = <CFArray 0x100201560 [0x7fff702c6ee0]>{type = immutable, count = 1, values = (
0 : <CFString 0x1002015f0 [0x7fff702c6ee0]>{contents = "disk0s1"}
)}
1 : <CFString 0x10001a2a0 [0x7fff702c6ee0]>{contents = "Data Partitions"} = <CFArray 0x100201a30 [0x7fff702c6ee0]>{type = immutable, count = 1, values = (
0 : <CFString 0x7fff702ab9b0 [0x7fff702c6ee0]>{contents = "disk0s2"}
)}
2 : <CFString 0x100019a20 [0x7fff702c6ee0]>{contents = "Auxiliary Partitions"} = <CFArray 0x100201200 [0x7fff702c6ee0]>{type = immutable, count = 0, values = ()}
}

Substituting ESP disk0s1
Mounting at /Volumes/bless.c9ah
Executing "/sbin/mount"
Returned 0
Creating /Volumes/bless.c9ah//EFI/APPLE/FIRMWARE if needed
Deleting previous contents of /Volumes/bless.c9ah//EFI/APPLE/FIRMWARE
Opened dest at /Volumes/bless.c9ah//EFI/APPLE/FIRMWARE//EfiUpdaterApp2.efi for writing
preallocation not supported on this filesystem for /Volumes/bless.c9ah//EFI/APPLE/FIRMWARE//EfiUpdaterApp2.efi

Type/creator set to / for /Volumes/bless.c9ah//EFI/APPLE/FIRMWARE//EfiUpdaterApp2.efi
/Volumes/bless.c9ah//EFI/APPLE/FIRMWARE//EfiUpdaterApp2.efi created successfully
Relative path of /Volumes/bless.c9ah//EFI/APPLE/FIRMWARE//EfiUpdaterApp2.efi is \EFI\APPLE\FIRMWARE\EfiUpdaterApp2.efi
IOMedia disk0s1 has UUID 3FE85BEE-F5BD-4D4C-8437-32F9A442E0CB
Opened dest at /Volumes/bless.c9ah//EFI/APPLE/FIRMWARE//XS31_0081_06B_LOCKED.fd for writing
preallocation not supported on this filesystem for /Volumes/bless.c9ah//EFI/APPLE/FIRMWARE//XS31_0081_06B_LOCKED.fd

Type/creator set to / for /Volumes/bless.c9ah//EFI/APPLE/FIRMWARE//XS31_0081_06B_LOCKED.fd
/Volumes/bless.c9ah//EFI/APPLE/FIRMWARE//XS31_0081_06B_LOCKED.fd created successfully
Relative path of /Volumes/bless.c9ah//EFI/APPLE/FIRMWARE//XS31_0081_06B_LOCKED.fd is \EFI\APPLE\FIRMWARE\XS31_0081_06B_LOCKED.fd
IOMedia disk0s1 has UUID 3FE85BEE-F5BD-4D4C-8437-32F9A442E0CB
Setting EFI NVRAM:
<CFBasicHash 0x1005015f0 [0x7fff702c6ee0]>{type = mutable dict, count = 2,
entries =>
1 : <CFString 0x100019a80 [0x7fff702c6ee0]>{contents = "efi-boot-next"} = <CFString 0x100502030 [0x7fff702c6ee0]>{contents = "<array><dict><key>IOMatch</key><dict><key>IOProviderClass</key><string>IOMedia</string><key>IOPropertyMatch</key><dict><key>UUID</key><string>3FE85BEE-F5BD-4D4C-8437-32F9A442E0CB</string></dict></dict><key>BLLastBSDName</key><string>disk0s1</string></dict><dict><key>IOEFIDevicePathType</key><string>MediaFilePath</string><key>Path</key><string>\EFI\APPLE\FIRMWARE\EfiUpdaterApp2.efi</string></dict><dict><key>IOEFIBootOption</key><string>-x efi-apple-payload0-data</string></dict></array>"}
2 : <CFString 0x100501de0 [0x7fff702c6ee0]>{contents = "efi-apple-payload0"} = <CFString 0x1002019a0 [0x7fff702c6ee0]>{contents = "<array><dict><key>IOMatch</key><dict><key>IOProviderClass</key><string>IOMedia</string><key>IOPropertyMatch</key><dict><key>UUID</key><string>3FE85BEE-F5BD-4D4C-8437-32F9A442E0CB</string></dict></dict><key>BLLastBSDName</key><string>disk0s1</string></dict><dict><key>IOEFIDevicePathType</key><string>MediaFilePath</string><key>Path</key><string>\EFI\APPLE\FIRMWARE\XS31_0081_06B_LOCKED.fd</string></dict></array>"}
}

Executing "/sbin/umount"
Returned 0


Again, it appeared to set all of the correct values in nvram but the firmware did not update.

I'm open to any suggestions at this point.
 
Last edited:

cmc09

macrumors newbie
Original poster
Jan 7, 2020
4
0
RESOLVED

I got this Xserve used with no drives so I was unsure what OS originally came with it. According to everymac.com it came with 10.5.6

Apple Xserve Xeon Nehalem 2.93 "Eight Core" Specs

I had attempted to install 10.5 Server but the install disk would hang during boot. As a temp solution to get the firmware updated I tried installing 10.6 (non-server). While it installed and ran successfully, I couldn't get the the firmware to update per the previous post.

Some later Xserves came with 10.6 Server, and it turns out this is one of them. I dug up a 10.6 Server installer and got it successfully installed. Once it was updated to 10.6.8 and the Xserve EFI Firmware Update utility was installed in Applications > Utilities, I attempted to update the firmware using the command line method.

This time, instead of getting an error, the RemoteEFIUpdater successfully exited with the following message:
1578859573375.png


Immediately after that I shut down using shutdown -h now. As per the instructions the system started back up on it's own. Just like before the firmware update screen came up for 10 seconds or so and the machine restarted again without updating the firmware. But, per the instructions above, I ran the RemoteEFIUpdater utility a second time, shutting down afterwards. This time when the firmware update screen came up the progress bar appeared and it proceeded to update the firmware.

So it seems that the Xserve EFI Firmware Update 1.2 requires a server OS to function properly.
 
Last edited: