Bläddra i källkod

Import new bootscripts package.

git-svn-id: http://svn.linuxfromscratch.org/LFS/branches/systemd/BOOK@10278 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689
Krejzi 12 år sedan
förälder
incheckning
01479e657a

+ 21 - 16
Makefile

@@ -39,7 +39,7 @@ lfs: validate profile-html
 	  sed -i -e "s@text/html@application/xhtml+xml@g" $$filename; \
 	done;
 
-	$(Q)$(MAKE) wget-list
+	$(Q)$(MAKE) $(BASEDIR)/wget-list $(BASEDIR)/md5sums
 
 pdf: validate
 	@echo "Generating profiled XML for PDF..."
@@ -71,12 +71,10 @@ nochunks: validate profile-html
 	@echo "Running Tidy..."
 	$(Q)tidy -config tidy.conf $(BASEDIR)/$(NOCHUNKS_OUTPUT) || true
 	@echo "Running obfuscate.sh..."
-	$(Q)bash obfuscate.sh $(BASEDIR)/$(NOCHUNKS_OUTPUT)
-	$(Q)sed -i -e "s@text/html@application/xhtml+xml@g"  \
-	  $(BASEDIR)/$(NOCHUNKS_OUTPUT)
-	$(Q)sed -i -e "s@../wget-list@wget-list@"  \
-	  $(BASEDIR)/$(NOCHUNKS_OUTPUT)
-	$(Q)$(MAKE) wget-list
+	$(Q)bash obfuscate.sh                                $(BASEDIR)/$(NOCHUNKS_OUTPUT)
+	$(Q)sed -i -e "s@text/html@application/xhtml+xml@g"  $(BASEDIR)/$(NOCHUNKS_OUTPUT)
+	$(Q)sed -i -e "s@../wget-list@wget-list@"            $(BASEDIR)/$(NOCHUNKS_OUTPUT)
+	$(Q)$(MAKE) $(BASEDIR)/wget-list $(BASEDIR)/md5sums
 
 tmpdir:
 	@echo "Creating and cleaning $(RENDERTMP)"
@@ -85,28 +83,35 @@ tmpdir:
 	$(Q)rm -f $(RENDERTMP)/lfs-pdf.fo
 
 validate: tmpdir
+	@echo "Processing bootscripts..."
+	$(Q)bash process-scripts.sh
 	@echo "Validating the book..."
 	$(Q)xmllint --nonet --noent --xinclude --postvalid \
 	  -o $(RENDERTMP)/lfs-full.xml index.xml
