#!/sbin/runscript # This script is used by Gentoo release media to start certain services and to # ensure a sane setup for a CD-based boot. ACPI="no" ALSA="yes" APM="no" DETECT="yes" DHCP="yes" GPM="yes" HOTPLUG="yes" IDEDMA="yes" NFS="yes" PCMCIA="yes" SSHD="no" X11="yes" get_config() { CMDLINE="$(cat /proc/cmdline)" for x in ${CMDLINE} ; do case "${x}" in nodetect) ACPI="no" ALSA="no" APM="no" DETECT="no" GPM="no" HOTPLUG="no" NFS="no" X11="no" ;; nodhcp) DHCP="no" ;; nogpm) GPM="no" ;; nohotplug) HOTPLUG="no" ;; nonfs) NFS="no" ;; nosound) ALSA="no" ;; nox) X11="no" ;; ide\=nodma) IDEDMA="no" ;; doapm) ACPI="no" APM="yes" ;; acpi\=on|acpi\=force) ACPI="yes" APM="no" ;; dopcmcia) PCMCIA="yes" ;; dosshd) SSHD="yes" ;; esac done } depend() { need modules before net # provide gpm pcmcia apmd acpid coldplug hdparm alsasound mkxf86config x-setup } # Checks whether a service will be started by autoconfig. # Usage: check_svc var service [service_alternative] check_svc() { if [ "${1}" = "yes" ] then if [ -x "/etc/init.d/${2}" ] then echo "${2}" elif [ -n "${3}" -a -x "/etc/init.d/${3}" ] then echo "${3}" fi fi } # Prints an ordered list of services that will be started by autoconfig. list_services() { get_config local svcs="$(check_svc ${APM} apmd)" svcs="${svcs} $(check_svc ${ACPI} acpid)" svcs="${svcs} $(check_svc ${IDEDMA} hdparm)" svcs="${svcs} $(check_svc ${PCMCIA} pcmcia)" svcs="${svcs} $(check_svc ${GPM} gpm)" svcs="${svcs} $(check_svc ${HOTPLUG} coldplug hotplug)" svcs="${svcs} $(check_svc ${ALSA} alsasound)" svcs="${svcs} $(check_svc ${NFS} nfsmount)" svcs="${svcs} $(check_svc ${SSH} sshd)" svcs="${svcs} $(check_svc ${X11} mkxf86config x-setup)" echo ${svcs} } unpack_firmware() { # This unpacks any firmware tarballs. if [ -e /lib/firmware.tar.bz2 ] then ebegin "Unpacking hotplug firmware" tar xjf /lib/firmware.tar.bz2 -C /lib/firmware eend 0 fi } get_info() { local tmp if [ ! -z "${1}" -a ! -z "${2}" ] then tmp=$(grep "^$1[[:space:]]\+:" /proc/cpuinfo | head -n 1 | cut -d" " -f3-) eval "${2}='${tmp}'" fi } detect_mips() { get_info "cpu model" cpuinfo get_info "system type" machinfo cpuinfo="${cpuinfo%% FPU*}" case "${machinfo}" in "SGI Indigo2") case "${cpuinfo}" in R4*) machinfo="SGI Indigo2" # I2 R4x00 ;; R8*) machinfo="SGI Indigo2 Power" # I2 R8000 ;; R10*) machinfo="SGI Indigo2 Impact" # I2 R10000 ;; esac ;; esac PC="Detected an ${machinfo} w/ ${numcpu} ${cpuinfo} CPU(s)" } detect_x86_amd64_ia64() { if [ "${1}" = "ia64" ] then get_info "family" cpuinfo else get_info "model name" cpuinfo fi get_info "cpu MHz" mhz mhz="${mhz%%.*}MHz" PC="Detected ${numcpu} ${cpuinfo} CPU(s) @ ${mhz}" } detect_alpha() { get_info "platform string" machinfo get_info "cpu" cpuinfo1 get_info "cpu model" cpuinfo2 get_info "cpus detected" numcpu PC="Detected ${numcpu} ${cpuinfo1} ${cpuinfo2} CPU(s) in a ${machinfo} system" } detect_ppc() { get_info "cpu" cpuinfo get_info "clock" mhz get_info "detected as" machinfo machinfo="${machinfo##*\(}" machinfo="${machinfo%%\)*}" local machtype="" case "${machinfo}" in "CHRP Pegasos2") machtype="Pegasos 2" ;; "CHRP IBM,9124-720") machtype="IBM OP720" ;; "iBook 2 rev. 2") machtype="Apple iBook G3" ;; "iMac G5"*) machtype="Apple iMac G5" ;; "MPC8241") machtype="Kurobox" ;; "PowerMac G5") machtype="Apple PowerMac G5" ;; "PowerMac G5 Dual Core") machtype="Apple PowerMac G5 Dual Core" ;; "PowerMac G4 AGP Graphics") machtype="Apple PowerMac G4" ;; "PowerBook Titanium"|'PowerBook G4 15"') machtype="Apple Powerbook G4" ;; "Unknown Intrepid-based") machtype="Apple Mac-Mini" ;; *) machtype="Unknown PPC System" ;; esac PC="Detected a(n) ${machtype} w/ ${numcpu} ${cpuinfo} CPU(s)" } detect_sparc() { get_info "cpu" cpuinfo get_info "ncpus active" numcpu get_info "ncpus probed" numprobed PC="Detected ${numcpu} active ${cpuinfo} CPU(s) of ${numprobed} total" } start() { echo "0" > /proc/sys/kernel/printk get_config # First off, we want hotplug/coldplug enabled, so let's re-enable it. # We do this even if we aren't starting up the hotplug/coldplug # services for the installer. sed -i 's/RC_COLDPLUG="no"/RC_COLDPLUG="yes"/' /etc/conf.d/rc # Now, we check if we're supposed to run a coldplug script. if [ "${HOTPLUG}" = "yes" ] then # Check whether we should be using hotplug/coldplug or whether we should # just let udev do it all. if [ -x /etc/init.d/coldplug ] then start_service coldplug elif [ -x /etc/init.d/hotplug ] then start_service hotplug else unpack_firmware [ -x /sbin/udevtrigger ] && /sbin/udevtrigger fi else ewarn "Hotplug/Coldplug disabled via cmdline ..." fi if [ "${DETECT}" = "yes" ] then ebegin "Hardware detection started" local numcpu="$(grep -c '^processor[[:space:]]\+:' /proc/cpuinfo)" local arch="$(uname -m)" case ${arch} in mips*) detect_mips ACPI="no" APM="no" IDEDMA="no" ;; i?86|x86_64) detect_x86_amd64_ia64 ;; alpha) detect_alpha ACPI="no" APM="no" ;; sparc*) detect_sparc ACPI="no" APM="no" ;; powerpc*) detect_ppc ACPI="no" APM="no" ;; ia64) detect_x86_amd64_ia64 "ia64" APM="no" ;; *) PC= ;; esac [ -n "${PC}" ] && einfo "${PC}" [ -x /usr/sbin/hwsetup ] && hwsetup eend else ewarn "Hardware detection disabled via cmdline ..." fi if [ "${APM}" = "yes" ] then modprobe apm power_off=1 >/dev/null 2>&1 && \ einfo "APM BIOS found, power management functions enabled ..." [ -x /etc/init.d/apmd ] && start_service apmd else einfo "Not Loading APM Bios support ..." fi if [ "${ACPI}" = "yes" ] then modprobe processor >/dev/null 2>&1 && \ ebegin "ACPI power management functions enabled" && \ modprobe thermal >/dev/null modprobe fan >/dev/null 2>&1 modprobe button >/dev/null 2>&1 modprobe battery >/dev/null 2>&1 modprobe ac >/dev/null 2>&1 modprobe thermal >/dev/null 2>&1 modprobe video >/dev/null 2>&1 modprobe dock >/dev/null 2>&1 [ -x /etc/init.d/acpid ] && start_service acpid eend else einfo "Not Loading ACPI support ..." fi if [ "${IDEDMA}" = "yes" ] then [ -x /etc/init.d/hdparm ] && start_service hdparm else ewarn "Disabling IDE DMA support ..." fi if [ "${PCMCIA}" = "yes" ] then [ -x /etc/init.d/pcmcia ] && start_service pcmcia else ewarn "PCMCIA disabled via cmdline ..." fi if [ "${DHCP}" = "no" ] then sed -i -e '/^ifconfig_eth.*dhcp.*/ s/^/#/' \ -e '/^iface_eth.*dhcp.*/ s/^/#/' \ -e '/^config_eth.*dhcp.*/ s/^/#/' \ /etc/conf.d/net for i in `seq 0 4` do echo "config_eth${i}=( \"none\" )" >> /etc/conf.d/net done ewarn "Skipping DHCP broadcast ..." fi # Read in what hwsetup has found [ -f /etc/sysconfig/gentoo ] && source /etc/sysconfig/gentoo # Mouse if [ -n "${MOUSE_DEVICE}" ] then einfo "Mouse is ${HILITE}${MOUSE_FULLNAME}${NORMAL} at ${HILITE}${MOUSE_DEVICE}${NORMAL} ..." source /etc/sysconfig/mouse if [ -x /usr/sbin/gpm ] then if [ $(grep "#MOUSE=${MOUSETYPE}" /etc/conf.d/gpm) ] then sed -i "\@MOUSE=${MOUSETYPE}@s@^#@@" /etc/conf.d/gpm else echo "MOUSE=${MOUSETYPE}" >>/etc/conf.d/gpm fi if [ $(grep "#MOUSEDEV=${DEVICE}" /etc/conf.d/gpm) ] then sed -i "\@MOUSEDEV=${DEVICE}@s@^#@@" /etc/conf.d/gpm else echo "MOUSEDEV=${DEVICE}" >>/etc/conf.d/gpm fi [ "${GPM}" = "yes" ] \ && [ -x /etc/init.d/gpm ] && start_service gpm fi fi [ "${DETECT}" = "no" ] && DHCP="no" [ "${DETECT}" = "yes" ] \ && NETDEVICES="$(awk -F: '/eth.:|tr.:|ath.:|wlan.:/{print $1}' /proc/net/dev 2>/dev/null)" if [ -n "${NETDEVICES}" ] then for nics in ${NETDEVICES} do if [ "${DHCP}" = "yes" ] then einfo "Network device ${HILITE}${nics}${NORMAL} detected, DHCP broadcasting for IP ..." if [ -f /var/run/dhcpcd-${nics}.pid ] then if [ -z "$(/sbin/ifconfig ${nics} | grep 'inet addr')" ] then kill $(cat /var/run/dhcpcd-${nics}.pid) sleep 2 dhcpcd -n -h $(hostname) ${nics} fi fi fi done [ "${NFS}" = "yes" ] \ && [ -x /etc/init.d/nfsmount ] && start_service nfsmount if [ "${SSHD}" = "yes" ] then # TODO: need to add a password check/warning here ewarn "WARNING: You are starting sshd. You need to set a root password!" [ -x /etc/init.d/sshd ] && start_service sshd fi else ewarn "No Network device auto detected ..." fi if [ "${ALSA}" = "yes" ] then if [ -n "${SOUND_FULLNAME}" -o -n "${SOUND_DRIVER}" ] then local sndmsg="Soundcard:\n" [ -n "${SOUND_FULLNAME}" ] \ && sndmsg="${sndmsg} ${WARN}${SOUND_FULLNAME}\n" [ -n "${SOUND_DRIVER}" ] \ && sndmsg="${sndmsg} driver = ${SOUND_DRIVER}\n" einfo "${sndmsg}" if [ -x /etc/init.d/alsasound ] then start_service alsasound fi if [ -e /proc/asound/cards ] then for i in $(cat /proc/asound/cards | awk '{print $1}' | grep ^[[:digit:]]) do if [ -d /proc/asound/card$i ] && [ -x /usr/bin/amixer ] then amixer -c $i scontrols > /etc/amixer [ -n "$(grep Master /etc/amixer)" ] \ && amixer -c $i -q set Master 95% unmute \ >/dev/null 2>&1 [ -n "$(grep PCM /etc/amixer)" ] \ && amixer -c $i -q set PCM 95% unmute \ >/dev/null 2>&1 [ -n "$(grep Mic /etc/amixer)" ] \ && amixer -c $i -q set Mic 95% mute cap \ >/dev/null 2>&1 [ -n "$(grep Wave /etc/amixer)" ] \ && amixer -c $i -q set Wave 95% unmute \ >/dev/null 2>&1 [ -n "$(grep Capture /etc/amixer)" ] \ && amixer -c $i -q set Capture 95% unmute cap \ >/dev/null 2>&1 fi done fi fi else ewarn "Skipping ALSA detection as requested on command line ..." fi [ -n "${XDESC}" ] && einfo "VideoCard: ${HILITE}${XDESC}${NORMAL}" if [ "${X11}" = "yes" ] then if [ -x /etc/init.d/mkxf86config ] then start_service mkxf86config fi if [ -x /etc/init.d/x-setup ] then start_service x-setup fi else touch /etc/init.d/.noxdm fi killall hwsetup 2>/dev/null echo "6" > /proc/sys/kernel/printk } # vim: ts=4