blob: 5e2a834d83914e48e16dade1f9d24e4a1ae96302 (
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
|
#Number of times to sleep
BOOT_TIMEOUT="5";
#Username/password for ssh to BMC machines
SSHUSER=${SSHUSER:-ADMIN};
export SSHPASS=${SSHPASS:-ADMIN};
#Username/password for IPMI
IPMI_AUTH="-U ${IPMI_USER:-ADMIN} -P ${IPMI_PASS:-ADMIN}"
PFLASH_TO_COPY=${PFLASH_TO_COPY:-}
PFLASH_BINARY=/tmp/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 {
# because BMC:
$IPMI_COMMAND $SMC_PRESSHIPMICMD;
expect -c "spawn $SSHCMD" -c "set timeout 600" -c "expect \"#\" { send \"$*\\r\" }" -c 'expect "#" { send "exit\r" }' -c 'wait';
}
# remotecp file target target_location
function remotecp {
rsync -av $1 rsync://$2/files/$3
}
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 {
true
}
function flash {
if [ ! -z "$PFLASH_TO_COPY" ]; then
remotecp $PFLASH_TO_COPY $target pflash
sshcmd chmod +x /tmp/rsync_file/pflash
PFLASH_BINARY=/tmp/rsync_file/pflash
fi
if [ ! -z "$PNOR" ]; then
remotecp $PNOR $target image.pnor;
fi
if [ "${LID[0]}" != "" ]; then
remotecp ${LID[0]} $target skiboot.lid;
fi
if [ "${LID[1]}" != "" ]; then
remotecp ${LID[1]} $target bootkernel
fi
if [ "${arbitrary_lid[1]}" != "" ]; then
remotecp ${arbitrary_lid[1]} $target $(basename ${arbitrary_lid[1]})
fi
if [ "$?" -ne "0" ] ; then
error "Couldn't copy firmware image";
fi
# flash it
if [ ! -z "$PNOR" ]; then
msg "Flashing full PNOR"
sshcmd "$PFLASH_BINARY -E -f -p /tmp/rsync_file/image.pnor"
if [ "$?" -ne "0" ] ; then
error "An unexpected pflash error has occurred";
fi
msg "Removing /tmp/rsync_file/image.pnor"
sshcmd "rm /tmp/rsync_file/image.pnor"
fi
if [ ! -z "${LID[0]}" ] ; then
msg "Flashing PAYLOAD PNOR partition"
sshcmd "$PFLASH_BINARY -e -f -P PAYLOAD -p /tmp/rsync_file/skiboot.lid"
if [ "$?" -ne "0" ] ; then
error "An unexpected pflash error has occurred";
fi
msg "Removing /tmp/rsync_file/skiboot.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/rsync_file/bootkernel"
if [ "$?" -ne "0" ] ; then
error "An unexpected pflash error has occurred";
fi
msg "Removing /tmp/rsync_file/bootkernel"
sshcmd "rm /tmp/rsync_file/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/rsync_file/$(basename ${arbitrary_lid[1]})"
if [ "$?" -ne "0" ] ; then
error "An unexpected pflash error has occurred";
fi
msg "Removing /tmp/rsync_file/$(basename ${arbitrary_lid[1]})"
sshcmd "rm /tmp/rsync_file/$(basename ${arbitrary_lid[1]})"
fi
msg "Clearing mboxd caches..."
sshcmd "/bin/mboxctl --clear-cache"
}
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 {
# No further sanity tests for BMC machines.
true
}
|