+	$(Q)rm -f appendices/*.script
+	$(Q)./aux-file-data.sh $(RENDERTMP)/lfs-full.xml
 	@echo "Validation complete."
 
 profile-html: validate
 	@echo "Generating profiled XML for XHTML..."
 	$(Q)xsltproc --nonet --stringparam profile.condition html \
-	  --output $(RENDERTMP)/lfs-html.xml stylesheets/lfs-xsl/profile.xsl \
-	  $(RENDERTMP)/lfs-full.xml
+	    --output $(RENDERTMP)/lfs-html.xml stylesheets/lfs-xsl/profile.xsl \
+	    $(RENDERTMP)/lfs-full.xml
 
-wget-list:
+$(BASEDIR)/wget-list: stylesheets/wget-list.xsl chapter03/chapter03.xml packages.ent
 	@echo "Generating wget list..."
 	$(Q)mkdir -p $(BASEDIR)
 	$(Q)xsltproc --xinclude --nonet --output $(BASEDIR)/wget-list \
-	  stylesheets/wget-list.xsl chapter03/chapter03.xml
+	    stylesheets/wget-list.xsl chapter03/chapter03.xml
 
-md5sums:
+$(BASEDIR)/md5sums: stylesheets/wget-list.xsl chapter03/chapter03.xml packages.ent
 	@echo "Generating md5sum file..."
 	$(Q)mkdir -p $(BASEDIR)
 	$(Q)xsltproc --xinclude --nonet --output $(BASEDIR)/md5sums \
-	  stylesheets/md5sum.xsl chapter03/chapter03.xml
+	    stylesheets/md5sum.xsl chapter03/chapter03.xml
+	$(Q)sed -i -e \
+       "s/LFS-UNITS-MD5SUM/$(shell md5sum lfs-systemd-units*.tar.bz2 | cut -d' ' -f1)/" \
+       $(BASEDIR)/md5sums
 
 dump-commands: validate
 	@echo "Dumping book commands..."
@@ -114,7 +119,7 @@ dump-commands: validate
 	   stylesheets/dump-commands.xsl $(RENDERTMP)/lfs-full.xml
 
 
-all: lfs nochunks pdf dump-commands md5sums
+all: lfs nochunks pdf dump-commands
+
+.PHONY : all dump-commands lfs nochunks pdf profile-html tmpdir validate 
 
-.PHONY : all dump-commands lfs nochunks pdf profile-html tmpdir validate \
-	 validate wget-list maketar md5sums

+ 30 - 0
aux-file-data.sh

@@ -0,0 +1,30 @@
+#!/bin/bash
+
+if [ $# -lt 1 ] ; then
+  echo "This script needs the location of the xml file to update"
+  exit 1
+fi
+
+FILE=$1
+
+./make-aux-files.sh
+
+# Bootscript data
+bootscripts=$(ls lfs-systemd-units*.bz2)
+base=$(basename $bootscripts .tar.bz2)
+bootsize=$(ls -lk $bootscripts | cut -f5 -d" ")
+bootmd5=$(md5sum $bootscripts | cut -f1 -d" ")
+
+# Figure intalled size of bootscripts
+TOPDIR=$(pwd)
+TMP_DIR=$(mktemp -d /tmp/lfsbootfiles.XXXXXX)
+pushd $TMP_DIR > /dev/null
+tar -xf $TOPDIR/$bootscripts
+bootinstallsize=$(du -sk $TMP_DIR | cut -f1)
+popd > /dev/null
+rm -rf $TMP_DIR
+
+sed -i -e s/LFS-UNITS-SIZE/$bootsize/              \
+       -e s/LFS-UNITS-INSTALL-KB/$bootinstallsize/ \
+       -e s/LFS-UNITS-MD5SUM/$bootmd5/ $FILE
+

+ 9 - 0
chapter03/packages.xml

@@ -356,6 +356,15 @@
       </listitem>
     </varlistentry>
 
+    <varlistentry>
+      <term>LFS-Systemd-Units (&lfs-systemd-units-version;) - <token>&lfs-systemd-units-size;</token>:</term>
+      <listitem>
+        <para>Home page: <ulink url="&lfs-systemd-units-home;"/></para>
+        <para>Download: <ulink url="&lfs-systemd-units-url;"/></para>
+        <para>MD5 sum: <literal>&lfs-systemd-units-md5;</literal></para>
+      </listitem>
+    </varlistentry>
+
     <varlistentry>
       <term>Libcap (&libcap-version;) - <token>&libcap-size;</token>:</term>
       <listitem>

+ 11 - 0
make-aux-files.sh

@@ -0,0 +1,11 @@
+#!/bin/bash
+
+rm -f lfs-systemd-units*.tar.bz2
+
+# Get base file name and move bootscripts directory to that name
+version=`grep "ENTITY lfs-systemd-units-version" packages.ent |cut -d'"' -f2`
+mv systemd-units lfs-systemd-units-$version
+
+# Create the tarball and clean up
+tar -cjf lfs-systemd-units-$version.tar.bz2 --exclude .svn lfs-systemd-units-$version
+mv lfs-systemd-units-$version systemd-units

+ 8 - 0
packages.ent

@@ -350,6 +350,14 @@
 <!ENTITY less-ch6-du "3.6 MB">
 <!ENTITY less-ch6-sbu "less than 0.1 SBU">
 
+<!ENTITY lfs-systemd-units-version "20130518">               <!-- Scripts depend on this format -->
+<!ENTITY lfs-systemd-units-size "LFS-UNITS-SIZE KB">         <!-- Updated in Makefile -->
+<!ENTITY lfs-systemd-units-url "&downloads-root;lfs-systemd-units-&lfs-systemd-units-version;.tar.bz2">
+<!ENTITY lfs-systemd-units-md5 "LFS-UNITS-MD5SUM">           <!-- Updated in Makefile -->
+<!ENTITY lfs-systemd-units-home " ">
+<!ENTITY lfs-systemd-units-ch7-du "LFS-UNITS-INSTALL-KB KB"> <!-- Updated in Makefile -->
+<!ENTITY lfs-systemd-units-ch7-sbu "less than 0.1 SBU">
+
 <!ENTITY libcap-version "2.22">
 <!ENTITY libcap-size "66 KB">
 <!ENTITY libcap-url "http://ftp.de.debian.org/debian/pool/main/libc/libcap2/libcap2_&libcap-version;.orig.tar.gz">

+ 17 - 0
process-scripts.sh

@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# Boot scripts
+for s in systemd-units/lfs/lib/services/* \
+         systemd-units/lfs/sbin/*         \
+         systemd-units/lfs/tmpfiles/*     \
+         systemd-units/lfs/units/*
+do
+  script=$(basename $s)
+
+  # Skip directories
+  [ $script == 'network-devices' ] && continue
+
+  sed  -e 's/\&/\&amp\;/g' -e 's/</\&lt\;/g'   -e 's/>/\&gt\;/g' \
+       -e "s/'/\&apos\;/g" -e 's/"/\&quot\;/g' -e 's/\t/    /g'  \
+       $s > appendices/${script}.script
+done

+ 1103 - 0
systemd-units/ChangeLog

@@ -0,0 +1,1103 @@
+2013-05-18 Armin K. <krejzi@email.com>
+   * Remove LFS specific scripts from Systemd branch.
+
+2013-05-15 Bruce Dubbs <bdubbs@linuxfromscratch.org>
+   * Remove unneeded options and commands from mountfs and
+     mountvirtfs when mtab is a symlink to /proc/self/mounts
+
+2013-05-11 Bruce Dubbs <bdubbs@linuxfromscratch.org>
+   * Make sure the root fs is mounted read only in mountfs
+     before halting
+
+2013-01-24 Bruce Dubbs <bdubbs@linuxfromscratch.org>
+   * Remove local attribue of some variables for Bourne
+     shell compatability
+   * Specify /bin/echo in commands with -e switch for 
+     Bourne shell compatability
+
+2012-10-13 Bruce Dubbs <bdubbs@linuxfromscratch.org>
+   * Remove unneeded sleep in killproc
+   * Add option for verbose fsck
+   * Flatten directory structure of tarball
+   * Remove /fastboot or /forcecheck if set
+
+2012-09-05 Bruce Dubbs <bdubbs@linuxfromscratch.org>
+   * Add udevadm trigger --action=change line to udev script
+     to support initramfs better
+
+2012-08-24 Bruce Dubbs <bdubbs@linuxfromscratch.org>
+   * Read /etc/sysconfig/console when needed in rc
+
+2012-06-17 Bruce Dubbs <bdubbs@linuxfromscratch.org>
+   * Only mount /run in mountvirtfs if it is not already mounted
+     (from an initrd).
+   * Force the /dev/shm->/run/shm symlink
+   * Skip making LVM virtual groups unavailable at shutdown
+     because the / or swap partitions may be still in use.
+
+2012-05-30 Bruce Dubbs <bdubbs@linuxfromscratch.org>
+   * Copy all entries in /lib/udev/devices to /dev in mounvirtfs
+
+2012-05-24 Bruce Dubbs <bdubbs@linuxfromscratch.org>
+   * Remove mkdir from mountvirtfs because fs is read only
+
+2012-04-09 Bruce Dubbs <bdubbs@linuxfromscratch.org>
+
+   * General update of network scripts ifup/ifdown and services
+   ** Add if_true utility function to init_functions
+   ** Change variable INTERFACES to COMPONENT_INTERFACES for bridge interface
+   ** ifdown now only uses the first SERVICE
+   ** Updated ifup.8 to reflect current usage
+   ** ifup
+   *** Move interface up logic to after service scripts.  Eliminates the 
+       need for the LINK_CHECK variable.
+   *** Sets the GATEWAY if the variable is set
+   *** Add MTU logic to ifup
+
+2012-01-22  Matt Burgess <matthew@linuxfromscratch.org>
+
+   * lfs/init.d/udev: Change udevd path following upstream changes to its
+                      location
+
+2011-12-23  Matt Burgess <matthew@linuxfromscratch.org>
+
+   * lfs/init.d/mountvirtfs: Correct permissions on /run/shm
+
+2011-11-28  DJ Lucas <dj@linuxfromscratch.org>
+
+   * lfs/init.d/mountfs: Add '-t nosysfs' to umount command
+   * lfs/init.d/mountvirtfs: remove unneeded spaces in output
+   * lfs/init.d/rc: Correct double interactive prompt and set prompt defaults
+   * lfs/init.d/setclock: Remove screen output from start case (udev)
+   * lfs/init.d/udev{,_retry}:  Restore output to screen and log
+   * lfs/sbin/ifup: Change "..." to ": " (not awaiting additional output)
+
+2011-11-14  Bruce Dubbs <bdubbs@linuxfromscratch.org>
+
+   * The following are from suggestions by DJ Lucas
+   ** General cleanup of scripts
+   ** Move consolelog function to rc
+   ** Clean up boot logging functions
+   ** Fix interactive prompt between run level S and target run level
+
+2011-10-06  Bryan Kadzban <bryan@linuxfromscratch.org>
+
+   * Add configuration for udev_retry, and remove --type=failed (which does
+     not work with recent udev versions anyway, since no events can possibly
+     trigger it).  Start with just the "rtc" subsystem.  BLFS should eventually
+     add "sound" to this file, and perhaps others.
+
+2011-09-18
+   * Review and update of changes made in previous change.
+   ** Rename /etc/sysconfig/init_params to /etc/sysconfig/rc.site.
+   ** Move network services to /lib/services.
+   ** Move init-functions to /lib/lsb.
+   *** /lib/lsb is a symlink to /lib/services.
+   * Create convenience symlink /etc/init.d->/etc/rc.d/init.d.
+   * Add help and man pages to upup/ifdown.
+   * Append /run/var/bootlog to /var/log/boot.log at the end of 
+     the boot sequence.
+   * Add capabiltiy to step through the boot scripts at boot time
+   * Optionally allow environment variables in sysconfig directory's 
+     console, network, and clock files to be placed in rc.site.
+   * Add an optional FASTBOOT parameter to set /fastboot when rebooting.
+
+2011-07-14  Bruce Dubbs <bdubbs@linuxfromscratch.org>
+   * Major rewrite of all LFS scripts
+   ** Move ifup/ifdown to /sbin
+   ** Move functions and network services to /lib/boot
+   ** Remove contrib directory
+   ** Move all READ commands to functions and allow the user to specify
+      HEADLESS=1 to skip READ commands
+   ** Add /etc/sysconfig/init_params for adding environmental parameters
+      to all functions used in bootscripts
+   ** Move network configuration to /etc/sysconfig/ifconfig.*.  The 
+      ifconfig files can have any extension.  Use IFACE parameter to 
+      specify the target network interface within the configuration file.
+   ** Adds an optional parameter, SKIPTMPCLEAN, to skip the removal of 
+      files in /tmp at bootup.  Specify the variable in 
+      /etc/sysconfig/init_params.
+
+2011-05-31  DJ Lucas <dj@linuxfromscratch.org>
+   * lfs/init.d/udev: Add multiple udev triggers for both subsystems and
+     devices per upstream recommendation.
+
+2011-04-19  Bruce Dubbs <bdubbs@linuxfromscratch.org>
+   * lfs/init.d/mountvirtfs: Add creation of /run/{var,lock,shm}.
+   * lfs/init.d/udev: Add /dev/shm -> /run/shm symlink.
+
+2011-04-18  Bruce Dubbs <bdubbs@linuxfromscratch.org>
+   * lfs/init.d/mountvirtfs: Change name from mountkernfs to mountvirtfs.
+     Add mounting of /run filesystem.
+
+2010-05-29  Matt Burgess <matthew@linuxfromscratch.org>
+   * lfs/init.d/udev: Only copy /lib/udev/devices/null, as Udev >= 155 copies
+     devices from /lib/udev/devices to /dev itself.  Udevd still needs /dev/null
+     present before starting up though.
+
+2010-04-20  Bryan Kadzban <bryan@linuxfromscratch.org>
+   * lfs/init.d/udev, lfs/init.d/udev_retry: Add --action=add, to handle udev
+   version 152 and newer, which send "change" events by default in udevtrigger
+   now.
+
+2010-01-24  Matthew Burgess <matthew@linuxfromscratch.org>
+   * lfs/init.d/udev: Check to see if /dev is already mounted, as it may be if
+     under an initramfs environment.  See ticket #2550.
+
+2009-08-14  Bryan Kadzban <bryan@linuxfromscratch.org>
+   * lfs/init.d/udev_retry: Use "udevadm trigger --type=failed", which
+     apparently replaced "--retry-failed" some time ago.  "--retry-failed" is
+     removed in udev-146.
+
+2009-01-02  Bruce Dubbs <bdubbs@linuxfromscratch.org>
+   * lfs/init.d/functions:
+   * lfs/sysconfig/network-devices/ifup: 
+     Updated line widths to accommodate pdf generation in both the above 
+     files.
+
+2008-10-27  DJ Lucas <dj@linuxfromscratch.org>
+   * lfs/init.d/cleanfs: Removed '! -newer /proc' from find commands in
+     check for stale files in /var/lock and /var/run.
+   * Makefile: Reversed cleanfs and udev_retry scripts so that cleanfs
+     runs immediately after mountfs.
+
+2008-10-26  Dan Nicholson  <dnicholson@linuxfromscratch.org>
+   * lfs/init.d/functions: Remove stale pid files when encountered
+     in loadproc/killproc/reloadproc. When the bootscript specifies
+     a pid file to use with the "-p pidfile" argument, *proc
+     functions previously bailed out when the referenced file
+     contains an invalid pid.
+
+2008-10-23  DJ Lucas <dj@linuxfromscratch.org>
+   * lfs/init.d/console: Removed BROKEN_COMPOSE as kernel patch has
+     been accepted upstream.
+
+2008-05-21  Bryan Kadzban  <bryan@linuxfromscratch.org>
+   * lfs/init.d/udev, lfs/init.d/udev_retry: Use new udevadm program.
+
+2007-08-20  DJ Lucas <dj@linuxfromscratch.org>
+   * lfs/init.d/setclock: Added missing 'stop' argument to usage text
+
+2007-08-13  Dan Nicholson  <dnicholson@linuxfromscratch.org>
+   * lfs/init.d/checkfs: Don't suppress error messages from the screen.
+
+2007-07-18  Dan Nicholson  <dnicholson@linuxfromscratch.org>
+   * Makefile, lfs/init.d/consolelog: New bootscript controlling the
+     kernel log level on the console. This is controlled by the LOGLEVEL
+     variable in /etc/sysconfig/console.
+   * lfs/init.d/modules: Remove the log level handling since this is
+     done in the consolelog script now.
+   * lfs/init.d/modules: Clean up the script by removing the file
+     descriptor duplication and instead just redirecting
+     /etc/sysconfig/modules to the input of the while loop.
+
+2007-06-16  Dan Nicholson  <dnicholson@linuxfromscratch.org>
+   * lfs/init.d/mountfs, lfs/init.d/mountkernfs, lfs/init.d/setclock,
+     lfs/init.d/modules, lfs/sysconfig/network-devices/if{up,down}:
+     Don't suppress stderr during bootscripts unless necessary. This
+     would prevent potentially critical messages from reaching the screen.
+
+2007-04-24  Dan Nicholson  <dnicholson@linuxfromscratch.org>
+   * lfs/init.d/functions: When killproc is executed, it checks that
+     the process is still running, sleeps if it is, then checks again.
+     The sleep is 1 second in between checks. By sleeping for 0.1 seconds
+     in between checks, killproc is much faster as it's wasting much
+     less time sleeping in the normal case that the process has died
+     after a short delay.
+
+2007-04-16  Dan Nicholson  <dnicholson@linuxfromscratch.org>
+   * lfs/init.d/functions: Redirect stderr when using kill to suppress
+     output.
+   * lfs/init.d/functions: killproc() was not handling the case where a
+     pidfile is passed to the function. The logic with the signal to be
+     used was causing issues with the handling of pidfiles. This has been
+     fixes, and now killproc() will recheck the process if the signal
+     was TERM (the default) or KILL.
+   * lfs/init.d/functions: statusproc() has been changed to use pidofproc()
+     instead of the deprecated getpids(). Additionally, it now accepts
+     the -p argument to specify a pidfile.
+   * lfs/init.d/functions: Currently, statusproc() always returns
+     successfully, and the only way to know if the process is running
+     is to parse the output. This changes statusproc() to return the
+     status of pidofproc(), which will return unsuccessfully if the
+     requested process is not running.
+   * lfs/init.d/functions: Changed reloadproc() to use pidofproc() and
+     respect the -p argument for pidfiles.
+   * lfs/init.d/sysklogd: Remove a useless argument to reloadproc().
+
+2007-03-13  Dan Nicholson  <dnicholson@linuxfromscratch.org>
+   * lfs/init.d/functions: If pidofproc() is passed the -p argument
+     it can bomb testing a null variable with an integer expression.
+
+2007-02-22  Dan Nicholson  <dnicholson@linuxfromscratch.org>
+   * lfs/init.d/mountfs, lfs/init.d/console, lfs/init.d/setclock,
+     lfs/init.d/mountkernfs: &> redirection is not supported in POSIX.
+     Fortunately, it's equivalent to >word 2>&1 according to bash(1).
+
+2007-02-22  Dan Nicholson  <dnicholson@linuxfromscratch.org>
+   * lfs/init.d/console: POSIX says that shells only need to trap on
+     signals. Trapping on ERR isn't always supported. Conditionals have
+     been added to set the $failed variable in spots that seemed
+     appropriate for checking errors.
+
+2007-02-22  Dan Nicholson  <dnicholson@linuxfromscratch.org>
+   * lfs/init.d/functions: Use arithmetic expansion and string length,
+     which are both mandated by POSIX, rather than spawning two processes
+     every time boot_mesg() is called.
+
+2007-02-22  Dan Nicholson  <dnicholson@linuxfromscratch.org>
+   * lfs/init.d/functions: In order to provide an `echo' which provides
+     handles the -e and -n options for all POSIX shells, a feature test
+     is added which stores its result in $ECHO. /bin/echo will be used
+     if the default echo is not capable. Changed the existing functions
+     to reference $ECHO when needed.
+   * lfs/init.d/console: Use $ECHO when -en is needed.
+
+2007-02-03  Bryan Kadzban  <bryan@linuxfromscratch.org>
+   * ChangeLog: Rename from CHANGELOG, start using GNU style entries.
+
+   * Makefile: Move setclock before checkfs.  Fixes #1948.
+
+2006-11-25  Bryan Kadzban  <bryan@linuxfromscratch.org>
+   * lfs/init.d/udev_retry: Copy Debian's "copy generated rules" initscript
+     code, to clean up when the rule_generator scripts run before / is
+     writable.  (Since the rule_generator code is from Debian, I assume their
+     cleanup code is appropriate.)
+
+2006-10-15  Bryan Kadzban  <bryan@linuxfromscratch.org>
+   * lfs/init.d/udev_retry: Fix to work with udev >= 099.
+
+n/a - June 2, 2006
+   * Removed console config file and makefile targets.
+   * Removed references to /dev/bug and bugreport in udevand 
+     udev_retry bootscripts. (DJ Lucas)
+
+n/a - April 17, 2006
+   * Updated udev script to use the new udevsettle program.
+   * Added udev_retry script for systems that have /usr on a different
+     partition or for some other reason fail the initial replay. (Archaic)
+
+n/a - April 15, 2006
+   * Cleaned up contrib directory.  Removed: contrib/init.d, 
+     contrib/enhanced, contrib/livecd, contrib/hotplug, and raq2 
+     patch. (DJ Lucas)
+
+n/a - April 14, 2006
+   * Merged changes from udev_update branch (DJ Lucas)
+   * Replaced a return with an exit and reversed comment changes in 
+     udev bootscript. (Dan Nicholson)
+   * Replaced walk_sysfs function in udev bootscript with new udevtrigger
+     program and move wait_for_uevents function inline. (DJ Lucas)
+   * Removed extra evaluate_retval in udev bootscript. (Ken Moffat)
+   * Wait for uevents to be processed in the udev script.  See ticket
+     #1720 for details. (Matthew Burgess)
+
+n/a - March 21, 2006
+   * Removed old references to boot_log function and arguments passed
+     to boot_mesg_flush in echo_* functions. (DJ Lucas)
+
+n/a - March 10, 2006
+   * Moved src argument to ipv4-static-route service script and 
+     removed from ipv4-static service script. (DJ Lucas)
+
+n/a - March 8. 2006
+   * Correct sourced path in checkfs script. (Matthew Burgess)
+
+n/a - December 31, 2005
+   * Replaced /etc/rc.d with ${rc_base} in checkfs. (Vincent Fretin)
+
+n/a - December 24, 2005
+   * Added UTF-8 support to console script. (Alexander E. Patrakov)
+
+n/a - September 11, 2005
+   * Removed text wraping and boot logging.
+   * Changed killproc to use warning if not running
+   * Changed 'print_status warning' to use old style output
+   * Fixed display error with LSB init-functions script
+   * Made above killproc/print_status changes in enhanced
+     bootscripts.
+   * Made logger service configurable in enhanced 
+     bootscripts. (DJ Lucas)
+
+n/a - August 14, 2005
+   * Added -s flag to pidofproc() for backwards 
+     compatibility (DJ Lucas)
+   * Fixed erronous values returned by pidofproc() which 
+     broke the functionality of statusproc (DJ Lucas)
+
+n/a - July 1, 2005
+   * Changed a == to a = in lfs/init.d/functions, in the boot_mesg
+     function for ash compliancy (Nathan Coulson)
+
+n/a - June 26, 2005
+   * Removed consolelog script from contrib 
+   * Updated interactive rc script in contrib and added 
+     README.rc-Interactive, added install target to the
+     Makefile. (DJ Lucas)
+
+3.2.2 - May 29, 2005
+   * Tagged as 3.2.2 (Nathan Coulson)
+
+n/a - May 26, 2005
+   * Added minimal target for cross-lfs book (Jim Gifford)
+   * Fixed raq2 patch (Jim Gifford)
+
+3.2.1 - May 1, 2005
+   * Tagged as 3.2.1 (Nathan Coulson)
+
+n/a - April 17, 2005
+   * removed touch from hotplug bootscript (Matthew Burgess)
+   * moved commands around in localnet bootscript (Andrew Benton)
+
+3.2.0 - March 30, 2005
+   * Changed from syslog-ng to sysklogd (Archaic)
+   * Temporairly changed loadproc to return 0 if the program is
+     already running (Nathan Coulson)
+   * Fixed (by reverting) ifup/ifdown/network (Nathan Coulson),
+     Reported by Jim Gifford
+   * Fixed network up/down along with adding support of ONHOTPLUG
+   * Tagged as 3.2.0
+
+n/a - March 19, 2005
+   * Updated RaQ2 patch (Jim Gifford)
+   * Added net.agent for Hotplug of Network adapters in contrib
+     (Jim Gifford)
+
+n/a - March 16, 2005
+   * Reverted the change from loadproc to start_daemon,
+     Moved compatibility code into one single function.
+     (Nathan Coulson)
+   * Readded the ONHOTPLUG option for ifup/ifdown (Nathan Coulson)
+   * Fixed killproc's output
+
+n/a - March 01, 2005
+   * Added CHECK_LINK variable in ifconfig.*/*, so if the
+     interface does not exist, it will not fail.
+     (Nathan Coulson)
+
+n/a - February 19, 2005
+   * Added evaluate_retval to the end of loadproc and killproc.
+     lsb does not say that killproc should print [  OK  ],
+     but required for compatibility.  (Nathan Coulson)
+
+n/a - February 9, 2005
+   * Accidentally mounted /dev with 775 instead of 755, fixed
+     (Reported by Alexander E. Patrakov)
+
+n/a - February 9, 2005
+   * Bugfix for /dev, now mounted with 755 permission
+
+n/a - February 8, 2005
+   * changed pidof, so it doesn't check the process id
+     of running bootscripts, and to process shell scripts
+     (Nathan Coulson)
+
+n/a - February 6, 2005
+   * Updated main functions file with lsb functions file
+     Should now be LSB compliant (Nathan Coulson)
+
+n/a - January 10, 2005
+   * Moved ONBOOT check back to network (Nathan Coulson)
+   * Removed ONHOTPLUG check (Nathan Coulson)
+
+n/a - January 6, 2005
+   * fixed mountkernfs output (Nathan Coulson)
+   * reverted mountfs fakemounting (Nathan Coulson)
+
+n/a - January 5, 2005
+   * Attempted to simplify network bootup files (Nathan Coulson)
+   * Modified mountkernfs to use mountpoint (Nathan Coulson)
+   * Assuming sysfs is always mounted (Nathan Coulson)
+   * Moved fakemount to below mounting (Nathan Coulson)
+   * Removed -t noramfs from umount, as we now use tmpfs (Nathan Coulson)
+   * moved sysctl from mountkernfs to sysctl (Nathan Coulson)
+   * Added -q to sysctl (Nathan Coulson)
+
+n/a - January 2, 2005
+   * Fixed statusproc output. (DJ Lucas)
+
+3.1.0 - December 31, 2004
+   * fixed textoutput
+   * Tagged as 3.1.0
+
+n/a - December 30, 2004
+   * Fixed name of LSB Functions file
+   * Changed boot_mesg to act like echo instead of echo -n, boot_mesg now
+     takes the -n argument if you do not wish to goto the next line
+
+3.0.1 - December 25, 2004
+   * Released as 3.0.1
+
+n/a - December 20, 2004
+   * Cleaned up header.
+   * Added RaQ2 Patch
+
+n/a - December 16, 2004
+   * Fixed a text typo in udev, tmpfs instead of ramfs (Steve Crosby)
+
+n/a - December 14, 2004
+   * Fixed a warning with find in cleanfs
+
+
+3.0 - December 8, 2004
+
+n/a - December 5, 2004
+   * Moved bootlog to use local2 service to avoide conflict with
+     dhcpcd (DJ Lucas)
+
+3.0-rc1 - December 1, 2004
+   * rc-Interactive added (DJ Lucas)
+   * rc-Interactive moved to contrib (Nathan Coulson)
+
+n/a - November 27, 2004
+   * Moved bootlog to use local1 to avoid conflict with ppd (DJ Lucas)
+
+n/a - November 25, 2004
+   * Added consolelog to contrib/sysconfig (DJ Lucas)
+   * Rewrite of line wraping in boot_mesg and various fixes
+     related to boot_mesg changes (DJ Lucas, Alexander Patrakov)
+   * syslog-ng is now installed by default (Jeremy Utley)
+   * hotplug is now installed by default (Jeremy Utley)
+   * udev now uses /sbin/hotplug as the default hotplug handler
+     (Nathan Coulson)
+   * udev now mounts a tmpfs instead of a ramfs onto /dev,
+     as suggested by Greg K-H (Nathan Coulson)
+   * Created contrib/lsb, and added a LSB compliant functions file
+     (Nathan Coulson, and Alexander Patrakov)
+   * Modified find [requires find 4.2.3+] (Matthew Burgess)
+
+n/a - November 20, 2004
+   * Modifed modules script to return to previous kernel message
+     level (DJ Lucas)
+
+n/a - November 02, 2004
+   * Added sysctl -p to mountkernfs (Matthew Burgess, DJ Lucas)
+
+n/a - October 07, 2004
+   * statusproc modified not to send data to bootlog (Nathan Coulson)
+   * Fixed halt commands in checkfs and udev (James Robertson)
+
+n/a - October 04, 2004
+   * Fixes to commit on 2004/09/30 (James Robertson)
+   * Revert a few changes until later (Nathan Coulson)
+   * Added a warning about switching from a 8bit font
+     to a 9bit font (Alexander Patrakov)
+
+n/a - September 30, 2004
+   * Finished off boot_mesg() (James Robertson)
+   * Standardized all scripts to same variable format and other
+     internal sh/bash function calls (James Robertson)
+   * Fully implemented boot_mesg across all scripts in sysconfig
+     and init.d (James Robertson)
+
+n/a - September 26, 2004
+   * Added BOOTMESG_PREFIX variable, so users can optionally set a
+     prefix for boot messages (James Robertson)
+   * Fixed localnet status, to use ip instead of ifconfig (Jim Gifford)
+   * Added consolelog to contrib (DJ Lucas)
+   * loadproc and killproc can have the -nomsg parameter to avoid
+     calling evaluate_retval or print_status (Jim Gifford)
+   * boot_mesg no longer explicitly adds a \n onto end of lines
+   * Added a function called boot_mesg_flush, which can
+     dump the BOOTMESG to the bootlog.  This helps avoid making
+     everything have to end in OK/WARN/FAIL (Nathan Coulson)
+
+n/a - September 24, 2004
+   * Removed /dev/udev.tdb test
+
+n/a - September 23, 2004
+   * Fixed boot_log so it output's $@'s contents, not @$
+   * Added support for colors in boot_mesg (James Robertson)
+   * Modified udev's error checking
+   * Modified hotplug's error checking
+   * Converted checkfs's error handling to use boot_mesg with
+     color support
+   * Added $INFO color to functions (James Robertson)
+
+n/a - September 22, 2004
+   * Removed the dependency on wl by replacing it with grep (Bryan Kadzban)
+   * Fixed getpids, to remove unused pids obtained from $PIDFILE
+   * Removed ${NORMAL} from echo "$BOOTMESG" in functions, and removed
+      space added to each additional sentence tacked onto BOOTMESG
+   * boot_mesg now handles \n's properly, and does not dimish the size of
+     the next line (James Robertson)
+   * boot_log has been added.  The echo_ functions commit the log,
+     and then clear the BOOTMSG variable
+   * All scriptes have been converted to use boot_mesg
+
+n/a - September 21, 2004
+   * boot_mesg has been enhanced.  Subsequent calls will overwrite
+     previous text, and it will wrap text basedupon the variable ${WCOL}. 
+     (James Robertson)
+   * Fixed mtu optional service typo (Kevin P Fleming)
+   * Added SOURCE variable to ipv4-static-route (Kevin P Fleming)
+
+n/a - September 16, 2004
+   * nework interfaces are now brought down in reverse order
+
+n/a - September 15, 2004
+   * Added blue bracket, from dj's 3.0-pre1 bootscript package 
+     [echo_failure, echo_warning, and echo_ok]
+   * Added a new function called boot_mesg, meant to replace the echo
+     command.
+     This will give us the posibility of doing logging at a later date
+   * Do not set COLUMNS if COLUMNS is already set
+   * Modified getpids, loadproc, killproc, reloadproc, and statusproc as
+     done by DJ
+
+2.2.3 - September 04, 2004
+   * Tagged as 2.2.3
+
+n/a - September 04, 2004
+   * Added new script to contrib for syslog-ng, which is now part of
+     LFS-Unstable, and a new Makefile target install-syslog-ng which
+     removes the sysklogd links, and replaces them with syslog-ng (JU)
+
+2.2.2 - August 11, 2004
+   * Tagged as 2.2.2
+
+n/a - August 7, 2004
+   * Added missing error redirect (/dev/null) in getpids. (DJ)
+
+n/a - August 4, 2004
+   * Added MODE, DIRMODE, and CONFMODE variables to the makefile 
+     to allow permissions to be set at install. (DJ)
+
+n/a - July 31, 2004
+   
+   * Moved PIDFILE check to getpids and removed arguments from
+     killproc and reloadproc.  Signals are now set at beginning of
+     funtcions script with KILLDELAY. (DJ)
+   * Added a optional service script which can set the MTU for a given
+     interface
+
+n/a - July 21, 2004
+
+   * Committed DJ Lucas's patch for the killproc function.  It no 
+     longer requires arguments if PIDFILE is set
+   * added --backup to all sysconfig configuration files, so they are not
+     replaced on a make install
+
+n/a - July 13, 2004
+
+   * Added the PEER variable to the ifconfig.*/* file, done by
+     Kevin P. Fleming
+
+2.2.1 - July 12, 2004
+
+   * Tagged as 2.2.1
+
+n/a - July 12, 2004
+
+   * Hotplug was moved from rcsysinit.d to rc{1,2,3,4,5} to help bring
+     up/down network interfaces started by hotplug.  This has been revoked
+     at this time
+   * Networking interfaces are now brought down in reverse order
+   * Moved the ONBOOT check to within ifup/ifdown, so we can bring up/down
+     the interfaces at boottime/shutdown properly, done by Kevin P. Fleming
+   * Use PREFIX instead of NETMASK for adding addresses in ipv4-static,
+     done by Kevin P. Fleming
+   * Fix reversal of services inside ifconfig.* directories in ifdown,
+     done by Kevin P. Fleming
+   * Add ipv4-static-route service, supplied by Kevin P. Fleming
+
+2.2.0 - July 12, 2004
+
+   * Tagged as 2.2.0
+
+n/a - July 11, 2004
+
+   * Minor script output changes
+   * Repaired networking scripts broken in previous commits
+
+n/a - July 10, 2004
+
+   * We now use the ip program [from iproute2] instead of ipconfig
+     [net-tools] to bring up/down ethernet interfaces, and local
+     connections, submitted by Jim Gifford
+   * Removed gateway backward compatibility
+   * Removed ifup-eth0 ifdown-eth0 compatibility
+   * Removed the "assume SERVICE=static if SERVICE is unset" compatibility
+   * Pass the IFCONFIG environmental variable to services, so they can
+     locate the file with the parameters they must read
+   * Rename static to ipv4-static
+   * Stage1 for network configuration via directories, ifup and ifdown
+     modified, and the static service modified
+   * Stage2 for network configuration via directories complete, network was
+     modified to check within subdirectories for ONBOOT=yes.  Final Stage
+
+n/a - July 8, 2004
+
+   * Changed iso01 to lat1 everywhere in /etc/sysconfig/console. This
+     fixes the problem with line-drawing characters.
+
+n/a - July 7, 2004
+
+   * Halted the computer, if unable to mount /dev as a ramfs
+
+n/a - July 6, 2004
+
+   * Moved the hotplug bootscript back to contrib, it will not be used in
+     the testing branch of the lfs book at this time
+
+n/a - July 4, 2004
+
+   * Modified ifup and ifdown to be hotplug aware
+
+n/a - July 3, 2004
+
+   * Change the check for ONBOOT into a source within a subshell
+
+n/a - July 1, 2004
+
+   * Moved hotplug start to runlevels 3-5 from sysinit
+
+n/a - June 30, 2004
+
+   * Pass -depth in cleanfs
+
+n/a - June 29, 2004
+
+   * Made the grep for ONBOOT in the network script more exact
+
+2.1.2 - June 27, 2004
+
+   * Install the automatic module loading script by default
+   * Tagged as 2.1.2
+
+n/a - June 26, 2004
+
+   * Fixed font for UK in /etc/sysconfig/console
+
+n/a - June 23, 2004
+
+   * Fixed a typo in the hotplug installation procedure
+
+n/a - June 21, 2004
+
+   * Re-ordered the "mount" and "echo" commands in the udev script, to
+     prevent a possible race
+   * Converted the udev script to use udevsend/udevd
+   * Moved removal of /fastboot and /forcefsck to just after the root fs
+     becomes writable, and dropped the removal of /etc/nologin
+   * Cleaned and tweaked both the output and actions of cleanfs
+   * Removed the disabling of hotplug from sendsignals
+   * Removed anything that might call "rmmod" in hotplug, since rmmod is
+     notoriously troublesome in the 2.6.x kernels, and call it with the
+     stop argument from runlevels 0 and 6
+   * Fixed previous modifications to the udev and cleanfs scripts
+
+n/a - June 20, 2004
+
+   * Rolled back to the /dev/.udev.tdb check from 2.1.1, since the new
+     one doesn't work as well, and the bug that caused it to change is
+     now fixed
+
+n/a - June 18, 2004
+
+   * Updated sysconfig/console
+   * Fixed disabling hotplug in sendsignals
+   * hotplug is now installed by default
+
+n/a - June 15, 2004
+
+   * Reset /proc/sys/kernel/hotplug to /bin/true when running the "stop"
+     command for hotplug
+   * Cleaned the output of the mountkernfs script
+   * Don't output "Creating files and directories" when it's a lie
+
+n/a - June 8, 2004
+
+   * Changed the location the optional module script is installed to
+     /etc/rc.d/rcsysinit.d/S05modules.
+
+n/a - June 4, 2004
+
+   * Added a echo to the > /proc/sys/kernel/hotplug line, as > did not
+     clear it
+
+n/a - June 3, 2004
+
+   * Added '> /proc/sys/kernel/hotplug' to sendsignals, to disable hotplug
+     events, which may start up new daemons
+   * Added elementry bootup logging support.  If it can write to
+     /var/log/boot.log, it will
+   * Removed logging support, it kept / from being remounted ro
+
+n/a - June 2, 2004
+
+   * Reorganize what goes on in the udev script
+   * Reorganize what goes on in the hotplug script
+   * Moved setting /sbin/hotplug as the default hotplug manager into the
+     hotplug script
+
+n/a - June 1, 2004
+
+   * Removed usbfs from mountkernfs, and mountfs
+   * Edited the udev script, so it'll always set /proc/sys/kernel/hotplug
+
+n/a - May 24, 2004
+
+   * Added more example keymaps and font settings to /etc/sysconfig/console
+   * Install the /etc/sysconfig/console file by default
+
+n/a - May 23, 2004
+
+   * Changed the symlink for the optional modules script
+   * Removed depmod from the optional modules script
+
+n/a - May 20, 2004
+
+   * Removed the random script.  There is not a strong enough case for
+     adding it to the lfs-bootscripts.
+
+n/a - May 19, 2004
+
+   * Added the random bootscript from blfs-bootscripts
+
+2.1.1 - May 18, 2004
+
+   * Fixed installation of modules configuration
+   * Tagged as 2.1.1
+
+n/a - May 16, 2004
+
+   * Added sysklogd configuration file
+   * Added example /etc/sysconfig/console file
+   * Do not attempt to populate /dev if that directory has already been
+     set up earlier in bootup (such as on initramfs/initrd)
+   * Prevent excessive kernel output once klogd starts
+   * Added hotplug script
+
+n/a - May 15, 2004
+
+   * Namespace rework (enumeration of scripts is now cleaner)
+   * Removed directories: blfs, contrib/new-boot-0.2, contrib/rlv
+
+n/a - May 13, 2004
+
+   * Repaired the console script
+   * Added a check to cleanfs [createfiles], to make sure that we have
+     a valid devicetype, if we have type=dev
+
+n/a - May 11, 2004
+
+   * Added usbfs to mountkernfs and mountfs
+
+n/a - May 6, 2004
+
+   * Don't use loadproc in localnet, it's not meant for that
+   * Quote tests of $PIDFILE, so that things behave when it's empty
+   * Removed unused kill -0 from killproc
+
+2.1.0 - May 4, 2004
+
+   * Update to the console script, prevent install of the console script
+   * Chgrp /var/run/utmp to group utmp if it exists.
+   * Moved udev from contrib to lfs
+   * Moved GATEWAY setup from /etc/rc.d/init.d/network to
+     /etc/sysconfig/network-devices/services/static
+   * Use the contents of $PIDFILE, if it is set in the script
+   * Tagged as 2.1.0.
+
+n/a - April 30, 2004
+
+   * Moved the loadkeys script to console, and added setfont.  Contributed
+     by Alexander E. Patrakov
+
+2.0.5 - April 29, 2004
+
+   * Added the heimdal init script.
+   * Tagged as 2.0.5
+
+2.0.4 - April 27, 2004
+
+   * Tagged as 2.0.4
+
+n/a - April 24, 2004
+
+   * Added a example script for /etc/sysconfig/createfiles
+   * Added a check for /sys before mounting sysfs
+   * Added -t noramfs to umount on /etc/rc.d/init.d/mountfs.
+     This will prevent /dev from being unmounted, if /proc/mounts
+     is symlinked to /etc/mtab
+
+n/a - April 18, 2004
+
+   * Small fix to a if statement in netfs
+
+n/a - April 17, 2004
+
+   * Added the lisa bootscript, lisa is part of the KDE Network package
+   * Add proper error checking to the mountfs script when writing out mtab
+   * Add more comments to the udev script, and conditionalize various
+     things that should've been done this way in the first place
+   * Include a template module auto-loading configuration file instead of
+     having syntax comments in the script itself
+
+n/a - April 12, 2004
+
+   * Added a automatic modules loading script to the contrib directory
+     submitted by Zack
+   * Edited mountkernfs, so that if you can mount sysfs on /sys, it will
+     be mounted at boottime.  Should not affect 2.4 systems
+   * Since all entries are added to /etc/mtab, we should not require
+     the NO_FS variable.  It has been removed from mountfs
+   * Added the udev script into the contrib directory, submitted by Zack
+
+2.0.3 - April 8, 2004
+
+   * Updated cleanfs, so it can create devices.  Supplied by Zack
+   * Tagged as 2.0.3
+
+n/a - March 31, 2004
+
+   * Changed "Press Enter" on unknown error to white
+   * Moved S10swap to S20swap.  When udev is added, it has to be
+     ran before swap is setup
+
+n/a - March 29, 2004
+
+   * Fixed the rc5.d symlink for ntp so it creates S26ntp instead
+     of S26npt
+   * Moved S20mountkernfs to S00mountkernfs in rcsysinit.d.  Will help in
+     the addition of udev in the future.
+
+n/a - March 27, 2004
+
+   * Changed gdm path from hardcoded to program name.  There are 2 spots
+     gnome can be installed
+
+n/a - March 26, 2004
+
+   * Updated fam daemon script.  It now uses the famd daemon instead of fam
+
+n/a - March 24, 2004
+
+   * Removed mount command out of nfs.  the netfs script already handles
+     this
+
+2.0.2 - March 24, 2004
+
+   * Edited cleanfs to solve a problem.  [if /tmp does not exist, it
+     could run the find command on the root filesystem]
+   * Tagged as 2.0.2
+
+2.0.1 - March 24, 2004
+
+   * Found typo in BLFS MySQL Script.
+   * Tagged as 2.0.1
+
+2.0.0 - March 23, 2004
+
+   * Tagged as 2.0.0, no changes from 2.0.0-pre2
+
+2.0.0-pre2 - March 23, 2004
+
+   * Cleaned the /tmp directory on bootup.  find command supplied by Zack
+   * Added a script which can automatically create files and directories
+     on startup.  [Handles files/directories, permissions, and user/group].
+     Created by Zack
+   * Added blfs/init.d/fam script
+   * Tagged as 2.0.0-pre2
+
+n/a - March 20, 2004
+
+   * Added create-service-dir target and removed from create-dirs
+   * Changed service script install targets to use
+     create-service-dir
+   * Added check for dhcpcd service script for stale pid file 
+     Suggested by Jeremy
+   * Added ifconfig to ipx service script for hosting device not up
+
+n/a - March 19, 2004
+
+   * Added support for ETCDIR, and DESTDIR in the Makefile,
+     compliments of Tushar
+   * Renamed mountproc to mountkernfs
+   * Updated the README file
+   * Coloured the print_error_message in functions red
+   * added stop to the setclock script
+   * changed echo > to > in cleanfs, suggested by winkie
+   * BLFS Scripts Added,  collected by Zack
+   * Edited killproc, so it checks for running pids, rather then
+     the completion of the above kill command.  Suggested by Zack
+   * Added network services found in blfs, removed adsl.  Submitted by
+     DJ.
+
+1.99.4 - March 17, 2004
+
+   * Fixed one last halt line in checkfs script
+   * Moved the directory structure around
+   * Tagged as development release 1.99.4
+
+n/a - February 28, 2004
+
+   * Added stty sane to the top of rc.d/init.d/rc.  Hopefully, this will
+     fix the problems
+   * Also changed all instances of <ctrl-j> back to enter
+
+1.99.3 - February 23, 2004
+
+   * Tagged as development release 1.99.3
+
+n/a - February 19, 2004
+
+   * Fixed checkfs script, so it will no longer continue to boot after a
+     failure in the init.d/checkfs script.  Tested with the help of Andre
+     Müller.  Fix suggested by Zack
+
+n/a - February 7, 2004
+
+   * Added -s onto grep on network stop
+   * Replaced a few more enter's with ctrl-j
+
+1.99.2 - February 6, 2004
+
+   * Added -s onto grep in network start
+   * Tagged as development release 1.99.2
+
+n/a - February 4, 2004
+
+   * Fixed $WARNING $NORMAL and $ERROR lines, broken by changes in
+     functions
+   * Changed above fixes to work with ash
+   * Fixed checkfs symlink in Makefile
+   * functions is no longer installed as executable
+   * Added a check to checkfs, for errors above 16.  These are caused by
+     being unable to run fsck, either due to user input, or a unfunctional
+     linux system
+
+1.99.1 - February 2, 2004
+
+   * Tagged as development release 1.99.1
+
+n/a - February 2, 2004:
+
+   * Added -d to umount in mountfs.
+   * Fixed network shutdown script
+   * Fixed Makefile rc.6 to reboot
+   * Added -s flag to grep command in rc.d/init.d/network -
+     suppresses an error if no ifconfig.* files exist
+
+n/a - January 30, 2004:
+
+   * Reorganized the network system to accept multiple services.
+   * Ash Compliancy
+   * Modified some scripts to follow template
+   * Reorganized functions, based upon Ash Compliancy Patch
+   * Added a sleep 5 to failure for evaulate_retval, and changed
+     evaulate_retval to return true instead of false.  Instead, a
+     exit 1 will indicate the script terminated abnormally, causing
+     your system to wait until you hit ctrl-J
+   * Switched "Press enter to continue" to "Press <ctrl-j> to continue"
+   * replaced 3 with $KILLDELAY in sendsignals
+   * mountfs does not mount network filesystems [identified by _netdev
+     in /etc/fstab]
+   * removed unneded touch out of cleanfs
+
+n/a - January 30, 2004:
+
+   * New maintainers for the lfs-bootscripts package are:
+     Jeremy Utley (jeremy@linuxfromscratch.org)
+     Nathan Coulson (nathan@linuxfromscratch.org)
+
+1.11 - February 3rd, 2003:
+
+   * /etc/mtab is now a real file and is handled correctly so there are
+   no errors even when the machine has crashed.
+
+1.10 - September 12th, 2002:
+
+   * Fixed up checkfs to work with non-ext2 filesystems too (such as
+     minix).
+
+1.9 - April 5th, 2002:
+
+   * reloadproc function had a missing '=' in the "failure 1" command (it
+     should be failure=1)
+
+   * When script exists with unexpected value, you have to hit "Enter" to
+     continue, not just a random key as printed on the screen.
+
+   * Moved K10sysklogd, K20sendsignals, K30mount and K40swap to
+     K40sysklogd, K50sendsignals, K60mount, K70swap
+
+   * Changed the #!/bin/sh lines to #!/bin/bash - /bin/sh may not be
+     linked to bash but to some other shell of your choice. These scripts
+     are written to work with bash, so you can't just run them when
+     /bin/sh -> csh or ash or whatever else tickles your fancy. This
+     change should fix that.
+
+1.8 - March 14th, 2002:
+
+   * Fixed the getpids function call so PPID's would be taken into account
+     properly.
+
+   * Added the 'contrib' directory with other people's bootscript
+     implementations.
+
+1.7 - March 10th, 2002:
+
+   * Used code from Matthias Benkmann's simpleinit-msb @
+     http://winterdrache.de/linux/newboot/index.html mainly for improved
+     killproc function handling
+
+   * When a requested process isn't running, or is already running, a
+     warning "Not running" or "Already running" will be displayed. This
+     was out of allignment due to a missing $CURS_UP
+
+   * Removed "||exit" from ifup and ifdown scripts. They are useless.
+
+   * Changed the loadkeys script to run "loadkeys -d" and removed the need
+     for the /etc/sysconfig/keyboard file. The kbd patch fixes the
+     "loadkeys -d" behaviour.
+
+1.6 - February 26th, 2002:
+
+   * replaced -o %PPID with -o $PPID throughout the functions script. This
+     construct does what it's supposed to do (don't take PPID into account
+     because this would fail if a running daemon and the bootscript have
+     the same name).
+
+   * added 'restart' to the swap script
+
+   * instead of using 'echo -n' to suppress newlines so the [ OK ] and
+     related messages align properly, substitute this with a single echo
+     command that simply goes one line up before outputting anything. This
+     also has the benefit that when programs have their own output (like
+     swapon, fsck and loadkeys), there won't be an unwanted blank line
+     between the program's output and the [ OK ] et all. messages.
+
+1.5 - February 2nd, 2002:
+
+   * added 'exit 1' to the statusproc function when there aren't enough
+   parameters passed to it (such as the name of process to check for)
+
+1.4 - February 2nd, 2002:
+
+   * when /fastboot is detected and the message about it is printed,
+     don't run 'exit 1' else the rc script will cause a [FAILED] to
+     be printed which is undesired in this case.
+
+1.3 - January 30th, 2002:
+   * network script: changed default route detection by using the same
+     method as used when starting the script: check if the GATEWAY
+     variable is set
+
+   * removed the emptying of /etc/mtab since it's a symlink to
+     /proc/mounts now
+
+   * added the mountproc script which mounts the proc system. This is done
+     because we need proc mounted even before the mountfs script is ran
+     (now that /etc/mtab is a symlink to /proc/mounts)
+
+   * removed all absolute paths from command calls
+
+   * added umask 022 and PATH="/bin:/usr/bin:/sbin:/usr/sbin" to the
+     functions script. Every file now sources this so that umask and PATH
+     are set correctly
+
+1.2 - January 26th, 2002:
+   * network script: detect if a default route is set before removing it
+

+ 40 - 0
systemd-units/Makefile

@@ -0,0 +1,40 @@
+EXTDIR=${DESTDIR}/etc
+TMPFILESDIR=${EXTDIR}/tmpfiles.d
+LIBDIR=${DESTDIR}/lib
+SERVICEDIR=${LIBDIR}/services
+UNITDIR=${LIBDIR}/systemd/system
+MAN8=${DESTDIR}/usr/share/man/man8
+SBIN=${DESTDIR}/sbin
+MODE=755
+DIRMODE=755
+CONFMODE=644
+
+install: files
+
+create-dirs:
+	install -d -m ${DIRMODE}  ${EXTDIR}/sysconfig
+	install -d -m ${DIRMODE}  ${TMPFILESDIR}
+	install -d -m ${DIRMODE}  ${SERVICEDIR}
+	install -d -m ${DIRMODE}  ${UNITDIR}
+	install -d -m ${DIRMODE}  ${MAN8}
+	install -d -m ${DIRMODE}  ${SBIN}
+	ln -sfn       services    ${LIBDIR}/lsb
+
+files: create-dirs
+	install -m ${CONFMODE} lfs/tmpfiles/nscd.conf ${TMPFILESDIR}
+	install -m ${MODE} lfs/sbin/ifup            ${SBIN}
+	install -m ${MODE} lfs/sbin/ifdown          ${SBIN}
+	install -m ${MODE} lfs/sbin/ifup.8          ${MAN8}
+	ln -sf  ifup.8                              ${MAN8}/ifdown.8
+	install -m ${MODE} lfs/lib/services/ipv4-static-route  ${SERVICEDIR}
+	install -m ${MODE} lfs/lib/services/ipv4-static        ${SERVICEDIR}
+	install -m ${CONFMODE} lfs/lib/services/init-functions ${SERVICEDIR}
+	install -m ${CONFMODE} lfs/units/ifupdownat.service ${UNITDIR}/ifupdown@.service
+	install -m ${CONFMODE} lfs/units/nscd.service ${UNITDIR}
+
+uninstall:
+	rm -rf ${TMPFILESDIR}/nscd.conf ${SERVICEDIR} ${LIBDIR}/lsb \
+               ${UNITDIR}/ifupdown@.service ${UNITDIR}/nscd.service ${SBIN}/ifup \
+               ${SBIN}/ifdown ${MAN8}/ifup.8 ${MAN8}/ifdown.8
+
+.PHONY: all create-dirs install files uninstall

+ 27 - 0
systemd-units/README

@@ -0,0 +1,27 @@
+Network Configuration:
+   Script Files:
+      /sbin/ifup
+      /sbin/ifdown
+      /lib/lsb/*
+
+   Configuration Files:
+      /etc/sysconfig/ifconfig.*
+      Note: ifconfig.* files will be processed
+            in alphanumerical order on boot, and reversed on shutdown.
+      - IFACE  : The interface that is being configured (e.g. eth0)
+      - SERVICE: Which script to run in services directory.
+      - ONBOOT : If set to yes, this interface will be started on bootup
+
+   Additional Configuration:
+      SERVICE ipv4-static:
+      - IP       : Static IP Address
+      - GATEWAY  : Specifies the IP Address of the gateway server
+      - PREFIX   : CIDR prefix of IP Address, defaults to 24 if not set
+      - PEER     : IP Address of peer (for point-to-point connections and tunnels)
+      - BROADCAST: Broadcast address
+
+      SERVICE ipv4-static-route:
+      - TYPE   : Network (default type if not specified), default, host or unreachable
+      - IP     : IP Address of target (for network, host and unreachable)
+      - PREFIX : CIDR prefix of target (for network, host and unreachable)
+      - GATEWAY: IP Address of gateway to reach target (for network and default)

+ 800 - 0
systemd-units/lfs/lib/services/init-functions

@@ -0,0 +1,800 @@
+#!/bin/sh
+########################################################################
+# 
+# Begin /lib/lsb/init-funtions
+#
+# Description : Run Level Control Functions
+#
+# Authors     : Gerard Beekmans - gerard@linuxfromscratch.org
+#             : DJ Lucas - dj@linuxfromscratch.org
+# Update      : Bruce Dubbs - bdubbs@linuxfromscratch.org
+#
+# Version     : LFS 7.0
+#
+# Notes       : With code based on Matthias Benkmann's simpleinit-msb
+#               http://winterdrache.de/linux/newboot/index.html
+#
+#               The file should be located in /lib/lsb
+#
+########################################################################
+
+## Environmental setup
+# Setup default values for environment
+umask 022
+export PATH="/bin:/usr/bin:/sbin:/usr/sbin"
+
+## Screen Dimensions
+# Find current screen size
+if [ -z "${COLUMNS}" ]; then
+   COLUMNS=$(stty size)
+   COLUMNS=${COLUMNS##* }
+fi
+
+# When using remote connections, such as a serial port, stty size returns 0
+if [ "${COLUMNS}" = "0" ]; then
+   COLUMNS=80
+fi
+
+## Measurements for positioning result messages
+COL=$((${COLUMNS} - 8))
+WCOL=$((${COL} - 2))
+
+## Set Cursor Position Commands, used via echo
+SET_COL="\\033[${COL}G"      # at the $COL char
+SET_WCOL="\\033[${WCOL}G"    # at the $WCOL char
+CURS_UP="\\033[1A\\033[0G"   # Up one line, at the 0'th char
+CURS_ZERO="\\033[0G"
+
+## Set color commands, used via echo
+# Please consult `man console_codes for more information
+# under the "ECMA-48 Set Graphics Rendition" section
+#
+# Warning: when switching from a 8bit to a 9bit font,
+# the linux console will reinterpret the bold (1;) to
+# the top 256 glyphs of the 9bit font.  This does
+# not affect framebuffer consoles
+
+NORMAL="\\033[0;39m"         # Standard console grey
+SUCCESS="\\033[1;32m"        # Success is green
+WARNING="\\033[1;33m"        # Warnings are yellow
+FAILURE="\\033[1;31m"        # Failures are red
+INFO="\\033[1;36m"           # Information is light cyan
+BRACKET="\\033[1;34m"        # Brackets are blue
+
+# Use a colored prefix
+BMPREFIX="     "
+SUCCESS_PREFIX="${SUCCESS}  *  ${NORMAL}"
+FAILURE_PREFIX="${FAILURE}*****${NORMAL}"
+WARNING_PREFIX="${WARNING} *** ${NORMAL}"
+
+SUCCESS_SUFFIX="${BRACKET}[${SUCCESS}  OK  ${BRACKET}]${NORMAL}"
+FAILURE_SUFFIX="${BRACKET}[${FAILURE} FAIL ${BRACKET}]${NORMAL}"
+WARNING_SUFFIX="${BRACKET}[${WARNING} WARN ${BRACKET}]${NORMAL}"
+
+ENABLE_LOG=0
+BOOTLOG=/run/var/bootlog
+KILLDELAY=3
+
+################################################################################
+# start_daemon()                                                               #
+# Usage: start_daemon [-f] [-n nicelevel] [-p pidfile] pathname [args...]      #
+#                                                                              #
+# Purpose: This runs the specified program as a daemon                         #
+#                                                                              #
+# Inputs: -f: (force) run the program even if it is already running.           #
+#         -n nicelevel: specify a nice level. See 'man nice(1)'.               #
+#         -p pidfile: use the specified file to determine PIDs.                #
+#         pathname: the complete path to the specified program                 #
+#         args: additional arguments passed to the program (pathname)          #
+#                                                                              #
+# Return values (as defined by LSB exit codes):                                #
+#       0 - program is running or service is OK                                #
+#       1 - generic or unspecified error                                       #
+#       2 - invalid or excessive argument(s)                                   #
+#       5 - program is not installed                                           #
+################################################################################
+start_daemon()
+{
+    local force=""
+    local nice="0"
+    local pidfile=""
+    local pidlist=""
+    local retval=""
+
+    # Process arguments
+    while true
+    do
+        case "${1}" in
+
+            -f)
+                force="1"
+                shift 1
+                ;;
+
+            -n)
+                nice="${2}"
+                shift 2
+                ;;
+
+            -p)
+                pidfile="${2}"
+                shift 2
+                ;;
+
+            -*)
+                return 2
+                ;;
+
+            *)
+                program="${1}"
+                break
+                ;;
+        esac
+    done
+
+    # Check for a valid program
+    if [ ! -e "${program}" ]; then return 5; fi
+
+    # Execute
+    if [ -z "${force}" ]; then
+        if [ -z "${pidfile}" ]; then
+            # Determine the pid by discovery
+            pidlist=`pidofproc "${1}"`
+            retval="${?}"
+        else
+            # The PID file contains the needed PIDs
+            # Note that by LSB requirement, the path must be given to pidofproc,
+            # however, it is not used by the current implementation or standard.
+            pidlist=`pidofproc -p "${pidfile}" "${1}"`
+            retval="${?}"
+        fi
+
+        # Return a value ONLY 
+        # It is the init script's (or distribution's functions) responsibilty
+        # to log messages!
+        case "${retval}" in
+
+            0)
+                # Program is already running correctly, this is a 
+                # successful start.
+                return 0
+                ;;
+
+            1)
+                # Program is not running, but an invalid pid file exists
+                # remove the pid file and continue
+                rm -f "${pidfile}"
+                ;;
+
+            3)
+                # Program is not running and no pidfile exists
+                # do nothing here, let start_deamon continue.
+                ;;
+
+            *)
+                # Others as returned by status values shall not be interpreted
+                # and returned as an unspecified error.
+                return 1
+                ;;
+        esac
+    fi
+
+    # Do the start!
+    nice -n "${nice}" "${@}"
+}
+
+################################################################################
+# killproc()                                                                   #
+# Usage: killproc [-p pidfile] pathname [signal]                               #
+#                                                                              #
+# Purpose: Send control signals to running processes                           #
+#                                                                              #
+# Inputs: -p pidfile, uses the specified pidfile                               #
+#         pathname, pathname to the specified program                          #
+#         signal, send this signal to pathname                                 #
+#                                                                              #
+# Return values (as defined by LSB exit codes):                                #
+#       0 - program (pathname) has stopped/is already stopped or a             #
+#           running program has been sent specified signal and stopped         #
+#           successfully                                                       #
+#       1 - generic or unspecified error                                       #
+#       2 - invalid or excessive argument(s)                                   #
+#       5 - program is not installed                                           #
+#       7 - program is not running and a signal was supplied                   #
+################################################################################
+killproc()
+{
+    local pidfile
+    local program
+    local prefix
+    local progname
+    local signal="-TERM"
+    local fallback="-KILL"
+    local nosig
+    local pidlist
+    local retval
+    local pid
+    local delay="30"
+    local piddead
+    local dtime
+
+    # Process arguments
+    while true; do
+        case "${1}" in
+            -p)
+                pidfile="${2}"
+                shift 2
+                ;;
+ 
+             *)
+                 program="${1}"
+                 if [ -n "${2}" ]; then
+                     signal="${2}"
+                     fallback=""
+                 else
+                     nosig=1
+                 fi
+
+                 # Error on additional arguments
+                 if [ -n "${3}" ]; then
+                     return 2
+                 else 
+                     break
+                 fi                 
+                 ;;
+        esac
+    done
+
+    # Check for a valid program
+    if [ ! -e "${program}" ]; then return 5; fi
+
+    # Check for a valid signal
+    check_signal "${signal}"
+    if [ "${?}" -ne "0" ]; then return 2; fi
+
+    # Get a list of pids
+    if [ -z "${pidfile}" ]; then
+        # determine the pid by discovery
+        pidlist=`pidofproc "${1}"`
+        retval="${?}"
+    else
+        # The PID file contains the needed PIDs
+        # Note that by LSB requirement, the path must be given to pidofproc,
+        # however, it is not used by the current implementation or standard.
+        pidlist=`pidofproc -p "${pidfile}" "${1}"`
+        retval="${?}"
+    fi
+
+    # Return a value ONLY
+    # It is the init script's (or distribution's functions) responsibilty
+    # to log messages!
+    case "${retval}" in
+
+        0)
+            # Program is running correctly
+            # Do nothing here, let killproc continue.
+            ;;
+
+        1)
+            # Program is not running, but an invalid pid file exists
+            # Remove the pid file.
+            rm -f "${pidfile}"
+
+            # This is only a success if no signal was passed.
+            if [ -n "${nosig}" ]; then
+                return 0
+            else
+                return 7
+            fi
+            ;;
+
+        3)
+            # Program is not running and no pidfile exists
+            # This is only a success if no signal was passed.
+            if [ -n "${nosig}" ]; then
+                return 0
+            else
+                return 7
+            fi
+            ;;
+
+        *)
+            # Others as returned by status values shall not be interpreted
+            # and returned as an unspecified error.
+            return 1
+            ;;
+    esac
+
+    # Perform different actions for exit signals and control signals
+    check_sig_type "${signal}"
+
+    if [ "${?}" -eq "0" ]; then # Signal is used to terminate the program
+
+        # Account for empty pidlist (pid file still exists and no 
+        # signal was given)
+        if [ "${pidlist}" != "" ]; then
+
+            # Kill the list of pids
+            for pid in ${pidlist}; do
+
+                kill -0 "${pid}" 2> /dev/null
+
+                if [ "${?}" -ne "0" ]; then
+                    # Process is dead, continue to next and assume all is well
+                    continue
+                else
+                    kill "${signal}" "${pid}" 2> /dev/null
+
+                    # Wait up to ${delay}/10 seconds to for "${pid}" to 
+                    # terminate in 10ths of a second
+
+                    while [ "${delay}" -ne "0" ]; do
+                        kill -0 "${pid}" 2> /dev/null || piddead="1"
+                        if [ "${piddead}" = "1" ]; then break; fi
+                        sleep 0.1
+                        delay="$(( ${delay} - 1 ))"
+                    done
+
+                    # If a fallback is set, and program is still running, then
+                    # use the fallback
+                    if [ -n "${fallback}" -a "${piddead}" != "1" ]; then
+                        kill "${fallback}" "${pid}" 2> /dev/null
+                        sleep 1
+                        # Check again, and fail if still running
+                        kill -0 "${pid}" 2> /dev/null && return 1
+                    fi
+                fi
+            done
+        fi
+
+        # Check for and remove stale PID files.
+        if [ -z "${pidfile}" ]; then
+            # Find the basename of $program
+            prefix=`echo "${program}" | sed 's/[^/]*$//'`
+            progname=`echo "${program}" | sed "s@${prefix}@@"`
+
+            if [ -e "/var/run/${progname}.pid" ]; then
+                rm -f "/var/run/${progname}.pid" 2> /dev/null
+            fi
+        else
+            if [ -e "${pidfile}" ]; then rm -f "${pidfile}" 2> /dev/null; fi
+        fi
+
+    # For signals that do not expect a program to exit, simply
+    # let kill do it's job, and evaluate kills return for value
+
+    else # check_sig_type - signal is not used to terminate program
+        for pid in ${pidlist}; do
+            kill "${signal}" "${pid}"
+            if [ "${?}" -ne "0" ]; then return 1; fi
+        done
+    fi
+}
+
+################################################################################
+# pidofproc()                                                                  #
+# Usage: pidofproc [-p pidfile] pathname                                       #
+#                                                                              #
+# Purpose: This function returns one or more pid(s) for a particular daemon    #
+#                                                                              #
+# Inputs: -p pidfile, use the specified pidfile instead of pidof               #
+#         pathname, path to the specified program                              #
+#                                                                              #
+# Return values (as defined by LSB status codes):                              #
+#       0 - Success (PIDs to stdout)                                           #
+#       1 - Program is dead, PID file still exists (remaining PIDs output)     #
+#       3 - Program is not running (no output)                                 #
+################################################################################
+pidofproc()
+{
+    local pidfile
+    local program
+    local prefix
+    local progname
+    local pidlist
+    local lpids
+    local exitstatus="0"
+
+    # Process arguments
+    while true; do
+        case "${1}" in
+
+            -p)
+                pidfile="${2}"
+                shift 2
+                ;;
+
+            *)
+                program="${1}"
+                if [ -n "${2}" ]; then
+                    # Too many arguments
+                    # Since this is status, return unknown
+                    return 4
+                else
+                    break
+                fi
+                ;;
+        esac
+    done
+
+    # If a PID file is not specified, try and find one.
+    if [ -z "${pidfile}" ]; then
+        # Get the program's basename
+        prefix=`echo "${program}" | sed 's/[^/]*$//'`
+
+        if [ -z "${prefix}" ]; then 
+           progname="${program}"
+        else
+           progname=`echo "${program}" | sed "s@${prefix}@@"`
+        fi
+
+        # If a PID file exists with that name, assume that is it.
+        if [ -e "/var/run/${progname}.pid" ]; then
+            pidfile="/var/run/${progname}.pid"
+        fi
+    fi
+
+    # If a PID file is set and exists, use it.
+    if [ -n "${pidfile}" -a -e "${pidfile}" ]; then
+
+        # Use the value in the first line of the pidfile
+        pidlist=`/bin/head -n1 "${pidfile}"`
+        # This can optionally be written as 'sed 1q' to repalce 'head -n1'
+        # should LFS move /bin/head to /usr/bin/head
+    else
+        # Use pidof
+        pidlist=`pidof "${program}"`
+    fi
+
+    # Figure out if all listed PIDs are running.
+    for pid in ${pidlist}; do
+        kill -0 ${pid} 2> /dev/null
+
+        if [ "${?}" -eq "0" ]; then
+            lpids="${lpids}${pid} "
+        else
+            exitstatus="1"
+        fi
+    done
+
+    if [ -z "${lpids}" -a ! -f "${pidfile}" ]; then
+        return 3
+    else
+        echo "${lpids}"
+        return "${exitstatus}"
+    fi
+}
+
+################################################################################
+# statusproc()                                                                 #
+# Usage: statusproc [-p pidfile] pathname                                      #
+#                                                                              #
+# Purpose: This function prints the status of a particular daemon to stdout    #
+#                                                                              #
+# Inputs: -p pidfile, use the specified pidfile instead of pidof               #
+#         pathname, path to the specified program                              #
+#                                                                              #
+# Return values:                                                               #
+#       0 - Status printed                                                     #
+#       1 - Input error. The daemon to check was not specified.                #
+################################################################################
+statusproc()
+{
+   local pidfile
+   local pidlist
+
+   if [ "${#}" = "0" ]; then
+      echo "Usage: statusproc [-p pidfle] {program}"
+      exit 1
+   fi
+
+   # Process arguments
+   while true; do
+       case "${1}" in
+
+           -p)
+               pidfile="${2}"
+               shift 2
+               ;;
+
+           *)
+               if [ -n "${2}" ]; then
+                   echo "Too many arguments"
+                   return 1
+               else
+                   break
+               fi
+               ;;
+       esac
+   done
+
+   if [ -n "${pidfile}" ]; then
+      pidlist=`pidofproc -p "${pidfile}" $@`
+   else
+      pidlist=`pidofproc $@`
+   fi
+
+   # Trim trailing blanks
+   pidlist=`echo "${pidlist}" | sed -r 's/ +$//'`
+
+   base="${1##*/}"
+
+   if [ -n "${pidlist}" ]; then
+      /bin/echo -e "${INFO}${base} is running with Process" \
+         "ID(s) ${pidlist}.${NORMAL}"
+   else
+      if [ -n "${base}" -a -e "/var/run/${base}.pid" ]; then
+         /bin/echo -e "${WARNING}${1} is not running but" \
+            "/var/run/${base}.pid exists.${NORMAL}"
+      else
+         if [ -n "${pidfile}" -a -e "${pidfile}" ]; then
+            /bin/echo -e "${WARNING}${1} is not running" \
+               "but ${pidfile} exists.${NORMAL}"
+         else
+            /bin/echo -e "${INFO}${1} is not running.${NORMAL}"
+         fi
+      fi
+   fi
+}
+
+################################################################################
+# timespec()                                                                   #
+#                                                                              #
+# Purpose: An internal utility function to format a timestamp                  #
+#          a boot log file.  Sets the STAMP variable.                          #
+#                                                                              #
+# Return value: Not used                                                       #
+################################################################################
+timespec()
+{
+   STAMP="$(echo `date +"%b %d %T %:z"` `hostname`) "
+   return 0
+}
+
+################################################################################
+# log_success_msg()                                                            #
+# Usage: log_success_msg ["message"]                                           #
+#                                                                              #
+# Purpose: Print a successful status message to the screen and                 #
+#          a boot log file.                                                    #
+#                                                                              #
+# Inputs: $@ - Message                                                         #
+#                                                                              #
+# Return values: Not used                                                      #
+################################################################################
+log_success_msg()
+{
+    /bin/echo -n -e "${BMPREFIX}${@}"
+    /bin/echo -e "${CURS_ZERO}${SUCCESS_PREFIX}${SET_COL}${SUCCESS_SUFFIX}"
+
+    # Strip non-printable characters from log file
+    logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+
+if [ "${ENABLE_LOG}" = "1" ]; then
+    timespec
+    /bin/echo -e "${STAMP} ${logmessage} OK" >> ${BOOTLOG}
+fi
+    return 0
+}
+
+log_success_msg2()
+{
+    /bin/echo -n -e "${BMPREFIX}${@}"
+    /bin/echo -e "${CURS_ZERO}${SUCCESS_PREFIX}${SET_COL}${SUCCESS_SUFFIX}"
+
+if [ "${ENABLE_LOG}" = "1" ]; then
+    echo " OK" >> ${BOOTLOG}
+fi
+
+    return 0
+}
+
+################################################################################
+# log_failure_msg()                                                            #
+# Usage: log_failure_msg ["message"]                                           #
+#                                                                              #
+# Purpose: Print a failure status message to the screen and                    #
+#          a boot log file.                                                    #
+#                                                                              #
+# Inputs: $@ - Message                                                         #
+#                                                                              #
+# Return values: Not used                                                      #
+################################################################################
+log_failure_msg()
+{
+    /bin/echo -n -e "${BMPREFIX}${@}"
+    /bin/echo -e "${CURS_ZERO}${FAILURE_PREFIX}${SET_COL}${FAILURE_SUFFIX}"
+
+    # Strip non-printable characters from log file
+
+if [ "${ENABLE_LOG}" = "1" ]; then
+    timespec
+    logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+    /bin/echo -e "${STAMP} ${logmessage} FAIL" >> ${BOOTLOG}
+fi
+
+    return 0
+}
+
+log_failure_msg2()
+{
+    /bin/echo -n -e "${BMPREFIX}${@}"
+    /bin/echo -e "${CURS_ZERO}${FAILURE_PREFIX}${SET_COL}${FAILURE_SUFFIX}"
+
+if [ "${ENABLE_LOG}" = "1" ]; then
+    echo "FAIL" >> ${BOOTLOG}
+fi
+
+    return 0
+}
+
+################################################################################
+# log_warning_msg()                                                            #
+# Usage: log_warning_msg ["message"]                                           #
+#                                                                              #
+# Purpose: Print a warning status message to the screen and                    #
+#          a boot log file.                                                    #
+#                                                                              #
+# Return values: Not used                                                      #
+################################################################################
+log_warning_msg()
+{
+    /bin/echo -n -e "${BMPREFIX}${@}"
+    /bin/echo -e "${CURS_ZERO}${WARNING_PREFIX}${SET_COL}${WARNING_SUFFIX}"
+
+if [ "${ENABLE_LOG}" = "1" ]; then
+    # Strip non-printable characters from log file
+    logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+    timespec
+    /bin/echo -e "${STAMP} ${logmessage} WARN" >> ${BOOTLOG}
+fi
+
+    return 0
+}
+
+################################################################################
+# log_info_msg()                                                               #
+# Usage: log_info_msg message                                                  #
+#                                                                              #
+# Purpose: Print an information message to the screen and                      #
+#          a boot log file.  Does not print a trailing newline character.      #
+#                                                                              #
+# Return values: Not used                                                      #
+################################################################################
+log_info_msg()
+{
+    /bin/echo -n -e "${BMPREFIX}${@}"
+
+if [ "${ENABLE_LOG}" = "1" ]; then
+    # Strip non-printable characters from log file
+    logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+    timespec
+    /bin/echo -n -e "${STAMP} ${logmessage}" >> ${BOOTLOG}
+fi
+
+    return 0
+}
+
+log_info_msg2()
+{
+    /bin/echo -n -e "${@}"
+
+if [ "${ENABLE_LOG}" = "1" ]; then
+    # Strip non-printable characters from log file
+    logmessage=`echo "${@}" | sed 's/\\\033[^a-zA-Z]*.//g'`
+    /bin/echo -n -e "${logmessage}" >> ${BOOTLOG}
+fi
+
+    return 0
+}
+
+################################################################################
+# evaluate_retval()                                                            #
+# Usage: Evaluate a return value and print success or failyure as appropriate  #
+#                                                                              #
+# Purpose: Convenience function to terminate an info message                   #
+#                                                                              #
+# Return values: Not used                                                      #
+################################################################################
+evaluate_retval()
+{
+   local error_value="${?}"
+
+   if [ ${error_value} = 0 ]; then
+      log_success_msg2
+   else
+      log_failure_msg2
+   fi
+}
+
+################################################################################
+# check_signal()                                                               #
+# Usage: check_signal [ -{signal} | {signal} ]                                 #
+#                                                                              #
+# Purpose: Check for a valid signal.  This is not defined by any LSB draft,    #
+#          however, it is required to check the signals to determine if the    #
+#          signals chosen are invalid arguments to the other functions.        #
+#                                                                              #
+# Inputs: Accepts a single string value in the form or -{signal} or {signal}   #
+#                                                                              #
+# Return values:                                                               #
+#       0 - Success (signal is valid                                           #
+#       1 - Signal is not valid                                                #
+################################################################################
+check_signal()
+{
+    local valsig
+
+    # Add error handling for invalid signals
+    valsig="-ALRM -HUP -INT -KILL -PIPE -POLL -PROF -TERM -USR1 -USR2"
+    valsig="${valsig} -VTALRM -STKFLT -PWR -WINCH -CHLD -URG -TSTP -TTIN"
+    valsig="${valsig} -TTOU -STOP -CONT -ABRT -FPE -ILL -QUIT -SEGV -TRAP"
+    valsig="${valsig} -SYS -EMT -BUS -XCPU -XFSZ -0 -1 -2 -3 -4 -5 -6 -8 -9"
+    valsig="${valsig} -11 -13 -14 -15"
+
+    echo "${valsig}" | grep -- " ${1} " > /dev/null
+
+    if [ "${?}" -eq "0" ]; then
+        return 0
+    else
+        return 1
+    fi
+}
+
+################################################################################
+# check_sig_type()                                                             #
+# Usage: check_signal [ -{signal} | {signal} ]                                 #
+#                                                                              #
+# Purpose: Check if signal is a program termination signal or a control signal #
+#          This is not defined by any LSB draft, however, it is required to    #
+#          check the signals to determine if they are intended to end a        #
+#          program or simply to control it.                                    #
+#                                                                              #
+# Inputs: Accepts a single string value in the form or -{signal} or {signal}   #
+#                                                                              #
+# Return values:                                                               #
+#       0 - Signal is used for program termination                             #
+#       1 - Signal is used for program control                                 #
+################################################################################
+check_sig_type()
+{
+    local valsig
+
+    # The list of termination signals (limited to generally used items)
+    valsig="-ALRM -INT -KILL -TERM -PWR -STOP -ABRT -QUIT -2 -3 -6 -9 -14 -15"
+
+    echo "${valsig}" | grep -- " ${1} " > /dev/null
+
+    if [ "${?}" -eq "0" ]; then
+        return 0
+    else
+        return 1
+    fi
+}
+
+################################################################################
+# wait_for_user()                                                              #
+#                                                                              #
+# Purpose: Wait for the user to respond if not a headless system               #
+#                                                                              #
+################################################################################
+wait_for_user()
+{
+   # Wait for the user by default
+   [ "${HEADLESS=0}" = "0" ] && read ENTER
+   return 0
+}
+
+################################################################################
+# is_true()                                                                    #
+#                                                                              #
+# Purpose: Utility to test if a variable is true | yes | 1                     #
+#                                                                              #
+################################################################################
+is_true()
+{
+   [ "$1" = "1" ] || [ "$1" = "yes" ] || [ "$1" = "true" ] ||  [ "$1" = "y" ] ||
+   [ "$1" = "t" ]
+}
+
+# End /lib/lsb/init-functions

