178 lines
5 KiB
Bash
178 lines
5 KiB
Bash
#Number of times to sleep
|
|
BOOT_TIMEOUT="20";
|
|
|
|
#Username/password for for ssh to FSP machines
|
|
SSHUSER=${FSPSSHUSER:-}
|
|
SSHPASS=${FSPSSHPASS:-}
|
|
|
|
if [ -z $SSHUSER ] || [ -z $SSHPASS ] ; then
|
|
msg "Set FSPSSHUSER and FSPSSHPASS in ENV or ~/.skiboot_boot_tests"
|
|
exit 1;
|
|
fi
|
|
|
|
export SSHUSER SSHPASS
|
|
|
|
#IPMI
|
|
IPMI_AUTH="-P ${IPMI_PASS:-foo}";
|
|
|
|
# Strip control characters from IPMI before grepping?
|
|
STRIP_CONTROL=1
|
|
|
|
# How do we SSH in, cp files across?
|
|
SSHCMD="sshpass -e ssh -l $SSHUSER -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $target";
|
|
REMOTECPCMD="sshpass -e scp -o User=$SSHUSER -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ";
|
|
|
|
GET_PROFILE='. /etc/profile; test -e /home/dev/.profile && . /home/dev/.profile';
|
|
|
|
function sshcmd {
|
|
$SSHCMD $*;
|
|
}
|
|
|
|
function is_off {
|
|
state=$($SSHCMD "$GET_PROFILE; smgr mfgState");
|
|
return $([ "$state" = "standby" ]);
|
|
}
|
|
|
|
function poweroff {
|
|
i=0;
|
|
state=$($SSHCMD "$GET_PROFILE; smgr mfgState");
|
|
if [ "$state" = "standby" ]; then
|
|
# already off
|
|
return 0
|
|
fi
|
|
$SSHCMD "$GET_PROFILE; panlexec -f 8";
|
|
msg "Waiting 30 seconds..."
|
|
sleep 30
|
|
state=$($SSHCMD "$GET_PROFILE; smgr mfgState");
|
|
while [ "$state" != "standby" -a "$i" -lt "$BOOT_TIMEOUT" ] ; do
|
|
msg "Waiting $BOOT_SLEEP_PERIOD more seconds..."
|
|
sleep $BOOT_SLEEP_PERIOD;
|
|
i=$(expr $i + 1);
|
|
state=$($SSHCMD "$GET_PROFILE; smgr mfgState");
|
|
done;
|
|
# sleep a little bit longer --- p81 was getting a bit confused.
|
|
sleep 10
|
|
msg "Finishing with state '$state'."
|
|
}
|
|
|
|
function force_primary_side {
|
|
return 0
|
|
}
|
|
|
|
function flash {
|
|
#Make a backup of the current lids
|
|
$REMOTECPCMD $target:/opt/extucode/80f00100.lid 80f00100.lid.bak &&
|
|
$REMOTECPCMD $target:/opt/extucode/80f00101.lid 80f00101.lid.bak &&
|
|
$REMOTECPCMD $target:/opt/extucode/80f00102.lid 80f00102.lid.bak;
|
|
if [ $? -ne 0 ] ; then
|
|
error "Couldn't make backup of currently installed lids";
|
|
fi
|
|
|
|
if [ "${LID[0]}" != "" ]; then
|
|
$REMOTECPCMD ${LID[0]} $target:/opt/extucode/80f00100.lid ||
|
|
error "Error copying lid ${LID[0]}";
|
|
sum=$(md5sum ${LID[0]} | cut -f 1 -d ' ');
|
|
$SSHCMD "$GET_PROFILE;
|
|
sumr=\$(md5sum /opt/extucode/80f00100.lid | cut -f 1 -d ' ');
|
|
if [ \"$sum\" != \"\$sumr\" ] ; then
|
|
exit 1;
|
|
fi;" || error "MD5sum doesn't match for ${LID[0]}"
|
|
|
|
fi
|
|
|
|
if [ "${LID[1]}" != "" ]; then
|
|
$REMOTECPCMD ${LID[1]} $target:/opt/extucode/80f00101.lid ||
|
|
error "Error copying lid";
|
|
sum=$(md5sum ${LID[1]} | cut -f 1 -d ' ');
|
|
$SSHCMD "$GET_PROFILE;
|
|
sumr=\$(md5sum /opt/extucode/80f00101.lid | cut -f 1 -d ' ');
|
|
if [ \"$sum\" != \"\$sumr\" ] ; then
|
|
exit 1;
|
|
fi;" || error "MD5sum doesn't match for ${LID[1]}"
|
|
fi
|
|
|
|
if [ "${LID[2]}" != "" ]; then
|
|
$REMOTECPCMD ${LID[2]} $target:/opt/extucode/80f00102.lid ||
|
|
error "Error copying lid";
|
|
sum=$(md5sum ${LID[2]} | cut -f 1 -d ' ');
|
|
$SSHCMD "$GET_PROFILE;
|
|
sumr=\$(md5sum /opt/extucode/80f00102.lid | cut -f 1 -d ' ');
|
|
if [ \"$sum\" != \"\$sumr\" ] ; then
|
|
exit 1;
|
|
fi;" || error "MD5sum doesn't match for ${LID[2]}"
|
|
fi
|
|
|
|
|
|
$SSHCMD "$GET_PROFILE;
|
|
if [ \$(smgr mfgState) != 'standby' ] ; then
|
|
exit 1;
|
|
fi
|
|
cupdmfg -opt | grep '80f0010'";
|
|
if [ $? -ne 0 ] ; then
|
|
error "Could not install lids on the FSP";
|
|
fi
|
|
|
|
sleep 2; #Don't rush the fsp
|
|
}
|
|
|
|
function boot_firmware {
|
|
ISTEP_LOG=$(mktemp --tmpdir builder-1.XXXXXX);
|
|
$SSHCMD "$GET_PROFILE; istep" &> $ISTEP_LOG &
|
|
msg "Waiting 90 seconds for $target to boot";
|
|
sleep 90;
|
|
i=0;
|
|
state=$($SSHCMD "$GET_PROFILE; smgr mfgState");
|
|
while [ \( "$state" != "runtime" \) -a \( "$i" -lt "$BOOT_TIMEOUT" \) ] ; do
|
|
msg "Waiting $BOOT_SLEEP_PERIOD more seconds (istep: `grep iStep $ISTEP_LOG|tail -n 1`)";
|
|
sleep "$BOOT_SLEEP_PERIOD";
|
|
i=$(expr $i + 1);
|
|
state=$($SSHCMD "$GET_PROFILE; smgr mfgState");
|
|
done;
|
|
|
|
if [ "$i" -eq "$BOOT_TIMEOUT" ] ; then
|
|
state=$($SSHCMD "$GET_PROFILE; smgr mfgState");
|
|
case "$state" in
|
|
"ipling")
|
|
echo "$target: still hasn't come up but firmware hasn't specifically crashed";
|
|
;;
|
|
"dumping")
|
|
echo "$target: has crashed";
|
|
;;
|
|
"runtime")
|
|
echo "$target: Oops, looks like system has managed to come up...";
|
|
;;
|
|
"standby")
|
|
echo "$target: System is powered off? How can this be?";
|
|
;;
|
|
*)
|
|
echo "$target: is an unknown state '$state'";
|
|
;;
|
|
esac
|
|
echo "$target: istep log";
|
|
cat $ISTEP_LOG;
|
|
rm -rf $ISTEP_LOG
|
|
error "Boot test on $target failed";
|
|
fi
|
|
rm -rf $ISTEP_LOG;
|
|
}
|
|
|
|
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
|
|
|
|
$SSHCMD "$GET_PROFILE; test -d /nfs/bin"
|
|
if [ $? -ne 0 ]; then
|
|
echo "$target: Failed to read /nfs/bin"
|
|
error "Is /nfs mounted on the FSP?"
|
|
fi
|
|
|
|
$SSHCMD "$GET_PROFILE; which md5sum > /dev/null && which cupdmfg > /dev/null"
|
|
if [ $? -ne 0 ]; then
|
|
echo "$target: Missing md5sum or cupdmfg on the FSP?"
|
|
error "Is /nfs mounted on the FSP?"
|
|
fi
|
|
}
|