aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDJ Lucas <dj@linuxfromscratch.org>2011-05-18 17:18:30 +0000
committerDJ Lucas <dj@linuxfromscratch.org>2011-05-18 17:18:30 +0000
commitc2db0877b0203a21182e5aaba75c98e6291d2ea0 (patch)
tree4845d841e8c425c558cbfe6336e298328f18eb10
parent499ce32dd46e8fba9c0fc18c398408cc269ad867 (diff)
New ifup/ifdown and modified network script. Changed comments on cleanfs scritp as well.
git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@9543 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689
-rw-r--r--lsb-bootscripts/ChangeLog4
-rw-r--r--lsb-bootscripts/etc/init.d/cleanfs8
-rw-r--r--lsb-bootscripts/etc/init.d/network102
-rw-r--r--lsb-bootscripts/sbin/ifdown230
-rw-r--r--lsb-bootscripts/sbin/ifup215
5 files changed, 359 insertions, 200 deletions
diff --git a/lsb-bootscripts/ChangeLog b/lsb-bootscripts/ChangeLog
index 04c739112..ddf064576 100644
--- a/lsb-bootscripts/ChangeLog
+++ b/lsb-bootscripts/ChangeLog
@@ -1,3 +1,7 @@
+2011-05-18 DJ Lucas <dj@linuxfromscratch.org>
+ * /sbin/ifup, /sbin/ifdown: Complete rewrite for use as standalone tools
+ * etc/init.d/network: Rewrote script to account for new ifup and ifdown
+
2011-05-14 DJ Lucas <dj@linuxfromscratch.org>
* etc/default/rc.site: Added FAILURE_ACTION variable for use in remote
systems where user input is not appropriate in the event of a failure.
diff --git a/lsb-bootscripts/etc/init.d/cleanfs b/lsb-bootscripts/etc/init.d/cleanfs
index 2e71456ee..26a0c2096 100644
--- a/lsb-bootscripts/etc/init.d/cleanfs
+++ b/lsb-bootscripts/etc/init.d/cleanfs
@@ -9,10 +9,10 @@
# Should-Stop:
# Default-Start: S
# Default-Stop:
-# Short-Description: Cleans temporary directories early in the boot process.
-# Description: Cleans temporary directories /var/run, /var/lock, and
-# /tmp. cleanfs also creates /var/run/utmp and any files
-# defined in /etc/default/createfiles.
+# Short-Description: Cleans and prepares the temporary directory.
+# Description: Cleans the temporary directory /tmp and creates the
+# /var/run/utmp file and any other files defined in
+# /etc/default/createfiles.
# X-LFS-Provided-By: LFS
### END INIT INFO
diff --git a/lsb-bootscripts/etc/init.d/network b/lsb-bootscripts/etc/init.d/network
index ec11d5e38..b725dd05a 100644
--- a/lsb-bootscripts/etc/init.d/network
+++ b/lsb-bootscripts/etc/init.d/network
@@ -17,54 +17,68 @@
. /lib/lsb/init-functions
case "${1}" in
- start)
- # Start all network interfaces
- for file in ${NETWORK_DEVICES}/ifconfig.*
- do
- interface=${file##*/ifconfig.}
+ start)
+ # Start all network interfaces
+ for dir in ${NETWORK_DEVICES}/ifconfig.*
+ do
+ interface=${dir##*/ifconfig.}
+ # skip if $dir is * (because nothing was found)
+ if [ "${interface}" = "*" ]; then
+ continue
+ fi
+ # Process individual configuration files
+ for file in "${dir}"/* ; do
+ ONBOOT=`grep "ONBOOT" "${file}" | sed 's@^ONBOOT=@@'`
+ case "${ONBOOT}" in
+ Y* | y* | 0)
+ /sbin/ifup -c "${file}" "${interface}"
+ ;;
+ esac
+ done
+ done
+ ;;
- # skip if $file is * (because nothing was found)
- if [ "${interface}" = "*" ]
- then
- continue
- fi
- IN_BOOT=1 /sbin/ifup ${interface}
- done
- ;;
+ stop)
+ # Reverse list
+ DIRS=""
+ for dir in /run/network/ifconfig.*
+ do
+ DIRS="${dir} ${DIRS}"
+ done
- stop)
- # Reverse list
- FILES=""
- for file in /run/network/ifconfig.*
- do
- FILES="${file} ${FILES}"
- done
+ # Stop all network interfaces
+ for dir in ${DIRS}; do
+ interface=${dir##*/ifconfig.}
+ # skip if $dir is * (because nothing was found)
+ if [ "${interface}" = "*" ]; then
+ continue
+ fi
+ # Process individual configuration files
+ for file in "${dir}"/* ; do
+ # No checking necessary if it is in /run/network
+ /sbin/ifdown -c "${file}" "${interface}"
+ done
+ link_status=`/sbin/ip link show "${interface}" | \
+ grep -o "state DOWN"`
+ if [ "${link_status}" != "state DOWN" ]; then
+ message="Shutting down the ${interface} interface..."
+ /sbin/ip addr flush "${interface}" &&
+ /sbin/ip link set "${interface}" down
+ evaluate_retval standard
+ fi
+ done
+ ;;
- # Stop all network interfaces
- for file in ${FILES}
- do
- interface=${file##*/ifconfig.}
+ restart)
+ ${0} stop
+ sleep 1
+ ${0} start
+ ;;
- # skip if $file is * (because nothing was found)
- if [ "${interface}" = "*" ]
- then
- continue
- fi
-
- IN_BOOT=1 /sbin/ifdown ${interface}
- done
- ;;
-
- restart)
- ${0} stop
- sleep 1
- ${0} start
- ;;
-
- *)
- echo "Usage: ${0} {start|stop|restart}"
- exit 1
- ;;
+ *)
+ echo "Usage: ${0} {start|stop|restart}"
+ exit 1
+ ;;
esac
# End /etc/init.d/network
diff --git a/lsb-bootscripts/sbin/ifdown b/lsb-bootscripts/sbin/ifdown
index f9e2a51ad..e6d49c874 100644
--- a/lsb-bootscripts/sbin/ifdown
+++ b/lsb-bootscripts/sbin/ifdown
@@ -1,98 +1,176 @@
#!/bin/sh
########################################################################
-# Begin $NETWORK_DEVICES/ifdown
+# Begin /sbin/ifdown
#
# Description : Interface Down
#
-# Authors : Nathan Coulson - nathan@linuxfromscratch.org
-# Kevin P. Fleming - kpfleming@linuxfromscratch.org
+# Authors : DJ Lucas - dj@linuxfromscratch.org
#
-# Version : 00.01
-#
-# Notes : the IFCONFIG variable is passed to the scripts found
-# in the services directory, to indicate what file the
-# service should source to get environmental variables.
+# Version : 00.02
#
########################################################################
. /lib/lsb/init-functions
-# Collect a list of configuration files for our interface
-if [ -n "${2}" ]; then
- for file in ${@#$1}; do # All parameters except $1
- FILES="${FILES} /run/network/ifconfig.${1}/${file}"
- done
-elif [ -d "/run/network/ifconfig.${1}" ]; then
- FILES=`echo /run/network/ifconfig.${1}/*`
-else
- FILES="/run/network/ifconfig.${1}"
-fi
-
-# Reverse the order configuration files are processed in
-for file in ${FILES}; do
- FILES2="${file} ${FILES2}"
-done
-FILES=${FILES2}
+function get_args()
+ {
+ if test -z "${1}" ; then
+ showhelp
+ exit 1
+ fi
-# Process each configuration file
-for file in ${FILES}; do
- # skip backup files
- if [ "${file}" != "${file%""~""}" ]; then
- continue
- fi
+ while test -n "${1}" ; do
+ case "${1}" in
+ -c | --configfile)
+ check_arg $1 $2
+ CONFIGFILE="${2}"
+ shift 2
+ ;;
+ -f | --force)
+ FORCE="1"
+ shift 1
+ ;;
+ eth* | iw* | wlan*)
+ INTERFACE="${1}"
+ shift 1
+ ;;
+ -h | --help)
+ showhelp
+ exit 0
+ ;;
+ *)
+ showhelp
+ echo "ERROR: '${1}' unknown argument"
+ echo ""
+ exit 2
+ ;;
+ esac
+ done
+ }
- if [ ! -f "${file}" ]; then
- message="${file} is not a network configuration file or directory."
- log_warning_msg
- fi
- (
- if [ ! -d "${file}" ]; then
- . ${file}
+function check_arg()
+ {
+ echo "${2}" | grep -v "^-" > /dev/null
+ if [ -z "${?}" -o ! -n "${2}" ]; then
+ echo "Error: ${1} requires a valid argument."
+ exit 2
fi
+ }
- # Will not process this service if started by boot, and ONBOOT
- # is not set to yes
- if [ "${IN_BOOT}" = "1" -a "${ONBOOT}" != "yes" ]; then
- continue
- fi
+function showhelp()
+ {
+ echo ""
+ echo "`/usr/bin/basename ${0}` brings down a valid network interface."
+ echo ""
+ echo "Options:"
+ echo " -c --configfile The path to an interface configuration file"
+ echo " If no configuration file is given, all files"
+ echo " listed in /etc/network/ifconfig.<int> will"
+ echo " be processed, regarless of the value of ONBOOT"
+ echo " -f --force Flush all IPs and force the interface down."
+ echo " -h --help Show this help message and exit."
+ echo ""
+ echo "Examples:"
+ echo " `/usr/bin/basename ${0}` eth0 -c /run/network/ifconfig.eth0/ipv4"
+ echo " `/usr/bin/basename ${0}` eth0 --force -c /run/network/ifconfig.eth0/ipv4"
+ echo " `/usr/bin/basename ${0}` eth0 --force"
+ echo " `/usr/bin/basename ${0}` eth0"
+ echo ""
+ echo ""
+ }
+
+# Intialize empty variables so that the shell does not polute the script
+CONFIGFILE=""
+CONFIGDIR=""
+INTERFACE=""
+FORCE=""
+failed=0
+
+# Process command line arguments
+get_args ${@}
+
+# Handle common errors - No need to account for bootscripts, this should not
+# happen during boot or shutdown.
+if [ "${CONFIGFILE}x" != "x" -a ! -f "${CONFIGFILE}" ]; then
+ echo "ERROR: ${CONFIGFILE} is not a valid network configuration file."
+ echo ""
+ exit 2
+fi
+
+if [ "${INTERFACE}x" == "x" ]; then
+ echo "ERROR: No interface was given"
+ echo ""
+ exit 2
+else
+ if ! grep "${INTERFACE}" /proc/net/dev 2>&1 > /dev/null; then
+ echo "ERROR: ${INTERFACE} is not a valid network interface."
+ echo ""
+ exit 2
+ fi
+fi
- # Will not process this service if started by hotplug, and
- # ONHOTPLUG is not set to yes
- if [ "${IN_HOTPLUG}" = "1" -a "${ONHOTPLUG}" != "yes" ]; then
- continue
+# If a configuration file is present, use it
+if [ "${CONFIGFILE}x" != "x" ]; then
+ . "${CONFIGFILE}"
+ if [ -x "/lib/network-services/${SERVICE}" ]; then
+ # do the work
+ if IFCONFIG=${CONFIGFILE} \
+ /lib/network-services/${SERVICE} ${INTERFACE} down; then
+ rm "${CONFIGFILE}"
fi
-
- # This will run the service script, if SERVICE is set
- if [ -n "${SERVICE}" -a -x "/lib/network-services/${SERVICE}" ]; then
- if ip link show ${1} > /dev/null 2>&1
- then
- IFCONFIG=${file} /lib/network-services/${SERVICE} ${1} down &&
- if [ -f "${file}" ]; then
- rm ${file}
+ else
+ echo "ERROR: Service '${SERVICE}' is not a valid service."
+ echo ""
+ exit 2
+ fi
+# No interface configuration file was given
+else
+ # Process all running interface configuration files
+ CONFIGDIR="/run/network/ifconfig.${INTERFACE}"
+ if [ -d "${CONFIGDIR}" ]; then
+ FILES=`ls "${CONFIGDIR}"`
+ for CONFIGFILE in ${FILES}
+ do
+ (
+ . "${CONFIGDIR}/${CONFIGFILE}"
+ # No error checking necessary if they are in /run
+ if IFCONFIG="${CONFIGDIR}/${CONFIGFILE}" \
+ /lib/network-services/${SERVICE} ${INTERFACE} down; then
+ rm "${CONFIGDIR}/${CONFIGFILE}"
fi
- else
- message="Interface ${1} doesn't exist."
- log_warning_msg
- fi
- else
- echo -e "${FAILURE}Unable to process ${file}. Either"
- echo -e "${FAILURE}the SERVICE variable was not set,"
- echo -e "${FAILURE}or the specified service cannot be executed."
- message=""
- log_failure_msg
- fi
- )
-done
-
-if [ -z "${2}" ]; then
- link_status=`ip link show $1`
- if [ -n "${link_status}" ]; then
- if echo "${link_status}" | grep -q UP; then
- message="Bringing down the ${1} interface..."
- ip link set ${1} down
- evaluate_retval standard
+ )
+ done
+ # all running config files processes, set the link down
+ message="Setting interface ${INTERFACE} down..."
+ /sbin/ip link set "${INTERFACE}" down
+ evaluate_retval standard
+ else
+ if [ "${FORCE}" != "1" ]; then
+ echo "ERROR: No configuration files found for ${INTERFACE}."
+ echo ""
+ exit 2
fi
fi
fi
+
+if [ "${FORCE}" == "1" ]; then
+ /sbin/ip addr flush dev "${INTERFACE}" 2>&1 > /dev/null || failed=1
+ if [ "${failed}" == "1" ]; then
+ log_failure_msg "Flushing IP addresses from interface ${INTERFACE}..."
+ echo ""
+ exit 1
+ else
+ log_success_msg "Flushing IP addresses from interface ${INTERFACE}..."
+ fi
+ /sbin/ip link set dev "${INTERFACE}" down 2>&1 > /dev/null || failed=1
+ if [ "${failed}" == "1" ]; then
+ log_failure_msg "Setting link down for interface ${INTERFACE}..."
+ echo ""
+ exit 1
+ else
+ log_success_msg "Setting link down for interface ${INTERFACE}..."
+ fi
+fi
+
+exit "${failed}"
-# End $NETWORK_DEVICES/ifdown
diff --git a/lsb-bootscripts/sbin/ifup b/lsb-bootscripts/sbin/ifup
index 069af2f94..0c7fbddea 100644
--- a/lsb-bootscripts/sbin/ifup
+++ b/lsb-bootscripts/sbin/ifup
@@ -1,97 +1,160 @@
#!/bin/sh
########################################################################
-# Begin $NETWORK_DEVICES/ifup
+# Begin /sbin/ifdown
#
# Description : Interface Up
#
-# Authors : Nathan Coulson - nathan@linuxfromscratch.org
-# Kevin P. Fleming - kpfleming@linuxfromscratch.org
+# Authors : DJ Lucas - dj@linuxfromscratch.org
#
-# Version : 00.00
-#
-# Notes : the IFCONFIG variable is passed to the scripts found
-# in the services directory, to indicate what file the
-# service should source to get environmental variables.
+# Version : 00.02
#
########################################################################
-. /lib/lsb/init-functions
+. /lib/lsb/init-functions
-# Collect a list of configuration files for our interface
-if [ -n "${2}" ]; then
- for file in ${@#$1} # All parameters except $1
- do
- FILES="${FILES} ${NETWORK_DEVICES}/ifconfig.${1}/${file}"
- done
-elif [ -d "${NETWORK_DEVICES}/ifconfig.${1}" ]; then
- FILES=`echo ${NETWORK_DEVICES}/ifconfig.${1}/*`
-else
- FILES="${NETWORK_DEVICES}/ifconfig.${1}"
-fi
+function get_args()
+ {
+ if test -z "${1}" ; then
+ showhelp
+ exit 1
+ fi
-message="Bringing up the ${1} interface..."
+ while test -n "${1}" ; do
+ case "${1}" in
+ -c | --configfile)
+ check_arg $1 $2
+ CONFIGFILE="${2}"
+ shift 2
+ ;;
+ eth* | iw* | wlan*)
+ INTERFACE="${1}"
+ shift 1
+ ;;
+ -h | --help)
+ showhelp
+ exit 0
+ ;;
+ *)
+ showhelp
+ echo "ERROR: '${1}' unknown argument"
+ echo ""
+ exit 2
+ ;;
+ esac
+ done
+ }
-# Process each configruation file
-for file in ${FILES}; do
- # skip backup files
- if [ "${file}" != "${file%""~""}" ]; then
- continue
- fi
+function check_arg()
+ {
+ echo "${2}" | grep -v "^-" > /dev/null
+ if [ -z "${?}" -o ! -n "${2}" ]; then
+ echo "Error: ${1} requires a valid argument."
+ exit 2
+ fi
+ }
- if [ ! -f "${file}" ]; then
- log_warning_msg
- message="${file} is not a network configuration file or directory."
- log_warning_msg
- fi
+function showhelp()
+ {
+ echo "`/usr/bin/basename ${0}` brings up a valid network interface."
+ echo ""
+ echo "Options:"
+ echo " -c --configfile The path to an interface configuration file"
+ echo " If no configuration file is given, all files"
+ echo " listed in ${NETWORK_DEVICES}/ifconfig.<int> will"
+ echo " be processed, regarless of the value of ONBOOT"
+ echo " -h --help Show this help message and exit."
+ echo ""
+ echo "Examples:"
+ echo " `/usr/bin/basename ${0}` eth0 -c ${NETWORK_DEVICES}/ifconfig.eth0/ipv4"
+ echo " `/usr/bin/basename ${0}` eth0"
+ echo ""
+ echo ""
+ }
- (
- if [ ! -d "${file}" ]; then
- . ${file}
- fi
+# Intialize empty variables so that the shell does not polute the script
+CONFIGFILE=""
+CONFIGDIR=""
+INTERFACE=""
+
+# Process command line arguments
+get_args ${@}
- # Will not process this service if started by boot, and ONBOOT
- # is not set to yes
- if [ "${IN_BOOT}" = "1" -a "${ONBOOT}" != "yes" ]; then
- continue
+# Handle common errors - No need to account for bootscripts, this should not
+# happen during boot or shutdown.
+if [ "${CONFIGFILE}x" != "x" -a ! -f "${CONFIGFILE}" ]; then
+ echo "ERROR: ${CONFIGFILE} is not a valid network configuration file."
+ echo ""
+ exit 2
+fi
+
+if [ "${INTERFACE}x" == "x" ]; then
+ echo "ERROR: No interface was given"
+ echo ""
+ exit 2
+else
+ if ! grep "${INTERFACE}" /proc/net/dev 2>&1 > /dev/null; then
+ echo "ERROR: ${INTERFACE} is not a valid network interface."
+ echo ""
+ exit 2
+ fi
+fi
+
+# If a configuration file is present, use it
+if [ "${CONFIGFILE}x" != "x" ]; then
+ . "${CONFIGFILE}"
+ if [ -x "/lib/network-services/${SERVICE}" ]; then
+ # do the work
+ # Check to make sure the interface is up
+ link_status=`/sbin/ip link show "${INTERFACE}" | \
+ grep -o "state UP"`
+ if [ "${link_status}" != "state UP" ]; then
+ message="Bringing up the ${INTERFACE} interface..."
+ /sbin/ip link set ${INTERFACE} up
+ evaluate_retval standard
fi
- # Will not process this service if started by hotplug, and
- # ONHOTPLUG is not set to yes
- if [ "${IN_HOTPLUG}" = "1" -a "${ONHOTPLUG}" != "yes" -a "${HOSTNAME}" != "(none)" ]; then
- continue
+ if IFCONFIG=${CONFIGFILE} \
+ /lib/network-services/${SERVICE} ${INTERFACE} up; then
+ mkdir -p "/run/network/ifconfig.${INTERFACE}"
+ cp "${CONFIGFILE}" "/run/network/ifconfig.${INTERFACE}/"
fi
-
- if [ -n "${SERVICE}" -a -x "/lib/network-services/${SERVICE}" ]; then
- if [ -z "${CHECK_LINK}" -o "${CHECK_LINK}" = "y" -o "${CHECK_LINK}" = "yes" -o "${CHECK_LINK}" = "1" ]; then
- if ip link show ${1} > /dev/null 2>&1; then
- link_status=`ip link show ${1}`
- if [ -n "${link_status}" ]; then
- if ! echo "${link_status}" | grep -q UP; then
- ip link set ${1} up
- evaluate_retval standard
- fi
+ else
+ echo "ERROR: Service '${SERVICE}' is not a valid service."
+ echo ""
+ exit 2
+ fi
+# No interface configuration file was given
+else
+ # Process all available interface configuration files
+ CONFIGDIR="/etc/network/ifconfig.${INTERFACE}"
+ if [ -d "${CONFIGDIR}" ]; then
+ FILES=`ls "${CONFIGDIR}"`
+ for CONFIGFILE in ${FILES}
+ do
+ (
+ . "${CONFIGDIR}/${CONFIGFILE}"
+ if [ -x "/lib/network-services/${SERVICE}" ]; then
+ # Check to make sure the interface is up
+ link_status=`/sbin/ip link show "${INTERFACE}" | \
+ grep -o "state UP"`
+ if [ "${link_status}" != "state UP" ]; then
+ message="Bringing up the ${INTERFACE} interface..."
+ /sbin/ip link set ${INTERFACE} up
+ evaluate_retval standard
+ fi
+ if IFCONFIG="${CONFIGDIR}/${CONFIGFILE}" \
+ /lib/network-services/${SERVICE} ${INTERFACE} up; then
+ mkdir -p "/run/network/ifconfig.${INTERFACE}"
+ cp "${CONFIGDIR}/${CONFIGFILE}" \
+ "/run/network/ifconfig.${INTERFACE}/"
fi
else
- message="${message}Interface ${1} doesn't exist."
- log_warning_msg
+ echo "ERROR: Service '${SERVICE}' is not a valid service."
+ echo ""
+ exit 2
fi
- fi
- IFCONFIG=${file} /lib/network-services/${SERVICE} ${1} up
- if [ "${?}" -eq "0" ]; then
- if [ ! -d "${file}" -a "${file}" != "${NETWORK_DEVICES}/ifconfig.${1}" ]; then
- mkdir -p "/run/network/ifconfig.${1}"
- cp "${file}" "/run/network/ifconfig.${1}"
- elif [ ! -d "${file}" ]; then
- cp "${file}" "/run/network/"
- fi
- fi
- else
- echo -e "${FAILURE}Unable to process ${file}. Either"
- echo -e "${FAILURE}the SERVICE variable was not set,"
- echo -e "${FAILURE}or the specified service cannot be executed."
- message=""
- log_failure_msg
- fi
- )
-done
-# End $NETWORK_DEVICES/ifup
+ )
+ done
+ fi
+fi
+