+ 83 - 0
systemd-units/lfs/lib/services/ipv4-static

@@ -0,0 +1,83 @@
+#!/bin/sh
+########################################################################
+# Begin /lib/services/ipv4-static
+#
+# Description : IPV4 Static Boot Script
+#
+# Authors     : Nathan Coulson - nathan@linuxfromscratch.org
+#               Kevin P. Fleming - kpfleming@linuxfromscratch.org
+# Update      : Bruce Dubbs - bdubbs@linuxfromscratch.org
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+. /lib/lsb/init-functions
+. ${IFCONFIG}
+
+if [ -z "${IP}" ]; then
+   log_failure_msg "\nIP variable missing from ${IFCONFIG}, cannot continue."
+   exit 1
+fi
+
+if [ -z "${PREFIX}" -a -z "${PEER}" ]; then
+   log_warning_msg "\nPREFIX variable missing from ${IFCONFIG}, assuming 24."
+   PREFIX=24
+   args="${args} ${IP}/${PREFIX}"
+
+elif [ -n "${PREFIX}" -a -n "${PEER}" ]; then
+   log_failure_msg "\nPREFIX and PEER both specified in ${IFCONFIG}, cannot continue."
+   exit 1
+
+elif [ -n "${PREFIX}" ]; then
+   args="${args} ${IP}/${PREFIX}"
+
+elif [ -n "${PEER}" ]; then
+   args="${args} ${IP} peer ${PEER}"
+fi
+
+if [ -n "${BROADCAST}" ]; then
+   args="${args} broadcast ${BROADCAST}"
+fi
+
+case "${2}" in
+   up)
+      if [ "$(ip addr show ${1} 2>/dev/null | grep ${IP}/)" = "" ]; then
+         
+         # Cosmetic output not needed for multiple services
+         if ! $(echo ${SERVICE} | grep -q " "); then 
+           log_info_msg2 "\n" # Terminate the previous message
+         fi
+         
+         log_info_msg "Adding IPv4 address ${IP} to the ${1} interface..."
+         ip addr add ${args} dev ${1}
+         evaluate_retval
+      else
+         log_warning_msg "Cannot add IPv4 address ${IP} to ${1}.  Already present."
+      fi
+   ;;
+
+   down)
+      if [ "$(ip addr show ${1} 2>/dev/null | grep ${IP}/)" != "" ]; then
+         log_info_msg "Removing IPv4 address ${IP} from the ${1} interface..."
+         ip addr del ${args} dev ${1}
+         evaluate_retval
+      fi
+
+      if [ -n "${GATEWAY}" ]; then
+         # Only remove the gateway if there are no remaining ipv4 addresses
+         if [ "$(ip addr show ${1} 2>/dev/null | grep 'inet ')" != "" ]; then
+            log_info_msg "Removing default gateway..."
+            ip route del default
+            evaluate_retval
+         fi
+      fi
+   ;;
+
+   *)
+      echo "Usage: ${0} [interface] {up|down}"
+      exit 1
+   ;;
+esac
+
+# End /lib/services/ipv4-static

