Author: dj
Date: 2011-05-18 11:18:30 -0600 (Wed, 18 May 2011)
New Revision: 9543

Modified:
   trunk/BOOK/lsb-bootscripts/ChangeLog
   trunk/BOOK/lsb-bootscripts/etc/init.d/cleanfs
   trunk/BOOK/lsb-bootscripts/etc/init.d/network
   trunk/BOOK/lsb-bootscripts/sbin/ifdown
   trunk/BOOK/lsb-bootscripts/sbin/ifup
Log:
New ifup/ifdown and modified network script. Changed comments on cleanfs scritp 
as well.

Modified: trunk/BOOK/lsb-bootscripts/ChangeLog
===================================================================
--- trunk/BOOK/lsb-bootscripts/ChangeLog        2011-05-15 16:52:49 UTC (rev 
9542)
+++ trunk/BOOK/lsb-bootscripts/ChangeLog        2011-05-18 17:18:30 UTC (rev 
9543)
@@ -1,3 +1,7 @@
+2011-05-18     DJ Lucas <d...@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 <d...@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.

Modified: trunk/BOOK/lsb-bootscripts/etc/init.d/cleanfs
===================================================================
--- trunk/BOOK/lsb-bootscripts/etc/init.d/cleanfs       2011-05-15 16:52:49 UTC 
(rev 9542)
+++ trunk/BOOK/lsb-bootscripts/etc/init.d/cleanfs       2011-05-18 17:18:30 UTC 
(rev 9543)
@@ -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
 

Modified: trunk/BOOK/lsb-bootscripts/etc/init.d/network
===================================================================
--- trunk/BOOK/lsb-bootscripts/etc/init.d/network       2011-05-15 16:52:49 UTC 
(rev 9542)
+++ trunk/BOOK/lsb-bootscripts/etc/init.d/network       2011-05-18 17:18:30 UTC 
(rev 9543)
@@ -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

Modified: trunk/BOOK/lsb-bootscripts/sbin/ifdown
===================================================================
--- trunk/BOOK/lsb-bootscripts/sbin/ifdown      2011-05-15 16:52:49 UTC (rev 
9542)
+++ trunk/BOOK/lsb-bootscripts/sbin/ifdown      2011-05-18 17:18:30 UTC (rev 
9543)
@@ -1,98 +1,176 @@
 #!/bin/sh
 ########################################################################
-# Begin $NETWORK_DEVICES/ifdown
+# Begin /sbin/ifdown
 #
 # Description : Interface Down
 #
-# Authors     : Nathan Coulson - nat...@linuxfromscratch.org
-#               Kevin P. Fleming - kpflem...@linuxfromscratch.org
+# Authors     : DJ Lucas - d...@linuxfromscratch.org
 #
-# Version     : 00.01
+# Version     : 00.02
 #
-# 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.
-#
 ########################################################################
 
 . /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
+function get_args()
+    {
+        if test -z "${1}" ; then
+            showhelp
+            exit 1
+        fi
 
-# Reverse the order configuration files are processed in
-for file in ${FILES}; do
-    FILES2="${file} ${FILES2}"
-done
-FILES=${FILES2}
+        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
+    }
 
-# Process each configuration 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
-        message="${file} is not a network configuration file or directory."
-        log_warning_msg
+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
-    (
-        if [ ! -d "${file}" ]; then
-            . ${file}
-        fi
+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
+# 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
-
-        # 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
-        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
+            )
+        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
-    )
-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
-        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
 
-# End $NETWORK_DEVICES/ifdown
+exit "${failed}"
+

Modified: trunk/BOOK/lsb-bootscripts/sbin/ifup
===================================================================
--- trunk/BOOK/lsb-bootscripts/sbin/ifup        2011-05-15 16:52:49 UTC (rev 
9542)
+++ trunk/BOOK/lsb-bootscripts/sbin/ifup        2011-05-18 17:18:30 UTC (rev 
9543)
@@ -1,97 +1,160 @@
 #!/bin/sh
 ########################################################################
-# Begin $NETWORK_DEVICES/ifup
+# Begin /sbin/ifdown
 #
 # Description : Interface Up
 #
-# Authors     : Nathan Coulson - nat...@linuxfromscratch.org
-#               Kevin P. Fleming - kpflem...@linuxfromscratch.org
+# Authors     : DJ Lucas - d...@linuxfromscratch.org
 #
-# Version     : 00.00
+# Version     : 00.02
 #
-# 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.
-#
 ########################################################################
 
-. /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
+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 ""
+    }
+
+# Intialize empty variables so that the shell does not polute the script
+CONFIGFILE=""
+CONFIGDIR=""
+INTERFACE=""
+
+# 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
 
-    (
-        if [ ! -d "${file}" ]; then
-            . ${file}
+# 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 boot, and ONBOOT
-        # is not set to yes
-        if [ "${IN_BOOT}" = "1" -a "${ONBOOT}" != "yes" ]; 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
-        # 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
-        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
+

-- 
http://linuxfromscratch.org/mailman/listinfo/lfs-book
FAQ: http://www.linuxfromscratch.org/lfs/faq.html
Unsubscribe: See the above information page

Reply via email to