| #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 |
| } |