+ 92 - 0
systemd-units/lfs/lib/services/ipv4-static-route

@@ -0,0 +1,92 @@
+#!/bin/sh
+########################################################################
+# Begin /lib/services/ipv4-static-route
+#
+# Description : IPV4 Static Route Script
+#
+# Authors     : Kevin P. Fleming - kpfleming@linuxfromscratch.org
+#               DJ Lucas - dj@linuxfromscratch.org
+# Update      : Bruce Dubbs - bdubbs@linuxfromscratch.org
+#
+# Version     : LFS 7.0
+#
+########################################################################
+
+. /lib/lsb/init-functions
+. ${IFCONFIG}
+
+case "${TYPE}" in
+   ("" | "network")
+      need_ip=1
+      need_gateway=1
+   ;;
+
+   ("default")
+      need_gateway=1
+      args="${args} default"
+      desc="default"
+   ;;
+
+   ("host")
+      need_ip=1
+   ;;
+
+   ("unreachable")
+      need_ip=1
+      args="${args} unreachable"
+      desc="unreachable "
+   ;;
+
+   (*)
+      log_failure_msg "Unknown route type (${TYPE}) in ${IFCONFIG}, cannot continue."
+      exit 1
+   ;;
+esac
+
+if [ -n "${need_ip}" ]; then
+   if [ -z "${IP}" ]; then
+      log_failure_msg "IP variable missing from ${IFCONFIG}, cannot continue."
+      exit 1
+   fi
+
+   if [ -z "${PREFIX}" ]; then
+      log_failure_msg "PREFIX variable missing from ${IFCONFIG}, cannot continue." 
+      exit 1
+   fi
+   
+   args="${args} ${IP}/${PREFIX}"
+   desc="${desc}${IP}/${PREFIX}"
+fi
+
+if [ -n "${need_gateway}" ]; then
+   if [ -z "${GATEWAY}" ]; then
+      log_failure_msg "GATEWAY variable missing from ${IFCONFIG}, cannot continue."
+      exit 1
+   fi
+   args="${args} via ${GATEWAY}"
+fi
+
+if [ -n "${SOURCE}" ]; then
+        args="${args} src ${SOURCE}"
+fi
+
+case "${2}" in
+   up)
+      log_info_msg "Adding '${desc}' route to the ${1} interface..."
+      ip route add ${args} dev ${1}
+      evaluate_retval
+   ;;
+   
+   down)
+      log_info_msg "Removing '${desc}' route from the ${1} interface..."
+      ip route del ${args} dev ${1}
+      evaluate_retval
+   ;;
+   
+   *)
+      echo "Usage: ${0} [interface] {up|down}"
+      exit 1
+   ;;
+esac
+
+# End /lib/services/ipv4-static-route

