Magellan Linux

Contents of /trunk/installer-simple/functions/hwdetection.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2490 - (show annotations) (download) (as text)
Wed Jan 8 12:16:22 2014 UTC (10 years, 3 months ago) by niro
File MIME type: application/x-sh
File size: 5491 byte(s)
-drop create_initrd() function
1 #!/bin/bash
2 # $Id$
3
4 ## hwdetection, needs >= sys-apps/hwinfo
5
6 # hwinfo wrapper to use hwinfo with sudo if requested
7 hwinfo()
8 {
9 local use_sudo=""
10 case ${SUDO} in
11 yes|y|true|1) use_sudo=sudo ;;
12 esac
13
14 ${use_sudo} /usr/sbin/hwinfo $@
15 }
16
17 # get_hwinfo $hw_item
18 get_hwinfo()
19 {
20 local enable_desc="0"
21
22 if [[ $1 = --with-description ]] || [[ $1 = -d ]]
23 then
24 enable_desc=1
25 shift
26 fi
27
28 local item="$1"
29 local all
30 local i
31
32 # handle special items
33 case ${item} in
34 memory) get_hwinfo_memory; return ;;
35 smp) get_hwinfo_smp; return ;;
36 esac
37
38 all=$(hwinfo --short --"${item}")
39
40 declare -i i=0
41 while read device description
42 do
43 # skip the first line
44 (( i++ ))
45 [ ${i} -eq 1 ] && continue
46
47 if [[ ${enable_desc} = 1 ]]
48 then
49 echo "${device};${description}"
50 else
51 echo "${device}"
52 fi
53 done <<< "${all}"
54 }
55
56
57 # special memory case
58 get_hwinfo_memory()
59 {
60 local memory=$(hwinfo --memory | grep "Memory Size" | sed 's:.*\:\ \(.*\):\1:')
61 echo "${memory}"
62 }
63
64
65 # special smp case
66 get_hwinfo_smp()
67 {
68 local smp=$(hwinfo --smp | grep "SMP support:" | sed 's:.*\:\ \(.*\):\1:')
69 echo "${smp}"
70 }
71
72
73 # get_driver_modules $hw_item
74 get_driver_modules()
75 {
76 local item="$1"
77 local modules
78 local i
79
80 for i in $(hwinfo --"${item}" | grep "Driver Modules:" | cut -d: -f2 )
81 do
82 eval $(echo "${i}" | sed -e "s:\":modules=\"\${modules}\ :" -e "s:,:\ :")
83 done
84 remove_duplicates "${modules}"
85 }
86
87 # remove_duplicates $list
88 remove_duplicates()
89 {
90 local list="$@"
91 local fixed_list=":"
92 local i
93
94 for i in ${list}
95 do
96 if [[ -z $(echo "${fixed_list}" | fgrep ":${i}:") ]]
97 then
98 fixed_list="${fixed_list}${i}:"
99 fi
100 done
101
102 unset list
103
104 # remove all ':' and show the cleaned list
105 # this way fixes double spaces also
106 local counter
107 declare -i counter=0
108 for i in $(echo ${fixed_list} | sed "s|:| |g")
109 do
110 (( counter++ ))
111 if [[ ${counter} -eq 1 ]]
112 then
113 list="${i}"
114 else
115 list+=" ${i}"
116 fi
117 done
118
119 echo "${list}"
120 }
121
122 get_x11_driver_modules()
123 {
124 local modules
125 modules="$(hwinfo --gfxcard | grep 'XFree86 v4 Server Module:' | sed 's/.*Module:\ \(.*\)/\1/')"
126
127 # remove duplicates from list and show it
128 remove_duplicates "${modules}"
129 }
130
131 get_evdev_device_path()
132 {
133 local device="$1"
134 local path
135
136 case ${device} in
137 mouse|keyboard) true;;
138 *) die "unkown device";;
139 esac
140
141 path="$(hwinfo --${device} | grep 'Device Files:' | sed 's:.*\(/dev/input/event[0-5]\).*:\1:')"
142 echo "${path}"
143 }
144
145 # get_netcard_driver_modules device
146 # e.g. get_netcard_driver_modules eth0
147 get_netcard_driver_modules()
148 {
149 local device="$1"
150 local modules
151
152 if [[ -z ${device} ]]
153 then
154 echo "Error: get_netcard_driver_module(): no device given"
155 return 1
156 fi
157
158 modules=$(hwinfo --netcard | grep -B1 "Device File: ${device}" | sed 's/.*Modules: \"\(.*\)\"/\1/;q')
159 remove_duplicates "${modules}"
160 }
161
162 get_blkid_information()
163 {
164 local partition="$1"
165 local variable="$2"
166 local method
167
168 case $1 in
169 --uuid|-u) shift; method="-U"; partition="$1"; variable="$2" ;;
170 --label|-l) shift; method="-L"; partition="$1"; variable="$2" ;;
171 esac
172
173 if [[ -z ${partition} ]]
174 then
175 echo "Error: get_get_blkid_information()(): no partition given"
176 return 1
177 fi
178
179 if [[ -z ${variable} ]]
180 then
181 echo "Error: get_get_blkid_information()(): no variable given"
182 return 1
183 fi
184
185 blkid -o value -s "${variable}" "${method}" "${partition}"
186 }
187
188 get_fstype()
189 {
190 local partition="$1"
191 if [[ -z ${partition} ]]
192 then
193 echo "Error: get_fstype(): no partition given"
194 return 1
195 fi
196
197 # does not work with uuids
198 #mount -f --guess-fstype ${partition}
199
200 get_blkid_information ${partition} TYPE
201 }
202
203 get_uuid()
204 {
205 local partition="$1"
206 if [[ -z ${partition} ]]
207 then
208 echo "Error: get_uuid(): no partition given"
209 return 1
210 fi
211
212 # does not work with uuids
213 #mount -f --guess-fstype ${partition}
214
215 get_blkid_information ${partition} UUID
216 }
217
218 is_mounted()
219 {
220 local item
221 local mount
222 local method
223 method="$1"
224 item="$2"
225
226 [ -e /proc/mounts ] || return 1
227
228 case ${method} in
229 --location) mount="$(grep "[[:space:]]${item}[[:space:]]" /proc/mounts | cut -d ' ' -f2)" ;;
230 --device) mount="$(grep "^${item}[[:space:]]" /proc/mounts | cut -d ' ' -f1)" ;;
231 --filesystem) mount="$(grep "[[:space:]]${item}[[:space:]]" /proc/mounts | cut -d ' ' -f3)" ;;
232 *) echo "unknown method '${method}'"; return 1 ;;
233 esac
234 [[ ${mount} != ${item} ]] && return 1
235
236 return 0
237 }
238
239 iface_has_link()
240 {
241 local interface="$1"
242 local flags
243
244 [[ -n ${interface} ]] || return 2
245 interface="/sys/class/net/${interface}"
246 [[ -d ${interface} ]] || return 2
247 flags=$(cat ${interface}/flags)
248 echo $((${flags}|0x41)) > ${interface}/flags # 0x41: IFF_UP|IFF_RUNNING
249 [[ $(cat ${interface}/carrier) = 1 ]] || return 1
250 }
251
252 hdd_size_below_256mb()
253 {
254 local hdd="$1"
255 local size
256 local retval
257 [[ -z ${hdd} ]] && dialog_die "Error: get_hdd_size() no \$hdd given!"
258
259 size=$(fdisk -l ${hdd} | grep "Disk.*${hdd}" | sed 's:.*,\ \(.*\)\ byte.*:\1:')
260 if [[ ${size} -le 257000000 ]]
261 then
262 retval="0"
263 else
264 retval="1"
265 fi
266
267 return "${retval}"
268 }
269
270 chrooted()
271 {
272 local cmd="$@"
273
274 is_mounted --location ${INSTALLROOT}/sys || mount -t sysfs sysfs ${INSTALLROOT}/sys
275 is_mounted --location ${INSTALLROOT}/proc || mount -t proc proc ${INSTALLROOT}/proc
276 is_mounted --location ${INSTALLROOT}/dev || mount -o bind /dev ${INSTALLROOT}/dev
277
278 chroot ${INSTALLROOT} ${cmd}
279
280 is_mounted --location ${INSTALLROOT}/dev && umount ${INSTALLROOT}/dev
281 is_mounted --location ${INSTALLROOT}/proc && umount ${INSTALLROOT}/proc
282 is_mounted --location ${INSTALLROOT}/sys && umount ${INSTALLROOT}/sys
283 }