/[livecd-tools]/trunk/autoconfig
Gentoo

Diff of /trunk/autoconfig

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 49 Revision 139
1#!/sbin/runscript 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.25 2005/05/12 13:04:27 wolf31o2 Exp $
5 2
6echo "0" > /proc/sys/kernel/printk 3# This script is used by Gentoo release media to start certain services and to
4# ensure a sane setup for a CD-based boot.
5
6ACPI="no"
7ALSA="yes"
8APM="no"
9DETECT="yes"
7DHCP="yes" 10DHCP="yes"
8DETECT="yes"
9GPM="yes" 11GPM="yes"
10PCMCIA="no"
11HOTPLUG="yes" 12HOTPLUG="yes"
12APM="no"
13ACPI="no"
14IDEDMA="yes" 13IDEDMA="yes"
14NFS="yes"
15PCMCIA="yes"
16SSHD="no"
17X11="yes"
18
19get_config() {
15CMDLINE="`cat /proc/cmdline`" 20 CMDLINE="$(cat /proc/cmdline)"
21
16for x in ${CMDLINE} ; do 22 for x in ${CMDLINE} ; do
17 if [ "${x}" = "nodetect" ]; then 23 case "${x}" in
24 nodetect)
25 ACPI="no"
26 ALSA="no"
27 APM="no"
18 DETECT="no" 28 DETECT="no"
19 GPM="no" 29 GPM="no"
20 HOTPLUG="no" 30 HOTPLUG="no"
21 APM="no" 31 NFS="no"
22 ACPI="no" 32 X11="no"
23 fi 33 ;;
24 34 nodhcp)
25 if [ "${x}" = "nodhcp" ]; then
26 DHCP="no" 35 DHCP="no"
27 fi 36 ;;
28 37 nogpm)
29 if [ "${x}" = "nogpm" ]; then
30 GPM="no" 38 GPM="no"
31 fi 39 ;;
32 40 nohotplug)
33 if [ "${x}" = "dopcmcia" ]; then
34 PCMCIA="yes"
35 fi
36
37 if [ "${x}" = "doapm" ]; then
38 APM="yes"
39 ACPI="no"
40 fi
41
42 if [ "${x}" = "acpi=on" -o "${x}" = "acpi=force" ]; then
43 APM="no"
44 ACPI="yes"
45 fi
46
47 if [ "${x}" = "ide=nodma" ]; then
48 IDEDMA="no"
49 fi
50
51 if [ "${x}" = "nohotplug" ]; then
52 HOTPLUG="no" 41 HOTPLUG="no"
53 fi 42 ;;
43 nonfs)
44 NFS="no"
45 ;;
46 nosound)
47 ALSA="no"
48 ;;
49 nox)
50 X11="no"
51 ;;
52 ide\=nodma)
53 IDEDMA="no"
54 ;;
55 doapm)
56 ACPI="no"
57 APM="yes"
58 ;;
59 acpi\=on|acpi\=force)
60 ACPI="yes"
61 APM="no"
62 ;;
63 dopcmcia)
64 PCMCIA="yes"
65 ;;
66 dosshd)
67 SSHD="yes"
68 ;;
69 esac
54done 70 done
71}
55 72
56depend() { 73depend() {
57 need modules 74 need modules
58 use alsasound 75 before net
59# provide gpm pcmcia apmd acpid coldplug 76# provide gpm pcmcia apmd acpid coldplug hdparm alsasound mkxf86config x-setup
77}
78
79# Checks whether a service will be started by autoconfig.
80# Usage: check_svc var service [service_alternative]
81check_svc() {
82 if [ "${1}" = "yes" ]
83 then
84 if [ -x "/etc/init.d/${2}" ]
85 then
86 echo "${2}"
87 elif [ -n "${3}" -a -x "/etc/init.d/${3}" ]
88 then
89 echo "${3}"
90 fi
91 fi
92}
93
94# Prints an ordered list of services that will be started by autoconfig.
95list_services() {
96 get_config
97
98 local svcs="$(check_svc ${APM} apmd)"
99 svcs="${svcs} $(check_svc ${ACPI} acpid)"
100 svcs="${svcs} $(check_svc ${IDEDMA} hdparm)"
101 svcs="${svcs} $(check_svc ${PCMCIA} pcmcia)"
102 svcs="${svcs} $(check_svc ${GPM} gpm)"
103 svcs="${svcs} $(check_svc ${HOTPLUG} coldplug hotplug)"
104 svcs="${svcs} $(check_svc ${ALSA} alsasound)"
105 svcs="${svcs} $(check_svc ${NFS} nfsmount)"
106 svcs="${svcs} $(check_svc ${SSH} sshd)"
107 svcs="${svcs} $(check_svc ${X11} mkxf86config x-setup)"
108
109 echo ${svcs}
110}
111
112unpack_firmware() {
113 # This unpacks any firmware tarballs.
114 if [ -e /lib/firmware.tar.bz2 ]
115 then
116 ebegin "Unpacking hotplug firmware"
117 tar xjf /lib/firmware.tar.bz2 -C /lib/firmware
118 eend 0
119 fi
120}
121
122get_info() {
123 local tmp
124
125 if [ ! -z "${1}" -a ! -z "${2}" ]
126 then
127 tmp=$(grep "^$1[[:space:]]\+:" /proc/cpuinfo | head -n 1 | cut -d" " -f3-)
128 eval "${2}='${tmp}'"
129 fi
130}
131
132detect_mips() {
133 get_info "cpu model" cpuinfo
134 get_info "system type" machinfo
135 cpuinfo="${cpuinfo%% FPU*}"
136
137 case "${machinfo}" in
138 "SGI Indigo2")
139 case "${cpuinfo}" in
140 R4*)
141 machinfo="SGI Indigo2" # I2 R4x00
142 ;;
143 R8*)
144 machinfo="SGI Indigo2 Power" # I2 R8000
145 ;;
146 R10*)
147 machinfo="SGI Indigo2 Impact" # I2 R10000
148 ;;
149 esac
150 ;;
151 esac
152
153 PC="Detected an ${machinfo} w/ ${numcpu} ${cpuinfo} CPU(s)"
154}
155
156detect_x86_amd64_ia64() {
157 if [ "${1}" = "ia64" ]
158 then
159 get_info "family" cpuinfo
160 else
161 get_info "model name" cpuinfo
162 fi
163 get_info "cpu MHz" mhz
164 mhz="${mhz%%.*}MHz"
165
166 PC="Detected ${numcpu} ${cpuinfo} CPU(s) @ ${mhz}"
167}
168
169detect_alpha() {
170 get_info "platform string" machinfo
171 get_info "cpu" cpuinfo1
172 get_info "cpu model" cpuinfo2
173 get_info "cpus detected" numcpu
174
175 PC="Detected ${numcpu} ${cpuinfo1} ${cpuinfo2} CPU(s) in a ${machinfo} system"
176}
177
178detect_ppc() {
179 get_info "cpu" cpuinfo
180 get_info "clock" mhz
181 get_info "detected as" machinfo
182 machinfo="${machinfo##*\(}"
183 machinfo="${machinfo%%\)*}"
184
185 local machtype=""
186
187 case "${machinfo}" in
188 "CHRP Pegasos2")
189 machtype="Pegasos 2"
190 ;;
191 "CHRP IBM,9124-720")
192 machtype="IBM OP720"
193 ;;
194 "iBook 2 rev. 2")
195 machtype="Apple iBook G3"
196 ;;
197 "iMac G5"*)
198 machtype="Apple iMac G5"
199 ;;
200 "MPC8241")
201 machtype="Kurobox"
202 ;;
203 "PowerMac G5")
204 machtype="Apple PowerMac G5"
205 ;;
206 "PowerMac G5 Dual Core")
207 machtype="Apple PowerMac G5 Dual Core"
208 ;;
209 "PowerMac G4 AGP Graphics")
210 machtype="Apple PowerMac G4"
211 ;;
212 "PowerBook Titanium"|'PowerBook G4 15"')
213 machtype="Apple Powerbook G4"
214 ;;
215 "Unknown Intrepid-based")
216 machtype="Apple Mac-Mini"
217 ;;
218 *)
219 machtype="Unknown PPC System"
220 ;;
221 esac
222
223 PC="Detected a(n) ${machtype} w/ ${numcpu} ${cpuinfo} CPU(s)"
224}
225
226detect_sparc() {
227 get_info "cpu" cpuinfo
228 get_info "ncpus active" numcpu
229 get_info "ncpus probed" numprobed
230
231 PC="Detected ${numcpu} active ${cpuinfo} CPU(s) of ${numprobed} total"
60} 232}
61 233
62start() { 234start() {
235 echo "0" > /proc/sys/kernel/printk
236 get_config
237
238 # First off, we want hotplug/coldplug enabled, so let's re-enable it.
239 # We do this even if we aren't starting up the hotplug/coldplug
240 # services for the installer.
241 sed -i 's/RC_COLDPLUG="no"/RC_COLDPLUG="yes"/' /etc/conf.d/rc
242 # Now, we check if we're supposed to run a coldplug script.
243 if [ "${HOTPLUG}" = "yes" ]
244 then
245 # Check whether we should be using hotplug/coldplug or whether we should
246 # just let udev do it all.
247 if [ -x /etc/init.d/coldplug ]
248 then
249 start_service coldplug
250 elif [ -x /etc/init.d/hotplug ]
251 then
252 start_service hotplug
253 else
254 unpack_firmware
255 [ -x /sbin/udevtrigger ] && /sbin/udevtrigger
256 fi
257 else
258 ewarn "Hotplug/Coldplug disabled via cmdline ..."
259 fi
260
63 if [ "${DETECT}" = "yes" ]; then 261 if [ "${DETECT}" = "yes" ]
262 then
64 ebegin ${WARN}"Hardware detection started" 263 ebegin "Hardware detection started"
65 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` 264 local numcpu="$(grep -c '^processor[[:space:]]\+:' /proc/cpuinfo)"
66 ebegin ${GOOD}"${PC}" 265 local arch="$(uname -m)"
67 eend 266
267 case ${arch} in
268 mips*)
269 detect_mips
270 ACPI="no"
271 APM="no"
272 IDEDMA="no"
273 ;;
274 i?86|x86_64)
275 detect_x86_amd64_ia64
276 ;;
277 alpha)
278 detect_alpha
279 ACPI="no"
280 APM="no"
281 ;;
282 sparc*)
283 detect_sparc
284 ACPI="no"
285 APM="no"
286 ;;
287 powerpc*)
288 detect_ppc
289 ACPI="no"
290 APM="no"
291 ;;
292 ia64)
293 detect_x86_amd64_ia64 "ia64"
294 APM="no"
295 ;;
296 *)
297 PC=
298 ;;
299 esac
300 [ -n "${PC}" ] && einfo "${PC}"
68 [ -x /usr/sbin/hwsetup ] && hwsetup -p >/dev/null 301 [ -x /usr/sbin/hwsetup ] && hwsetup
69 eend 302 eend
70 else 303 else
71 ebegin ${WARN}"Hardware detection disabled via cmdline$NORMAL" 304 ewarn "Hardware detection disabled via cmdline ..."
72 fi 305 fi
73 306
74 if [ "${APM}" = "yes" ]; then 307 if [ "${APM}" = "yes" ]
75 modprobe apm power_off=1 >/dev/null 2>&1 && ebegin ${GOOD}"APM BIOS found, power management functions enabled.${NORMAL}" 308 then
76 [ -x /etc/init.d/apmd ] && /etc/init.d/apmd start 309 modprobe apm power_off=1 >/dev/null 2>&1 && \
310 einfo "APM BIOS found, power management functions enabled ..."
311 [ -x /etc/init.d/apmd ] && start_service apmd
77 else 312 else
78 ebegin ${GOOD}"Not Loading APM Bios support.${NORMAL}" 313 einfo "Not Loading APM Bios support ..."
79 eend
80 fi 314 fi
81 315
82 if [ "${ACPI}" = "yes" ]; then 316 if [ "${ACPI}" = "yes" ]
83 modprobe processor >/dev/null 2>&1 && ebegin ${GOOD} ACPI power management functions enabled.${NORMAL} && modprobe thermal >/dev/null 317 then
318 modprobe processor >/dev/null 2>&1 && \
319 ebegin "ACPI power management functions enabled" && \
320 modprobe thermal >/dev/null
84 modprobe fan >/dev/null 2>&1 321 modprobe fan >/dev/null 2>&1
85 modprobe button >/dev/null 2>&1 322 modprobe button >/dev/null 2>&1
86 modprobe battery >/dev/null 2>&1 323 modprobe battery >/dev/null 2>&1
87 modprobe ac >/dev/null 2>&1 324 modprobe ac >/dev/null 2>&1
88 [ -x /etc/init.d/acpid ] && /etc/init.d/acpid start 325 modprobe thermal >/dev/null 2>&1
326 modprobe video >/dev/null 2>&1
327 modprobe dock >/dev/null 2>&1
328 [ -x /etc/init.d/acpid ] && start_service acpid
89 eend 329 eend
330 else
331 einfo "Not Loading ACPI support ..."
90 fi 332 fi
91 333
92 if [ "${IDEDMA}" = "yes" ]; then 334 if [ "${IDEDMA}" = "yes" ]
93 [ -x /etc/init.d/hdparm ] && /etc/init.d/hdparm start 335 then
336 [ -x /etc/init.d/hdparm ] && start_service hdparm
337 else
338 ewarn "Disabling IDE DMA support ..."
94 fi 339 fi
95 340
96 if [ "${PCMCIA}" = "yes" ]; then 341 if [ "${PCMCIA}" = "yes" ]
97 ebegin ${HILITE} "PCMCIA enabled via cmdline" 342 then
98 /etc/init.d/pcmcia start 343 [ -x /etc/init.d/pcmcia ] && start_service pcmcia
344 else
345 ewarn "PCMCIA disabled via cmdline ..."
99 fi 346 fi
100 347
101 if [ "${DHCP}" = "no" ]; then 348 if [ "${DHCP}" = "no" ]
349 then
102 sed -i -e '/^ifconfig_eth.*dhcp.*/ s/^/#/' \ 350 sed -i -e '/^ifconfig_eth.*dhcp.*/ s/^/#/' \
103 -e '/^iface_eth.*dhcp.*/ s/^/#/' \ 351 -e '/^iface_eth.*dhcp.*/ s/^/#/' \
352 -e '/^config_eth.*dhcp.*/ s/^/#/' \
104 /etc/conf.d/net 353 /etc/conf.d/net
105 ebegin ${BAD}"Skipping DHCP broadcast detection as requested on boot commandline." 354 for i in `seq 0 4`
355 do
356 echo "config_eth${i}=( \"none\" )" >> /etc/conf.d/net
357 done
358 ewarn "Skipping DHCP broadcast ..."
106 fi 359 fi
107 360
108 #Read in what hwsetup has found 361 # Read in what hwsetup has found
109 [ -f /etc/sysconfig/knoppix ] && . /etc/sysconfig/knoppix 362 [ -f /etc/sysconfig/gentoo ] && source /etc/sysconfig/gentoo
110 363
111 # Mouse 364 # Mouse
112 if [ -n "${MOUSE_DEVICE}" ]; then 365 if [ -n "${MOUSE_DEVICE}" ]
366 then
113 ebegin ${GOOD}"Mouse is ${HILITE}${MOUSE_FULLNAME}${GOOD} at ${HILITE}${MOUSE_DEVICE}${NORMAL}" 367 einfo "Mouse is ${HILITE}${MOUSE_FULLNAME}${NORMAL} at ${HILITE}${MOUSE_DEVICE}${NORMAL} ..."
114 source /etc/sysconfig/mouse 368 source /etc/sysconfig/mouse
115 if [ -x /usr/sbin/gpm ]; then 369 if [ -x /usr/sbin/gpm ]
370 then
116 if [ `grep "#MOUSE=${MOUSETYPE}" /etc/conf.d/gpm` ]; then 371 if [ $(grep "#MOUSE=${MOUSETYPE}" /etc/conf.d/gpm) ]
372 then
117 sed -i "\@MOUSE=${MOUSETYPE}@s@^#@@" /etc/conf.d/gpm 373 sed -i "\@MOUSE=${MOUSETYPE}@s@^#@@" /etc/conf.d/gpm
118 else 374 else
119 echo "MOUSE=${MOUSETYPE}" >>/etc/conf.d/gpm 375 echo "MOUSE=${MOUSETYPE}" >>/etc/conf.d/gpm
120 fi 376 fi
377
121 if [ `grep "#MOUSEDEV=${DEVICE}" /etc/conf.d/gpm` ]; then 378 if [ $(grep "#MOUSEDEV=${DEVICE}" /etc/conf.d/gpm) ]
379 then
122 sed -i "\@MOUSEDEV=${DEVICE}@s@^#@@" /etc/conf.d/gpm 380 sed -i "\@MOUSEDEV=${DEVICE}@s@^#@@" /etc/conf.d/gpm
123 else 381 else
124 echo "MOUSEDEV=${DEVICE}" >>/etc/conf.d/gpm 382 echo "MOUSEDEV=${DEVICE}" >>/etc/conf.d/gpm
125 fi 383 fi
384
385 [ "${GPM}" = "yes" ] \
386 && [ -x /etc/init.d/gpm ] && start_service gpm
387 fi
388 fi
389
390 [ "${DETECT}" = "no" ] && DHCP="no"
391 [ "${DETECT}" = "yes" ] \
392 && NETDEVICES="$(awk -F: '/eth.:|tr.:|ath.:|wlan.:/{print $1}' /proc/net/dev 2>/dev/null)"
393
394 if [ -n "${NETDEVICES}" ]
395 then
396 for nics in ${NETDEVICES}
397 do
126 if [ "$GPM" = "yes" ]; then 398 if [ "${DHCP}" = "yes" ]
127 [ -x /etc/init.d/gpm ] && /etc/init.d/gpm start 399 then
400 einfo "Network device ${HILITE}${nics}${NORMAL} detected, DHCP broadcasting for IP ..."
401 if [ -f /var/run/dhcpcd-${nics}.pid ]
402 then
403 if [ -z "$(/sbin/ifconfig ${nics} | grep 'inet addr')" ]
404 then
405 kill $(cat /var/run/dhcpcd-${nics}.pid)
406 sleep 2
407 dhcpcd -n -h $(hostname) ${nics}
408 fi
409 fi
128 fi 410 fi
129 fi 411 done
130 eend 412 [ "${NFS}" = "yes" ] \
413 && [ -x /etc/init.d/nfsmount ] && start_service nfsmount
414 if [ "${SSHD}" = "yes" ]
415 then
416 # TODO: need to add a password check/warning here
417 ewarn "WARNING: You are starting sshd. You need to set a root password!"
418 [ -x /etc/init.d/sshd ] && start_service sshd
131 fi 419 fi
132
133 if [ "${HOTPLUG}" = "yes" ]; then
134 #Check whether we should be using hotplug or coldplug
135 if [ -x /etc/init.d/coldplug ]; then
136 /etc/init.d/coldplug start
137 else 420 else
138 [ -x /etc/init.d/hotplug ] && /etc/init.d/hotplug start 421 ewarn "No Network device auto detected ..."
139 fi 422 fi
140 else
141 ebegin ${BAD}"Hotplug disabled via cmdline${NORMAL}"
142 fi
143 423
144 if [ "${DETECT}" = "no" ]; then 424 if [ "${ALSA}" = "yes" ]
145 DHCP="no" 425 then
146 fi
147
148 if [ "${DETECT}" = "yes" ]; then
149 NETDEVICES="`awk -F: '/eth.:|tr.:/{print $1}' /proc/net/dev 2>/dev/null`"
150 fi
151
152 if [ -n "${NETDEVICES}" ]; then
153 if [ "${DHCP}" = "yes" ]; then
154 ebegin ${GOOD}"Network device${HILITE}${NETDEVICES}${GOOD} detected,${WARN} DHCP broadcasting for IP.${NORMAL}"
155 dhcpcd -h $(hostname) &
156 fi
157 eend
158
159 else
160 ebegin ${BAD}"No Network device auto detected.${NORMAL}"
161 fi
162
163
164 if [ -n "${SOUND_FULLNAME}" -o -n "${SOUND_DRIVER}" ]; then 426 if [ -n "${SOUND_FULLNAME}" -o -n "${SOUND_DRIVER}" ]
165 ebegin ${GOOD}"Soundcard:" 427 then
166 eend 428 local sndmsg="Soundcard:\n"
429
167 [ -n "${SOUND_FULLNAME}" ] 430 [ -n "${SOUND_FULLNAME}" ] \
168 ebegin " ${WARN}${SOUND_FULLNAME}" 431 && sndmsg="${sndmsg} ${WARN}${SOUND_FULLNAME}\n"
169 [ -n "${SOUND_DRIVER}" ] 432 [ -n "${SOUND_DRIVER}" ] \
170 ebegin ${WARN}" driver = ${SOUND_DRIVER}"${HILITE} 433 && sndmsg="${sndmsg} driver = ${SOUND_DRIVER}\n"
171 if [ -d /proc/asound/card0 ] && [ -x /usr/bin/amixer ]; then 434
172 amixer scontrols > /etc/amixer 435 einfo "${sndmsg}"
173 if [ -n "`grep Master /etc/amixer`" ] 436
437 if [ -x /etc/init.d/alsasound ]
174 then 438 then
175 amixer -q set Master 95% unmute >/dev/null 2>&1 439 start_service alsasound
176 fi 440 fi
177 if [ -n "`grep PCM /etc/amixer`" ] 441
442 if [ -e /proc/asound/cards ]
178 then 443 then
179 amixer -q set PCM 95% unmute >/dev/null 2>&1 444 for i in $(cat /proc/asound/cards | awk '{print $1}' | grep ^[[:digit:]])
445 do
446 if [ -d /proc/asound/card$i ] && [ -x /usr/bin/amixer ]
447 then
448 amixer -c $i scontrols > /etc/amixer
449 [ -n "$(grep Master /etc/amixer)" ] \
450 && amixer -c $i -q set Master 95% unmute \
451 >/dev/null 2>&1
452 [ -n "$(grep PCM /etc/amixer)" ] \
453 && amixer -c $i -q set PCM 95% unmute \
454 >/dev/null 2>&1
455 [ -n "$(grep Mic /etc/amixer)" ] \
456 && amixer -c $i -q set Mic 95% mute cap \
457 >/dev/null 2>&1
458 [ -n "$(grep Wave /etc/amixer)" ] \
459 && amixer -c $i -q set Wave 95% unmute \
460 >/dev/null 2>&1
461 [ -n "$(grep Capture /etc/amixer)" ] \
462 && amixer -c $i -q set Capture 95% unmute cap \
463 >/dev/null 2>&1
464 fi
465 done
180 fi 466 fi
181 if [ -n "`grep Mic /etc/amixer`" ] 467 fi
468 else
469 ewarn "Skipping ALSA detection as requested on command line ..."
470 fi
471
472 [ -n "${XDESC}" ] && einfo "VideoCard: ${HILITE}${XDESC}${NORMAL}"
473
474 if [ "${X11}" = "yes" ]
475 then
476 if [ -x /etc/init.d/mkxf86config ]
182 then 477 then
183 amixer -q set Mic 95% unmute cap >/dev/null 2>&1 478 start_service mkxf86config
184 fi 479 fi
185 if [ -n "`grep Wave /etc/amixer`" ] 480 if [ -x /etc/init.d/x-setup ]
186 then 481 then
187 amixer -q set Wave 95% unmute >/dev/null 2>&1 482 start_service x-setup
188 fi 483 fi
189 if [ -n "`grep Capture /etc/amixer`" ] 484 else
190 then 485 touch /etc/init.d/.noxdm
191 amixer -q set Capture 95% unmute cap >/dev/null 2>&1
192 fi
193 fi
194 fi
195
196
197 if [ -n "${XDESC}" -o -n "${XDESC}" ]; then
198 ebegin ${GOOD}"VideoCard: ${WARN} ${XDESC}"
199 eend
200 fi 486 fi
201 487
202 killall hwsetup 2>/dev/null 488 killall hwsetup 2>/dev/null
203 echo "6" > /proc/sys/kernel/printk 489 echo "6" > /proc/sys/kernel/printk
204
205} 490}
206 491
207# vim: ts=4 492# vim: ts=4

Legend:
Removed from v.49  
changed lines
  Added in v.139

  ViewVC Help
Powered by ViewVC 1.1.20