+ 100 - 0
systemd-units/lfs/sbin/ifdown

@@ -0,0 +1,100 @@
+#!/bin/bash
+########################################################################
+# Begin /sbin/ifdown
+#
+# Description : Interface Down
+#
+# Authors     : Nathan Coulson - nathan@linuxfromscratch.org
+#               Kevin P. Fleming - kpfleming@linuxfromscratch.org
+# Update      : Bruce Dubbs - bdubbs@linuxfromscratch.org
+#
+# Version     : LFS 7.0
+#
+# Notes       : the IFCONFIG variable is passed to the scripts found
+#               in the /lib/services directory, to indicate what file the
+#               service should source to get interface specifications.
+#
+########################################################################
+
+RELEASE="7.0"
+
+USAGE="Usage: $0 [ -hV ] [--help] [--version] interface"
+VERSTR="LFS ifdown, version ${RELEASE}"
+
+while [ $# -gt 0 ]; do
+   case "$1" in
+      --help | -h)     help="y"; break ;;
+
+      --version | -V)  echo "${VERSTR}"; exit 0 ;;
+
+      -*)              echo "ifup: ${1}: invalid option" >&2
+                       echo "${USAGE}" >& 2
+                       exit 2 ;;
+
+      *)               break ;;
+   esac
+done
+
+if [ -n "$help" ]; then
+   echo "${VERSTR}"
+   echo "${USAGE}"
+   echo
+   cat << HERE_EOF
+ifdown is used to bring down a network interface.  The interface
+parameter, e.g. eth0 or eth0:2, must match the trailing part of the
+interface specifications file, e.g. /etc/sysconfig/ifconfig.eth0:2.
+
+HERE_EOF
+   exit 0
+fi
+
+file=/etc/sysconfig/ifconfig.${1}
+
+# Skip backup files
+[ "${file}" = "${file%""~""}" ] || exit 0
+
+. /lib/lsb/init-functions
+
+if [ ! -r "${file}" ]; then
+   log_warning_msg "${file} is missing or cannot be accessed."
+   exit 1
+fi
+
+. ${file}
+
+if [ "$IFACE" = "" ]; then
+   log_failure_msg "${file} does not define an interface [IFACE]."
+   exit 1
+fi
+
+# We only need to first service to bring down the interface
+S=`echo ${SERVICE} | cut -f1 -d" "`
+
+if ip link show ${IFACE} > /dev/null 2>&1; then
+   if [ -n "${S}" -a -x "/lib/services/${S}" ]; then
+     IFCONFIG=${file} /lib/services/${S} ${IFACE} down
+   else
+     MSG="Unable to process ${file}.  Either "
+     MSG="${MSG}the SERVICE variable was not set "
+     MSG="${MSG}or the specified service cannot be executed."
+     log_failure_msg "$MSG"
+     exit 1
+  fi
+else
+   log_warning_msg "Interface ${1} doesn't exist."
+fi
+
+# Leave the interface up if there are additional interfaces in the device
+link_status=`ip link show ${IFACE} 2>/dev/null`
+
+if [ -n "${link_status}" ]; then
+   if [ "$(echo "${link_status}" | grep UP)" != "" ]; then
+      if [ "$(ip addr show ${IFACE} | grep 'inet ')" == ""  ]; then
+         log_info_msg "Bringing down the ${IFACE} interface..."
+         ip link set ${IFACE} down
+         evaluate_retval
+      fi
+   fi
+fi
+
+# End /sbin/ifdown

