1 |
#!/bin/bash |
#!/bin/bash |
2 |
|
# $Header: /home/cvsd/magellan-cvs/magellan-src/installer/hwdetection.sh,v 1.9 2008-09-24 10:15:46 niro Exp $ |
3 |
|
|
4 |
## hwdetection, needs >= sys-apps/hwinfo |
## 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 |
# get_hwinfo $hw_item |
18 |
get_hwinfo() |
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" |
local item="$1" |
29 |
local all |
local all |
30 |
local i |
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}") |
all=$(hwinfo --short --"${item}") |
39 |
|
|
40 |
declare -i i=0 |
declare -i i=0 |
44 |
(( i++ )) |
(( i++ )) |
45 |
[ ${i} -eq 1 ] && continue |
[ ${i} -eq 1 ] && continue |
46 |
|
|
47 |
echo "${device};${description}" |
if [[ ${enable_desc} = 1 ]] |
48 |
|
then |
49 |
|
echo "${device};${description}" |
50 |
|
else |
51 |
|
echo "${device}" |
52 |
|
fi |
53 |
done <<< "${all}" |
done <<< "${all}" |
54 |
} |
} |
55 |
|
|
56 |
|
|
57 |
|
# special memory case |
58 |
|
get_hwinfo_memory() |
59 |
|
{ |
60 |
|
local memory=$(hwinfo --memory | grep "Memory Size" | cut -d: -f2 | sed "s:\ ::") |
61 |
|
echo "${memory}" |
62 |
|
} |
63 |
|
|
64 |
|
|
65 |
|
# special smp case |
66 |
|
get_hwinfo_smp() |
67 |
|
{ |
68 |
|
local smp=$(hwinfo --smp | grep "SMP support:" | cut -d: -f2 | sed "s:\ ::") |
69 |
|
echo "${smp}" |
70 |
|
} |
71 |
|
|
72 |
|
|
73 |
# get_driver_modules $hw_item |
# get_driver_modules $hw_item |
74 |
get_driver_modules() |
get_driver_modules() |
75 |
{ |
{ |
113 |
fi |
fi |
114 |
done |
done |
115 |
|
|
116 |
|
unset list |
117 |
|
|
118 |
# remove all ':' and show the cleaned list |
# remove all ':' and show the cleaned list |
119 |
# this way fixes double spaces also |
# this way fixes double spaces also |
120 |
for i in $(echo ${fixed_list} | sed "s|:| |g") |
for i in $(echo ${fixed_list} | sed "s|:| |g") |
121 |
do |
do |
122 |
echo "${i}" |
list+=" ${i}" |
123 |
done |
done |
124 |
|
|
125 |
|
echo "${list}" |
126 |
} |
} |
127 |
|
|
128 |
get_x11_driver_modules() |
get_x11_driver_modules() |
139 |
# default config path is /etc/conf.d/mkinitrd |
# default config path is /etc/conf.d/mkinitrd |
140 |
create_initrd() |
create_initrd() |
141 |
{ |
{ |
142 |
local initrd="$1" |
local initrd |
143 |
local kernel="$2" |
local kernel |
144 |
local config="$3" |
local config |
145 |
|
local chroot |
146 |
|
#local root |
147 |
local modules |
local modules |
148 |
|
|
149 |
|
# very basic getops |
150 |
|
for i in $* |
151 |
|
do |
152 |
|
case $1 in |
153 |
|
#--root|-r) shift; root="$1" ;; |
154 |
|
--initrd|-i) shift; initrd="$1" ;; |
155 |
|
--config|-c) shift; config="$1" ;; |
156 |
|
--kernelversion|-v) shift; kernel="$1" ;; |
157 |
|
esac |
158 |
|
shift |
159 |
|
done |
160 |
|
|
161 |
[[ -z ${initrd} ]] && initrd="/boot/initrd-$(uname -r).img" |
[[ -z ${initrd} ]] && initrd="/boot/initrd-$(uname -r).img" |
162 |
[[ -z ${kernel} ]] && kernel="$(uname -r)" |
[[ -z ${kernel} ]] && kernel="$(uname -r)" |
163 |
[[ -z ${config} ]] && config="/etc/conf.d/mkinitrd" |
[[ -z ${config} ]] && config="/etc/conf.d/mkinitrd" |
164 |
|
|
165 |
|
if [[ ! -z ${INSTALL_ROOT} ]] |
166 |
|
then |
167 |
|
config="${INSTALL_ROOT}/${config}" |
168 |
|
chroot="chrooted" |
169 |
|
fi |
170 |
|
|
171 |
# get various modules needed to boot |
# get various modules needed to boot |
172 |
modules="${modules} $(get_driver_modules disk)" |
modules="$(get_driver_modules disk)" |
173 |
modules="${modules} $(get_driver_modules scsi)" |
modules+=" $(get_driver_modules scsi)" |
174 |
modules="${modules} $(get_driver_modules cdrom)" |
modules+=" $(get_driver_modules cdrom)" |
175 |
|
|
176 |
|
# check for special ide_disk drivers (ata support) |
177 |
|
if [[ ! -z $(echo ${modules} | grep ide_disk) ]] |
178 |
|
then |
179 |
|
modules+=" $(grep ide_disk /proc/modules | cut -d' ' -f4 | sed '/-/d;s:,:\ :g')" |
180 |
|
fi |
181 |
|
|
182 |
# remove all duplicate modules |
# remove all duplicate modules |
183 |
modules="$(remove_duplicates ${modules})" |
modules="$(remove_duplicates ${modules})" |
187 |
echo "MODULES=\"${modules}\"" >> ${config} |
echo "MODULES=\"${modules}\"" >> ${config} |
188 |
echo "IMAGE_TYPE=\"initramfs\"" >> ${config} |
echo "IMAGE_TYPE=\"initramfs\"" >> ${config} |
189 |
|
|
190 |
mkinitrd -f ${initrd} ${kernel} |
${chroot} mkinitrd -f ${initrd} ${kernel} |
191 |
|
} |
192 |
|
|
193 |
|
chrooted() |
194 |
|
{ |
195 |
|
local cmd="$@" |
196 |
|
|
197 |
|
mount -t sysfs sysfs ${INSTALL_ROOT}/sys |
198 |
|
mount -t proc proc ${INSTALL_ROOT}/proc |
199 |
|
mount -o bind /dev ${INSTALL_ROOT}/dev |
200 |
|
|
201 |
|
chroot ${INSTALL_ROOT} ${cmd} |
202 |
|
|
203 |
|
umount ${INSTALL_ROOT}/dev |
204 |
|
umount ${INSTALL_ROOT}/proc |
205 |
|
umount ${INSTALL_ROOT}/sys |
206 |
} |
} |
207 |
|
|
208 |
# special: memory (size), floppy (modprobe floppy), smp (support y/n) |
# special: memory (size), floppy (modprobe floppy), smp (support y/n) |
239 |
# done |
# done |
240 |
|
|
241 |
#create_initrd /root/TEST/initrd |
#create_initrd /root/TEST/initrd |
242 |
get_driver_modules cdrom |
#get_driver_modules cdrom |
243 |
#get_driver_modules disk |
#get_driver_modules disk |
244 |
#get_driver_modules scsi |
#get_driver_modules scsi |
245 |
#get_driver_modules all |
#get_driver_modules all |
246 |
|
|
247 |
# network |
# network |
248 |
#get_hwinfo netcard |
#get_hwinfo --with-description netcard |
249 |
#get_driver_modules netcard |
#get_driver_modules netcard |
250 |
|
|
251 |
#get_hwinfo disk |
#get_hwinfo disk |