#! /bin/bash
#
# network Bring up/down networking
#
# chkconfig: 2345 10 90
# description: Activates/Deactivates all network interfaces configured to \
# start at boot time.
# probe: false
#
### BEGIN INIT INFO
# Provides: network
# Should-Start: harddrake irda resolvconf slmodemd messagebus
# Should-Stop: irda slmodemd messagebus
# Default-Start: 2 3 4 5
# Short-Description: Bring up/down networking
# Description: Activates/Deactivates all network interfaces configured to
# start at boot time.
### END INIT INFO
# Source function library.
. /etc/init.d/functions
if [ ! -f /etc/sysconfig/network ]; then
echo "NETWORKING=no" > /etc/sysconfig/network
exit 0
fi
. /etc/sysconfig/network
if [ -f /etc/sysconfig/pcmcia ]; then
. /etc/sysconfig/pcmcia
fi
# Check that networking is up.
[ "${NETWORKING}" = "no" ] && exit 0
# if the ip configuration utility isn't around we can't function.
[ -x /sbin/ip ] || exit 1
# Even if IPX is configured, without the utilities we can't do much
[ ! -x /sbin/ipx_internal_net -o ! -x /sbin/ipx_configure ] && IPX=
# Even if VLAN is configured, without the utility we can't do much
[ ! -x /sbin/vconfig ] && VLAN=
# If IPv6 is explicitly configured, make sure it's available.
if [ -n "$NETWORKING_IPV6" ]; then
alias=`modprobe -c | awk '/^alias net-pf-10 / { print $3; exit }'`
if [ "$NETWORKING_IPV6" = "yes" ]; then
new_alias=ipv6
fi
if [ "$NETWORKING_IPV6" = "no" ]; then
new_alias=off
fi
if [ -n "$new_alias" ]; then
if [ "$alias" != "$new_alias" -a ! -f /proc/net/if_inet6 ]; then
case "$(modprobe -V 2>/dev/null)" in
modprobe* )
echo "alias net-pf-10 $new_alias" >> /etc/modules.conf
;;
module-init-tools* )
echo "alias net-pf-10 $new_alias" >> /etc/modprobe.conf
;;
esac
fi
fi
fi
CWD=`pwd`
cd /etc/sysconfig/network-scripts
. ./network-functions
# find all the interfaces besides loopback.
# ignore aliases, alternative configurations, and editor backup files
interfaces=$(ls ifcfg* | \
LANG=C sed -e "$__sed_discard_ignored_files" \
-e '/\(ifcfg-lo\|:\|ifcfg-.*-range\)/d' \
-e '/ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \
LANG=C sort -k 1,1 -k 2n | \
LANG=C sed 's/ //')
# See how we were called.
case "$1" in
start)
# IPv6 hook (pre IPv4 start)
if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then
/etc/sysconfig/network-scripts/init.ipv6-global start pre
fi
sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1
if [ -r /etc/ethers -a -x /sbin/arp ]; then
action "Storing ARP mapping" /sbin/arp -f /etc/ethers
fi
# bring up loopback interface
action "Bringing up loopback interface: " ./ifup ifcfg-lo
case "$IPX" in
yes|true)
/sbin/ipx_configure --auto_primary=$IPXAUTOPRIMARY \
--auto_interface=$IPXAUTOFRAME
if [ "$IPXINTERNALNETNUM" != "0" ]; then
/sbin/ipx_internal_net add $IPXINTERNALNETNUM $IPXINTERNALNODENUM
fi
;;
esac
# depreciated but we still use it.
if [ -f /proc/sys/net/ipv4/ip_forward ] && [[ "$FORWARD_IPV4" = "yes" || "$FORWARD_IPV4" = "true" ]];
then
action "Enabling IPv4 packet forwarding" sysctl -w net.ipv4.ip_forward=1
fi
case "$VLAN" in
yes)
if [ -d /proc/net/vlan ] || modprobe 8021q >/dev/null 2>&1 ; then
test -z "$VLAN_NAME_TYPE" && VLAN_NAME_TYPE=DEV_PLUS_VID_NO_PAD
action "Setting 802.1Q VLAN parameters: " /sbin/vconfig set_name_type "$VLAN_NAME_TYPE"
else
gprintf "No 802.1Q VLAN support available in kernel.\n"
fi
;;
esac
vlaninterfaces=""
cipeinterfaces=""
xdslinterfaces=""
bridgeinterfaces=""
# bring up all other interfaces configured to come up at boot time
for i in $interfaces; do
unset DEVICE TYPE SLAVE
eval $(LANG=C fgrep "DEVICE=" ifcfg-$i)
eval $(LANG=C fgrep "TYPE=" ifcfg-$i)
eval $(LANG=C fgrep "SLAVE=" ifcfg-$i)
if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi
if [ "${DEVICE##cipcb}" != "$DEVICE" ] ; then
cipeinterfaces="$cipeinterfaces $i"
continue
fi
if [ "$TYPE" = "xDSL" -o "$TYPE" = "ADSL" ]; then
xdslinterfaces="$xdslinterfaces $i"
continue
fi
if [ "$TYPE" = "Bridge" ]; then
bridgeinterfaces="$bridgeinterfaces $i"
continue
fi
if [ "${DEVICE%%.*}" != "$DEVICE" -o "${DEVICE##vlan}" != "$DEVICE" ] ; then
vlaninterfaces="$vlaninterfaces $i"
continue
fi
if [ "$SLAVE" = "yes" ]; then
continue
fi
if LANG=C egrep -q "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i; then
continue
fi
# If we're in confirmation mode, get user confirmation.
[ -f /var/run/confirm ] &&
{
confirm $i
case $? in
0)
:
;;
2)
CONFIRM=
;;
*)
continue
;;
esac
}
action "Bringing up interface %s: " $i ./ifup $DEVICE boot
done
# Bring up xDSL and CIPE interfaces
for i in $vlaninterfaces $bridgeinterfaces $xdslinterfaces $cipeinterfaces ; do
if ! LANG=C egrep -q "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i; then
# If we're in confirmation mode, get user confirmation.
if [ -f /var/run/confirm ]; then
confirm $i
test $? = 1 && continue
fi
action "Bringing up interface %s: " $i ./ifup $i boot
fi
done
# Add non interface-specific static-routes.
if [ -f /etc/sysconfig/static-routes ]; then
grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do
/sbin/route add -$args
done
fi
# IPv6 hook (post IPv4 start)
if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then
/etc/sysconfig/network-scripts/init.ipv6-global start post
fi
touch /var/lock/subsys/network
;;
stop)
# Don't shut the network down if root is on NFS or a network
# block device.
rootfs=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $3; }}' /etc/mtab)
rootopts=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $4; }}' /etc/mtab)
if [[ "$rootfs" =~ ^nfs ]] || [[ "$rootopts" =~ "_netdev" ]] ; then
exit 1
fi
# If this is a final shutdown/halt, check for network FS,
# and unmount them even if the user didn't turn on netfs
if [ "$RUNLEVEL" = "6" -o "$RUNLEVEL" = "0" -o "$RUNLEVEL" = "1" ]; then
NFSMTAB=`LC_ALL=C awk '$3 ~ /^nfs/ { print $2 }' /proc/mounts`
SMBMTAB=`LC_ALL=C awk '$3 == "smbfs" { print $2 }' /proc/mounts`
NCPMTAB=`LC_ALL=C awk '$3 == "ncpfs" { print $2 }' /proc/mounts`
if [ -n "$NFSMTAB" -o -n "$SMBMTAB" -o -n "$NCPMTAB" ] ; then
/etc/init.d/netfs stop
fi
fi
# IPv6 hook (pre IPv4 stop)
if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then
/etc/sysconfig/network-scripts/init.ipv6-global stop pre
fi
vlaninterfaces=""
cipeinterfaces=""
xdslinterfaces=""
bridgeinterfaces=""
remaining=""
# get list of bonding, cipe, and xdsl interfaces
for i in $interfaces; do
unset DEVICE TYPE
eval $(LANG=C fgrep "DEVICE=" ifcfg-$i)
eval $(LANG=C fgrep "TYPE=" ifcfg-$i)
if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi
if [ "${DEVICE##cipcb}" != "$DEVICE" ] ; then
cipeinterfaces="$cipeinterfaces $i"
continue
fi
if [ "$TYPE" = "Bridge" ]; then
bridgeinterfaces="$bridgeinterfaces $i"
continue
fi
if [ "$TYPE" = "xDSL" -o "$TYPE" = "ADSL" ]; then
xdslinterfaces="$xdslinterfaces $i"
continue
fi
if [ "${DEVICE%%.*}" != "$DEVICE" -o "${DEVICE##vlan}" != "$DEVICE" ] ; then
vlaninterfaces="$vlaninterfaces $i"
continue
fi
remaining="$remaining $i"
done
for i in $cipeinterfaces $xdslinterfaces $bridgeinterfaces $vlaninterfaces $remaining; do
(. ifcfg-$i
if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi
if ! check_device_down $DEVICE; then
action "Shutting down interface %s: " $i ./ifdown $i boot
fi
)
done
case "$IPX" in
yes|true)
if [ "$IPXINTERNALNETNUM" != "0" ]; then
/sbin/ipx_internal_net del
fi
;;
esac
action "Shutting down loopback interface: " ./ifdown ifcfg-lo
if [ -d /proc/sys/net/ipv4 ]; then
if [ -f /proc/sys/net/ipv4/ip_forward ]; then
if [ `cat /proc/sys/net/ipv4/ip_forward` != 0 ]; then
action "Disabling IPv4 packet forwarding: " sysctl -w net.ipv4.ip_forward=0
fi
fi
if [ -f /proc/sys/net/ipv4/ip_always_defrag ]; then
if [ `cat /proc/sys/net/ipv4/ip_always_defrag` != 0 ]; then
action "Disabling IPv4 automatic defragmentation: " sysctl -w net.ipv4.ip_always_defrag=0
fi
fi
fi
if [ -f /proc/sys/net/ipv4/tcp_syncookies ];then
if [ `cat /proc/sys/net/ipv4/tcp_syncookies` != 0 ]; then
sysctl -w net.ipv4.tcp_syncookies=0
fi
fi
# IPv6 hook (post IPv4 stop)
if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then
/etc/sysconfig/network-scripts/init.ipv6-global stop post
fi
rm -f /var/lock/subsys/network
;;
status)
gprintf "Configured devices:\n"
echo lo $interfaces
gprintf "Currently active devices:\n"
echo $(/sbin/ip -o link show up | awk -F ": " '{ print $2 }')
;;
restart|reload)
cd "$CWD"
$0 stop
$0 start
;;
*)
gprintf "Usage: %s\n" "$(basename $0) {start|stop|restart|reload|status}"
exit 1
esac
exit 0
Вот эта строка chkconfig: 2345 10 90 говорит системе, что скрипт должен стартовать под номером 10, останавливаться под номером 90 на уровнях запуска 2, 3, 4, 5. В /etc/init.d/rc.X скрипты стартуют/останавливаются в порядке, заданном этими номерами.
Вот эта строка chkconfig: 2345 10 90 говорит системе, что скрипт должен стартовать под номером 10, останавливаться под номером 90 на уровнях запуска 2, 3, 4, 5. В /etc/init.d/rc.X скрипты стартуют/останавливаются в порядке, заданном этими номерами.
следовательно порядок запуска правильный? сначала интерфейс, потом squid?
у меня таже штука уже несколько лет. Итерфейс который слушает кальмар поднимается позже чем он стартует. В rc.local строки sleep N-секунд /etc/init.d/squid restart и всё тип топ.
"Я просто пытаюсь растить свой сад и не портить прекрасный вид.
И начальник заставы поймёт меня и беспечный рыбак простит" Б.Г.
у меня таже штука уже несколько лет. Итерфейс который слушает кальмар поднимается позже чем он стартует. В rc.local строки sleep N-секунд /etc/init.d/squid restart и всё тип топ.
Естественно, это решит вопрос, но хочется разобраться почему интерфейс поднимается после того как потупит минуту-полторы.