Want to install a firmware update on one of your HP SmartArray controllers while running a 64-bit OS? Turns out, the binaries distributed by HP seem to be 32-bit only – running for example Ubuntu 14.04, here’s what you gotta do…
root@host:~#./CP021971.scexe ./CP021971.scexe: 153: ./CP021971.scexe: pushd: not found ./CP021971.scexe: 158: ./CP021971.scexe: popd: not found ./ccissflash: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
But libstdtc++6 seems already installed, hmpf… 32-bit maybe?
root@host:~#dpkg --add-architecture i386
root@host:~#apt-get update
root@host:~#apt-get install libstdc++6:i386
Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: gcc-4.8-base:i386 gcc-4.9-base:i386 libc6:i386 libgcc1:i386 [...]
Let’s try that again…
root@host:~#./CP021971.scexe
./CP021971.scexe: 153: ./CP021971.scexe: ./CP021971.scexe: 158: ./CP021971.scexe: popd: not found
pushd: not found
This program consists of two phases: device discovery and device update.
No device will be updated until you answer.
Do you want to run device discovery?
(yes/no) yes
Finding hardware. This may take a few minutes.
Found 1 devices.
Do you want to upgrade the device that has older ROM?
(yes/no) yes
1 devices will be updated.
Updating: P410i Slot: 0 from [5.70] to [6.40]
Updating: P410i Slot: 0 from [5.70] to [6.40]
As part of the reboot process, you must power cycle the server and any external array storage devices.
Well, that was rather easy…
and i have:
root@pve:~# ./CP008474.scexe
gzip: stdin: unexpected end of file
./CP008474.scexe: Cannot decompress ./CP008474.scexe
:(
> gzip: stdin: unexpected end of file
(For anyone else delivered to this page as a result of searching for that error message: )
I hit this problem when trying to use a copy of the P400 controller firmware updater from the page linked in Dave’s post (CP017698.scexe in my case).
It turned out that when I had used vim to edit the file (changing the “#!/bin/sh” line to “#!/bin/bash” in order to get the the pushd/popd commands found in the script to work — needed on Ubuntu where /bin/sh is dash instead of bash), an LF character was appended at the end of the script file… but the end of that script file is actually binary data that gets passed directly to gzip, and the extra character results in gzip’s decompression algorithm getting out of sync with the file data.
As soon as I removed that unwanted trailing LF from the file, the gzip error went away (and the firmware upgrader was extracted and then executed successfully).
For those wondering, you can remove the trailing LF from the file with this: truncate -s -1 filename
I have a P400 controller, which I needed to upgrde to allow the linux hpsa module to work (basically dmesg was telling me the firmware was too old) so I downloaded the linux scexe, installed the 32bit libraries and it worked a treat. On debian the apt command was “apt-get install lib32stdc++6”.
The HP firmware is here
https://support.hpe.com/hpsc/swd/public/detail?swItemId=MTX_7e4ae58f0d9c42f6a3d47b587c#tab2
Thanks! I just got one of these G5 servers and the 20.x ubuntu would hang at trying to find the driver for CSIS. got 14.04 on it, and tried to run it and ran into this issue too. this helped me get it flashed!
This worked on a HP DL380 G5 with i400.