+ 136 - 0
systemd-units/lfs/sbin/ifup

@@ -0,0 +1,136 @@
+#!/bin/sh
+########################################################################
+# Begin /sbin/ifup
+#
+# Description : Interface Up
+#
+# Authors     : Nathan Coulson - nathan@linuxfromscratch.org
+#               Kevin P. Fleming - kpfleming@linuxfromscratch.org
+# Update      : Bruce Dubbs - bdubbs@linuxfromscratch.org
+#
+# Version     : LFS 7.2
+#
+# Notes       : The IFCONFIG variable is passed to the SERVICE script
+#               in the /lib/services directory, to indicate what file the
+#               service should source to get interface specifications.
+#
+########################################################################
+
+up()
+{
+  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
+        fi
+     fi
+
+  else
+     log_failure_msg "\nInterface ${IFACE} doesn't exist."
+     exit 1
+  fi
+}
+
+RELEASE="7.2"
+
+USAGE="Usage: $0 [ -hV ] [--help] [--version] interface"
+VERSTR="LFS ifup, version ${RELEASE}"
+
+while [ $# -gt 0 ]; do
+   case "$1" in
+      --help | -h)     help="y"; break ;;
+
+      --version | -V)  echo "${VERSTR}"; exit 0 ;;
+
+      -*)              echo "ifup: ${1}: invalid option" >&2
+                       echo "${USAGE}" >& 2
+                       exit 2 ;;
+
+      *)               break ;;
+   esac
+done
+
+if [ -n "$help" ]; then
+   echo "${VERSTR}"
+   echo "${USAGE}"
+   echo
+   cat << HERE_EOF
+ifup is used to bring up a network interface.  The interface
+parameter, e.g. eth0 or eth0:2, must match the trailing part of the
+interface specifications file, e.g. /etc/sysconfig/ifconfig.eth0:2.
+
+HERE_EOF
+   exit 0
+fi
+
+file=/etc/sysconfig/ifconfig.${1}
+
+# Skip backup files
+[ "${file}" = "${file%""~""}" ] || exit 0
+
+. /lib/lsb/init-functions
+
+log_info_msg "Bringing up the ${1} interface... "
+
+if [ ! -r "${file}" ]; then
+   log_failure_msg2 "${file} is missing or cannot be accessed." 
+   exit 1
+fi
+
+. $file
+
+if [ "$IFACE" = "" ]; then
+   log_failure_msg2 "${file} does not define an interface [IFACE]."
+   exit 1
+fi
+
+# Do not process this service if started by boot, and ONBOOT
+# is not set to yes
+if [ "${IN_BOOT}" = "1" -a "${ONBOOT}" != "yes" ]; then
+   log_info_msg2 "skipped"
+   exit 0
+fi
+
+for S in ${SERVICE}; do
+  if [ ! -x "/lib/services/${S}" ]; then
+    MSG="\nUnable to process ${file}.  Either "
+    MSG="${MSG}the SERVICE '${S} was not present "
+    MSG="${MSG}or cannot be executed."
+    log_failure_msg "$MSG"
+    exit 1
+  fi
+done
+
+# Create/configure the interface
+for S in ${SERVICE}; do
+  IFCONFIG=${file} /lib/services/${S} ${IFACE} up
+done
+
+# Bring up the interface and any components
+for I in $IFACE $INTERFACE_COMPONENTS; do up $I; done
+
+# Set MTU if requested. Check if MTU has a "good" value.
+if test -n "${MTU}"; then
+   if [[ ${MTU} =~ ^[0-9]+$ ]] && [[ $MTU -ge 68 ]] ; then
+      for I in $IFACE $INTERFACE_COMPONENTS; do
+         ip link set dev $I mtu $MTU;
+      done
+   else
+      log_info_msg2 "Invalid MTU $MTU"
+   fi
+fi 
+
+# Set the route default gateway if requested
+if [ -n "${GATEWAY}" ]; then
+   if ip route | grep -q default; then
+      log_warning_msg "\nGateway already setup; skipping."
+   else
+      log_info_msg "Setting up default gateway..."
+      ip route add default via ${GATEWAY} dev ${IFACE}
+      evaluate_retval
+   fi
+fi
+
+# End /sbin/ifup

