blob: 7efc15a7bc45ac19f309ab30e5e925c143904c30 (
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
|
#!/sbin/runscript
#
# dellomsa-drivers
#
# Dell OMSA driver module loading script
#
# This script takes care of loading correct driver modules
# (if available) for the OpenManage Server Administrator.
# It checks that the server really is Dell and finds out
# which environment driver to load (dcdesm/dcdtvm/dcdipm).
# Module "dcdbas" is the base module and is always loaded.
# This script also creates necessary devices nodes in /dev.
#
OMSADIR=/opt/dell/srvadmin
depend() {
use logger net
}
checkconfig() {
if [ ! -d ${OMSADIR} ]; then
eerror "Directory ${OMSADIR} does not exist"
return 1
fi
if [ ! -x ${OMSADIR}/hapi/bin/dchcfg32 ]; then
eerror "File ${OMSADIR}/hapi/bin/dchcfg32 does not exist"
return 1
fi
if [ ! -x ${OMSADIR}/omil/prereqcheck/sysreport ]; then
eerror "File ${OMSADIR}/omil/prereqcheck/sysreport does not exist"
return 1
fi
}
checkmodules() {
# check that the system is Dell (output contains "System ID" if Dell)
${OMSADIR}/omil/prereqcheck/sysreport | grep -q "System ID" && true
if [ $? -ne 0 ]; then
eerror "Non-Dell system, not loading drivers."
return 1
fi
# get the running kernel version
KVER=`/bin/uname -r`
# check that the modules exist
MODULESMISSING=0
MODULES="dcdbas dcdtvm dcdesm dcdipm"
for MODULE in ${MODULES}; do
if [ ! -f /lib/modules/${KVER}/extra/${MODULE}.ko ]; then
# some of the modules are missing
eerror "driver modules unavailable for ${KVER}"
return 1
fi
done
}
loadmodules() {
ebegin "Loading base dell module"
# first load the base module "dcdbas"
/sbin/modprobe dcdbas
eend $?
# check that dcdbas is now listed in /proc/devices
grep -q dcdbas /proc/devices && true
if [ $? -ne 0 ]; then
eerror "Error! Something is really wrong: dcdbas module was loaded"
eerror "successfully, but dcdbas is not listed in /proc/devices!"
return 1
fi
# re-create required device nodes in /dev
# base device node is always re-created
EsmBASDevMAJOR=`grep dcdbas /proc/devices | awk '{print $1}'`
if [ -e /dev/EsmBASDev0 ]; then # /dev/EsmBASDev exists
rm -f /dev/EsmBASDev0
fi
mknod -m 0600 /dev/EsmBASDev0 c ${EsmBASDevMAJOR} 0
ln -sf /dev/EsmBASDev0 /dev/EsmBASDev
# find out which environment module to use (dcdesm|dcdtvm|dcdipm)
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${OMSADIR}/hapi/bin/
${OMSADIR}/hapi/bin/dchcfg32 command=getsystype >/dev/null 2>&1 && true
case "$?" in
1) # TVM
ebegin "Loading [TVM]"
/sbin/modprobe dcdtvm
EsmTVMDevMAJOR=`grep dcdtvm /proc/devices | awk '{print $1}'`
if [ -e /dev/EsmTVMDev0 ]; then # /dev/EsmTVMDev exists
rm -f /dev/EsmTVMDev0
fi
mknod -m 0600 /dev/EsmTVMDev0 c ${EsmTVMDevMAJOR} 0
ln -sf /dev/EsmTVMDev0 /dev/EsmTVMDev
eend $?
;;
2) # ESM
ebegin "Loading [ESM]"
/sbin/modprobe dcdesm
EsmESMDevMAJOR=`grep dcdesm /proc/devices | awk '{print $1}'`
if [ -e /dev/EsmESM2Dev0 ]; then # /dev/EsmESM2Dev exists
rm -f /dev/EsmESM2Dev0
fi
mknod -m 0600 /dev/EsmESM2Dev0 c ${EsmESMDevMAJOR} 0
ln -sf /dev/EsmESM2Dev0 /dev/EsmESM2Dev
eend $?
;;
4) # IPMI
ebegin "Loading [IPMI]"
/sbin/modprobe dcdipm
EsmIPMDevMAJOR=`grep dcdipm /proc/devices | awk '{print $1}'`
if [ -e /dev/EsmIPMDev0 ]; then # /dev/EsmIPMDev exists
rm -f /dev/EsmIPMDev0
fi
mknod -m 0600 /dev/EsmIPMDev0 c ${EsmIPMDevMAJOR} 0
ln -sf /dev/EsmIPMDev0 /dev/EsmIPMDev
eend $?
;;
*) # unknown or none
einfo "unknown env. platform, env. driver not loaded."
;;
esac
}
start(){
checkconfig || return 1
checkmodules || return 1
loadmodules
}
stop() {
ebegin "Unloading dell drivers"
/sbin/rmmod dcdtvm >/dev/null 2>&1 && true
/sbin/rmmod dcdesm >/dev/null 2>&1 && true
/sbin/rmmod dcdipm >/dev/null 2>&1 && true
/sbin/rmmod dcdbas >/dev/null 2>&1 && true
eend $?
}
|