From 7978075fa644e5de43d6ea3433b40549a31fe342 Mon Sep 17 00:00:00 2001 From: Christian Heim Date: Fri, 7 Apr 2006 11:56:04 +0000 Subject: Merging r1959 svn path=/baselayout-vserver/trunk/; revision=313 --- ChangeLog | 50 ++ ChangeLog.vserver | 46 ++ bin/rc-status | 7 +- etc/conf.d/domainname | 20 - init.d/bootmisc | 6 - init.d/domainname | 63 -- init.d/hostname | 34 +- net-scripts/conf.d/net.example | 8 +- net-scripts/init.d/net.lo | 287 ++++++--- net-scripts/net.modules.d/adsl | 93 --- net-scripts/net.modules.d/adsl.sh | 93 +++ net-scripts/net.modules.d/apipa | 46 -- net-scripts/net.modules.d/apipa.sh | 46 ++ net-scripts/net.modules.d/arping | 109 ---- net-scripts/net.modules.d/arping.sh | 109 ++++ net-scripts/net.modules.d/bonding | 120 ---- net-scripts/net.modules.d/bonding.sh | 120 ++++ net-scripts/net.modules.d/bridge | 198 ------ net-scripts/net.modules.d/bridge.sh | 198 ++++++ net-scripts/net.modules.d/dhclient | 150 ----- net-scripts/net.modules.d/dhclient.sh | 150 +++++ net-scripts/net.modules.d/dhcpcd | 123 ---- net-scripts/net.modules.d/dhcpcd.sh | 123 ++++ net-scripts/net.modules.d/essidnet | 49 -- net-scripts/net.modules.d/essidnet.sh | 49 ++ net-scripts/net.modules.d/ifconfig | 453 ------------- net-scripts/net.modules.d/ifconfig.sh | 453 +++++++++++++ net-scripts/net.modules.d/ifplugd | 146 ----- net-scripts/net.modules.d/ifplugd.sh | 146 +++++ net-scripts/net.modules.d/ip6to4 | 97 --- net-scripts/net.modules.d/ip6to4.sh | 97 +++ net-scripts/net.modules.d/ipppd | 72 --- net-scripts/net.modules.d/ipppd.sh | 72 +++ net-scripts/net.modules.d/iproute2 | 392 ------------ net-scripts/net.modules.d/iproute2.sh | 392 ++++++++++++ net-scripts/net.modules.d/iptunnel | 52 -- net-scripts/net.modules.d/iptunnel.sh | 52 ++ net-scripts/net.modules.d/iwconfig | 943 ---------------------------- net-scripts/net.modules.d/iwconfig.sh | 943 ++++++++++++++++++++++++++++ net-scripts/net.modules.d/macchanger | 102 --- net-scripts/net.modules.d/macchanger.sh | 102 +++ net-scripts/net.modules.d/macnet | 43 -- net-scripts/net.modules.d/macnet.sh | 43 ++ net-scripts/net.modules.d/netplugd | 124 ---- net-scripts/net.modules.d/netplugd.sh | 124 ++++ net-scripts/net.modules.d/pppd | 279 -------- net-scripts/net.modules.d/pppd.sh | 279 ++++++++ net-scripts/net.modules.d/pump | 105 ---- net-scripts/net.modules.d/pump.sh | 105 ++++ net-scripts/net.modules.d/rename | 63 -- net-scripts/net.modules.d/rename.sh | 63 ++ net-scripts/net.modules.d/system | 155 ----- net-scripts/net.modules.d/system.sh | 155 +++++ net-scripts/net.modules.d/tuntap | 103 --- net-scripts/net.modules.d/tuntap.sh | 103 +++ net-scripts/net.modules.d/udhcpc | 117 ---- net-scripts/net.modules.d/udhcpc.sh | 117 ++++ net-scripts/net.modules.d/vlan | 154 ----- net-scripts/net.modules.d/vlan.sh | 154 +++++ net-scripts/net.modules.d/wpa_supplicant | 368 ----------- net-scripts/net.modules.d/wpa_supplicant.sh | 368 +++++++++++ sbin/functions.sh | 48 +- sbin/rc | 12 +- sbin/rc-daemon.sh | 2 +- sbin/rc-services.sh | 31 +- sbin/runscript.sh | 163 ++--- 66 files changed, 5125 insertions(+), 4964 deletions(-) delete mode 100644 etc/conf.d/domainname delete mode 100755 init.d/domainname delete mode 100644 net-scripts/net.modules.d/adsl create mode 100644 net-scripts/net.modules.d/adsl.sh delete mode 100644 net-scripts/net.modules.d/apipa create mode 100644 net-scripts/net.modules.d/apipa.sh delete mode 100644 net-scripts/net.modules.d/arping create mode 100644 net-scripts/net.modules.d/arping.sh delete mode 100644 net-scripts/net.modules.d/bonding create mode 100644 net-scripts/net.modules.d/bonding.sh delete mode 100644 net-scripts/net.modules.d/bridge create mode 100644 net-scripts/net.modules.d/bridge.sh delete mode 100644 net-scripts/net.modules.d/dhclient create mode 100644 net-scripts/net.modules.d/dhclient.sh delete mode 100644 net-scripts/net.modules.d/dhcpcd create mode 100644 net-scripts/net.modules.d/dhcpcd.sh delete mode 100644 net-scripts/net.modules.d/essidnet create mode 100644 net-scripts/net.modules.d/essidnet.sh delete mode 100644 net-scripts/net.modules.d/ifconfig create mode 100644 net-scripts/net.modules.d/ifconfig.sh delete mode 100644 net-scripts/net.modules.d/ifplugd create mode 100644 net-scripts/net.modules.d/ifplugd.sh delete mode 100644 net-scripts/net.modules.d/ip6to4 create mode 100644 net-scripts/net.modules.d/ip6to4.sh delete mode 100644 net-scripts/net.modules.d/ipppd create mode 100644 net-scripts/net.modules.d/ipppd.sh delete mode 100644 net-scripts/net.modules.d/iproute2 create mode 100644 net-scripts/net.modules.d/iproute2.sh delete mode 100644 net-scripts/net.modules.d/iptunnel create mode 100644 net-scripts/net.modules.d/iptunnel.sh delete mode 100644 net-scripts/net.modules.d/iwconfig create mode 100644 net-scripts/net.modules.d/iwconfig.sh delete mode 100644 net-scripts/net.modules.d/macchanger create mode 100644 net-scripts/net.modules.d/macchanger.sh delete mode 100644 net-scripts/net.modules.d/macnet create mode 100644 net-scripts/net.modules.d/macnet.sh delete mode 100644 net-scripts/net.modules.d/netplugd create mode 100644 net-scripts/net.modules.d/netplugd.sh delete mode 100644 net-scripts/net.modules.d/pppd create mode 100644 net-scripts/net.modules.d/pppd.sh delete mode 100644 net-scripts/net.modules.d/pump create mode 100644 net-scripts/net.modules.d/pump.sh delete mode 100644 net-scripts/net.modules.d/rename create mode 100644 net-scripts/net.modules.d/rename.sh delete mode 100644 net-scripts/net.modules.d/system create mode 100644 net-scripts/net.modules.d/system.sh delete mode 100644 net-scripts/net.modules.d/tuntap create mode 100644 net-scripts/net.modules.d/tuntap.sh delete mode 100644 net-scripts/net.modules.d/udhcpc create mode 100644 net-scripts/net.modules.d/udhcpc.sh delete mode 100644 net-scripts/net.modules.d/vlan create mode 100644 net-scripts/net.modules.d/vlan.sh delete mode 100644 net-scripts/net.modules.d/wpa_supplicant create mode 100644 net-scripts/net.modules.d/wpa_supplicant.sh diff --git a/ChangeLog b/ChangeLog index 7c6a153..261af73 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,56 @@ Give a better error message when no valid DHCP client is installed. + 05 Apr 2006; Roy Marples : + + runscript.sh now stores the fact that it failed to to /dev/.rcsysinit + existing in the directory /dev/.rcafterinit. rc adds services in + /dev/.rcafterinit to the boot list and then rm -f's that directory. This + solves the issue of udev-089 forcing coldplug removal. + + 03 Apr 2006; Roy Marples : + + rc-status doesn't report broken symlinks when querying all levels, + #113755 again. + + All net modules how have a .sh suffix to indicate that they are shell + scripts as not everyone uses vim. + + runscript.sh now has a --nodeps option so that no depends are checked + when starting and stopping a service. + + net.lo and system modules now support resolvconf instead of using our + own internal system. + + DHCP and PPP clients no longer have helper scripts. As such they don't + change service status at all. Moved helpers.d/functions back into net.lo + + Moved {get,save}_options from functions.sh to rc-services.sh + + Removed whole load of crud from hostname init script, fixes #38172 again + and #122794. Also, it's no longer a critical service as defined by rc. + + Added net modules for ccwgroup (s390 qeth ethernet) and br2684ctl + (speedtouch usb). + + Removed xargs and find from all net scripts as /usr maybe net mounted, + #107260. + + Punted the domainname script. Functionality has been in conf.d/net so you + can do this. + dns_domain_lo="foo" + nis_domain_lo="bar" + + ppd module now checks to see if link exists if prefixed with /, #126916. + + 28 Mar 2006; Mike Frysinger : + + Make sure rc-status exit status is 0 #127733 by Timo Boettcher. + + 23 Mar 2006; Mike Frysinger : + + Disable hwclock script on s390 hosts. + 14 Mar 2006; Roy Marples : Allow services that depend on net to be stopped/started in post diff --git a/ChangeLog.vserver b/ChangeLog.vserver index 3e65375..439b064 100644 --- a/ChangeLog.vserver +++ b/ChangeLog.vserver @@ -1,6 +1,52 @@ # ChangeLog for Gentoo System Intialization ("rc") scripts # Copyright 1999-2006 Gentoo Foundation; Distributed under the GPLv2 + 06 Apr 2006; Christian Heim : + Merging latest changes to the baselayout/trunk changes. This merge is based + upon revision 1959. + + ChangeLog | 50 + ChangeLog.vserver | 46 + bin/rc-status | 7 + etc/conf.d/domainname | 20 + init.d/bootmisc | 6 + init.d/domainname | 63 - + init.d/hostname | 34 + net-scripts/conf.d/net.example | 8 + net-scripts/init.d/net.lo | 287 +++-- + net-scripts/net.modules.d/adsl | 93 - + net-scripts/net.modules.d/apipa | 46 + net-scripts/net.modules.d/arping | 109 -- + net-scripts/net.modules.d/bonding | 120 -- + net-scripts/net.modules.d/bridge | 198 --- + net-scripts/net.modules.d/dhclient | 150 -- + net-scripts/net.modules.d/dhcpcd | 123 -- + net-scripts/net.modules.d/essidnet | 49 + net-scripts/net.modules.d/ifconfig | 453 -------- + net-scripts/net.modules.d/ifplugd | 146 -- + net-scripts/net.modules.d/ip6to4 | 97 - + net-scripts/net.modules.d/ipppd | 72 - + net-scripts/net.modules.d/iproute2 | 392 ------- + net-scripts/net.modules.d/iptunnel | 52 + net-scripts/net.modules.d/iwconfig | 943 ------------------ + net-scripts/net.modules.d/macchanger | 102 - + net-scripts/net.modules.d/macnet | 43 + net-scripts/net.modules.d/netplugd | 124 -- + net-scripts/net.modules.d/pppd | 279 ----- + net-scripts/net.modules.d/pump | 105 -- + net-scripts/net.modules.d/rename | 63 - + net-scripts/net.modules.d/system | 155 -- + net-scripts/net.modules.d/tuntap | 103 - + net-scripts/net.modules.d/udhcpc | 117 -- + net-scripts/net.modules.d/vlan | 154 -- + net-scripts/net.modules.d/wpa_supplicant | 368 ------- + sbin/functions.sh | 48 + sbin/rc | 12 + sbin/rc-daemon.sh | 2 + sbin/rc-services.sh | 31 + sbin/runscript.sh | 163 +-- + 40 files changed, 469 insertions(+), 4964 deletions(-) + 17 Mar 2006; Christian Heim : Merging latest changes to the baselayout/trunk changes. This merge is based upon revision 1948. diff --git a/bin/rc-status b/bin/rc-status index 4f6a29a..64b7807 100755 --- a/bin/rc-status +++ b/bin/rc-status @@ -208,7 +208,7 @@ for level in ${runlevelidxs} ; do echo "Runlevel: ${HILITE}${level}${NORMAL}" for service in ${runlevels[${arridx}]} ; do if [[ ! -e "${runleveldir}/${level}/${service}" \ - && ${level} != "UNASSIGNED" \ + && ${level} != "UNASSIGNED" && ${level} != "all" \ ]] && [[ ${level} != "${BOOTLEVEL}" \ || " ${boot_crit} " != *" ${service} "* ]]; then print_msg "${service}" "${BAD}" 'broken ' @@ -226,11 +226,14 @@ for level in ${runlevelidxs} ; do fi done let "arridx += 1" - [ -n "${UNUSED}" ] && exit 0 + [ -n "${UNUSED}" ] && break done if [[ -n ${broken} ]]; then eerror "You have some broken symbolic links as reported by the broken" eerror "status above. This can be fixed by removing the broken service" eerror "from its runlevel and re-adding it back using rc-update." + exit 1 +else + exit 0 fi diff --git a/etc/conf.d/domainname b/etc/conf.d/domainname deleted file mode 100644 index 3a32173..0000000 --- a/etc/conf.d/domainname +++ /dev/null @@ -1,20 +0,0 @@ -# /etc/conf.d/domainname - -# When setting up resolv.conf, what should take precedence? -# 0 = let dhcp/whatever override DNSDOMAIN -# 1 = override dhcp/whatever with DNSDOMAIN - -OVERRIDE=1 - -# To have a proper FQDN, you need to setup /etc/hosts and /etc/resolv.conf -# (domain entry in /etc/resolv.conf and FQDN in /etc/hosts). -# -# DNSDOMAIN merely sets the domain entry in /etc/resolv.conf, see -# the resolv.conf(5) manpage for more info. - -DNSDOMAIN="" - -# For information on setting up NIS, please see: -# http://www.linux-nis.org/nis-howto/HOWTO/ - -NISDOMAIN="" diff --git a/init.d/bootmisc b/init.d/bootmisc index 2350b0c..610a4af 100755 --- a/init.d/bootmisc +++ b/init.d/bootmisc @@ -34,12 +34,6 @@ start() { # Take care of random stuff [ /var/lock | /var/run | pam ] # - if [[ -d /var/lib/net-scripts/state ]] ; then - ebegin $"Cleaning" /var/lib/net-scripts/state - rm -rf /var/lib/net-scripts/state/* - eend 0 - fi - ebegin $"Cleaning" /var/lock, /var/run rm -rf /var/run/console.lock /var/run/console/* diff --git a/init.d/domainname b/init.d/domainname deleted file mode 100755 index f7ed8f9..0000000 --- a/init.d/domainname +++ /dev/null @@ -1,63 +0,0 @@ -#!/sbin/runscript -# Copyright 1999-2006 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 - -depend() { - need hostname - before bootmisc -} - -checkconfig_nis() { - if [[ -f /etc/nisdomainname ]] ; then - ewarn $"You should stop using /etc/nisdomainname and use /etc/conf.d/domainname" - export NISDOMAIN=$( /dev/null ; then - ewarn $"Unable to set domain in resolv.conf (ro root?)" - return 1 - else - return 0 - fi -} - -start() { - # Ensure that we have a hostname binary or function - source /lib/rcscripts/net.modules.d/helpers.d/functions - - local retval=0 - local retval2=0 - - if checkconfig_nis ; then - ebegin $"Setting NIS domainname to" ${NISDOMAIN} - hostname -y "${NISDOMAIN}" - retval=$? - eend ${retval} $"Failed to set the NIS domainname" - fi - - if checkconfig_dns ; then - ebegin $"Setting DNS domainname to" ${DNSDOMAIN} - resolv=$(grep -v '^[[:space:]]*domain' /etc/resolv.conf) - [[ ${OVERRIDE} == "1" ]] \ - && resolv="${resolv}"$'\n'"domain ${DNSDOMAIN}" \ - || resolv="domain ${DNSDOMAIN}"$'\n'"${resolv}" - echo "${resolv}" > /etc/resolv.conf - retval2=$? - eend ${retval2} $"Failed to set the DNS domainname" - fi - - return $((retval + retval2)) -} - - -# vim:ts=4 diff --git a/init.d/hostname b/init.d/hostname index c890b89..0a9ec3a 100755 --- a/init.d/hostname +++ b/init.d/hostname @@ -3,36 +3,14 @@ # Distributed under the terms of the GNU General Public License v2 start() { - # Ensure that we have a hostname binary or function - source /lib/rcscripts/net.modules.d/helpers.d/functions - - local myhost=$(hostname 2>/dev/null) - local retval=0 - - # If the hostname is already set via the kernel, and /etc/hostname - # isn't setup, then we shouldn't go reseting the configuration #38172. - if [[ -z ${myhost} ]] || [[ ${myhost} == "(none)" ]] ; then - myhost="localhost" - fi - if [[ -f /etc/hostname ]] ; then - ewarn $"You should stop using /etc/hostname and use /etc/conf.d/hostname" - myhost=$(/dev/null > /etc/env.d/01hostname + ewarn "You should stop using /etc/hostname and use /etc/conf.d/hostname" + HOSTNAME="$(< /etc/hostname)" fi - return ${retval} + ebegin "Setting hostname to ${HOSTNAME}" + hostname "${HOSTNAME}" + eend $? "Failed to set the hostname" } -# vim:ts=4 +# vim: ts=4 : diff --git a/net-scripts/conf.d/net.example b/net-scripts/conf.d/net.example index f77c38f..5f6feaa 100644 --- a/net-scripts/conf.d/net.example +++ b/net-scripts/conf.d/net.example @@ -494,9 +494,15 @@ # TUN/TAP # For TUN/TAP support emerge net-misc/openvpn or sys-apps/usermode-utilities # -# NOTE: The interface name must be either tun or tap followed by a number +# You must specify if we're a tun or tap device. Then you can give it any +# name you like - such as vpn +#tuntap_vpn="tun" #config_tun1=( "192.168.0.1/24") +# Or stick wit the generic names - like tap0 +#tuntap_tap0="tap" +#config_tap0=( "192.168.0.1/24") + # For passing custom options to tunctl use something like the following. This # example sets the owner to adm #tunctl_tun1="-u adm" diff --git a/net-scripts/init.d/net.lo b/net-scripts/init.d/net.lo index f73dfac..4734a59 100755 --- a/net-scripts/init.d/net.lo +++ b/net-scripts/init.d/net.lo @@ -12,6 +12,7 @@ # runlevel as the net.* script that needs it. depend() { need localmount + after hostname use isapnp isdn pcmcia usb wlan # Load any custom depend functions for the given interface @@ -25,9 +26,6 @@ depend() { # Define where our modules are MODULES_DIR="${svclib}/net.modules.d" -# Load some functions shared between ourselves and our DHCP helpers -source "${MODULES_DIR}/helpers.d/functions" - # Make some wrappers to fudge after/before/need/use depend flags. # These are callbacks so MODULE will be set. after() { @@ -54,11 +52,176 @@ variables() { eval "${MODULE}_variables() { echo \"$*\"; }" } +is_loopback() { + [[ $1 == "lo" || $1 == "lo"[0-9]* ]] +} + +# char* interface_device(char *iface) +# +# Gets the base device of the interface +# Can handle eth0:1 and eth0.1 +# Which returns eth0 in this case +interface_device() { + local dev="${1%%.*}" + [[ ${dev} == "$1" ]] && dev="${1%%:*}" + echo "${dev}" +} + +# char* interface_type(char* iface) +# +# Returns the base type of the interface +# eth, ippp, etc +interface_type() { + echo "${1%%[0-9]*}" +} + +# int calculate_metric(char *interface) +# +# Calculates the best metric for the interface +# The Linux kernel does not use this at the moment, but we use it so that +# default routes remain and we can work out the "best" interface +calculate_metric() { + local iface="$1" exclude='$1!="Iface" && $1!="lo"' + + # Have we already got a metric? + local m="$( awk '$1=="'${iface}'" && $2=="00000000" { print $7 }' \ + /proc/net/route )" + if [[ -n ${m} ]] ; then + echo "${m}" + return 0 + fi + + local itype="$(interface_type "${iface}")" x i + + # If we're not a wireless device then exclude wireless from the + # routing table so we stay < 1000 + if [[ -e /proc/net/wireless ]] ; then + if ! grep -q "^[ \t]*${iface}:[ \t]" /proc/net/wireless ; then + local i="$(sed -n -e 's/^[ \t]*\(.*\):.*/\1/p' /proc/net/wireless)" + for x in ${i} ; do + exclude="${exclude} && "'$1'"!=\"${x}\"" + done + fi + fi + + # Exclude ppp and ippp as well + local ix="ppp|ippp" + [[ ${itype} == "ppp" ]] && ix="ippp" + [[ ${itype} == "ippp" ]] && ix="ppp" + i="$( sed -n -e 's/^[ ]*\('"${ix}"'[0-9]*\):.*$/\1/p' /proc/net/dev )" + for x in ${i} ; do + exclude="${exclude} && "'$1'"!=\"${x}\"" + done + + local m="$( awk "${exclude} { print "'$7'" }" /proc/net/route \ + | sort -rn | head -n 1 | cut -d' ' -f2 )" + m="${m:--1}" + (( m ++ )) + + # If we're a wireless device then add 1000 so that wired interfaces take preference + if [[ -e /proc/net/wireless ]] ; then + grep -q "^[ \t]*${iface}:[ \t]" /proc/net/wireless && (( m+= 1000 )) + fi + + # If we're a ppp device then we add 2000 for ISDN, otherwise 3000 + [[ ${itype} == "ippp" ]] && (( m+= 2000 )) + [[ ${itype} == "ppp" ]] && (( m+= 3000 )) + + echo "${m}" +} + +# int netmask2cidr(char *netmask) +# +# Returns the CIDR of a given netmask +netmask2cidr() { + local binary="" i bin + + for i in ${1//./ }; do + bin="" + while [[ ${i} != "0" ]] ; do + bin=$[${i}%2]${bin} + (( i=i>>1 )) + done + binary="${binary}${bin}" + done + binary="${binary%%0*}" + echo "${#binary}" +} + + +# bool is_function(char* name) +# +# Returns 0 if the given name is a shell function, otherwise 1 +is_function() { + [[ -z $1 ]] && return 1 + [[ $(type -t "$1") == "function" ]] +} + +# void function_wrap(char* source, char* target) +# +# wraps function calls - for example function_wrap(this, that) +# maps function names this_* to that_* +function_wrap() { + local i + + is_function "${2}_depend" && return + + for i in $( typeset -f | grep -o '^'"${1}"'_[^ ]*' ); do + eval "${2}${i#${1}}() { ${i} \"\$@\"; }" + done +} + +# char[] * expand_parameters(char *cmd) +# +# Returns an array after expanding parameters. For example +# "192.168.{1..3}.{1..3}/24 brd +" +# will return +# "192.168.1.1/24 brd +" +# "192.168.1.2/24 brd +" +# "192.168.1.3/24 brd +" +# "192.168.2.1/24 brd +" +# "192.168.2.2/24 brd +" +# "192.168.2.3/24 brd +" +# "192.168.3.1/24 brd +" +# "192.168.3.2/24 brd +" +# "192.168.3.3/24 brd +" +expand_parameters() { + local x="$( eval echo ${@// /_} )" + local -a a=( ${x} ) + + a=( "${a[@]/#/\"}" ) + a=( "${a[@]/%/\"}" ) + echo "${a[*]//_/ }" +} + +# void configure_variables(char *interface, char *option1, [char *option2]) +# +# Maps configuration options from _