+ 174 - 0
systemd-units/lfs/sbin/ifup.8

@@ -0,0 +1,174 @@
+ifup(8)                                                   ifup(8)
+
+NAME
+       ifup - bring a network interface up
+       ifdown - take a network interface down
+
+SYNOPSIS
+       ifup  IFACE
+       ifup -h|--help
+       ifup -V|--version
+
+       ifdown IFACE
+       ifdown -h|--help
+       ifdown -V|--version
+
+DESCRIPTION
+       The  ifup  and  ifdown  commands  may be used to configure 
+       (or, respectively, deconfigure) a network interface based 
+       on interface  definitions in the file 
+       /etc/sysconfig/ifconfig.IFACE.
+
+OPTIONS
+       A summary of options is included below.
+
+       -h, --help
+              Show summary of options.
+
+       -V, --version
+              Show version information.
+
+EXAMPLES
+       ifup eth0
+              Bring up the interface defined in the file 
+              /etc/sysconfig/ifconfig.eth0
+
+                ONBOOT=no
+                IFACE=eth0
+                SERVICE=ipv4-static
+                IP=192.168.1.22
+                GATEWAY=192.168.1.1
+                PREFIX=24
+                BROADCAST=192.168.1.255
+
+       ifdown eth0:2
+              Bring down the interface defined in the file
+              /etc/sysconfig/ifconfig.eth0:2
+
+                ONBOOT=no
+                IFACE=eth0:2
+                SERVICE=dhcpcd
+         
+                DHCP_START="--waitip"
+                DHCP_STOP="-k"
+         
+                # Set PRINTIP="yes" to have the script print the DHCP IP address
+                PRINTIP="yes"
+         
+                # Set PRINTALL="yes" to print the DHCP assigned values for
+                # IP, SM, DG, and 1st NS. 
+                PRINTALL="no"
+
+       ifup br0
+              Bring up the interface defined in the file 
+              /etc/sysconfig/ifconfig.br0
+                    
+                ONBOOT=yes
+                IFACE=br0
+                SERVICE="bridge ipv4-static"
+                IP=192.168.1.22
+                GATEWAY=192.168.1.1
+                PREFIX=24
+                BROADCAST=192.168.1.255
+                STP=no                      # Spanning tree protocol, default no
+                INTERFACE_COMPONENTS=eth0   # Add to IFACE
+                IP_FORWARD=true
+
+NOTES
+       The program does not configure network interfaces direct-
+       ly.  It runs scripts defined by the SERVICE variable in 
+       the network configuration file.
+
+       The configuration files must have the following environ-
+       ment variables set:
+
+       IFACE   - The interface to configure, e.g. eth0.  It must 
+                 be available in /sys/class/net.
+
+       SERVICE - The service script to run to bring up the inter-
+                 face.  Standard services are ipv4-static and 
+                 ipv4-static-route.  Other services such as dhcp
+                 or bridge may be installed.  This value may
+                 be a list of services when the interface is a
+                 compound device such as a bridge.
+
+       ONBOOT  - If set to 'yes', the specified interface is 
+                 configured by the netowrk boot script.
+
+       GATEWAY - The default IP address to use for routing if
+                 the destination IP address is not in a static 
+                 route or on a local network, e.g., 192.168.1.1.  
+                 For secondary IP addresses on an interface, this 
+                 parameter should not be specified.
+
+       INTERFACE_COMPONENTS - A list of component interfaces
+                 only needed for a compound device such as a bridge.  
+                 This list is normally a single value, e.g. eth0, 
+                 for use with a virtual host such as kvm.
+
+       Other paramters that are service specific include:
+
+       ipv4-static
+
+         IP        - The IP address of the interface, 
+                     e.g. 192.168.1.2.
+
+         PREFIX    - The number of bits that specify the network
+                     number of the interface.  The default, if not
+                     specified, is 24.
+       
+         BROADCAST - The brodcast address for this interface, 
+                     e.g 192.168.1.255.  If not specified, 
+                     the broadcast address will be calculated
+                     from the IP and PREFIX.
+
+       ipv4-static-route
+
+         TYPE    -  The type of route, typically 'default', 
+                    'network', 'or host'.
+
+         IP      -  The IP address for a network or host, if the
+                    TYPE is not 'default'.
+
+         PREFIX  -  The prefix for the associated IP address.
+
+         GATEWAY -  The IP address for a network route.
+
+         SOURCE  -  The source IP address to prefer when sending 
+                    to the destinations covered by the specified
+                    route. (optional)
+
+       dhcp/dhclient
+
+         DHCP_START - Optional parameters to pass to the dhcp client
+                      at startup.
+
+         DHCP_STOP  - Optional paremeters to pass to the dhcp client 
+                      at shutdown.
+
+         PRINTIP    - Flag to print the dhcp address to stdout
+
+         PRINTALL   - Flag to print all obtained dhcp data to stdout
+
+       bridge
+
+         IP_FORWARD - An optional flag to enable the system to forward
+                      inbound IP packets received by one interface to 
+                      another outbound interface.  
+
+         STP        - Set bridge spanning tree protocol.  Default is no.
+
+FILES
+       /etc/sysconfig/ifconfig.*
+              definitions of network interfaces 
+
+AUTHORS
+       The ifup/ifdown suite was written by Nathan Coulson
+       <nathan@linuxfromscratch.org> and Kevin P. Fleming 
+       <kpfleming@linuxfromscratch.org>
+       and updated by Bruce Dubbs <bdubbs@linuxfromscratch>.
+
+SEE ALSO
+       ip(8).
+
+IFUP/IFDOWN                   8 April 2012                 ifup(8)

