1 |
#!/sbin/runscript |
2 |
# Copyright 1999-2005 Gentoo Foundation |
3 |
# Distributed under the terms of the GNU General Public License v2 |
4 |
# $Header: /var/cvsroot/gentoo/src/livecd-tools/autoconfig,v 1.52 2006/01/21 22:38:41 wolf31o2 Exp $ |
5 |
|
6 |
DHCP="yes" |
7 |
DETECT="yes" |
8 |
GPM="yes" |
9 |
PCMCIA="no" |
10 |
HOTPLUG="yes" |
11 |
APM="no" |
12 |
ACPI="no" |
13 |
IDEDMA="yes" |
14 |
ALSA="yes" |
15 |
X11="yes" |
16 |
|
17 |
get_config() { |
18 |
CMDLINE="$(cat /proc/cmdline)" |
19 |
|
20 |
for x in ${CMDLINE} ; do |
21 |
case "${x}" in |
22 |
nodetect) |
23 |
DETECT="no" |
24 |
GPM="no" |
25 |
HOTPLUG="no" |
26 |
APM="no" |
27 |
ACPI="no" |
28 |
ALSA="no" |
29 |
X11="no" |
30 |
;; |
31 |
nodhcp) |
32 |
DHCP="no" |
33 |
;; |
34 |
nogpm) |
35 |
GPM="no" |
36 |
;; |
37 |
dopcmcia) |
38 |
PCMCIA="yes" |
39 |
;; |
40 |
doapm) |
41 |
APM="yes" |
42 |
ACPI="no" |
43 |
;; |
44 |
acpi=on|acpi=force) |
45 |
APM="no" |
46 |
ACPI="yes" |
47 |
;; |
48 |
ide=nodma) |
49 |
IDEDMA="no" |
50 |
;; |
51 |
nohotplug) |
52 |
HOTPLUG="no" |
53 |
;; |
54 |
nosound) |
55 |
ALSA="no" |
56 |
;; |
57 |
nox) |
58 |
X11="no" |
59 |
;; |
60 |
esac |
61 |
done |
62 |
} |
63 |
|
64 |
depend() { |
65 |
need modules |
66 |
before net |
67 |
# provide gpm pcmcia apmd acpid coldplug hdparm alsasound x-setup |
68 |
} |
69 |
|
70 |
# Checks whether a service will be started by autoconfig. |
71 |
# Usage: check_svc var service [service_alternative] |
72 |
check_svc() { |
73 |
if [ "$1" = "yes" ] |
74 |
then |
75 |
if [ -x "/etc/init.d/$2" ] |
76 |
then |
77 |
echo "$2" |
78 |
elif [ -n "$3" -a -x "/etc/init.d/$3" ] |
79 |
then |
80 |
echo "$3" |
81 |
fi |
82 |
fi |
83 |
} |
84 |
|
85 |
# Prints an ordered list of services that will be started by autoconfig. |
86 |
list_services() { |
87 |
get_config |
88 |
|
89 |
local svcs="$(check_svc ${APM} apmd)" |
90 |
svcs="${svcs} $(check_svc ${ACPI} acpid)" |
91 |
svcs="${svcs} $(check_svc ${IDEDMA} hdparm)" |
92 |
svcs="${svcs} $(check_svc ${PCMCIA} pcmcia)" |
93 |
svcs="${svcs} $(check_svc ${GPM} gpm)" |
94 |
svcs="${svcs} $(check_svc ${HOTPLUG} coldplug hotplug)" |
95 |
svcs="${svcs} $(check_svc ${ALSA} alsasound)" |
96 |
|
97 |
echo ${svcs} |
98 |
} |
99 |
|
100 |
# Only used on SGI CDs, this determines: |
101 |
# A) CPU Type |
102 |
# B) System |
103 |
detect_mips() { |
104 |
local cpuinfo="$(awk -F: '/^cpu model/{printf $2};/^$/{print ""}' /proc/cpuinfo 2>/dev/null | head -n 1 | cut -d" " -f2,3)" |
105 |
local machinfo="$(awk -F: '/^system type/{printf $2};/^$/{print ""}' /proc/cpuinfo 2>/dev/null | cut -d" " -f2-)" |
106 |
local machtype="" |
107 |
|
108 |
case "${machinfo}" in |
109 |
"SGI Indy") |
110 |
machtype="SGI Indy" # Indy R4x00/R5000 |
111 |
;; |
112 |
"SGI Indigo2") |
113 |
case "${cpuinfo}" in |
114 |
R4*) |
115 |
machtype="SGI Indigo2" # I2 R4x00 |
116 |
;; |
117 |
R8*) |
118 |
machtype="SGI Indigo2 Power" # I2 R8000 |
119 |
;; |
120 |
R10*) |
121 |
machtype="SGI Indigo2 Impact" # I2 R10000 |
122 |
;; |
123 |
esac |
124 |
;; |
125 |
"SGI O2"|"SGI IP32") |
126 |
machtype="SGI O2" # O2 R5K/RM5K2/RM7K/R10K/R12K |
127 |
;; |
128 |
"SGI Octane"|"SGI IP30") |
129 |
machtype="SGI Octane" # Octane R10K/R12K/R14K |
130 |
;; |
131 |
"SGI Origin"|"SGI IP27") |
132 |
machtype="SGI Origin" # Origin R10K/R12K |
133 |
;; |
134 |
*) |
135 |
machtype="Unknown SGI MIPS" # ??? |
136 |
;; |
137 |
esac |
138 |
|
139 |
PC="Detected an ${machtype} w/ ${numcpu} ${cpuinfo} ${bit}" |
140 |
} |
141 |
|
142 |
detect_x86_amd64() { |
143 |
local cpuinfo="$(awk -F: '/^model name/{printf $2};/^$/{print ""}' /proc/cpuinfo 2>/dev/null | head -n 1)" |
144 |
local mhz="$(awk -F: '/^cpu MHz/{printf " %dMHz",int($2)};/^$/{print ""}' /proc/cpuinfo 2>/dev/null | head -n 1)" |
145 |
|
146 |
PC="Detected ${numcpu} ${cpuinfo} ${mhz} ${bit}" |
147 |
} |
148 |
|
149 |
detect_ppc() { |
150 |
local cpuinfo="$(awk -F: '/^cpu/{printf $2};/^$/{print ""}' /proc/cpuinfo 2>/dev/null | head -n 1)" |
151 |
local mhz="$(awk -F: '/^clock/{printf " %dMHz",int($2)};/^$/{print ""}' /proc/cpuinfo 2>/dev/null | head -n 1)" |
152 |
local machinfo="$(awk -F: '/^detected as/{printf $2}' /proc/cpuinfo | cut -d'(' -f2 | cut -d')' -f1)" |
153 |
local machtype="" |
154 |
|
155 |
case "${machinfo}" in |
156 |
"PowerMac G4 AGP Graphics") |
157 |
machtype="Apple PowerMac G4" |
158 |
;; |
159 |
"PowerBook Titanium") |
160 |
machtype="Apple Powerbook G4" |
161 |
;; |
162 |
"iBook 2 rev. 2") |
163 |
machtype="Apple iBook G3" |
164 |
;; |
165 |
"PowerMac G5 Dual Core") |
166 |
machtype="Apple PowerMac G5 Dual Core" |
167 |
;; |
168 |
"Unknown Intrepid-based") |
169 |
machtype="Apple Mac-Mini" |
170 |
;; |
171 |
*) |
172 |
machtype="Unknown PPC System" |
173 |
;; |
174 |
esac |
175 |
|
176 |
PC="Detected an ${machtype} w/ ${numcpu} ${cpuinfo} ${bit}" |
177 |
} |
178 |
|
179 |
start() { |
180 |
echo "0" > /proc/sys/kernel/printk |
181 |
get_config |
182 |
if [ "${DETECT}" = "yes" ] |
183 |
then |
184 |
ebegin "Hardware detection started" |
185 |
local numcpu="$(awk -F: '/^processor/{printf $2};/^$/{print ""}' /proc/cpuinfo 2>/dev/null | wc -l)" |
186 |
local arch="$(uname -m)" |
187 |
local ismips="no" |
188 |
[ "${numcpu}" -gt '1' ] && bit="CPUs" || bit="CPU" |
189 |
case ${arch} in |
190 |
mips|mips64) |
191 |
detect_mips |
192 |
ismips="yes" |
193 |
;; |
194 |
i?86|x86_64) |
195 |
detect_x86_amd64 |
196 |
;; |
197 |
*) |
198 |
PC="$(awk -F: '/^processor/{printf "Processor"$2" is"};/^model name/{printf $2};/^vendor_id/{printf vendor};/^cpu MHz/{printf " %dMHz",int($2)};/^cache size/{printf ","$2" Cache"};/^$/{print ""}' /proc/cpuinfo 2>/dev/null)" |
199 |
;; |
200 |
esac |
201 |
einfo "${PC}" |
202 |
[ -x /usr/sbin/hwsetup ] && hwsetup -p >/dev/null |
203 |
eend |
204 |
else |
205 |
ewarn "Hardware detection disabled via cmdline ..." |
206 |
fi |
207 |
|
208 |
if [ "${APM}" = "yes" ] |
209 |
then |
210 |
modprobe apm power_off=1 >/dev/null 2>&1 && \ |
211 |
einfo "APM BIOS found, power management functions enabled ..." |
212 |
[ -x /etc/init.d/apmd ] && start_service apmd |
213 |
else |
214 |
[ "${ismips}" = "no" ] && ewarn "Not Loading APM Bios support ..." |
215 |
fi |
216 |
|
217 |
if [ "${ACPI}" = "yes" ] |
218 |
then |
219 |
modprobe processor >/dev/null 2>&1 && \ |
220 |
ebegin "ACPI power management functions enabled" && \ |
221 |
modprobe thermal >/dev/null |
222 |
modprobe fan >/dev/null 2>&1 |
223 |
modprobe button >/dev/null 2>&1 |
224 |
modprobe battery >/dev/null 2>&1 |
225 |
modprobe ac >/dev/null 2>&1 |
226 |
[ -x /etc/init.d/acpid ] && start_service acpid |
227 |
eend |
228 |
else |
229 |
[ "${ismips}" = "no" ] && ewarn "Not Loading ACPI support ..." |
230 |
fi |
231 |
|
232 |
if [ "${IDEDMA}" = "yes" ] |
233 |
then |
234 |
if [ "${ismips}" = "no" ]; then |
235 |
[ -x /etc/init.d/hdparm ] && start_service hdparm |
236 |
fi |
237 |
fi |
238 |
|
239 |
if [ "${PCMCIA}" = "yes" ] |
240 |
then |
241 |
einfo "PCMCIA enabled via cmdline ..." |
242 |
[ -x /etc/init.d/pcmcia ] && start_service pcmcia |
243 |
fi |
244 |
|
245 |
if [ "${DHCP}" = "no" ] |
246 |
then |
247 |
sed -i -e '/^ifconfig_eth.*dhcp.*/ s/^/#/' \ |
248 |
-e '/^iface_eth.*dhcp.*/ s/^/#/' \ |
249 |
-e '/^config_eth.*dhcp.*/ s/^/#/' \ |
250 |
/etc/conf.d/net |
251 |
ewarn "Skipping DHCP broadcast detection as requested on boot commandline ..." |
252 |
fi |
253 |
|
254 |
# Read in what hwsetup has found |
255 |
[ -f /etc/sysconfig/knoppix ] && . /etc/sysconfig/knoppix |
256 |
[ -f /etc/sysconfig/gentoo ] && . /etc/sysconfig/gentoo |
257 |
|
258 |
# Mouse |
259 |
if [ -n "${MOUSE_DEVICE}" ] |
260 |
then |
261 |
einfo "Mouse is ${HILITE}${MOUSE_FULLNAME}${NORMAL} at ${HILITE}${MOUSE_DEVICE}${NORMAL} ..." |
262 |
source /etc/sysconfig/mouse |
263 |
if [ -x /usr/sbin/gpm ] |
264 |
then |
265 |
[ $(grep "#MOUSE=${MOUSETYPE}" /etc/conf.d/gpm) ] \ |
266 |
&& sed -i "\@MOUSE=${MOUSETYPE}@s@^#@@" /etc/conf.d/gpm \ |
267 |
|| echo "MOUSE=${MOUSETYPE}" >>/etc/conf.d/gpm |
268 |
|
269 |
[ $(grep "#MOUSEDEV=${DEVICE}" /etc/conf.d/gpm) ] \ |
270 |
&& sed -i "\@MOUSEDEV=${DEVICE}@s@^#@@" /etc/conf.d/gpm \ |
271 |
|| echo "MOUSEDEV=${DEVICE}" >>/etc/conf.d/gpm |
272 |
|
273 |
[ "${GPM}" = "yes" ] \ |
274 |
&& [ -x /etc/init.d/gpm ] && start_service gpm |
275 |
fi |
276 |
fi |
277 |
|
278 |
if [ "${HOTPLUG}" = "yes" ] |
279 |
then |
280 |
# Check whether we should be using hotplug or coldplug |
281 |
if [ -x /etc/init.d/coldplug ] |
282 |
then |
283 |
start_service coldplug |
284 |
elif [ -x /etc/init.d/hotplug ] |
285 |
then |
286 |
start_service hotplug |
287 |
fi |
288 |
else |
289 |
ewarn "Hotplug disabled via cmdline ..." |
290 |
fi |
291 |
|
292 |
[ "${DETECT}" = "no" ] && DHCP="no" |
293 |
[ "${DETECT}" = "yes" ] \ |
294 |
&& NETDEVICES="$(awk -F: '/eth.:|tr.:|ath.:|wlan.:/{print $1}' /proc/net/dev 2>/dev/null)" |
295 |
|
296 |
if [ -n "${NETDEVICES}" ] |
297 |
then |
298 |
for nics in ${NETDEVICES} |
299 |
do |
300 |
if [ "${DHCP}" = "yes" ] |
301 |
then |
302 |
einfo "Network device ${HILITE}${nics}${NORMAL} detected, DHCP broadcasting for IP ..." |
303 |
dhcpcd -n -h $(hostname) & |
304 |
fi |
305 |
done |
306 |
else |
307 |
ewarn "No Network device auto detected ..." |
308 |
fi |
309 |
|
310 |
if [ "${ALSA}" = "yes" ] |
311 |
then |
312 |
if [ -n "${SOUND_FULLNAME}" -o -n "${SOUND_DRIVER}" ] |
313 |
then |
314 |
local sndmsg="Soundcard:\n" |
315 |
|
316 |
[ -n "${SOUND_FULLNAME}" ] \ |
317 |
&& sndmsg="${sndmsg} ${WARN}${SOUND_FULLNAME}\n" |
318 |
[ -n "${SOUND_DRIVER}" ] \ |
319 |
&& sndmsg="${sndmsg} driver = ${SOUND_DRIVER}\n" |
320 |
|
321 |
einfo "${sndmsg}" |
322 |
|
323 |
|
324 |
if [ -x /etc/init.d/alsasound ] |
325 |
then |
326 |
start_service alsasound |
327 |
fi |
328 |
|
329 |
if [ -e /proc/asound/cards ] |
330 |
then |
331 |
for i in $(cat /proc/asound/cards | cut -d" " -f1) |
332 |
do |
333 |
if [ -d /proc/asound/card$i ] && [ -x /usr/bin/amixer ] |
334 |
then |
335 |
amixer -c $i scontrols > /etc/amixer |
336 |
[ -n "$(grep Master /etc/amixer)" ] \ |
337 |
&& amixer -c $i -q set Master 95% unmute \ |
338 |
>/dev/null 2>&1 |
339 |
[ -n "$(grep PCM /etc/amixer)" ] \ |
340 |
&& amixer -c $i -q set PCM 95% unmute \ |
341 |
>/dev/null 2>&1 |
342 |
[ -n "$(grep Mic /etc/amixer)" ] \ |
343 |
&& amixer -c $i -q set Mic 95% mute cap \ |
344 |
>/dev/null 2>&1 |
345 |
[ -n "$(grep Wave /etc/amixer)" ] \ |
346 |
&& amixer -c $i -q set Wave 95% unmute \ |
347 |
>/dev/null 2>&1 |
348 |
[ -n "$(grep Capture /etc/amixer)" ] \ |
349 |
&& amixer -c $i -q set Capture 95% unmute cap \ |
350 |
>/dev/null 2>&1 |
351 |
fi |
352 |
done |
353 |
fi |
354 |
fi |
355 |
else |
356 |
ewarn "Skipping ALSA detection as requested on command line ..." |
357 |
fi |
358 |
|
359 |
if [ "${DETECT}" = "yes" ] |
360 |
then |
361 |
[ -x /etc/init.d/x-setup ] && start_service x-setup |
362 |
fi |
363 |
|
364 |
[ "${X11}" = "no" ] && touch /etc/init.d/.noxdm |
365 |
[ -n "${XDESC}" ] && einfo "VideoCard: ${HILITE}${XDESC}${NORMAL}" |
366 |
|
367 |
killall hwsetup 2>/dev/null |
368 |
echo "6" > /proc/sys/kernel/printk |
369 |
} |
370 |
|
371 |
# vim: ts=4 |