blob: 82b9e8ece2aef51199ef5e642910eb0ca55a319c [file] [log] [blame]
#Number of times to sleep
BOOT_TIMEOUT="5";
#Path to memboot binary
#MEMBOOT=${MEMBOOT:-memboot};
#Username/password for ssh to BMC machines
SSHUSER=${SSHUSER:-sysadmin};
export SSHPASS=${SSHPASS:-superuser};
#Username/password for IPMI
IPMI_AUTH="-U ${IPMI_USER:-admin} -P ${IPMI_PASS:-admin}"
PFLASH_TO_COPY=${PFLASH_TO_COPY:-}
PFLASH_BINARY=/usr/local/bin/pflash
# Strip control characters from IPMI before grepping?
STRIP_CONTROL=0
# How do we SSH/SCP in?
SSHCMD="sshpass -e ssh -l $SSHUSER -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $target";
function sshcmd {
$SSHCMD $*;
}
# remotecp file target target_location
function remotecp {
sshpass -e ssh -o User=$SSHUSER -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $2 dd of=$3 < $1;
}
function is_off {
return $([ "$($IPMI_COMMAND chassis power status)" = "Chassis Power is off" ]);
}
function poweroff {
$IPMI_COMMAND chassis power off
# give it some time
sleep 10
}
function force_primary_side {
# Now we force booting from primary (not golden) side
$IPMI_COMMAND raw 0x04 0x30 0x5c 0x01 0x00 0x00 0 0 0 0 0 0
# and from somewhere else we get this raw command. Obvious really.
$IPMI_COMMAND raw 0x04 0x30 0xd2 0x01 0x00 0x00 0 0 0 0 0 0
sleep 8
}
function flash {
if [ ! -z "$PFLASH_TO_COPY" ]; then
remotecp $PFLASH_TO_COPY $target /tmp/pflash
$SSHCMD chmod +x /tmp/pflash
PFLASH_BINARY=/tmp/pflash
fi
if [ ! -z "$PNOR" ]; then
remotecp $PNOR $target /tmp/image.pnor;
fi
if [ "${LID[0]}" != "" ]; then
remotecp ${LID[0]} $target /tmp/skiboot.lid;
fi
if [ "${LID[1]}" != "" ]; then
remotecp ${LID[1]} $target /tmp/bootkernel
fi
if [ "${arbitrary_lid[1]}" != "" ]; then
remotecp ${arbitrary_lid[1]} $target /tmp/$(basename ${arbitrary_lid[1]})
fi
if [ "$?" -ne "0" ] ; then
error "Couldn't copy firmware image";
fi
# Habenaro doesn't have md5sum
#flash_md5=$(md5sum "$1" | cut -f 1 -d ' ');
#$SSHCMD "flash_md5r=\$(md5sum /tmp/image.pnor | cut -f 1 -d ' ');
# if [ \"$flash_md5\" != \"\$flash_md5r\" ] ; then
# exit 1;
# fi";
#if [ "$?" -ne "0" ] ; then
# error "Firmware MD5s don't match";
#fi
# flash it
if [ ! -z "$PNOR" ]; then
msg "Flashing full PNOR"
$SSHCMD "$PFLASH_BINARY -E -f -p /tmp/image.pnor"
if [ "$?" -ne "0" ] ; then
error "An unexpected pflash error has occurred";
fi
msg "Removing /tmp/image.pnor"
$SSHCMD "rm /tmp/image.pnor"
fi
if [ ! -z "${LID[0]}" ] ; then
msg "Flashing PAYLOAD PNOR partition"
$SSHCMD "$PFLASH_BINARY -e -f -P PAYLOAD -p /tmp/skiboot.lid"
if [ "$?" -ne "0" ] ; then
error "An unexpected pflash error has occurred";
fi
msg "Removing /tmp/pskiboot.lid"
$SSHCMD "rm /tmp/skiboot.lid"
fi
if [ ! -z "${LID[1]}" ] ; then
msg "Flashing BOOTKERNEL PNOR partition"
$SSHCMD "$PFLASH_BINARY -e -f -P BOOTKERNEL -p /tmp/bootkernel"
if [ "$?" -ne "0" ] ; then
error "An unexpected pflash error has occurred";
fi
msg "Removing /tmp/bootkernel"
$SSHCMD "rm /tmp/bootkernel"
fi
if [ ! -z "${arbitrary_lid[0]}" -a ! -z "${arbitrary_lid[1]}" ] ; then
msg "Flashing ${arbitrary_lid[0]} PNOR partition"
$SSHCMD "$PFLASH_BINARY -e -f -P ${arbitrary_lid[0]} -p /tmp/$(basename ${arbitrary_lid[1]})"
if [ "$?" -ne "0" ] ; then
error "An unexpected pflash error has occurred";
fi
msg "Removing /tmp/$(basename ${arbitrary_lid[1]})"
$SSHCMD "rm /tmp/$(basename ${arbitrary_lid[1]})"
fi
}
function boot_firmware {
$IPMI_COMMAND chassis power on > /dev/null;
i=0;
while [ "$($IPMI_COMMAND chassis power status)" = "Chassis Power is off" -a \( "$i" -lt "$BOOT_TIMEOUT" \) ] ; do
msg -n ".";
sleep $BOOT_SLEEP_PERIOD;
i=$(expr $i + 1);
done
if [ "$i" -eq "$BOOT_TIMEOUT" ] ; then
error "Couldn't power on $target";
fi
}
function machine_sanity_test {
sshcmd true;
if [ $? -ne 0 ]; then
echo "$target: Failed to SSH to $target..."
echo "$target: Command was: $SSHCMD true"
error "Try connecting manually to diagnose the issue."
fi
# No further sanity tests for BMC machines.
true
}