+ 2 - 0
systemd-units/lfs/tmpfiles/nscd.conf

@@ -0,0 +1,2 @@
+d /run/nscd 755 root root -
+

+ 12 - 0
systemd-units/lfs/units/ifupdownat.service

@@ -0,0 +1,12 @@
+[Unit]
+Description=Start ifupdown for %i
+Requires=sys-subsystem-net-devices-%i.device
+After=sys-subsystem-net-devices-%i.device
+
+[Service]
+ExecStart=/sbin/ifup %i
+ExecStop=/sbin/ifdown %i
+RemainAfterExit=true
+
+[Install]
+WantedBy=multi-user.target

+ 16 - 0
systemd-units/lfs/units/nscd.service

@@ -0,0 +1,16 @@
+[Unit]
+Description=Name Service Cache Daemon
+
+[Service]
+Type=forking
+ExecStart=/usr/sbin/nscd
+ExecStop=/usr/sbin/nscd --shutdown
+ExecReload=/usr/sbin/nscd -i passwd
+ExecReload=/usr/sbin/nscd -i group
+ExecReload=/usr/sbin/nscd -i hosts
+ExecReload=/usr/sbin/nscd -i services
+Restart=always
+PIDFile=/run/nscd/nscd.pid
+
+[Install]
+WantedBy=multi-user.target