blob: 82b9e8ece2aef51199ef5e642910eb0ca55a319c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
#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
}
|