aboutsummaryrefslogtreecommitdiffstats
path: root/bootscripts
diff options
context:
space:
mode:
authorBruce Dubbs <bdubbs@linuxfromscratch.org>2008-06-03 21:51:14 +0000
committerBruce Dubbs <bdubbs@linuxfromscratch.org>2008-06-03 21:51:14 +0000
commit1c4800743d22d675ccfa48364d8aa558e8b7407c (patch)
treeca4254cbe5dd5adb0ed8af1f87c26bc569403164 /bootscripts
parent9faa3e27afb932894ace74854fbb76631022446b (diff)
Moved bootscripts and udev-config to BOOK
Updated Makefile to automatically generate bootscript and udev-config tarballs Updated licesnse to be the same as BLFS git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@8548 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689
Diffstat (limited to 'bootscripts')
-rw-r--r--bootscripts/ChangeLog927
-rw-r--r--bootscripts/LICENSE29
-rw-r--r--bootscripts/Makefile134
-rw-r--r--bootscripts/README79
-rw-r--r--bootscripts/contrib/lsb-v3/ChangeLog26
-rw-r--r--bootscripts/contrib/lsb-v3/INSTALL32
-rw-r--r--bootscripts/contrib/lsb-v3/Makefile134
-rw-r--r--bootscripts/contrib/lsb-v3/README105
-rw-r--r--bootscripts/contrib/lsb-v3/etc/lsb-config8
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/checkfs105
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/cleanfs113
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/console111
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/halt32
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/lfs-functions215
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/localnet84
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/modules99
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/mountfs60
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/mountkernfs45
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/network74
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/rc193
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/reboot34
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/sendsignals49
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/setclock61
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/swap57
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/sysctl41
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/sysklogd71
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/template92
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/udev81
-rw-r--r--bootscripts/contrib/lsb-v3/init.d/udev_retry51
-rw-r--r--bootscripts/contrib/lsb-v3/lsb/init-functions577
-rw-r--r--bootscripts/contrib/lsb-v3/lsb/manage-functions306
-rw-r--r--bootscripts/contrib/lsb-v3/sysconfig/createfiles28
-rw-r--r--bootscripts/contrib/lsb-v3/sysconfig/modules18
-rw-r--r--bootscripts/contrib/lsb-v3/sysconfig/network-devices/ifdown93
-rw-r--r--bootscripts/contrib/lsb-v3/sysconfig/network-devices/ifup87
-rw-r--r--bootscripts/contrib/lsb-v3/sysconfig/network-devices/services/ipv4-static80
-rw-r--r--bootscripts/contrib/lsb-v3/sysconfig/network-devices/services/ipv4-static-route92
-rw-r--r--bootscripts/contrib/lsb-v3/sysconfig/rc52
-rw-r--r--bootscripts/contrib/lsb-v3/sysconfig/rc.site69
-rw-r--r--bootscripts/contrib/lsb/Makefile11
-rw-r--r--bootscripts/contrib/lsb/lib/init-functions348
-rw-r--r--bootscripts/contrib/sysconfig/network-devices/services/mtu45
-rw-r--r--bootscripts/lfs/init.d/checkfs131
-rw-r--r--bootscripts/lfs/init.d/cleanfs110
-rw-r--r--bootscripts/lfs/init.d/console109
-rwxr-xr-xbootscripts/lfs/init.d/consolelog61
-rw-r--r--bootscripts/lfs/init.d/functions769
-rw-r--r--bootscripts/lfs/init.d/halt28
-rw-r--r--bootscripts/lfs/init.d/localnet54
-rw-r--r--bootscripts/lfs/init.d/modules72
-rw-r--r--bootscripts/lfs/init.d/mountfs54
-rw-r--r--bootscripts/lfs/init.d/mountkernfs44
-rw-r--r--bootscripts/lfs/init.d/network73
-rw-r--r--bootscripts/lfs/init.d/rc99
-rw-r--r--bootscripts/lfs/init.d/reboot31
-rw-r--r--bootscripts/lfs/init.d/sendsignals52
-rw-r--r--bootscripts/lfs/init.d/setclock49
-rw-r--r--bootscripts/lfs/init.d/swap50
-rw-r--r--bootscripts/lfs/init.d/sysctl39
-rw-r--r--bootscripts/lfs/init.d/sysklogd57
-rw-r--r--bootscripts/lfs/init.d/template50
-rw-r--r--bootscripts/lfs/init.d/udev77
-rw-r--r--bootscripts/lfs/init.d/udev_retry45
-rw-r--r--bootscripts/lfs/sysconfig/createfiles28
-rw-r--r--bootscripts/lfs/sysconfig/modules18
-rw-r--r--bootscripts/lfs/sysconfig/network-devices/ifdown95
-rw-r--r--bootscripts/lfs/sysconfig/network-devices/ifup89
-rw-r--r--bootscripts/lfs/sysconfig/network-devices/services/ipv4-static82
-rw-r--r--bootscripts/lfs/sysconfig/network-devices/services/ipv4-static-route97
-rw-r--r--bootscripts/lfs/sysconfig/rc18
70 files changed, 7429 insertions, 0 deletions
diff --git a/bootscripts/ChangeLog b/bootscripts/ChangeLog
new file mode 100644
index 000000000..32e06a8b4
--- /dev/null
+++ b/bootscripts/ChangeLog
@@ -0,0 +1,927 @@
+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
+ * Accidently 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 doesnt 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 begining 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 supress newlines so the [ OK ] and
+ related messages allign 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
+
diff --git a/bootscripts/LICENSE b/bootscripts/LICENSE
new file mode 100644
index 000000000..8beeec4bd
--- /dev/null
+++ b/bootscripts/LICENSE
@@ -0,0 +1,29 @@
+Copyright (c) 1999-2002, Gerard Beekmans
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions in any form must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Neither the name of "Linux From Scratch" nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this material without specific prior written permission.
+
+ * Any material derived from Linux From Scratch must contain a
+ reference to the "Linux From Scratch" project.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/bootscripts/Makefile b/bootscripts/Makefile
new file mode 100644
index 000000000..4c6bcca10
--- /dev/null
+++ b/bootscripts/Makefile
@@ -0,0 +1,134 @@
+ETCDIR=/etc
+EXTDIR=${DESTDIR}${ETCDIR}
+MODE=754
+DIRMODE=755
+CONFMODE=644
+
+all: install
+
+create-dirs:
+ install -d -m ${DIRMODE} ${EXTDIR}/rc.d/rc0.d
+ install -d -m ${DIRMODE} ${EXTDIR}/rc.d/rc1.d
+ install -d -m ${DIRMODE} ${EXTDIR}/rc.d/rc2.d
+ install -d -m ${DIRMODE} ${EXTDIR}/rc.d/rc3.d
+ install -d -m ${DIRMODE} ${EXTDIR}/rc.d/rc4.d
+ install -d -m ${DIRMODE} ${EXTDIR}/rc.d/rc5.d
+ install -d -m ${DIRMODE} ${EXTDIR}/rc.d/rc6.d
+ install -d -m ${DIRMODE} ${EXTDIR}/rc.d/rcsysinit.d
+ install -d -m ${DIRMODE} ${EXTDIR}/rc.d/init.d
+ install -d -m ${DIRMODE} ${EXTDIR}/sysconfig
+
+create-service-dir:
+ install -d -m ${DIRMODE} ${EXTDIR}/sysconfig/network-devices/services
+
+install: create-dirs create-service-dir
+ install -m ${MODE} lfs/init.d/checkfs ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/cleanfs ${EXTDIR}/rc.d/init.d/
+ install -m ${CONFMODE} lfs/init.d/functions ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/halt ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/console ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/consolelog ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/localnet ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/modules ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/mountfs ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/mountkernfs ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/network ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/rc ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/reboot ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/sendsignals ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/setclock ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/sysklogd ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/swap ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/sysctl ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/template ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/udev ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/udev_retry ${EXTDIR}/rc.d/init.d/
+ ln -sf ../init.d/network ${EXTDIR}/rc.d/rc0.d/K80network
+ ln -sf ../init.d/sysklogd ${EXTDIR}/rc.d/rc0.d/K90sysklogd
+ ln -sf ../init.d/sendsignals ${EXTDIR}/rc.d/rc0.d/S60sendsignals
+ ln -sf ../init.d/mountfs ${EXTDIR}/rc.d/rc0.d/S70mountfs
+ ln -sf ../init.d/swap ${EXTDIR}/rc.d/rc0.d/S80swap
+ ln -sf ../init.d/localnet ${EXTDIR}/rc.d/rc0.d/S90localnet
+ ln -sf ../init.d/halt ${EXTDIR}/rc.d/rc0.d/S99halt
+ ln -sf ../init.d/network ${EXTDIR}/rc.d/rc1.d/K80network
+ ln -sf ../init.d/sysklogd ${EXTDIR}/rc.d/rc1.d/K90sysklogd
+ ln -sf ../init.d/network ${EXTDIR}/rc.d/rc2.d/K80network
+ ln -sf ../init.d/sysklogd ${EXTDIR}/rc.d/rc2.d/K90sysklogd
+ ln -sf ../init.d/sysklogd ${EXTDIR}/rc.d/rc3.d/S10sysklogd
+ ln -sf ../init.d/network ${EXTDIR}/rc.d/rc3.d/S20network
+ ln -sf ../init.d/sysklogd ${EXTDIR}/rc.d/rc4.d/S10sysklogd
+ ln -sf ../init.d/network ${EXTDIR}/rc.d/rc4.d/S20network
+ ln -sf ../init.d/sysklogd ${EXTDIR}/rc.d/rc5.d/S10sysklogd
+ ln -sf ../init.d/network ${EXTDIR}/rc.d/rc5.d/S20network
+ ln -sf ../init.d/network ${EXTDIR}/rc.d/rc6.d/K80network
+ ln -sf ../init.d/sysklogd ${EXTDIR}/rc.d/rc6.d/K90sysklogd
+ ln -sf ../init.d/sendsignals ${EXTDIR}/rc.d/rc6.d/S60sendsignals
+ ln -sf ../init.d/mountfs ${EXTDIR}/rc.d/rc6.d/S70mountfs
+ ln -sf ../init.d/swap ${EXTDIR}/rc.d/rc6.d/S80swap
+ ln -sf ../init.d/localnet ${EXTDIR}/rc.d/rc6.d/S90localnet
+ ln -sf ../init.d/reboot ${EXTDIR}/rc.d/rc6.d/S99reboot
+ ln -sf ../init.d/mountkernfs ${EXTDIR}/rc.d/rcsysinit.d/S00mountkernfs
+ ln -sf ../init.d/consolelog ${EXTDIR}/rc.d/rcsysinit.d/S02consolelog
+ ln -sf ../init.d/modules ${EXTDIR}/rc.d/rcsysinit.d/S05modules
+ ln -sf ../init.d/udev ${EXTDIR}/rc.d/rcsysinit.d/S10udev
+ ln -sf ../init.d/swap ${EXTDIR}/rc.d/rcsysinit.d/S20swap
+ ln -sf ../init.d/setclock ${EXTDIR}/rc.d/rcsysinit.d/S25setclock
+ ln -sf ../init.d/checkfs ${EXTDIR}/rc.d/rcsysinit.d/S30checkfs
+ ln -sf ../init.d/mountfs ${EXTDIR}/rc.d/rcsysinit.d/S40mountfs
+ ln -sf ../init.d/udev_retry ${EXTDIR}/rc.d/rcsysinit.d/S45udev_retry
+ ln -sf ../init.d/cleanfs ${EXTDIR}/rc.d/rcsysinit.d/S50cleanfs
+ ln -sf ../init.d/console ${EXTDIR}/rc.d/rcsysinit.d/S70console
+ ln -sf ../init.d/localnet ${EXTDIR}/rc.d/rcsysinit.d/S80localnet
+ ln -sf ../init.d/sysctl ${EXTDIR}/rc.d/rcsysinit.d/S90sysctl
+ if [ ! -f ${EXTDIR}/sysconfig/createfiles ]; then install -m ${CONFMODE} lfs/sysconfig/createfiles ${EXTDIR}/sysconfig/; fi
+ if [ ! -f ${EXTDIR}/sysconfig/modules ]; then install -m ${CONFMODE} lfs/sysconfig/modules ${EXTDIR}/sysconfig/; fi
+ if [ ! -f ${EXTDIR}/sysconfig/rc ]; then install -m ${CONFMODE} lfs/sysconfig/rc ${EXTDIR}/sysconfig/; fi
+ install -m ${MODE} lfs/sysconfig/network-devices/ifup ${EXTDIR}/sysconfig/network-devices/
+ install -m ${MODE} lfs/sysconfig/network-devices/ifdown ${EXTDIR}/sysconfig/network-devices/
+ install -m ${MODE} lfs/sysconfig/network-devices/services/ipv4-static ${EXTDIR}/sysconfig/network-devices/services/
+ install -m ${MODE} lfs/sysconfig/network-devices/services/ipv4-static-route ${EXTDIR}/sysconfig/network-devices/services/
+
+install-consolelog: create-dirs
+ install -m ${MODE} contrib/init.d/consolelog ${EXTDIR}/rc.d/init.d
+ ln -sf ../init.d/consolelog ${EXTDIR}/rc.d/rcsysinit.d/S00consolelog
+
+install-lsb-compliant:
+ make -C contrib/lsb
+
+install-service-mtu: create-service-dir
+ install -m ${MODE} contrib/sysconfig/network-devices/services/mtu ${EXTDIR}/sysconfig/network-devices/services
+
+minimal: create-dirs create-service-dir
+ install -m ${MODE} lfs/init.d/checkfs ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/cleanfs ${EXTDIR}/rc.d/init.d/
+ install -m ${CONFMODE} lfs/init.d/functions ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/halt ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/localnet ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/mountfs ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/mountkernfs ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/rc ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/reboot ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/sendsignals ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/setclock ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/swap ${EXTDIR}/rc.d/init.d/
+ install -m ${MODE} lfs/init.d/udev ${EXTDIR}/rc.d/init.d/
+ ln -sf ../init.d/sendsignals ${EXTDIR}/rc.d/rc0.d/S60sendsignals
+ ln -sf ../init.d/mountfs ${EXTDIR}/rc.d/rc0.d/S70mountfs
+ ln -sf ../init.d/swap ${EXTDIR}/rc.d/rc0.d/S80swap
+ ln -sf ../init.d/halt ${EXTDIR}/rc.d/rc0.d/S99halt
+ ln -sf ../init.d/sendsignals ${EXTDIR}/rc.d/rc6.d/S60sendsignals
+ ln -sf ../init.d/mountfs ${EXTDIR}/rc.d/rc6.d/S70mountfs
+ ln -sf ../init.d/swap ${EXTDIR}/rc.d/rc6.d/S80swap
+ ln -sf ../init.d/reboot ${EXTDIR}/rc.d/rc6.d/S99reboot
+ ln -sf ../init.d/mountkernfs ${EXTDIR}/rc.d/rcsysinit.d/S00mountkernfs
+ ln -sf ../init.d/udev ${EXTDIR}/rc.d/rcsysinit.d/S10udev
+ ln -sf ../init.d/swap ${EXTDIR}/rc.d/rcsysinit.d/S20swap
+ ln -sf ../init.d/setclock ${EXTDIR}/rc.d/rcsysinit.d/S25setclock
+ ln -sf ../init.d/checkfs ${EXTDIR}/rc.d/rcsysinit.d/S30checkfs
+ ln -sf ../init.d/mountfs ${EXTDIR}/rc.d/rcsysinit.d/S40mountfs
+ ln -sf ../init.d/cleanfs ${EXTDIR}/rc.d/rcsysinit.d/S50cleanfs
+ if [ ! -f ${EXTDIR}/sysconfig/rc ]; then install -m ${CONFMODE} lfs/sysconfig/rc ${EXTDIR}/sysconfig/; fi
+
+.PHONY: all create-dirs create-service-dir \
+ install install-service-mtu
+
diff --git a/bootscripts/README b/bootscripts/README
new file mode 100644
index 000000000..a2582bc82
--- /dev/null
+++ b/bootscripts/README
@@ -0,0 +1,79 @@
+Network Configuration:
+ Script Files:
+ rc.d/init.d/network
+ sysconfig/network-devices/ifup
+ sysconfig/network-devices/ifdown
+ sysconfig/network-devices/services/*
+
+ Configuration Files:
+ sysconfig/network-devices/ifconfig.*/*
+ Note: ifconfig.* could be either a file or directory,
+ but the filename extention must be the same name
+ as the network interface you wish it to belong to.
+ The files within the directory will be processed
+ in alphanumerical order on boot, and reversed on
+ shutdown.
+ - SERVICE: which script to run in services directory.
+ - ONBOOT: if set to yes, this interface will be started on
+ bootup, and stopped on shutdown
+ - ONHOTPLUG: if set to yes, this interface will be started
+ and stopped on hotplug events. This requires
+ ifup and ifdown symlinked to /sbin, as well
+ as the hotplug package
+
+ sysconfig/network
+ - HOSTNAME: Value of the system's hostname
+
+ Additional Configuration:
+ sysconfig/network-devices/ifconfig.*
+ 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
+ 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)
+
+
+SetClock configuration:
+ Script Files:
+ rc.d/init.d/setclock
+
+ Configuration Files:
+ sysconfig/clock
+ - UTC: 1 assumes hwclock is in UTC
+ 0 assumes hwclock is in local time
+
+CleanFS configuration:
+ Script Files:
+ rc.d/init.d/cleanfs
+
+ Configuration Files:
+ /etc/sysconfig/createfiles
+ Each line is parsed, using space as a deliminator.
+ [NAME] [TYPE] [PERMISSIONS] [USER] [GROUP]
+ The below fields are currently only used on dev type.
+ ([DEV TYPE] [MAJOR#] [MINOR#])
+ Name:
+ File/Directory/Device name
+ Type:
+ dir: creates a directory
+ file: creates a file
+ dev: creates a device
+ Permissions:
+ chmod the created file
+ User/Group:
+ chown the created file/dir to this user/group
+ Dev Type:
+ char: character [needs MAJOR#, MINOR#]
+ block: block [needs MAJOR#, MINOR#]
+ pipe: pipe
+ Major#:
+ Used by character and block devices.
+ Minor#:
+ Used by character and block devices.
diff --git a/bootscripts/contrib/lsb-v3/ChangeLog b/bootscripts/contrib/lsb-v3/ChangeLog
new file mode 100644
index 000000000..c47832093
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/ChangeLog
@@ -0,0 +1,26 @@
+ChangeLog
+
+20080531 - [dj] * Synced with LFS-Bootscrpts-20080531 (use udevadm)
+ * Added additional functions to manage_functions script.
+
+20080413 - [dj] * Added manage_functions script for use by scripts such as
+ {install,remove}_initd or chkconfig, that need to parse the
+ LSB headers.
+ * Cleaned up script headers to reflect real Start or Stop
+
+20080315 - [dj] * Corrected test for $pidfile in pidofproc()
+ * Replaced exit with return in statusproc() - (lfs-functions)
+
+20080315 - [dj] * Added missing 'stale pid file' checking for pidofproc()
+
+20080210 - [dj] * Updated documentation
+
+20070820 - [dj] * Synced with LFS-bootscripts
+
+20070705 - [dj] * Synced with LFS-bootscripts
+ * Removed 'stty' from the environment setup as it breaks
+ custom key configs when run from the CLI.
+
+20070218 - [dj] * Synced with LFS-bootscripts.
+
+20070206 - [dj] * Initial commit
diff --git a/bootscripts/contrib/lsb-v3/INSTALL b/bootscripts/contrib/lsb-v3/INSTALL
new file mode 100644
index 000000000..b7e0f109f
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/INSTALL
@@ -0,0 +1,32 @@
+LSB-V3 Installation:
+
+Inline LFS installation: make install &&
+ sed -i.bak 's@/etc/rc.d@/etc@' /etc/inittab
+
+
+After LFS: for file in /etc/rc.d /etc/sysconfig/rc /etc/sysconfig/modules \
+ /etc/sysconfig/createfiles
+ do
+ mv $file $file.bak
+ done &&
+ make install &&
+ sed -i.bak 's@/etc/rc.d@/etc@' /etc/inittab
+
+
+With existing scripts: HERE=$PWD
+ cp -a /etc/rc.d /etc/rc.d.bak &&
+ mv /etc/rc.d/* /etc &&
+ cd /etc/rc.d &&
+ ln -s ../rc*.d . &&
+ ln -s ../init.d . &&
+ for file in /etc/rc.d /etc/syconfig/rc \
+ /etc/sysconfig/modules /etc/sysconfig/createfiles
+ do
+ mv $file $file.bak
+ done &&
+ cd $HERE &&
+ unset HERE &&
+ make install &&
+ sed -i.bak 's@/etc/rc.d@/etc/@' /etc/inittab
+
+That's it!
diff --git a/bootscripts/contrib/lsb-v3/Makefile b/bootscripts/contrib/lsb-v3/Makefile
new file mode 100644
index 000000000..6e117a9e3
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/Makefile
@@ -0,0 +1,134 @@
+ETCDIR=/etc
+EXTDIR=${DESTDIR}${ETCDIR}
+MODE=754
+DIRMODE=755
+CONFMODE=644
+
+all: install
+
+create-dirs:
+ install -d -m ${DIRMODE} ${EXTDIR}/rc0.d
+ install -d -m ${DIRMODE} ${EXTDIR}/rc1.d
+ install -d -m ${DIRMODE} ${EXTDIR}/rc2.d
+ install -d -m ${DIRMODE} ${EXTDIR}/rc3.d
+ install -d -m ${DIRMODE} ${EXTDIR}/rc4.d
+ install -d -m ${DIRMODE} ${EXTDIR}/rc5.d
+ install -d -m ${DIRMODE} ${EXTDIR}/rc6.d
+ install -d -m ${DIRMODE} ${EXTDIR}/rcsysinit.d
+ install -d -m ${DIRMODE} ${EXTDIR}/init.d
+ install -d -m ${DIRMODE} ${EXTDIR}/sysconfig
+ install -d -m ${DIRMODE} ${DESTDIR}/lib/lsb
+ install -d -m ${DIRMODE} ${EXTDIR}/lsb/state
+
+create-service-dir:
+ install -d -m ${DIRMODE} ${EXTDIR}/sysconfig/network-devices/services
+
+create-boottemp-dir:
+ install -d -m ${DIRMODE} ${EXTDIR}/init.d/boottemp
+
+install: create-dirs create-service-dir create-boottemp-dir
+ install -m ${MODE} init.d/checkfs ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/cleanfs ${EXTDIR}/init.d/
+ install -m ${CONFMODE} init.d/lfs-functions ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/halt ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/console ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/localnet ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/modules ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/mountfs ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/mountkernfs ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/network ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/rc ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/reboot ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/sendsignals ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/setclock ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/sysklogd ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/swap ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/sysctl ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/template ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/udev ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/udev_retry ${EXTDIR}/init.d/
+ install -m ${CONFMODE} lsb/init-functions ${DESTDIR}/lib/lsb/
+ install -m ${CONFMODE} lsb/manage-functions ${DESTDIR}/lib/lsb/
+ install -m ${CONFMODE} etc/lsb-config ${EXTDIR}/lsb/
+ ln -sf ../init.d/network ${EXTDIR}/rc0.d/K80network
+ ln -sf ../init.d/sysklogd ${EXTDIR}/rc0.d/K90sysklogd
+ ln -sf ../init.d/sendsignals ${EXTDIR}/rc0.d/S60sendsignals
+ ln -sf ../init.d/mountfs ${EXTDIR}/rc0.d/S70mountfs
+ ln -sf ../init.d/swap ${EXTDIR}/rc0.d/S80swap
+ ln -sf ../init.d/localnet ${EXTDIR}/rc0.d/S90localnet
+ ln -sf ../init.d/halt ${EXTDIR}/rc0.d/S99halt
+ ln -sf ../init.d/network ${EXTDIR}/rc1.d/K80network
+ ln -sf ../init.d/sysklogd ${EXTDIR}/rc1.d/K90sysklogd
+ ln -sf ../init.d/network ${EXTDIR}/rc2.d/K80network
+ ln -sf ../init.d/sysklogd ${EXTDIR}/rc2.d/K90sysklogd
+ ln -sf ../init.d/sysklogd ${EXTDIR}/rc3.d/S10sysklogd
+ ln -sf ../init.d/network ${EXTDIR}/rc3.d/S20network
+ ln -sf ../init.d/sysklogd ${EXTDIR}/rc4.d/S10sysklogd
+ ln -sf ../init.d/network ${EXTDIR}/rc4.d/S20network
+ ln -sf ../init.d/sysklogd ${EXTDIR}/rc5.d/S10sysklogd
+ ln -sf ../init.d/network ${EXTDIR}/rc5.d/S20network
+ ln -sf ../init.d/network ${EXTDIR}/rc6.d/K80network
+ ln -sf ../init.d/sysklogd ${EXTDIR}/rc6.d/K90sysklogd
+ ln -sf ../init.d/sendsignals ${EXTDIR}/rc6.d/S60sendsignals
+ ln -sf ../init.d/mountfs ${EXTDIR}/rc6.d/S70mountfs
+ ln -sf ../init.d/swap ${EXTDIR}/rc6.d/S80swap
+ ln -sf ../init.d/localnet ${EXTDIR}/rc6.d/S90localnet
+ ln -sf ../init.d/reboot ${EXTDIR}/rc6.d/S99reboot
+ ln -sf ../init.d/mountkernfs ${EXTDIR}/rcsysinit.d/S00mountkernfs
+ ln -sf ../init.d/sysctl ${EXTDIR}/rcsysinit.d/S05sysctl
+ ln -sf ../init.d/modules ${EXTDIR}/rcsysinit.d/S10modules
+ ln -sf ../init.d/udev ${EXTDIR}/rcsysinit.d/S15udev
+ ln -sf ../init.d/swap ${EXTDIR}/rcsysinit.d/S20swap
+ ln -sf ../init.d/setclock ${EXTDIR}/rcsysinit.d/S25setclock
+ ln -sf ../init.d/checkfs ${EXTDIR}/rcsysinit.d/S30checkfs
+ ln -sf ../init.d/mountfs ${EXTDIR}/rcsysinit.d/S40mountfs
+ ln -sf ../init.d/udev_retry ${EXTDIR}/rcsysinit.d/S45udev_retry
+ ln -sf ../init.d/cleanfs ${EXTDIR}/rcsysinit.d/S50cleanfs
+ ln -sf ../init.d/console ${EXTDIR}/rcsysinit.d/S70console
+ ln -sf ../init.d/localnet ${EXTDIR}/rcsysinit.d/S80localnet
+ if [ ! -f ${EXTDIR}/sysconfig/createfiles ]; then install -m ${CONFMODE} sysconfig/createfiles ${EXTDIR}/sysconfig/; fi
+ if [ ! -f ${EXTDIR}/sysconfig/modules ]; then install -m ${CONFMODE} sysconfig/modules ${EXTDIR}/sysconfig/; fi
+ if [ ! -f ${EXTDIR}/sysconfig/rc ]; then install -m ${CONFMODE} sysconfig/rc ${EXTDIR}/sysconfig/; fi
+ if [ ! -f ${EXTDIR}/sysconfig/rc.site ]; then install -m ${CONFMODE} sysconfig/rc.site ${EXTDIR}/sysconfig/; fi
+ install -m ${MODE} sysconfig/network-devices/ifup ${EXTDIR}/sysconfig/network-devices/
+ install -m ${MODE} sysconfig/network-devices/ifdown ${EXTDIR}/sysconfig/network-devices/
+ install -m ${MODE} sysconfig/network-devices/services/ipv4-static ${EXTDIR}/sysconfig/network-devices/services/
+ install -m ${MODE} sysconfig/network-devices/services/ipv4-static-route ${EXTDIR}/sysconfig/network-devices/services/
+
+minimal: create-dirs create-service-dir create-boottemp-dir
+ install -m ${MODE} init.d/checkfs ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/cleanfs ${EXTDIR}/init.d/
+ install -m ${CONFMODE} init.d/lfs-functions ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/halt ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/localnet ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/mountfs ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/mountkernfs ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/rc ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/reboot ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/sendsignals ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/setclock ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/swap ${EXTDIR}/init.d/
+ install -m ${MODE} init.d/udev ${EXTDIR}/init.d/
+ install -m ${CONFMODE} lsb/init-functions ${DESTDIR}/lib/lsb/
+ install -m ${CONFMODE} lsb/manage-functions ${DESTDIR}/lib/lsb/
+ install -m ${CONFMODE} etc/lsb-config ${EXTDIR}/lsb/
+ ln -sf ../init.d/sendsignals ${EXTDIR}/rc0.d/S60sendsignals
+ ln -sf ../init.d/mountfs ${EXTDIR}/rc0.d/S70mountfs
+ ln -sf ../init.d/swap ${EXTDIR}/rc0.d/S80swap
+ ln -sf ../init.d/halt ${EXTDIR}/rc0.d/S99halt
+ ln -sf ../init.d/sendsignals ${EXTDIR}/rc6.d/S60sendsignals
+ ln -sf ../init.d/mountfs ${EXTDIR}/rc6.d/S70mountfs
+ ln -sf ../init.d/swap ${EXTDIR}/rc6.d/S80swap
+ ln -sf ../init.d/reboot ${EXTDIR}/rc6.d/S99reboot
+ ln -sf ../init.d/mountkernfs ${EXTDIR}/rcsysinit.d/S00mountkernfs
+ ln -sf ../init.d/udev ${EXTDIR}/rcsysinit.d/S10udev
+ ln -sf ../init.d/swap ${EXTDIR}/rcsysinit.d/S20swap
+ ln -sf ../init.d/setclock ${EXTDIR}/rcsysinit.d/S25setclock
+ ln -sf ../init.d/checkfs ${EXTDIR}/rcsysinit.d/S30checkfs
+ ln -sf ../init.d/mountfs ${EXTDIR}/rcsysinit.d/S40mountfs
+ ln -sf ../init.d/cleanfs ${EXTDIR}/rcsysinit.d/S50cleanfs
+ if [ ! -f ${EXTDIR}/sysconfig/rc ]; then install -m ${CONFMODE} sysconfig/rc ${EXTDIR}/sysconfig/; fi
+
+.PHONY: all create-dirs create-service-dir create-boottemp-dir \
+ install minimal
+
diff --git a/bootscripts/contrib/lsb-v3/README b/bootscripts/contrib/lsb-v3/README
new file mode 100644
index 000000000..a2649bce0
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/README
@@ -0,0 +1,105 @@
+LSB-V3 README
+
+The scripts contianed in this directory are a complete rewrite of the
+boot scripts from LFS-6.1 (updated for LFS-SVN about 2008-04-13). As is
+usually the case with a rewrite, there have been many changes:
+
+LSB Version 3.1 Compliant Scripts - Immediately noticable are the LSB headers
+in the rc.d scripts themselves. Each script contains a usable header to
+allow for automating both the installation of, and determining proper
+execution order for the startup scripts. These values can also be used
+directly in parallel boot setups. Additionally, messages are displayed in
+one single write to the screen, after exit status is determined, so that
+they can be used in parallel setups. I am not sure if this was the only
+barrier to auto language translation in the previous bootscripts. Further,
+the messages are created from parts and only written to the screen in a
+single command, so maybe no help at all WRT translated boot messages.
+
+LSB 3.1 Omissions - Unfortunately, this package is not completely LSB
+compliant as it lacks install-initd and remove-initd programs. The current
+popular flavor of these programs is written in Python, which, as you should
+know, is not installed until BLFS. I began work on a bash implementation,
+and have provided the needed functions to parse the LSB headers in the
+manage-functions script (insalled by default into /lib/lsb). Unfortunately,
+I have yet to complete the actual install-initd and remove-initd scripts,
+however, I do have an almost complete install-initd kept locally. I am
+currently working on a separate script to completely rewrite the symlinks
+should LFS default values not prove sufficient when working with scripts in
+the wild. I have not included either here because they are not yet complete
+or thoroughly tested, and due to the development process of lfs-bootscritps,
+would be included in a release tarball. If you would like to assist with the
+development of these scripts, or would even just like to see what I have so
+far, please email me privately. Of course, feel free to write your own if you
+do not like the manage-fucntions script (or bash).
+
+Distribution Independent - this original goal for the LFS scripts has been
+stretched even further by providing both a global rc config file that
+contains (generally) static values, and a new rc.site config file to allow
+customization of messages as diplayed to the end user during the boot
+process. The format of messages printed to the screen is adjustable
+here. As well, the other options that were available in the previous
+versions of the lfs-bootscripts, and additional options as discussed below,
+are configurable by the /etc/sysconfig/rc.site file.
+
+Single Environment - The rc script has been rewritten completely to allow a
+single source of the boot configuration per runlevel change. This config
+is inherited from rc's environment as opposed to being sourced everytime a
+script is run. This results in a negledgable decrease in boot time, but
+it is just better in principle.
+
+Boot Logging - The previous incarnation of the boot log didn't begin
+recording events until the root filesystem was mounted read/write. This has
+been corrected by providing a tempfs mount immediately after init hands
+control to the rc script. The bootlog is generated on the tempfs and then
+passed to the log file before login. Additionally, shutdown events are no
+longer recorded in the bootlog. They were pretty much useless and it really
+wasn't what I'd call a *boot* log. Boot logging is on by default and is
+configurable in the /etc/sysconfig/rc.site file.
+
+Interactive Boot - This feature has been included by default, and is a
+little more polished than my previous attempt. It does introduce a two
+second delay in the boot process (so that you have time to press a button
+to select interactive mode). This time value, and the option prompt itself,
+is configurable in the /etc/sysconfig/rc.site file.
+
+RC_BASE - The base directory for the bootscripts is now /etc, not
+/etc/rc.d. This is mostly to conform with mainstream distros, but other
+boot methods do expect that /etc/init.d is the location of bootscripts.
+Some distros provide a rc.d direcorty with symlinks to the rc*.d and init.d
+directories, I have not done that. /etc is the location now, get your
+flying fingers accustomed to it! Of course, this is still configurable in
+/etc/sysconfig/rc.site, and if the change is too great, I'll put it back.
+
+LSB Functions - The previous lfs-bootscripts sourced a functions file
+located at /etc/rc.d/init.d/functions. This file has been renamed
+$distro-functions to segregate it from the old. The name is configurable
+by the rc.site configuration file. Both old and new bootscripts can be
+used simultaneously in a SYS-V setup (with proper symlinks in place).
+LSB defined functions are used where possible, but the $distro-functions file
+provides, easy to use wraper functions that
+start/stop/reload/force-reload/restart programs, evaluate the numerical
+LSB return values, and print status messages to the screen. Both LFS
+functions and LSB functions are documented directly in the scritps located
+at /etc/init.d/$distro-functions and /lib/lsb/init-functions respectively.
+
+Pretier - Yeah, I just couldn't handle all the grey text... By default,
+successful boot messages are prefixed with a single green astrik character,
+warning messages with two yellow astirks, and failures are prefixed with
+three red astriks. This just provides a second 'quick glance' status when
+watching the boot messages fly by. Again, the prefixes are configurable (or
+completely removable) in the /etc/sysconfig/rc.site file.
+
+Complete Rewrite - Yep. That doesn't mean that code wasn't reused when
+possible, so Alexander, Bryan, Dan, Gerard, Jeremy, Jim, Mathias, Matthew,
+Nathan, and countless other contributors (whose names I've forgotten and will
+promptly be reminded of (please)) are due credit for these as well. That
+said, at very least, this is a complete reorganisation that I've tested to
+the best of my ability, but there probably are some hidden bugs that will
+come to lite when used more frequently. Please give me a shout _when_ you
+find them.
+
+Thanks.
+
+-- DJ Lucas
+dj@linuxfromscratch.org
+
diff --git a/bootscripts/contrib/lsb-v3/etc/lsb-config b/bootscripts/contrib/lsb-v3/etc/lsb-config
new file mode 100644
index 000000000..856f8bf85
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/etc/lsb-config
@@ -0,0 +1,8 @@
+# Begin /etc/lsb/lsb-config
+
+rcbase="/etc/init.d"
+statedir="/etc/lsb/state"
+distro="LFS"
+
+# End /etc/lsb/lsb-config
+
diff --git a/bootscripts/contrib/lsb-v3/init.d/checkfs b/bootscripts/contrib/lsb-v3/init.d/checkfs
new file mode 100644
index 000000000..5523d5e51
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/checkfs
@@ -0,0 +1,105 @@
+#!/bin/sh
+# Begin /etc/init.d/checkfs
+
+### BEGIN INIT INFO
+# Provides: checkfs
+# Required-Start: udev swap $time
+# Should-Start: lvm
+# Required-Stop:
+# Should-Stop:
+# Default-Start: sysinit
+# Default-Stop:
+# Short-Description: Checks local filesystems before mounting.
+# Description: Checks local filesystmes before mounting.
+# X-LFS-Default-Start: S30
+# X-LFS-Default-Stop:
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ start)
+ if [ -f /fastboot ]; then
+ echo "${INFO}/fastboot found!"
+ log_success_msg "Will not perform file system checks as requested."
+ exit 0
+ fi
+
+ mount -n -o remount,ro / >/dev/null
+ if [ ${?} != 0 ]
+ then
+ log_failure_msg "Mounting root file system in read-only mode"
+ echo "${FAILURE}FAILURE:\n"
+ echo -n "${FIALURE}Cannot check root filesystem because it "
+ echo "${FAILURE}could not be mounted"
+ echo "${FAILURE}in read-only mode.\n\n"
+ echo -n "${FAILURE}After you press Enter, this system will be "
+ echo "${FAILURE}halted and powered off.\n"
+ echo "${INFO}Press enter to continue...${NORMAL}"
+ read ENTER
+ /etc/rc.d/init.d/halt stop
+ fi
+
+ if [ -f /forcefsck ]
+ then
+ echo "${INFO}/forcefsck found!"
+ log_success_msg "${INFO}Forcing file system checks as requested."
+ options="-f"
+ else
+ options=""
+ fi
+
+ # Note: -a option used to be -p; but this fails e.g.
+ # on fsck.minix
+ fsck ${options} -a -A -C -T
+ error_value=${?}
+
+ if [ "${error_value}" = 0 ]
+ then
+ log_success_msg "Checking file systems..."
+ elif [ "${error_value}" = 1 ]
+ then
+ log_warning_msg "Checking file systems..."
+ echo "${WARNING}WARNING:\n"
+ echo "${WARNING}File system errors were found and have been"
+ echo "${WARNING}corrected. You may want to double-check that"
+ echo "${WARNING}everything was fixed properly.${NORMAL}"
+ elif [ "${error_value}" = 2 -o "${error_value}" = 3 ]; then
+ log_warning_msg "Checking file systems..."
+ echo "${WARNING}WARNING:\n"
+ echo "${WARNING}File system errors were found and have been been"
+ echo "${WARNING}corrected, but the nature of the errors require"
+ echo "${WARNING}this system to be rebooted.\n"
+ echo "After you press enter, this system will be rebooted.\n"
+ echo "${INFO}Press Enter to continue...${NORMAL}"
+ read ENTER
+ reboot -f
+ elif [ "${error_value}" -gt 3 -a "${error_value}" -lt 16 ]; then
+ log_failure_msg "Checking file systems..."
+ echo "${FAILURE}FAILURE:\n"
+ echo "${FAILURE}File system errors were encountered that could"
+ echo "${FAILURE}not be fixed automatically. This system cannot"
+ echo "${FAILURE}continue to boot and will therefore be halted"
+ echo "${FAILURE}until those errors are fixed manually by a"
+ echo "${FAILURE}System Administrator.\n"
+ echo "${FAILURE}After you press Enter, this system will be"
+ echo "${FAILURE}halted and powered off.\n"
+ echo "${INFO}Press Enter to continue...${NORMAL}"
+ read ENTER
+ /etc/rc.d/init.d/halt stop
+ elif [ "${error_value}" -ge 16 ]; then
+ log_failure_msg "Checking file systems..."
+ echo "${FAILURE}FAILURE:\n"
+ echo "${FAILURE}Unexpected Failure running fsck. Exited with error"
+ echo "${FAILURE}code: ${error_value}.${NORMAL}"
+ exit ${error_value}
+ fi
+ ;;
+ *)
+ echo "Usage: ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/checkfs
diff --git a/bootscripts/contrib/lsb-v3/init.d/cleanfs b/bootscripts/contrib/lsb-v3/init.d/cleanfs
new file mode 100644
index 000000000..b160fbc22
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/cleanfs
@@ -0,0 +1,113 @@
+#!/bin/sh
+# Begin /etc/init.d/cleanfs
+
+### BEGIN INIT INFO
+# Provides: cleanfs
+# Required-Start: $local_fs
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start: sysinit
+# Default-Stop:
+# Short-Description: Cleans temporary directories early in the boot process.
+# Description: Cleans temporary directories /var/run, /var/lock, and
+# /tmp. cleanfs also creates /var/run/utmp and any files
+# defined in /etc/sysconfig/createfiles.
+# X-LFS-Default-Start: S50
+# X-LFS-Default-Stop:
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+# Function to create files/directory on boot.
+create_files()
+{
+ # Read in the configuration file.
+ exec 9>&0 < /etc/sysconfig/createfiles
+ while read name type perm usr grp dtype maj min junk
+ do
+ # Ignore comments and blank lines.
+ case "${name}" in
+ ""|\#*) continue ;;
+ esac
+
+ # Ignore existing files.
+ if [ ! -e "${name}" ]
+ then
+ # Create stuff based on its type.
+ case "${type}" in
+ dir)
+ mkdir "${name}"
+ ;;
+ file)
+ :> "${name}"
+ ;;
+ dev)
+ case "${dtype}" in
+ char)
+ mknod "${name}" c ${maj} ${min}
+ ;;
+ block)
+ mknod "${name}" b ${maj} ${min}
+ ;;
+ pipe)
+ mknod "${name}" p
+ ;;
+ *)
+ echo -n "\n${WARNING}Unknown device type: ${dtype}"
+ echo "${NORMAL}"
+ ;;
+ esac
+ ;;
+ *)
+ echo "\n${WARNING}Unknown type: ${type}${NORMAL}"
+ continue
+ ;;
+ esac
+
+ # Set up the permissions, too.
+ chown ${usr}:${grp} "${name}"
+ chmod ${perm} "${name}"
+ fi
+ done
+ exec 0>&9 9>&-
+}
+
+case "${1}" in
+ start)
+ message="Cleaning file systems: "
+
+ message="${message}${INFO} /tmp"
+ find /tmp -xdev -mindepth 1 ! -name lost+found \
+ -delete || failed=1
+
+ message="${message} /var/lock"
+ find /var/lock -type f -exec rm -f {} \; || failed=1
+
+ message="${message} /var/run${NORMAL}"
+ find /var/run ! -type d ! -name utmp -exec rm -f {} \; || failed=1
+
+ > /var/run/utmp
+ if grep -q '^utmp:' /etc/group ; then
+ chmod 664 /var/run/utmp
+ chgrp utmp /var/run/utmp
+ fi
+
+ (exit ${failed})
+ evaluate_retval standard
+
+ if egrep -qv '^(#|$)' /etc/sysconfig/createfiles 2>/dev/null
+ then
+ message="Creating files and directories..."
+ create_files
+ evaluate_retval standard
+ fi
+ ;;
+ *)
+ echo "Usage: ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/cleanfs
diff --git a/bootscripts/contrib/lsb-v3/init.d/console b/bootscripts/contrib/lsb-v3/init.d/console
new file mode 100644
index 000000000..87e392378
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/console
@@ -0,0 +1,111 @@
+#!/bin/sh
+# Begin $rc_base/init.d/console
+
+### BEGIN INIT INFO
+# Provides: console
+# Required-Start:
+# Should-Start: $local_fs
+# Required-Stop:
+# Should-Stop:
+# Default-Start: sysinit
+# Default-Stop:
+# Short-Description: Sets up a localised console.
+# Description: Sets up fonts and language settings for the user's
+# local as defined by /etc/sysconfig/console.
+# X-LFS-Default-Start: S70
+# X-LFS-Default-Stop:
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+MESSAGE="Setting up Linux console..."
+
+# Native English speakers probably don't have /etc/sysconfig/console at all
+if [ -f /etc/sysconfig/console ]
+then
+ . /etc/sysconfig/console
+fi
+
+is_true() {
+ [ "$1" = "1" ] || [ "$1" = "yes" ] || [ "$1" = "true" ]
+}
+
+failed=0
+
+case "${1}" in
+ start)
+ # There should be no bogus failures below this line!
+
+ # Figure out if a framebuffer console is used
+ [ -d /sys/class/graphics/fb0 ] && USE_FB=1 || USE_FB=0
+
+ # Figure out the command to set the console into the
+ # desired mode
+ is_true "${UNICODE}" &&
+ MODE_COMMAND="echo -en '\033%G' && kbd_mode -u" ||
+ MODE_COMMAND="echo -en '\033%@\033(K' && kbd_mode -a"
+
+ # On framebuffer consoles, font has to be set for each vt in
+ # UTF-8 mode. This doesn't hurt in non-UTF-8 mode also.
+
+ ! is_true "${USE_FB}" || [ -z "${FONT}" ] ||
+ MODE_COMMAND="${MODE_COMMAND} && setfont ${FONT}"
+
+ # Apply that command to all consoles mentioned in
+ # /etc/inittab. Important: in the UTF-8 mode this should
+ # happen before setfont, otherwise a kernel bug will
+ # show up and the unicode map of the font will not be
+ # used.
+ # FIXME: Fedora Core also initializes two spare consoles
+ # - do we want that?
+
+ for TTY in `grep '^[^#].*respawn:/sbin/agetty' /etc/inittab |
+ grep -o '\btty[[:digit:]]*\b'`
+ do
+ openvt -f -w -c ${TTY#tty} -- \
+ /bin/sh -c "${MODE_COMMAND}" || failed=1
+ done
+
+ # Set the font (if not already set above) and the keymap
+ is_true "${USE_FB}" || [ -z "${FONT}" ] ||
+ setfont $FONT ||
+ failed=1
+ [ -z "${KEYMAP}" ] ||
+ loadkeys ${KEYMAP} >/dev/null 2>&1 ||
+ failed=1
+ [ -z "${KEYMAP_CORRECTIONS}" ] ||
+ loadkeys ${KEYMAP_CORRECTIONS} >/dev/null 2>&1 ||
+ failed=1
+
+ # Linux kernel generates wrong bytes when composing
+ # in Unicode mode. That's why we disable dead keys in Unicode
+ # mode by default. If you need them, download and apply
+ # http://www.linuxfromscratch.org/~alexander/patches/linux-2.6.12.5-utf8_input-2.patch
+ # After patching, add "-m charset_of_your_keymap" to the FONT
+ # variable and set BROKEN_COMPOSE=false
+ # in /etc/sysconfig/console
+
+ [ -n "$BROKEN_COMPOSE" ] || BROKEN_COMPOSE="$UNICODE"
+ ! is_true "$BROKEN_COMPOSE" ||
+ echo "" | loadkeys -c >/dev/null 2>&1 ||
+ failed=1
+
+ # Convert the keymap from $LEGACY_CHARSET to UTF-8
+ [ -z "$LEGACY_CHARSET" ] ||
+ dumpkeys -c "$LEGACY_CHARSET" |
+ loadkeys -u >/dev/null 2>&1 ||
+ failed=1
+
+ # If any of the commands above failed, the trap at the
+ # top would set $failed to 1
+ ( exit $failed )
+ evaluate_retval standard
+ ;;
+ *)
+ echo $"Usage:" "${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/console
diff --git a/bootscripts/contrib/lsb-v3/init.d/halt b/bootscripts/contrib/lsb-v3/init.d/halt
new file mode 100644
index 000000000..22c14d6a4
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/halt
@@ -0,0 +1,32 @@
+#!/bin/sh
+# Begin $RC_BASE/init.d/halt
+
+### BEGIN INIT INFO
+# Provides: halt
+# Required-Start:
+# Should-Start:
+# Required-Stop: localnet
+# Should-Stop:
+# Default-Start: 0
+# Default-Stop:
+# Short-Description: Halts the system.
+# Description: Halts the System.
+# X-LFS-Default-Start:
+# X-LFS-Default-Stop: S99
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ stop)
+ log_success_msg "Halting System..."
+ halt -d -f -i -p
+ ;;
+ *)
+ echo "Usage: {stop}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/halt
diff --git a/bootscripts/contrib/lsb-v3/init.d/lfs-functions b/bootscripts/contrib/lsb-v3/init.d/lfs-functions
new file mode 100644
index 000000000..34dfeefdc
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/lfs-functions
@@ -0,0 +1,215 @@
+# Begin /etc/init.d/lfs-functions
+# Provides LFS specific functions for LSB style bootscripts
+
+################################# chkstat() ###################################
+# chk_stat checks the status of a script by checking for both a binary file #
+# to execute, and if set, a config file that may be needed for the program #
+# to run successfully. The calling script will exit with a return value of 5 #
+# if the binary does not exist, and a value of 6 if the needed config file is #
+# unavailable as per LSB requirements. This function accepts zero, one, or #
+# two string arguments. If arguments are passed, the first must be a bin #
+# file. If a second argument is passed, it is interpreted as the config #
+# file. Optionally, zero arguments can be passed if BIN_FILE, and optinally #
+# CONFIG_FILE are set in the calling script. #
+###############################################################################
+chk_stat()
+{
+ if [ "${#}" -gt "0" -a "${#}" -lt "3" ]; then
+ BIN_FILE="${1}"
+ if [ -z "${2}" ]; then
+ CONFIG_FILE=""
+ else
+ CONFIG_FILE="${2}"
+ fi
+ elif [ -z "${BIN_FILE}" ]; then
+ echo "Usage: 'chk_stat BIN_FILE CONFIG_FILE'"
+ exit 1 # Generic Error
+ fi
+
+ if [ ! -e "${BIN_FILE}" ]; then
+ log_failure_msg "${BIN_FILE} not installed" &&
+ exit 5
+ fi
+
+ if [ ! -z "${CONFIG_FILE}" ]; then
+ if [ ! -e "${CONFIG_FILE}" ]; then
+ log_failure_msg "${CONFIG_FILE} does not exist" &&
+ exit 6
+ fi
+ fi
+}
+
+################################ loadproc() ###################################
+# loadproc is just a wraper to start_daemon for simple scripts, which will #
+# require no arguments if $BIN_FILE is set. #
+###############################################################################
+loadproc()
+{
+ start_daemon "${BIN_FILE}" "${@}"
+}
+
+################################ endproc() ####################################
+# endproc, like loadproc, is just a wraper to killproc for simplicity and is #
+# dependent on $BIN_FILE being set. #
+###############################################################################
+endproc()
+{
+ killproc "${BIN_FILE}" "${@}"
+}
+
+############################### statusproc() ##################################
+# statusproc checks the status of a particular binary and displays the #
+# appropriate message (running or not running) and exits on the return value #
+# of pidofproc. This function accepts two string arguments or zero arguments #
+# if BIN_FILE and MESSAGE are set, else it requires the bin file as the first #
+# argument, and the message as the second. Both must be enclosed in quotes. #
+###############################################################################
+statusproc()
+{
+ if [ "${#}" -gt "0" -a "${#}" -lt "3" ]; then
+ BIN_FILE="${1}"
+ MESSAGE="${2}"
+ elif [ -z "${BIN_FILE}" -o -z "${MESSAGE}" ]; then
+ echo "Usage: 'statusproc BIN_FILE MESSAGE'"
+ exit 1 # Generic Error
+ fi
+
+ pidlist=`pidofproc "${BIN_FILE}"`
+ STATUS=$?
+ echo "Checking ${MESSAGE} status:"
+ if [ "${STATUS}" = "0" ]; then
+ log_success_msg "Running with PID(s) ${pidlist}"
+ else
+
+ log_warning_msg "Not running!"
+ fi
+
+ return "${STATUS}"
+}
+
+############################### reloadproc() ##################################
+# reloadproc sends a HUP signal to the running program (relaod configuration) #
+# It optionally, using the -force switch, checks the status of a particular #
+# program and starts it if it is not already running. This function accepts #
+# one optional switch (must be the first argument), and either two, or zero #
+# string arguments. If BIN_FILE and MESSAGE are set in the script's #
+# environment, it will use those values, else it requires the bin file as #
+# the first argument (following -force if used), and the message as the #
+# second. Both must be enclosed in quotes. If the force option is used, it #
+# follows the LSB definition of 'force-reload' - the program is started if #
+# not already running. #
+###############################################################################
+reloadproc()
+{
+ local force="0"
+ if [ "${#}" -gt "0" -a "${1}" = "-force" ]; then
+ force="1"
+ shift 1
+ fi
+
+ if [ "${#}" -gt "0" -a "${#}" -lt "3" ]; then
+ BIN_FILE="${1}"
+ MESSAGE="${2}"
+ elif [ -z "${BIN_FILE}" -o -z "${MESSAGE}" ]; then
+ echo "Usage: 'reloadproc BIN_FILE MESSAGE'"
+ exit 1 # Generic Error
+ fi
+
+
+
+}
+
+############################## evaluate_retval() ###############################
+# evaluate_retval requires that you pass exactly one evaluation parameter of #
+# (start, stop, other) based on the previous action that is being evaluated. #
+# This function is intended for use with start_daemon and killproc to #
+# interpret the LSB exit codes properly, othewise the checks only for success #
+# or failure. #
+################################################################################
+evaluate_retval()
+{
+ local error_value="${?}"
+
+ # Handle LSB defined return values
+ case "${1}" in
+
+ start)
+ case "${error_value}" in
+ 0)
+ log_success_msg "Starting ${MESSAGE} "
+ return "${error_value}"
+ ;;
+ 2)
+ log_failure_msg "Starting ${MESSAGE} Error: Invalid argument!"
+ return "${error_value}"
+ ;;
+ 5)
+ log_failure_msg "Starting ${MESSAGE} Error: Not available!"
+ return "${error_value}"
+ ;;
+ *)
+ log_failure_msg "Starting ${MESSAGE} Error: General failure!"
+ return "${error_value}"
+ ;;
+ esac
+ ;;
+
+ stop)
+ case "${error_value}" in
+ 0)
+ log_success_msg "Stopping ${MESSAGE} "
+ return "${error_value}"
+ ;;
+ 2)
+ log_failure_msg "Stopping ${MESSAGE} Error: Invalid argument!"
+ return "${error_value}"
+ ;;
+ 5)
+ log_failure_msg "Stopping ${MESSAGE} Error: Not available!"
+ return "${error_value}"
+ ;;
+ 7)
+ log_warning_msg "Stopping ${MESSAGE} Warning: Not running!"
+ return "${error_value}"
+ ;;
+ *)
+ log_failure_msg "Stopping ${MESSAGE} Error: General failure!"
+ return "${error_value}"
+ ;;
+ esac
+ ;;
+
+ force-reload)
+ message="Forcefully reloading "
+ ;;
+
+ reload)
+ message="Reloading "
+ ;;
+
+ restart)
+ message="Restarting "
+ ;;
+
+ try-restart)
+ message="Trying restart "
+ ;;
+
+ standard)
+ # $message or $MESSAGE must be set, but not both in order
+ # to use the 'standard' target.
+ ;;
+ esac
+
+ # Print messages for the generic force-reload, reload, restart,
+ # and try-restart targets
+ if [ "${error_value}" = "0" ]
+ then
+ log_success_msg "${message}${MESSAGE} "
+ return "${error_value}"
+ else
+ log_failure_msg "${message}${MESSAGE} "
+ return "${error_value}"
+ fi
+}
+
diff --git a/bootscripts/contrib/lsb-v3/init.d/localnet b/bootscripts/contrib/lsb-v3/init.d/localnet
new file mode 100644
index 000000000..1a68fe3a2
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/localnet
@@ -0,0 +1,84 @@
+#!/bin/sh
+# Begin /etc/init.d/localnet
+
+### BEGIN INIT INFO
+# Provides: localnet
+# Required-Start: $local_fs
+# Should-Start:
+# Required-Stop: $network
+# Should-Stop: swap
+# Default-Start: sysinit 0 6
+# Default-Stop:
+# Short-Description: Starts the local network.
+# Description: Sets the hostname of the machine and starts the
+# loopback interface.
+# X-LFS-Default-Start: S80
+# X-LFS-Default-Stop: S90
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+. /etc/sysconfig/network
+
+case "${1}" in
+ start)
+ ip addr add 127.0.0.1/8 label lo dev lo
+ ip link set lo up
+ if [ "${?}" = "0" ]
+ then
+ log_success_msg "Bringing up the loopback interface..."
+ else
+ log_failure_msg "Bringing up the loopback interface..."
+ fi
+
+ hostname "${HOSTNAME}"
+ if [ "${?}" = "0" ]
+ then
+ log_success_msg "Setting hostname to ${HOSTNAME}..."
+ else
+ log_failure_msg "Setting hostname to ${HOSTNAME}..."
+ fi
+
+ ;;
+
+ stop)
+ ip link set lo down
+ if [ "${?}" = "0" ]
+ then
+ log_success_msg "Bringing down the loopback interface..."
+ else
+ log_failure_msg "Bringing down the loopback interface..."
+ fi
+
+ ;;
+
+ restart)
+ ip link set lo down
+ retval="${?}"
+ sleep 1
+ ip addr add 127.0.0.1/8 label lo dev lo
+ retval=$(( "${retval}" + "${?}" ))
+ ip link set lo up
+ retval=$(( "${retval}" + "${?}" ))
+ hostname "${HOSTNAME}"
+ retval=$(( "${retval}" + "${?}" ))
+ if [ "${retval}" = "0" ]
+ then
+ log_success_msg "Restarting local network..."
+ else
+ log_failure_msg "Restarting local network..."
+ fi
+ ;;
+
+ status)
+ log_success_msg "Hostname is: ${INFO}$(hostname)${NORMAL}"
+ ip link show lo
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|restart|status}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/localnet
diff --git a/bootscripts/contrib/lsb-v3/init.d/modules b/bootscripts/contrib/lsb-v3/init.d/modules
new file mode 100644
index 000000000..d5e1ad646
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/modules
@@ -0,0 +1,99 @@
+#!/bin/sh
+# Begin /etc/init.d/modules
+
+### BEGIN INIT INFO
+# Provides: modules
+# Required-Start: mountkernfs
+# Should-Start: sysctl
+# Required-Stop:
+# Should-Stop:
+# Default-Start: sysinit
+# Default-Stop:
+# Short-Description: Loads required modules.
+# Description: Loads modules listed in /etc/sysconfig/modules.
+# X-LFS-Default-Start: S10
+# X-LFS-Default-Stop:
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+# Assure that the kernel has module support.
+[ -e /proc/ksyms -o -e /proc/modules ] || exit 0
+
+case "${1}" in
+ start)
+
+ # Exit if there's no modules file or there are no
+ # valid entries
+ [ -r /etc/sysconfig/modules ] &&
+ egrep -qv '^($|#)' /etc/sysconfig/modules ||
+ exit 0
+
+ # If proc is mounted, find the current kernel
+ # message level
+ if [ -f /proc/sys/kernel/printk ]; then
+ prev_msg=`cat /proc/sys/kernel/printk | \
+ sed 'l 1' | sed -n '2~0p' | \
+ sed 's/\\\//'`
+ else
+ prev_msg="6"
+ fi
+
+ # Now set the message level to 1 so not to make too
+ # much noise when loading modules
+ dmesg -n 1
+
+ # Only try to load modules if the user has actually given us
+ # some modules to load.
+ if egrep -qv '^(#|$)' /etc/sysconfig/modules 2>/dev/null
+ then
+
+ # Read in the configuration file.
+ exec 9>&0 < /etc/sysconfig/modules
+
+ message="${INFO}Loading modules:"
+
+ while read module args
+ do
+ # Ignore comments and blank lines.
+ case "${module}" in
+ ""|\#*) continue ;;
+ esac
+
+ # Attempt to load the module, making
+ # sure to pass any arguments provided.
+ modprobe ${module} ${args} > /dev/null
+
+ # Print the module name if successful,
+ # otherwise take note.
+ if [ ${?} -eq 0 ]; then
+ message="${message}${NORMAL} ${module}"
+ else
+ failedmod="${failedmod} ${module}"
+ fi
+ done
+
+ # Print a message about successfully loaded
+ # modules on the correct line.
+ log_success_msg "${message}"
+
+ # Print a failure message with a list of any
+ # modules that may have failed to load.
+ if [ "${failedmod}" ]; then
+ log_failure_msg "${FAILURE}Failed to load modules:${failedmod}"
+ fi
+
+ exec 0>&9 9>&-
+
+ fi
+ # Set the kernel message level back to it's previous value.
+ dmesg -n "${prev_msg}"
+ ;;
+ *)
+ echo "Usage: ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/modules
diff --git a/bootscripts/contrib/lsb-v3/init.d/mountfs b/bootscripts/contrib/lsb-v3/init.d/mountfs
new file mode 100644
index 000000000..eb9a728eb
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/mountfs
@@ -0,0 +1,60 @@
+#!/bin/sh
+# Begin /etc/init.d/mountfs
+
+### BEGIN INIT INFO
+# Provides: $local_fs
+# Required-Start: udev checkfs
+# Should-Start: lvm
+# Required-Stop: sendsignals
+# Should-Stop:
+# Default-Start: sysinit 0 6
+# Default-Stop:
+# Short-Description: Mounts and unmounts all local filesystems.
+# Description: Remounts root filesystem read/write and mounts all
+# remaining local filesystems defined in /etc/fstab on
+# start. Rmounts root filesystem read-only and unmounts
+# remaining filesystems on stop.
+# X-LFS-Default-Start: S40
+# X-LFS-Default-Stop: S70
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ start)
+ message="Remounting root file system in read-write mode..."
+ mount -n -o remount,rw / >/dev/null
+ evaluate_retval standard
+
+ # Remove fsck-related file system watermarks.
+ rm -f /fastboot /forcefsck
+
+ message="Recording existing mounts in /etc/mtab..."
+ > /etc/mtab
+ mount -f / || failed=1
+ mount -f /proc || failed=1
+ mount -f /sys || failed=1
+ (exit ${failed})
+ evaluate_retval standard
+
+ # This will mount all filesystems that do not have _netdev in
+ # their option list. _netdev denotes a network filesystem.
+ message="Mounting remaining file systems..."
+ mount -a -O no_netdev >/dev/null
+ evaluate_retval standard
+ ;;
+
+ stop)
+ message="Unmounting all other currently mounted file systems..."
+ umount -a -d -r >/dev/null
+ evaluate_retval standard
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/mountfs
diff --git a/bootscripts/contrib/lsb-v3/init.d/mountkernfs b/bootscripts/contrib/lsb-v3/init.d/mountkernfs
new file mode 100644
index 000000000..6362b3db9
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/mountkernfs
@@ -0,0 +1,45 @@
+#!/bin/sh
+# Begin /etc/init.d/mountkernfs
+
+### BEGIN INIT INFO
+# Provides: mountkernfs
+# Required-Start:
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start: sysinit
+# Default-Stop:
+# Short-Description: Mounts /sys and /proc virtual (kernel) filesystems.
+# Description: Mounts /sys and /proc virtual (kernel) filesystems.
+# X-LFS-Default-Start: S00
+# X-LFS-Default-Stop:
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ start)
+ message="Mounting kernel-based file systems:"
+
+ if ! mountpoint /proc > /dev/null; then
+ message="${message}${INFO} /proc${NORMAL}"
+ mount -n /proc || failed=1
+ fi
+
+ if ! mountpoint /sys > /dev/null; then
+ message="${message}${INFO} /sys${NORMAL}"
+ mount -n /sys || failed=1
+ fi
+
+ (exit ${failed})
+ evaluate_retval standard
+ ;;
+
+ *)
+ echo "Usage: ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/mountkernfs
diff --git a/bootscripts/contrib/lsb-v3/init.d/network b/bootscripts/contrib/lsb-v3/init.d/network
new file mode 100644
index 000000000..799f1861c
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/network
@@ -0,0 +1,74 @@
+#!/bin/sh
+# Begin /etc/init.d/network
+
+### BEGIN INIT INFO
+# Provides: $network
+# Required-Start: $syslog
+# Should-Start:
+# Required-Stop:
+# Should-Stop: $remote_fs
+# Default-Start: 3 4 5
+# Default-Stop: 0 1 2 6
+# Short-Description: Starts and configures network interfaces.
+# Description: Starts and configures network interfaces.
+# X-LFS-Default-Start: S20
+# X-LFS-Default-Stop: K80
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+. /etc/sysconfig/network
+
+case "${1}" in
+ start)
+ # Start all network interfaces
+ for file in ${NETWORK_DEVICES}/ifconfig.*
+ do
+ interface=${file##*/ifconfig.}
+
+ # skip if $file is * (because nothing was found)
+ if [ "${interface}" = "*" ]
+ then
+ continue
+ fi
+
+ IN_BOOT=1 ${NETWORK_DEVICES}/ifup ${interface}
+ done
+ ;;
+
+ stop)
+ # Reverse list
+ FILES=""
+ for file in ${NETWORK_DEVICES}/ifconfig.*
+ do
+ FILES="${file} ${FILES}"
+ done
+
+ # Stop all network interfaces
+ for file in ${FILES}
+ do
+ interface=${file##*/ifconfig.}
+
+ # skip if $file is * (because nothing was found)
+ if [ "${interface}" = "*" ]
+ then
+ continue
+ fi
+
+ IN_BOOT=1 ${NETWORK_DEVICES}/ifdown ${interface}
+ done
+ ;;
+
+ restart)
+ ${0} stop
+ sleep 1
+ ${0} start
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|restart}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/network
diff --git a/bootscripts/contrib/lsb-v3/init.d/rc b/bootscripts/contrib/lsb-v3/init.d/rc
new file mode 100644
index 000000000..c9a0aa51e
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/rc
@@ -0,0 +1,193 @@
+#!/bin/sh
+# Begin $RC_BASE/init.d/rc
+
+# Get the configuration file
+# All changes are to occur in the config file
+. /etc/sysconfig/rc
+
+# These 3 signals will not cause our script to exit
+trap "" INT QUIT TSTP
+
+# Simple sanity check - rc only takes one argument
+if [ "${#}" -ne 1 ]; then
+ echo "Usage: ${0} <runlevel>" >&2
+ exit 1
+fi
+
+# Do not use the RUNLEVEL and PREVLEVEL variables provided by init so
+# that they can be modified and alternate directories (sysinit) can
+# be used without affecting init
+runlevel="${1}"
+prevlevel="${PREVLEVEL}"
+
+# Just in case - some flavors of init don't set PREVLEVEL to 'N'
+if [ "${prevlevel}" = "" ]; then
+ prevlevel="N"
+fi
+
+# Mount a tmpfs to store boot accounting information
+if [ "${runlevel}" = "sysinit" -a "${TEMPFS_MOUNT}" != "" ]; then
+ mount -n -t tmpfs tmpfs "${TEMPFS_MOUNT}" -o mode=600
+fi
+
+# Provide an interactive prompt (if requested)
+if [ "${runlevel}" = "sysinit" -a "${iprompt}" = "yes" ]; then
+ # ash does not accept t and n flags for read
+ ls -l /bin/sh | grep "/ash"
+ if [ "${?}" -eq "0" ]; then
+ # We are using ash
+ echo -e -n "${WARNING}WARNING: Either bash or zsh is required"
+ echo -e "${WARNING} for interactive startup.\n"
+ sleep 3
+ else
+ echo ""
+ # dcol and icol are spaces before the message to center the
+ # message on screen.
+ dcol=$(( $(( ${COLUMNS} - ${dlen} )) / 2 ))
+ icol=$(( $(( ${COLUMNS} - ${ilen} )) / 2 ))
+ echo -e "\\033[${dcol}G${welcome_message}"
+ echo -e "\\033[${icol}G${i_message}${NORMAL}"
+ echo ""
+ read -t "${itime}" -n 1 interactive 2>&1 > /dev/null
+ if [ "${interactive}" = "I" -o "${interactive}" = "i" ]; then
+ echo -n -e "${CURS_UP}"
+ echo -e "${INFO}Interactive boot selected...${NORMAL}"
+ echo "interactive=I" > "${TEMPFS_MOUNT}/.interactive-start"
+ fi
+ fi
+fi
+
+
+# Verify that the directory exists
+if [ ! -d "${RC_BASE}/rc${runlevel}.d" ]; then
+ echo -n "${WARNING}${RC_BASE}/rc${runlevel}.d does not exist."
+ echo "${NORMAL}"
+ exit 1
+fi
+
+# Source the interactive state file if it exists
+if [ "${runlevel}" != "sysinit" -a -f "${TEMPFS_MOUNT}/.interactive-start" ]; then
+ . "${TEMPFS_MOUNT}/.interactive-start"
+fi
+
+# Prompt for interactive startup after completing sysinit
+if [ "${interactive}" = "I" -a "${runlevel}" != "sysinit" -a \
+ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; then
+ echo -n -e "Proceed with interactive starup of runlevel "
+ echo -n -e "${INFO}${runlevel}${NORMAL}?"
+ echo -n -e "(${FAILURE}y${NORMAL})es/(${FAILURE}n${NORMAL})o "
+ read -n 1 go_on
+ echo ""
+ if [ "${go_on}" = "n" ]; then
+ # don't continue
+ exit 0
+ fi
+fi
+
+
+# Attempt to stop all services started in the previous runlevel,
+# that are stopped in this runlevel
+if [ "${prevlevel}" != "N" ]; then
+ for link in $(ls -v ${RC_BASE}/rc${runlevel}.d/K* 2> /dev/null)
+ do
+ # Check to see if link is a valid symlink
+ if [ ! -f ${link} ]; then
+ echo -e "${WARNING}${link} is not a valid symlink."
+ continue # go on to the next K* link
+ fi
+
+ # Check to see if link is executable
+ if [ ! -x ${link} ]; then
+ echo -e "${WARNING}${link} is not executable, skipping."
+ continue # go on to the next K* link
+ fi
+
+ script=${link#$RC_BASE/rc$runlevel.d/K[0-9][0-9]}
+ prev_start=$RC_BASE/rc$prevlevel.d/S[0-9][0-9]$script
+ sysinit_start=$RC_BASE/rcsysinit.d/S[0-9][0-9]$script
+
+ if [ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; then
+ if [ ! -f ${prev_start} ] && [ ! -f ${sysinit_start} ]; then
+ echo -e -n "${WARNING}WARNING:\n\n${link} can't be"
+ echo -e "${WARNING} executed because it was not"
+ echo -e -n "${WARNING} not started in the previous"
+ echo -e "${WARNING} runlevel (${prevlevel})."
+ echo -e "${NORMAL}"
+ continue
+ fi
+ fi
+ ${link} stop
+ error_value=${?}
+
+ if [ "${error_value}" != "0" ]; then
+ print_error_msg
+ fi
+ done
+fi
+
+# Start all functions in this runlevel if they weren't started in
+# the previous runlevel
+for link in $( ls -v ${RC_BASE}/rc${runlevel}.d/S* 2> /dev/null)
+do
+ if [ "${prevlevel}" != "N" ]; then
+ script=${link#$RC_BASE/rc$runlevel.d/S[0-9][0-9]}
+ stop=$RC_BASE/rc$runlevel.d/K[0-9][0-9]$script
+ prev_start=$RC_BASE/rc$prevlevel.d/S[0-9][0-9]$script
+
+ [ -f ${prev_start} ] && [ ! -f ${stop} ] && continue
+ fi
+
+ # Check to see if link is a valid symlink
+ if [ ! -f ${link} ]; then
+ echo -e "${WARNING}${link} is not a valid symlink."
+ continue # go on to the next K* link
+ fi
+
+ # Check to see if link is executable
+ if [ ! -x ${link} ]; then
+ echo -e "${WARNING}${link} is not executable, skipping."
+ continue # go on to the next K* link
+ fi
+
+ case ${runlevel} in
+ 0|6)
+ ${link} stop
+ ;;
+
+ *)
+ if [ "${interactive}" = "I" -o "${interactive}" = "i" ]; then
+ echo -e -n "${WARNING}Start ${INFO}${link} ${WARNING}?"
+ echo -e -n "${NORMAL}(${FAILURE}y${NORMAL})es/(${FAILURE}n${NORMAL})o "
+ read -n 1 startit 2>&1 > /dev/null
+ echo ""
+ if [ "${startit}" = "y" -o "${startit}" = "Y" ]; then
+ ${link} start
+ else
+ echo -e -n "${WARNING}Not starting ${INFO}${link}"
+ echo -e "${WARNING}.${NORMAL}\n"
+ fi
+ else
+ ${link} start
+ fi
+ ;;
+ esac
+ error_value=${?}
+
+ if [ "${error_value}" -gt "1" ]; then
+ print_error_msg
+ fi
+done
+
+# Strip apply time to the logs, strip out any color codes and dump
+# the log to /var/log/boot.log
+if [ -f "${TEMPFS_MOUNT}/.bootlog" -a "${runlevel}" != "sysinit" ]; then
+ # Remove any color codes from the temp log file
+ sed -i 's@\\033\[[0-9];[0-9][0-9]m@@g' "${TEMPFS_MOUNT}/.bootlog"
+ #Fix the time and hostname
+ BTIMESPEC=$(echo `date +"%b %d %T"` `hostname`)
+ sed -i "s@^bootlog:@${BTIMESPEC} bootlog:@" "${TEMPFS_MOUNT}/.bootlog"
+ cat "${TEMPFS_MOUNT}/.bootlog" >> /var/log/boot.log
+ rm -f "${TEMPFS_MOUNT}/.bootlog"
+fi
+
+# End $RC_BASE/init.d/rc
diff --git a/bootscripts/contrib/lsb-v3/init.d/reboot b/bootscripts/contrib/lsb-v3/init.d/reboot
new file mode 100644
index 000000000..6e6b71f8b
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/reboot
@@ -0,0 +1,34 @@
+#!/bin/sh
+# Begin /etc/init.d/reboot
+
+### BEGIN INIT INFO
+# Provides: reboot
+# Required-Start:
+# Should-Start:
+# Required-Stop: localnet
+# Should-Stop:
+# Default-Start: 6
+# Default-Stop:
+# Short-Description: Reboots the system.
+# Description: Reboots the System.
+# X-LFS-Default-Start:
+# X-LFS-Default-Stop: S99
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ stop)
+ log_success_msg "Restarting system..."
+ reboot -d -f -i
+ ;;
+
+ *)
+ echo "Usage: ${0} {stop}"
+ exit 1
+ ;;
+
+esac
+
+# End /etc/init.d/reboot
diff --git a/bootscripts/contrib/lsb-v3/init.d/sendsignals b/bootscripts/contrib/lsb-v3/init.d/sendsignals
new file mode 100644
index 000000000..152cbfb2a
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/sendsignals
@@ -0,0 +1,49 @@
+#!/bin/sh
+# Begin /etc/init.d/sendsignals
+
+### BEGIN INIT INFO
+# Provides: sendsignals
+# Required-Start:
+# Should-Start:
+# Required-Stop: $syslog
+# Should-Stop:
+# Default-Start: 0 6
+# Default-Stop:
+# Short-Description: Attempts to kill remaining processes.
+# Description: Attempts to kill remaining processes.
+# X-LFS-Default-Start:
+# X-LFS-Default-Stop: S60
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ stop)
+ message="Sending all processes the TERM signal..."
+ killall5 -15
+ error_value=${?}
+
+ sleep 3
+
+ (exit ${error_value})
+ evaluate_retval standard
+
+ message="Sending all processes the KILL signal..."
+ killall5 -9
+ error_value=${?}
+
+ sleep 3
+
+ (exit ${error_value})
+ evaluate_retval standard
+ ;;
+
+ *)
+ echo "Usage: ${0} {stop}"
+ exit 1
+ ;;
+
+esac
+
+# End /etc/init.d/sendsignals
diff --git a/bootscripts/contrib/lsb-v3/init.d/setclock b/bootscripts/contrib/lsb-v3/init.d/setclock
new file mode 100644
index 000000000..a5237e9cb
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/setclock
@@ -0,0 +1,61 @@
+#!/bin/sh
+# Begin /etc/init.d/setclock
+
+### BEGIN INIT INFO
+# Provides: $time
+# Required-Start: udev
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start: sysinit
+# Default-Stop:
+# Short-Description: Stores and restores time from the hardware clock
+# Description: On boot, system time is obtained from hwclock. The
+# hardware clock can also be set on shutdown.
+# X-LFS-Default-Start: S25
+# X-LFS-Default-Stop:
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+BIN_FILE="/sbin/hwclock"
+CONFIGFILE="/etc/sysconfig/clock"
+
+chk_stat
+
+. "${CONFIGFILE}"
+
+CLOCKPARAMS=
+
+case "${UTC}" in
+ yes|true|1)
+ CLOCKPARAMS="${CLOCKPARAMS} --utc"
+ ;;
+
+ no|false|0)
+ CLOCKPARAMS="${CLOCKPARAMS} --localtime"
+ ;;
+
+esac
+
+case ${1} in
+ start)
+ message="Setting system clock..."
+ ${BIN_FILE} --hctosys ${CLOCKPARAMS} >/dev/null
+ evaluate_retval standard
+ ;;
+
+ stop)
+ message="Setting hardware clock..."
+ ${BIN_FILE} --systohc ${CLOCKPARAMS} >/dev/null
+ evaluate_retval standard
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop}"
+ ;;
+
+esac
+
+# End /etc/init.d/setclock
diff --git a/bootscripts/contrib/lsb-v3/init.d/swap b/bootscripts/contrib/lsb-v3/init.d/swap
new file mode 100644
index 000000000..87c5f61c2
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/swap
@@ -0,0 +1,57 @@
+#!/bin/sh
+# Begin /etc/init.d/swap
+
+### BEGIN INIT INFO
+# Provides: swap
+# Required-Start: mountkernfs udev
+# Should-Start: lvm
+# Required-Stop: $local_fs
+# Should-Stop:
+# Default-Start: sysinit 0 6
+# Default-Stop:
+# Short-Description: Mounts and unmounts swap partitions.
+# Description: Mounts and unmounts swap partitions defined in
+# /etc/fstab.
+# X-LFS-Default-Start: S20
+# X-LFS-Default-Stop: S80
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ start)
+ message="Activating all swap files/partitions..."
+ swapon -a
+ evaluate_retval standard
+ ;;
+
+ stop)
+ message="Deactivating all swap files/partitions..."
+ swapoff -a
+ evaluate_retval standard
+ ;;
+
+ restart)
+ swapoff -a
+ error_level="${?}"
+ sleep 1
+ swapon -a
+ error_level="$(( ${error_level} + ${?} ))"
+ (exit "${error_level}")
+ evaluate_retval restart
+ ;;
+
+ status)
+ log_success_msg "Retrieving swap status..."
+ echo
+ swapon -s
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|restart|status}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/swap
diff --git a/bootscripts/contrib/lsb-v3/init.d/sysctl b/bootscripts/contrib/lsb-v3/init.d/sysctl
new file mode 100644
index 000000000..ae9efb8f5
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/sysctl
@@ -0,0 +1,41 @@
+#!/bin/sh
+# Begin /etc/init.d/sysctl
+
+### BEGIN INIT INFO
+# Provides: sysctl
+# Required-Start: udev
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start: sysinit
+# Default-Stop:
+# Short-Description: Makes changes to the proc filesystem
+# Description: Makes changes to the proc filesystem as defined in
+# /etc/sysctl.conf. See 'man sysctl(8)'.
+# X-LFS-Default-Start: S05
+# X-LFS-Default-Stop:
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ start)
+ if [ -f "/etc/sysctl.conf" ]; then
+ message="Setting kernel runtime parameters..."
+ sysctl -q -p
+ evaluate_retval standard
+ fi
+ ;;
+
+ status)
+ sysctl -a
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|status}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/sysctl
diff --git a/bootscripts/contrib/lsb-v3/init.d/sysklogd b/bootscripts/contrib/lsb-v3/init.d/sysklogd
new file mode 100644
index 000000000..329349e81
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/sysklogd
@@ -0,0 +1,71 @@
+#!/bin/sh
+# Begin /etc/init.d/sysklogd
+
+### BEGIN INIT INFO
+# Provides: $syslog
+# Required-Start: localnet
+# Should-Start:
+# Required-Stop: $network
+# Should-Stop:
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Starts kernel and system log daemons.
+# Description: Starts kernel and system log daemons.
+# /etc/fstab.
+# X-LFS-Default-Start: S10
+# X-LFS-Default-Stop: K90
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+case "${1}" in
+ start)
+ MESSAGE="system log daemon..."
+ start_daemon /usr/sbin/syslogd -m 0
+ evaluate_retval start
+
+ MESSAGE="kernel log daemon..."
+ start_daemon /usr/sbin/klogd
+ evaluate_retval start
+ ;;
+
+ stop)
+ MESSAGE="kernel log daemon..."
+ killproc /usr/sbin/klogd
+ evaluate_retval stop
+
+ MESSAGE="system log daemon..."
+ killproc /usr/sbin/syslogd
+ evaluate_retval stop
+ ;;
+
+ force-reload)
+ MESSAGE="system log daemon config file..."
+ killproc -HUP `/usr/sbin/syslogd`
+ evaluate_retval reload
+ ;;
+
+ restart)
+ MESSAGE="system and kernel log deamons..."
+ failed=0
+ killproc /usr/sbin/klogd || failed=1
+ killproc /usr/sbin/syslogd || failed=1
+ start_daemon /usr/sbin/syslogd -m 0 || failed=1
+ start_daemon /usr/sbin/klogd || failed=1
+ (exit ${failed})
+ evaluate_retval restart
+ ;;
+
+ status)
+ statusproc /usr/sbin/syslogd
+ statusproc /usr/sbin/klogd
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|force-reload|restart|status}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/sysklogd
diff --git a/bootscripts/contrib/lsb-v3/init.d/template b/bootscripts/contrib/lsb-v3/init.d/template
new file mode 100644
index 000000000..24a9e7f93
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/template
@@ -0,0 +1,92 @@
+#!/bin/sh
+# Begin /etc/init.d/template
+
+### BEGIN INIT INFO
+# Provides: template
+# Required-Start:
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start:
+# Default-Stop:
+# Short-Description:
+# Description:
+# X-LFS-Default-Start:
+# X-LFS-Default-Stop:
+# X-LFS-Provided-By:
+### END INIT INFO
+
+# Source the LSB init-functions, ours are pulled in from there.
+. /lib/lsb/init-functions
+
+# These are optional, but required for chk_stat. They will be used in
+# the rest of the functions if defined, else you must provide a program
+# name to control, and a message ('Starting Template Service...'
+# or 'Stoping Template Service...') to evauate_retval. See the
+# documentaion in the lfs-fucntions file for more information.
+MESSAGE="Template Service"
+BIN_FILE="/some/path/to/template"
+CONFIGFILE="/etc/sysconfig/template.conf"
+
+# check that $BIN_FILE exists and is executable, and $CONFIGFILE exists.
+chk_stat
+
+# LSB Defined functions require that at least $BIN_FILE be passed to them,
+# where as lfs-functions will use the $BIN_FILE environment variable.
+# loadproc() and endproc() are just wrappers that pass everything on to
+# the LSB defined functions.
+
+case "${1}" in
+ start)
+ #start_daemon "${BIN_FILE}" -arg1 -arg2 #... or:
+ loadproc -arg1 -arg2 -arg3 #...
+ evaluate_retval start
+ ;;
+
+ stop)
+ #killproc -TERM "${BIN_FILE}" or:
+ endproc
+ evaluate_retval stop
+ ;;
+
+ force-reload)
+ reloadproc -force
+ evaluate_retval force-reload
+ ;;
+
+ restart)
+ $0 stop
+ $0 start
+ ;;
+
+ status)
+ statusproc
+ ;;
+
+# reload and try-restart are optional per LSB requirements
+ reload)
+ reloadproc
+ evaluate_retval reload
+ ;;
+
+ try-restart)
+ # Since this is optional there is no lfs-function for this one...
+ # might be at a later time if used enough, but I doubt it usefullness.
+ pidofproc "${BIN_FILE}" > /dev/null
+ if [ "${?}" -ne "0" ]; then
+ MESSAGE="${MESSAGE}: Not Running"
+ else
+ $0 stop
+ $0 start
+ exit 0
+ fi
+ evaluate_retval try-restart
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|{force-}reload|{try-}restart|status}"
+ exit 1
+ ;;
+esac
+
+# End /etc/init.d/template
diff --git a/bootscripts/contrib/lsb-v3/init.d/udev b/bootscripts/contrib/lsb-v3/init.d/udev
new file mode 100644
index 000000000..1aa80a3ef
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/udev
@@ -0,0 +1,81 @@
+#!/bin/sh
+# Begin $rc_base/init.d/udev
+
+### BEGIN INIT INFO
+# Provides: udev
+# Required-Start: mountkernfs
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start: sysinit
+# Default-Stop:
+# Short-Description: Populated /dev with device nodes.
+# Description: Mounts a tempfs on /dev and starts the udevd daemon.
+# Device nodes are created as defined by udev.
+# X-LFS-Default-Start: S15
+# X-LFS-Default-Stop:
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+MESSAGE="Populating /dev with device nodes..."
+
+case "${1}" in
+ start)
+ if ! grep -q '[[:space:]]sysfs' /proc/mounts; then
+ echo_failure
+ boot_mesg -n "FAILURE:\n\nUnable to create" ${FAILURE}
+ boot_mesg -n " devices without a SysFS filesystem"
+ boot_mesg -n "\n\nAfter you press Enter, this system"
+ boot_mesg -n " will be halted and powered off."
+ boot_mesg -n "\n\nPress Enter to continue..." ${INFO}
+ boot_mesg "" ${NORMAL}
+ read ENTER
+ /etc/rc.d/init.d/halt stop
+ fi
+
+ # Mount a temporary file system over /dev, so that any devices
+ # made or removed during this boot don't affect the next one.
+ # The reason we don't write to mtab is because we don't ever
+ # want /dev to be unavailable (such as by `umount -a').
+ mount -n -t tmpfs tmpfs /dev -o mode=755
+ if [ ${?} != 0 ]; then
+ echo_failure
+ boot_mesg -n "FAILURE:\n\nCannot mount a tmpfs" ${FAILURE}
+ boot_mesg -n " onto /dev, this system will be halted."
+ boot_mesg -n "\n\nAfter you press Enter, this system"
+ boot_mesg -n " will be halted and powered off."
+ boot_mesg -n "\n\nPress Enter to continue..." ${INFO}
+ boot_mesg "" ${NORMAL}
+ read ENTER
+ /etc/rc.d/init.d/halt stop
+ fi
+
+ # Udev handles uevents itself, so we don't need to have
+ # the kernel call out to any binary in response to them
+ echo > /proc/sys/kernel/hotplug
+
+ # Copy static device nodes to /dev
+ cp -a /lib/udev/devices/* /dev
+
+ # Start the udev daemon to continually watch for, and act on,
+ # uevents
+ /sbin/udevd --daemon
+
+ # Now traverse /sys in order to "coldplug" devices that have
+ # already been discovered
+ /sbin/udevadm trigger
+
+ # Now wait for udevd to process the uevents we triggered
+ /sbin/udevadm settle
+ evaluate_retval standard
+ ;;
+
+ *)
+ echo "Usage ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/udev
diff --git a/bootscripts/contrib/lsb-v3/init.d/udev_retry b/bootscripts/contrib/lsb-v3/init.d/udev_retry
new file mode 100644
index 000000000..b87a7b3e9
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/init.d/udev_retry
@@ -0,0 +1,51 @@
+#!/bin/sh
+# Begin $rc_base/init.d/udev_retry
+
+### BEGIN INIT INFO
+# Provides: udev_retry
+# Required-Start: udev
+# Should-Start: $local_fs
+# Required-Stop:
+# Should-Stop:
+# Default-Start: sysinit
+# Default-Stop:
+# Short-Description: Replays failed uevents and creates additonal devices.
+# Description: Replays any failed uevents that were skipped due to
+# slow hardware initialization, and creates those needed
+# device nodes
+# X-LFS-Default-Start: S45
+# X-LFS-Default-Stop:
+# X-LFS-Provided-By: LFS
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+MESSAGE="Retrying failed uevents, if any..."
+
+case "${1}" in
+ start)
+
+ # From Debian: "copy the rules generated before / was mounted
+ # read-write":
+ for file in /dev/.udev/tmp-rules--*; do
+ dest=${file##*tmp-rules--}
+ [ "$dest" = '*' ] && break
+ cat $file >> /etc/udev/rules.d/$dest
+ rm -f $file
+ done
+
+ # Re-trigger the failed uevents in hope they will succeed now
+ /sbin/udevadm trigger --retry-failed
+
+ # Now wait for udevd to process the uevents we triggered
+ /sbin/udevadm settle
+ evaluate_retval standard
+ ;;
+
+ *)
+ echo "Usage ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/udev_retry
diff --git a/bootscripts/contrib/lsb-v3/lsb/init-functions b/bootscripts/contrib/lsb-v3/lsb/init-functions
new file mode 100644
index 000000000..76c99969b
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/lsb/init-functions
@@ -0,0 +1,577 @@
+# Begin /lib/lsb/init-funtions
+
+# Provides initialization funtions as defined by the Linux Standard Base
+# specification, version 3.1.0
+
+# Source rc configuration if not inherited from the environment
+if [ "${RC_BASE}" = "" ]; then
+ . /etc/sysconfig/rc
+fi
+
+# Source the distro functions file
+if [ "${DISTRO_MINI}" != "" ]; then
+ . "${RC_BASE}/init.d/${DISTRO_MINI}-functions"
+fi
+
+################################################################################
+# 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
+ # succesful 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 [ "${?}" != "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" ] # signal is used to terminate the program
+ then
+ # account for empty pidlist (pid file still exists and nosignal 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}" != "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
+ else
+ # just check one last time and if still alive, fail
+ sleep 1
+ 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/[^/]*$//'`
+ progname=`echo "${program}" | sed "s@${prefix}@@"`
+ # 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 [ "${?}" = "0" ]; then
+ lpids="${pids}${pid} "
+ else
+ exitstatus="1"
+ fi
+ done
+
+ if [ -z "${lpids}" -a ! -f "${pidfile}" ]; then
+ return 3
+ else
+ echo "${lpids}"
+ return "${exitstatus}"
+ fi
+}
+################################################################################
+# log_success_msg() #
+# Usage: log_success_msg [$MESSAGE | "message"] #
+# #
+# Purpose: Print a successful status message to the screen and optionally #
+# a boot log file. #
+# #
+# Inputs: accepts one string value, either a quoted string or optionally #
+# the value of $MESSAGE if set in the running environment. #
+# #
+# Return values: Not used #
+################################################################################
+log_success_msg()
+{
+ echo -n -e "${PREFIX_SUCCESS}${@}"
+ echo -e "${SET_COL}${BRACKET}[${SUCCESS} OK ${BRACKET}]${NORMAL}"
+ if [ "${BOOTLOG_ENAB}" = "yes" ]; then
+ if [ $( hostname ) = "(none)" ]; then
+ BTTIMESPEC=""
+ else
+ BTTIMESPEC="$(echo `date +"%b %d %T"` `hostname`) "
+ fi
+ echo "${BTTIMESPEC}bootlog: ${@} Successful" >> "${TEMPFS_MOUNT}/.bootlog"
+ fi
+ return 0
+}
+
+################################################################################
+# log_failure_msg() #
+# Usage: log_failure_msg [$MESSAGE | "message"] #
+# #
+# Purpose: Print a failure status message to the screen and optionally #
+# a boot log file. #
+# #
+# Inputs: accepts one string value, either a quoted string or optionally #
+# the value of $MESSAGE if set in the running environment. #
+# #
+# Return values: Not used #
+################################################################################
+log_failure_msg()
+{
+ echo -n -e "${PREFIX_FAILURE}${@}"
+ echo -e "${SET_COL}${BRACKET}[${FAILURE} FAIL ${BRACKET}]${NORMAL}"
+ if [ "${BOOTLOG_ENAB}" = "yes" ]; then
+ if [ $( hostname ) = "(none)" ]; then
+ BTTIMESPEC=""
+ else
+ BTTIMESPEC="$(echo `date +"%b %d %T"` `hostname`) "
+ fi
+ echo "${BTTIMESPEC}bootlog: ${@} Failed!" >> "${TEMPFS_MOUNT}/.bootlog"
+ fi
+ return 0
+}
+
+################################################################################
+# log_warning_msg() #
+# Usage: log_warning_msg [$MESSAGE | "message"] #
+# #
+# Purpose: Print a warning status message to the screen and optionally #
+# a boot log file. #
+# #
+# Inputs: accepts one string value, either a quoted string or optionally #
+# the value of $MESSAGE if set in the running environment. #
+# #
+# Return values: Not used #
+################################################################################
+log_warning_msg()
+{
+ echo -n -e "${PREFIX_WARNING}${@}"
+ echo -e "${SET_COL}${BRACKET}[${WARNING} WARN ${BRACKET}]${NORMAL}"
+ if [ "${BOOTLOG_ENAB}" = "yes" ]; then
+ if [ $( hostname ) = "(none)" ]; then
+ BTTIMESPEC=""
+ else
+ BTTIMESPEC="$(echo `date +"%b %d %T"` `hostname`) "
+ fi
+ echo "${BTTIMESPEC}bootlog: ${@} Warning" >> "${TEMPFS_MOUNT}/.bootlog"
+ fi
+ return 0
+}
+
+################################################################################
+# 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 [ "${?}" = "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 [ "${?}" = "0" ]
+ then
+ return 0
+ else
+ return 1
+ fi
+}
+
+# End /lib/lsb/init-functions
diff --git a/bootscripts/contrib/lsb-v3/lsb/manage-functions b/bootscripts/contrib/lsb-v3/lsb/manage-functions
new file mode 100644
index 000000000..7c7a8f495
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/lsb/manage-functions
@@ -0,0 +1,306 @@
+#!/bin/bash
+# Begin /lib/lsb/manage-functions
+
+# /lib/lsb/manage-functions contains the functions used by
+# /lib/lsb/install_initd and /lib/lsb/remove_initd as well as additional helper
+# functions for use in programs that would provide functionality similar to
+# the RedHat chkconfig utility, for instance.
+
+# source the confif file
+. /etc/lsb/lsb-config
+
+# Define all arrays at script start to avoid scope issues
+# scriptlist is a list of valid scripts used as an index
+declare -a scriptlist
+# fullheaders is a complete set of valid LSB headers, stored in memory for
+# each indexed script, to avoid multiple disk reads
+declare -a fullheaders
+
+###############################################################################
+# get_headers() - Obtains a valid list of scripts contained in ${rcbase} and #
+# inserts the name of the script into the scriptlist[] array #
+# for use by all other functions. Additionally, it inserts #
+# the entire LSB header information from each script into a #
+# second array, fullheaders[], so that diskreads need only be #
+# done once #
+# Returns no value, but populates the variable ${scriptcount} #
+# and the arrays ${scriptlist} and ${fullheaders} for use #
+# with other functions in this script. This function is #
+# called unconditionally at the end of this scrip and is #
+# provided as a function only for the case that it needs to #
+# be called again after other operations. #
+###############################################################################
+get_headers()
+{
+ echo -n "Retrieving script information from disk..."
+ count=1
+ for file in $(find -P /etc/init.d -xdev -perm -u=x | sed -n 2~1p \
+ | sed "s@/etc/init.d/rc@@")
+ do
+ # determine if script is an LSB compliant script
+ grep "### BEGIN INIT INFO" $file > /dev/null
+ if test $? -gt "0"
+ then
+ # this is not a valid script and is ignored
+ # skip the rest of the loop
+ continue
+ fi
+ # determine basename using only bash (is basename a builtin?)
+ filename=$(echo "${file}" | sed "s@${rcbase}/@@")
+ # assign it to an array possition
+ scriptlist["${count}"]="${filename}"
+ # find the begining of the init info for the script
+ begin=$(grep -n "### BEGIN INIT INFO" "${file}" | cut -d: -f1)
+ # find the end of the init info for the script
+ end=$(grep -n "### END INIT INFO" "${file}" | cut -d: -f1)
+ # we'll use the difference between the values in the tail command
+ diff=$(( ${end} - ${begin} ))
+ # assign the entire LSB header information as a single string to the
+ # fullheaders[] array
+ fullheaders["${count}"]=$(head -n "${end}" "${file}" \
+ | tail -n "${diff}")
+ count=$(( ${count} + 1 ))
+ unset begin
+ unset end
+ unset diff
+ unset filename
+ done
+ # a number or array elements would be a nice regular variable assignment
+ scriptcount="${#scriptlist[@]}"
+ unset count
+ echo -e "Completed!"
+}
+
+###############################################################################
+# print_headers() - Presents a formatted list of all LSB compliant script #
+# headers to stdout preceeded by script name for use in #
+# other scripts #
+###############################################################################
+print_headers()
+{
+ get_headers
+ count=1
+ while test "${count}" -lt "${scriptcount}"
+ do
+ echo "${scriptlist[$count]}"
+ echo "============================================================="
+ echo "${fullheaders[$count]}"
+ echo ""
+ echo ""
+ count="$(( ${count} + 1 ))"
+ done
+}
+
+###############################################################################
+# get_index() - Determines the array index of the specified script #
+###############################################################################
+
+get_index()
+{
+ filename=$(echo "${1}" | sed "s@${rcbase}/@@")
+ count=1
+ while test "${count}" -lt "${scriptcount}"
+ do
+ echo "${scriptlist[${count}]}" | grep "${filename}" > /dev/null
+ if test "${?}" -ne "0"
+ then
+ count=$(( ${count} + 1 ))
+ continue
+ else
+ break
+ fi
+ done
+ if test "${filename}" == "${scriptlist[${count}]}"
+ then
+ echo "${count}"
+ else
+ echo "${1} is not a valid LSB init script."
+ exit 1
+ fi
+ unset filename
+ unset count
+}
+
+###############################################################################
+# get_lsb_value() - Obtains the LSB Value of $1 for index of script ($2). #
+###############################################################################
+get_lsb_value()
+{
+ # Probably need some error checking in here
+ echo "${fullheaders[${2}]}" | \
+ grep "^# ${1}" | \
+ sed -e "s@# ${1}:@@" \
+ -e "s/^[ \t]*//"
+}
+
+###############################################################################
+# convert_lsb_required() - Converts LSB defined facilities (facility names #
+# begining with a '$' character) into script names #
+# for required start/stop #
+###############################################################################
+convert_lsb_required()
+{
+ local count=0
+ local provides=""
+ local reqfacility=""
+ local reqprovideslist=""
+
+ for reqfacility in $@
+ do
+ # find the requires and it's index and then find the script name
+ # from the index. Since this is required, exit if it is not found
+ ## If reqfacility is already in script name format, nothing needs to
+ ## be done, just echo it back out. I can't think of an easy way to
+ ## do this right now, the scriptname will be the same as the provides
+ ## anyway, so just let it fly for now...it'll be correct, it just
+ ## takes an extra couple of commands to get the same result.
+ ## Besides, this will do some extra sanity checking in case somebody
+ ## writes a script that isn't named the same as provides, though this
+ ## isn't LSB compliant. Additionally, these same comments apply to
+ ## the convert_lsb_should() fucntion below.
+ count=0
+ while test ${count} -lt ${scriptcount}
+ do
+ count=$(( $count + 1 ))
+ provides="$( get_lsb_value Provides ${count} )"
+ if test "${provides}" = "${reqfacility}"
+ then
+ reqprovideslist="${reqprovideslist} ${scriptlist[$count]}"
+ break
+ fi
+ if test ${count} -eq ${scriptcount}; then
+ # If we've never broken out of the while loop, then this is an
+ # unrecoverable error since it is a required item. Exit now!
+ echo "Error: unable to locate required facility ${reqfacility}!"
+ exit 5
+ fi
+ done
+ done
+ echo "${reqprovideslist}" | sed -e "s/^[ \t]*//" -e "s/^[ \t]*//"
+}
+
+###############################################################################
+# convert_lsb_should() - Converts LSB defined facilities (facility names #
+# begining with a '$' character) into script names for #
+# should start/stop #
+###############################################################################
+
+convert_lsb_should()
+{
+ local count=0
+ local provides=""
+ local optfacility=""
+ local optprovideslist=""
+
+ for optfacility in $@
+ do
+ # find the should and it's index and then find the script name
+ # from the index. Since this is not an error, simply warn if it
+ # is not found.
+ count=0
+ while test ${count} -lt ${scriptcount}
+ do
+ count=$(( $count + 1 ))
+ provides="$( get_lsb_value Provides ${count} )"
+ if test "${provides}" = "${optfacility}"
+ then
+ optprovideslist="${optprovideslist} ${scriptlist[$count]}"
+ break
+ fi
+ # No need to error or warn on should items, and it's messy if so!
+ done
+ done
+ echo "${optprovideslist}" | sed -e "s/^[ \t]*//" -e "s/[ \t]*$//"
+}
+
+get_headers
+
+###############################################################################
+# get_lsb_required_value() - Additional function to simplify repetitive tasks #
+# Obtains the LSB Value of $1 for index of script #
+# ($2) and immediately converts LSB defined #
+# facilities (beginning with a '$' character) to a #
+# script name. If the script is not found, then #
+# the function exits with an error as per #
+# convert_lsb_required. #
+###############################################################################
+get_lsb_required_value()
+{
+ local reqval
+ # Probably need some error checking in here
+ reqval=`echo "${fullheaders[${2}]}" | \
+ grep "^# ${1}" | \
+ sed -e "s@# ${1}:@@" \
+ -e "s/^[ \t]*//"`
+
+ # If $reqval contains a '$' charcter, then convert it to a script name
+ echo "${reqval}" | grep "\\$" 2>&1 > /dev/null
+ if test "${?}" -eq "0"
+ then
+ reqval=`convert_lsb_required "${reqval}"`
+ fi
+ echo "${reqval}"
+}
+
+###############################################################################
+# get_lsb_should_value() - Additional function to simplify repetitive tasks #
+# Obtains the LSB Value of $1 for index of script #
+# ($2) and immediately converts LSB defined #
+# facilities (beginning with a '$' character) to a #
+# script name. If the script is not found, the #
+# value is removed from the list as it is optional. #
+###############################################################################
+get_lsb_should_value()
+{
+ local optval
+ local listitem
+ local optitem
+ # Probably need some error checking in here
+ optval=`echo "${fullheaders[${2}]}" | \
+ grep "^# ${1}" | \
+ sed -e "s@# ${1}:@@" \
+ -e "s/^[ \t]*//"`
+
+ # If $optval contains a '$' charcter, then convert it to a script name
+ echo "${optval}" | grep "\\$" 2>&1 > /dev/null
+ if test "${?}" -eq "0"
+ then
+ optval=`convert_lsb_should "${optval}"`
+ # if we still have a "$" character, then it's not found and it should
+ # be removed from the list (and it's trailing space if one exists)
+ # since it is optional
+ echo "${optval}" | grep "\\$" 2>&1 > /dev/null
+ if test "${?}" -eq "0"
+ then
+ # Remove the value
+ for listitem in ${optval}
+ do
+ echo "${listitem}" | grep "\\$"
+ if test "${?}" -eq "0"
+ then
+ optval=`echo "${optval}" | sed -e 's@${listitem} @@' \
+ -e 's@${listitem}@@' | \
+ sed -e "s@# ${1}:@@" \
+ -e "s/^[ \t]*//"`
+ fi
+ done
+ fi
+ fi
+ # If a should start value does not have a script associted with it, then
+ # remove it (or it and trailing space) from the list
+ for optitem in ${otpval}
+ do
+ grep "${optitem}" "${statedir}/enabled-scripts" 2>&1 > /dev/null
+ if test "${?}" -ne "0"
+ then
+ optval=`echo "${optval}" | sed -e 's@${otpitem} @@' \
+ -e 's@${optitem}@@' | \
+ sed -e "s@# ${1}:@@" \
+ -e "s/^[ \t]*//"`
+ fi
+ done
+
+ echo "${optval}"
+}
+
+# End /lib/lsb/manage-functions
diff --git a/bootscripts/contrib/lsb-v3/sysconfig/createfiles b/bootscripts/contrib/lsb-v3/sysconfig/createfiles
new file mode 100644
index 000000000..8d1f89dc6
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/sysconfig/createfiles
@@ -0,0 +1,28 @@
+########################################################################
+# Begin /etc/sysconfig/createfiles
+#
+# Description : Createfiles script config file
+#
+# Authors :
+#
+# Version : 00.00
+#
+# Notes : The syntax of this file is as follows:
+# if type is equal to "file" or "dir"
+# <filename> <type> <permissions> <user> <group>
+# if type is equal to "dev"
+# <filename> <type> <permissions> <user> <group> <devtype> <major> <minor>
+#
+# <filename> is the name of the file which is to be created
+# <type> is either file, dir, or dev.
+# file creates a new file
+# dir creates a new directory
+# dev creates a new device
+# <devtype> is either block, char or pipe
+# block creates a block device
+# char creates a character deivce
+# pipe creates a pipe, this will ignore the <major> and <minor> fields
+# <major> and <minor> are the major and minor numbers used for the device.
+########################################################################
+
+# End /etc/sysconfig/createfiles
diff --git a/bootscripts/contrib/lsb-v3/sysconfig/modules b/bootscripts/contrib/lsb-v3/sysconfig/modules
new file mode 100644
index 000000000..1c8493d45
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/sysconfig/modules
@@ -0,0 +1,18 @@
+########################################################################
+# Begin /etc/sysconfig/modules
+#
+# Description : Module auto-loading configuration
+#
+# Authors :
+#
+# Version : 00.00
+#
+# Notes : The syntax of this file is as follows:
+# <module> [<arg1> <arg2> ...]
+#
+# Each module should be on it's own line, and any options that you want
+# passed to the module should follow it. The line deliminator is either
+# a space or a tab.
+########################################################################
+
+# End /etc/sysconfig/modules
diff --git a/bootscripts/contrib/lsb-v3/sysconfig/network-devices/ifdown b/bootscripts/contrib/lsb-v3/sysconfig/network-devices/ifdown
new file mode 100644
index 000000000..28d1f1813
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/sysconfig/network-devices/ifdown
@@ -0,0 +1,93 @@
+#!/bin/sh
+########################################################################
+# Begin $NETWORK_DEVICES/ifdown
+#
+# Description : Interface Down
+#
+# Authors : Nathan Coulson - nathan@linuxfromscratch.org
+# Kevin P. Fleming - kpfleming@linuxfromscratch.org
+#
+# Version : 00.01
+#
+# Notes : the IFCONFIG variable is passed to the scripts found
+# in the services directory, to indicate what file the
+# service should source to get environmental variables.
+#
+########################################################################
+
+. /lib/lsb/init-functions
+
+# Collect a list of configuration files for our interface
+if [ -n "${2}" ]; then
+ for file in ${@#$1}; do # All parameters except $1
+ FILES="${FILES} ${NETWORK_DEVICES}/ifconfig.${1}/${file}"
+ done
+elif [ -d "${NETWORK_DEVICES}/ifconfig.${1}" ]; then
+ FILES=`echo ${NETWORK_DEVICES}/ifconfig.${1}/*`
+else
+ FILES="${NETWORK_DEVICES}/ifconfig.${1}"
+fi
+
+# Reverse the order configuration files are processed in
+for file in ${FILES}; do
+ FILES2="${file} ${FILES2}"
+done
+FILES=${FILES2}
+
+# Process each configuration file
+for file in ${FILES}; do
+ # skip backup files
+ if [ "${file}" != "${file%""~""}" ]; then
+ continue
+ fi
+
+ if [ ! -f "${file}" ]; then
+ message="${file} is not a network configuration file or directory."
+ log_warning_msg
+ fi
+ (
+ . ${file}
+
+ # Will not process this service if started by boot, and ONBOOT
+ # is not set to yes
+ if [ "${IN_BOOT}" = "1" -a "${ONBOOT}" != "yes" ]; then
+ continue
+ fi
+
+ # Will not process this service if started by hotplug, and
+ # ONHOTPLUG is not set to yes
+ if [ "${IN_HOTPLUG}" = "1" -a "${ONHOTPLUG}" != "yes" ]; then
+ continue
+ fi
+
+ # This will run the service script, if SERVICE is set
+ if [ -n "${SERVICE}" -a -x "${NETWORK_DEVICES}/services/${SERVICE}" ]; then
+ if ip link show ${1} > /dev/null 2>&1
+ then
+ IFCONFIG=${file} ${NETWORK_DEVICES}/services/${SERVICE} ${1} down
+ else
+ message="Interface ${1} doesn't exist."
+ log_warning_msg
+ fi
+ else
+ echo -e "${FAILURE}Unable to process ${file}. Either"
+ echo -e "${FAILURE}the SERVICE variable was not set,"
+ echo -e "${FAILURE}or the specified service cannot be executed."
+ message=""
+ log_failure_msg
+ fi
+ )
+done
+
+if [ -z "${2}" ]; then
+ link_status=`ip link show $1`
+ if [ -n "${link_status}" ]; then
+ if echo "${link_status}" | grep -q UP; then
+ message="Bringing down the ${1} interface..."
+ ip link set ${1} down
+ evaluate_retval standard
+ fi
+ fi
+fi
+
+# End $NETWORK_DEVICES/ifdown
diff --git a/bootscripts/contrib/lsb-v3/sysconfig/network-devices/ifup b/bootscripts/contrib/lsb-v3/sysconfig/network-devices/ifup
new file mode 100644
index 000000000..50e173ca6
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/sysconfig/network-devices/ifup
@@ -0,0 +1,87 @@
+#!/bin/sh
+########################################################################
+# Begin $NETWORK_DEVICES/ifup
+#
+# Description : Interface Up
+#
+# Authors : Nathan Coulson - nathan@linuxfromscratch.org
+# Kevin P. Fleming - kpfleming@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes : the IFCONFIG variable is passed to the scripts found
+# in the services directory, to indicate what file the
+# service should source to get environmental variables.
+#
+########################################################################
+
+. /lib/lsb/init-functions
+
+# Collect a list of configuration files for our interface
+if [ -n "${2}" ]; then
+ for file in ${@#$1} # All parameters except $1
+ do
+ FILES="${FILES} ${NETWORK_DEVICES}/ifconfig.${1}/${file}"
+ done
+elif [ -d "${NETWORK_DEVICES}/ifconfig.${1}" ]; then
+ FILES=`echo ${NETWORK_DEVICES}/ifconfig.${1}/*`
+else
+ FILES="${NETWORK_DEVICES}/ifconfig.${1}"
+fi
+
+message="Bringing up the ${1} interface..."
+
+# Process each configruation file
+for file in ${FILES}; do
+ # skip backup files
+ if [ "${file}" != "${file%""~""}" ]; then
+ continue
+ fi
+
+ if [ ! -f "${file}" ]; then
+ log_warning_msg
+ message="${file} is not a network configuration file or directory."
+ log_warning_msg
+ fi
+
+ (
+ . ${file}
+
+ # Will not process this service if started by boot, and ONBOOT
+ # is not set to yes
+ if [ "${IN_BOOT}" = "1" -a "${ONBOOT}" != "yes" ]; then
+ continue
+ fi
+ # Will not process this service if started by hotplug, and
+ # ONHOTPLUG is not set to yes
+ if [ "${IN_HOTPLUG}" = "1" -a "${ONHOTPLUG}" != "yes" -a "${HOSTNAME}" != "(none)" ]; then
+ continue
+ fi
+
+ if [ -n "${SERVICE}" -a -x "${NETWORK_DEVICES}/services/${SERVICE}" ]; then
+ if [ -z "${CHECK_LINK}" -o "${CHECK_LINK}" = "y" -o "${CHECK_LINK}" = "yes" -o "${CHECK_LINK}" = "1" ]; then
+ if ip link show ${1} > /dev/null 2>&1; then
+ link_status=`ip link show ${1}`
+ if [ -n "${link_status}" ]; then
+ if ! echo "${link_status}" | grep -q UP; then
+ ip link set ${1} up
+ evaluate_retval standard
+ fi
+ fi
+ else
+ message="${message}Interface ${1} doesn't exist."
+ log_warning_msg
+ fi
+ fi
+ IFCONFIG=${file} ${NETWORK_DEVICES}/services/${SERVICE} ${1} up
+ else
+ echo -e "${FAILURE}Unable to process ${file}. Either"
+ echo -e "${FAILURE}the SERVICE variable was not set,"
+ echo -e "${FAILURE}or the specified service cannot be executed."
+ message=""
+ log_failure_msg
+ fi
+ )
+done
+
+# End $NETWORK_DEVICES/ifup
diff --git a/bootscripts/contrib/lsb-v3/sysconfig/network-devices/services/ipv4-static b/bootscripts/contrib/lsb-v3/sysconfig/network-devices/services/ipv4-static
new file mode 100644
index 000000000..417d22de6
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/sysconfig/network-devices/services/ipv4-static
@@ -0,0 +1,80 @@
+#!/bin/sh
+########################################################################
+# Begin $NETWORK_DEVICES/services/ipv4-static
+#
+# Description : IPV4 Static Boot Script
+#
+# Authors : Nathan Coulson - nathan@linuxfromscratch.org
+# Kevin P. Fleming - kpfleming@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /lib/lsb/init-functions
+. ${IFCONFIG}
+
+if [ -z "${IP}" ]; then
+ log_failure_msg "IP variable missing from ${IFCONFIG}, cannot continue."
+ exit 1
+fi
+
+if [ -z "${PREFIX}" -a -z "${PEER}" ]; then
+ log_warning_msg "PREFIX variable missing from ${IFCONFIG}, assuming 24."
+ PREFIX=24
+ args="${args} ${IP}/${PREFIX}"
+elif [ -n "${PREFIX}" -a -n "${PEER}" ]; then
+ log_failure_msg "PREFIX 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
+
+if [ -n "${SOURCE}" ]; then
+ args="${args} src ${SOURCE}"
+fi
+
+case "${2}" in
+ up)
+ MESSAGE="Adding IPv4 address ${IP} to the ${1} interface..."
+ ip addr add ${args} dev ${1}
+ evaluate_retval
+
+ if [ -n "${GATEWAY}" ]; then
+ if ip route | grep -q default; then
+ log_warning_msg "Gateway already setup; skipping." ${WARNING}
+ else
+ MESSAGE="Setting up default gateway..."
+ ip route add default via ${GATEWAY} dev ${1}
+ evaluate_retval
+ fi
+ fi
+ ;;
+
+ down)
+ if [ -n "${GATEWAY}" ]; then
+ MESSAGE="Removing default gateway..."
+ ip route del default
+ evaluate_retval
+ fi
+
+ MESSAGE="Removing IPv4 address ${IP} from the ${1} interface..."
+ ip addr del ${args} dev ${1}
+ evaluate_retval
+ ;;
+
+ *)
+ echo "Usage: ${0} [interface] {up|down}"
+ exit 1
+ ;;
+esac
+
+# End $NETWORK_DEVICES/services/ipv4-static
diff --git a/bootscripts/contrib/lsb-v3/sysconfig/network-devices/services/ipv4-static-route b/bootscripts/contrib/lsb-v3/sysconfig/network-devices/services/ipv4-static-route
new file mode 100644
index 000000000..4205a022d
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/sysconfig/network-devices/services/ipv4-static-route
@@ -0,0 +1,92 @@
+#!/bin/sh
+########################################################################
+# Begin $NETWORK_DEVICES/services/ipv4-static-route
+#
+# Description : IPV4 Static Route Script
+#
+# Authors : Kevin P. Fleming - kpfleming@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /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 "
+ ;;
+
+ (*)
+ boot_mesg "Unknown route type (${TYPE}) in ${IFCONFIG}, cannot continue." ${FAILURE}
+ echo_failure
+ exit 1
+ ;;
+esac
+
+if [ -n "${need_ip}" ]; then
+ if [ -z "${IP}" ]; then
+ boot_mesg "IP variable missing from ${IFCONFIG}, cannot continue." ${FAILURE}
+ echo_failure
+ exit 1
+ fi
+
+ if [ -z "${PREFIX}" ]; then
+ boot_mesg "PREFIX variable missing from ${IFCONFIG}, cannot continue." ${FAILURE}
+ echo_failure
+ exit 1
+ fi
+
+ args="${args} ${IP}/${PREFIX}"
+ desc="${desc}${IP}/${PREFIX}"
+fi
+
+if [ -n "${need_gateway}" ]; then
+ if [ -z "${GATEWAY}" ]; then
+ boot_mesg "GATEWAY variable missing from ${IFCONFIG}, cannot continue." ${FAILURE}
+ echo_failure
+ exit 1
+ fi
+ args="${args} via ${GATEWAY}"
+fi
+
+case "${2}" in
+ up)
+ boot_mesg "Adding '${desc}' route to the ${1} interface..."
+ ip route add ${args} dev ${1}
+ evaluate_retval
+ ;;
+
+ down)
+ boot_mesg "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 $NETWORK_DEVICES/services/ipv4-static-route
diff --git a/bootscripts/contrib/lsb-v3/sysconfig/rc b/bootscripts/contrib/lsb-v3/sysconfig/rc
new file mode 100644
index 000000000..ffb70d98c
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/sysconfig/rc
@@ -0,0 +1,52 @@
+# Begin /etc/sysconfig/rc
+
+# Author: DJ Lucas - dj@linuxfromscratch.org
+# Version: 1.0 LSB V.3.1
+
+# Global variable inherited by initscripts are in caps
+# Local variables for the rc script are in lowercase
+
+# Source site specific rc configuration
+. /etc/sysconfig/rc.site
+
+# This sets default terminal options.
+# stty sane - this has been removed as nobody recalls
+# the reason for it in the first place - if no problems arize,
+# then it will be removed completely at a later date.
+
+# Setup default values for the environment
+umask 022
+PATH="/bin:/sbin"
+
+# 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 Cursur Position Commands, used via echo -e
+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
+
+# Bootlogging and interactive startup require a valid tempfs mount
+# if this mount is not present, disable them
+if [ "${TEMPFS_MOUNT}" = "" -o ! -d "${TEMPFS_MOUNT}" ]; then
+ TEMPFS_MOUNT=""
+ iprompt=""
+ BOOTLOG_ENAB=""
+fi
+
+# Export the environment variables so they are inherited by the scripts
+export PATH SET_COL SET_WCOL CURS_UP TEMPFS_MOUNT BOOTLOG_ENAB RUNLEVEL
+
+# End /etc/sysconfig/rc
diff --git a/bootscripts/contrib/lsb-v3/sysconfig/rc.site b/bootscripts/contrib/lsb-v3/sysconfig/rc.site
new file mode 100644
index 000000000..cf58e2fd7
--- /dev/null
+++ b/bootscripts/contrib/lsb-v3/sysconfig/rc.site
@@ -0,0 +1,69 @@
+# Set base directory information
+RC_BASE="/etc"
+RC_FUNCTIONS="${RC_BASE}/init.d/lfs-functions"
+
+# Location of network device scripts and config files
+NETWORK_DEVICES="/etc/sysconfig/network-devices"
+
+# Directory to store boot process accounting information
+# Used for boot logging and interactive flag when rootfs
+# is not writable
+TEMPFS_MOUNT="${RC_BASE}/init.d/boottemp"
+
+# Bootlogging (requires a tempfs mount)
+BOOTLOG_ENAB="yes"
+
+# Distro Information
+DISTRO="Linux From Scratch" # The distro name
+DISTRO_CONTACT="lfs-dev@linuxfromscratch.org" # Bug report address
+DISTRO_MINI="lfs" # Short name used in filenames for distro config
+
+# Define custom colors used in messages printed to the screen
+BRACKET="\\033[1;34m" # Blue
+FAILURE="\\033[1;31m" # Red
+INFO="\\033[1;36m" # Cyan
+NORMAL="\\033[0;39m" # Grey
+SUCCESS="\\033[1;32m" # Green
+WARNING="\\033[1;33m" # Yellow
+
+# Prefix boot messages for easier reading on framebuffer consoles
+PREFIX_SUCCESS=" ${SUCCESS}*${NORMAL} "
+PREFIX_WARNING="${WARNING}**${NORMAL} "
+PREFIX_FAILURE="${FAILURE}***${NORMAL}"
+
+# Export varialbles so that they are inherited by the initscripts
+export RC_BASE RC_FUNCTIONS NETWORK_DEVICES TEMPFS_MOUNT BOOTLOG_ENAB
+export DISTRO DISTRO_CONTACT DISTRO_MINI
+export BRACKET FAILURE INFO NORMAL SUCCESS WARNING
+export PREFIX_SUCCESS PREFIX_WARNING PREFIX_FAILURE
+
+# Interactive startup
+iprompt="yes" # Wether to display the interactive boot promp
+itime="2" # The ammount of time (in seconds) to display the prompt
+dlen="29" # The total length of the distro welcome string
+ilen="38" # The total length of the interactive message
+welcome_message="Welcome to ${INFO}${DISTRO}${NORMAL}"
+i_message="Press '${FAILURE}I${NORMAL}' to enter interactive startup"
+
+# Error message displayed when a script's exit value is not zero
+print_error_msg()
+{
+ # ${link} and ${error_value} are defined by the rc script
+ echo -e "${FAILURE}FAILURE: You should not be reading this error message."
+ echo -e ""
+ echo -e -n "${FAILURE}It means that an unforseen error took place in"
+ echo -e -n "${INFO} ${link}"
+ echo -e "${FAILURE},"
+ echo -e "${FAILURE}which exited with a return value of ${error_value}."
+ echo -e ""
+ echo -e -n "${FAILURE}If you are able to track this error down to a bug"
+ echo -e "${FAILURE}in one of the files"
+ echo -e -n "provided by ${INFO}${DISTRO}${FAILURE}, "
+ echo -e -n "${FAILURE}please be so kind to inform us at "
+ echo -e "${INFO}${DISTRO_CONTACT}${FAILURE}.${NORMAL}"
+ echo -e ""
+ echo -e "${INFO}Press Enter to continue..."
+ echo -e "${NORMAL}"
+ read ENTER
+}
+
diff --git a/bootscripts/contrib/lsb/Makefile b/bootscripts/contrib/lsb/Makefile
new file mode 100644
index 000000000..445608164
--- /dev/null
+++ b/bootscripts/contrib/lsb/Makefile
@@ -0,0 +1,11 @@
+ETCDIR=/etc
+EXTDIR=${DESTDIR}${ETCDIR}
+MODE=754
+DIRMODE=755
+CONFMODE=644
+
+install:
+ install -d -m ${DIRMODE} ${DESTDIR}/lib/lsb
+ install -m ${CONFMODE} lib/init-functions ${DESTDIR}/lib/lsb
+
+.PHONY: install
diff --git a/bootscripts/contrib/lsb/lib/init-functions b/bootscripts/contrib/lsb/lib/init-functions
new file mode 100644
index 000000000..3f1ec2400
--- /dev/null
+++ b/bootscripts/contrib/lsb/lib/init-functions
@@ -0,0 +1,348 @@
+
+#*******************************************************************************
+# Function - start_daemon [-f] [-n nicelevel] [-p pidfile] pathname [args]
+#
+# Purpose: This runs the specified program as a daemon
+#
+# Inputs: -f, run the program even if it is already running
+# -n nicelevel, specifies a nice level. See nice(1).
+# -p pidfile, uses the specified pidfile
+# pathname, pathname to the specified program
+# args, arguments to pass to specified program
+#
+# Outputs: return 0 - Success
+# return 2 - Invalid or excessive number of arguments,
+# warning in stdout
+# return 4 - Program or service status is unknown
+#
+# Dependencies: nice
+#
+# Todo: none
+#
+#*******************************************************************************
+start_daemon()
+{
+ local pidfile=""
+ local forcestart=""
+ local nicelevel="0"
+
+ while true
+ do
+ case "${1}" in
+ -f)
+ forcestart="1"
+ shift 1
+ ;;
+ -n)
+ nicelevel="${2}"
+ shift 2
+ ;;
+ -p)
+ pidfile="${2}"
+ shift 2
+ ;;
+ -*)
+ log_failure_msg "Unknown Option: ${1}"
+ return 2
+ ;;
+ *)
+ break
+ ;;
+ esac
+ done
+
+ if [ -z "${forcestart}" ]; then
+ if [ -z "${pidfile}" ]; then
+ pidofproc "${1}" > /dev/null
+ else
+ pidofproc -p "${pidfile}" "${1}" > /dev/null
+ fi
+
+ case "${?}" in
+ 0)
+ log_warning_msg "Unable to continue: ${1} is running"
+ return 4
+ ;;
+ 1)
+ log_warning_msg "Unable to continue: ${pidfile} exists"
+ return 4
+ ;;
+ 3)
+ ;;
+ *)
+ log_failure_msg "Unknown error code from pidofproc: ${?}"
+ return 4
+ ;;
+ esac
+ fi
+
+ nice -n "${nicelevel}" "${@}"
+}
+
+#*******************************************************************************
+# Function - killproc [-p pidfile] pathname [signal]
+#
+# Purpose:
+#
+# Inputs: -p pidfile, uses the specified pidfile
+# pathname, pathname to the specified program
+# signal, send this signal to pathname
+#
+# Outputs: return 0 - Success
+# return 1 - Invalid or excessive number of arguments,
+# warning in stdout
+# return 4 - Unknown Status
+#
+# Dependencies: kill
+#
+# Todo: test
+#
+#*******************************************************************************
+killproc()
+{
+ local pidfile=""
+ local killsig=""
+ local pidlist=""
+ while true
+ do
+ case "${1}" in
+ -p)
+ pidfile="${2}"
+ shift 2
+ ;;
+ -*)
+ log_failure_msg "Unknown Option: ${1}"
+ return 1
+ ;;
+ *)
+ break
+ ;;
+ esac
+ done
+
+ if [ "${#}" = "2" ]; then
+ killsig="${2}"
+ elif [ "${#}" != "1" ]; then
+ shift 2
+ log_failure_msg "Excess Arguments: $@"
+ return 1
+ fi
+
+ if [ -z "${pidfile}" ]; then
+ pidlist=`pidofproc "${1}"`
+ else
+ pidlist=`pidofproc -p "${pidfile}" "${1}"`
+ fi
+
+ for pid in ${pidlist}
+ do
+ kill -${killsig:-TERM} ${pid} 2> /dev/null
+ if [ -z "${killsig}" ]; then
+ # Wait up to 3 seconds, for ${pid} to terminate
+ local dtime=3
+ while [ "${dtime}" != "0" ]
+ do
+ kill -0 ${pid} 2> /dev/null || break
+ sleep 1
+ dtime=$(( ${dtime} - 1))
+ done
+ # If ${pid} is still running, kill it
+ kill -0 ${pid} 2> /dev/null && kill -KILL ${pid} 2> /dev/null
+ fi
+ done
+
+ if [ -z "${killsig}" ]; then
+ pidofproc "${1}" 2>&1 > /dev/null
+
+ # Program was terminated
+ if [ "$?" != "0" ]; then
+ # Pidfile Exists
+ if [ -f "${pidfile}" ]; then
+ rm -f "${pidfile}" 2>&1 > /dev/null
+ fi
+ return 0
+ else # Program is still running
+ return 4 # Unknown Status
+ fi
+ else
+ if [ -z "${pidfile}" ]; then
+ pidofproc "${1}" 2> /dev/null
+ else
+ pidofproc -p "${pidfile}" "${1}" 2> /dev/null
+ fi
+ fi
+}
+
+#*******************************************************************************
+# Function - 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
+#
+# Outputs: return 0 - Success, pid's in stdout
+# return 1 - Invalid or excessive number of arguments,
+# warning in stdout
+# return 1 - Program is dead, pidfile exists
+# return 3 - Program is not running
+#
+# Dependencies: pidof, echo
+#
+# Todo: - Invalid or excessive argments, and program is dead pidfile exists
+# conflict with eachother
+#
+#*******************************************************************************
+pidofproc()
+{
+ local pidfile=""
+ local lpids=""
+ local pidlist=""
+ while true
+ do
+ case "${1}" in
+ -p)
+ pidfile="${2}"
+ shift 2
+ ;;
+ -*)
+ log_failure_msg "Unknown Option: ${1}"
+ return 1
+ ;;
+ *)
+ break
+ ;;
+ esac
+ done
+
+ if [ "${#}" != "1" ]; then
+ shift 1
+ log_failure_msg "Excess Arguments: $@"
+ return 1
+ fi
+
+ if [ -n "${pidfile}" ]; then
+ if [ ! -r "${pidfile}" ]; then
+ return 3 # Program is not running
+ fi
+
+ lpids=`head -n 1 ${pidfile}`
+ for pid in ${lpids}
+ do
+ if [ "${pid}" -ne "$$" -a "${pid}" -ne "${PPID}" ]; then
+ kill -0 "${pid}" 2> /dev/null &&
+ pidlist="${pidlist} ${pid}"
+ fi
+ echo ${pidlist}
+ test -z "${pidlist}" && return 1 # Program is dead, pidfile exists
+ return 0
+ done
+
+ else
+ pidof "${1}"
+ fi
+
+ if [ "$?" != "0" ]; then
+ return 3 # Program is not running
+ fi
+}
+
+# Screen Dimentions
+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 Cursur Position Commands, used via echo -e
+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
+
+# Set color commands, used via echo -e
+# Please consult `man console_codes` for more information
+# under the "Set Graphics Resolution" 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
+
+BOOTMESG_PREFIX=" * " # Text at the beginning of every line
+
+
+#*******************************************************************************
+# Function - log_success_msg "message"
+#
+# Purpose: Print a success message
+#
+# Inputs:
+#
+# Outputs:
+#
+# Dependencies: echo
+#
+# Todo: logging
+#
+#*******************************************************************************
+log_success_msg()
+{
+ echo -n -e "${BOOTMESG_PREFIX}${@}"
+ echo -e "${SET_COL}""${BRACKET}""[""${SUCCESS}"" OK ""${BRACKET}""]""${NORMAL}"
+ return 0
+}
+
+#*******************************************************************************
+# Function - log_failure_msg "message"
+#
+# Purpose: Print a failure message
+#
+# Inputs: $@ - Message
+#
+# Outputs: Text output to screen
+#
+# Dependencies: echo
+#
+# Todo: logging
+#
+#*******************************************************************************
+log_failure_msg() {
+ echo -n -e "${BOOTMESG_PREFIX}${@}"
+ echo -e "${SET_COL}""${BRACKET}""[""${FAILURE}"" FAIL ""${BRACKET}""]""${NORMAL}"
+ return 0
+}
+
+#*******************************************************************************
+# Function - log_warning_msg "message"
+#
+# Purpose: print a warning message
+#
+# Inputs: $@ - Message
+#
+# Outputs: Text output to screen
+#
+# Dependencies: echo
+#
+# Todo: logging
+#
+#*******************************************************************************
+log_warning_msg() {
+ echo -n -e "${BOOTMESG_PREFIX}${@}"
+ echo -e "${SET_COL}""${BRACKET}""[""${WARNING}"" WARN ""${BRACKET}""]""${NORMAL}"
+ return 0
+}
+
diff --git a/bootscripts/contrib/sysconfig/network-devices/services/mtu b/bootscripts/contrib/sysconfig/network-devices/services/mtu
new file mode 100644
index 000000000..5a7de080e
--- /dev/null
+++ b/bootscripts/contrib/sysconfig/network-devices/services/mtu
@@ -0,0 +1,45 @@
+#!/bin/sh
+########################################################################
+# Begin $network_devices/services/mtu
+#
+# Description : Sets MTU per interface
+#
+# Authors : Nathan Coulson - nathan@linuxfromscratch.org
+# Jim Gifford - jim@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes : This sets the maximum amount of bytes that can be
+# transmitted within a packet. By default, this
+# value is set to 1500.
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+. ${IFCONFIG}
+
+if [ -z "${MTU}" ]
+then
+ boot_mesg "MTU variable missing from ${IFCONFIG}, cannot continue." ${FAILURE}
+ echo_failure
+ exit 1
+fi
+
+case "${2}" in
+ up)
+ boot_mesg "Setting the MTU for ${1} to ${MTU}..."
+ echo "${MTU}" > "/sys/class/net/${1}/mtu"
+ evaluate_retval
+ ;;
+
+ down)
+ ;;
+
+ *)
+ echo "Usage: ${0} [interface] {up|down}"
+ exit 1
+ ;;
+esac
+
+# End $network_devices/services/mtu
diff --git a/bootscripts/lfs/init.d/checkfs b/bootscripts/lfs/init.d/checkfs
new file mode 100644
index 000000000..5a56c25e6
--- /dev/null
+++ b/bootscripts/lfs/init.d/checkfs
@@ -0,0 +1,131 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/checkfs
+#
+# Description : File System Check
+#
+# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
+# A. Luebke - luebke@users.sourceforge.net
+#
+# Version : 00.00
+#
+# Notes :
+#
+# Based on checkfs script from LFS-3.1 and earlier.
+#
+# From man fsck
+# 0 - No errors
+# 1 - File system errors corrected
+# 2 - System should be rebooted
+# 4 - File system errors left uncorrected
+# 8 - Operational error
+# 16 - Usage or syntax error
+# 32 - Fsck canceled by user request
+# 128 - Shared library error
+#
+#########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+ start)
+ if [ -f /fastboot ]; then
+ boot_mesg -n "/fastboot found, will not perform" ${INFO}
+ boot_mesg " file system checks as requested."
+ echo_ok
+ exit 0
+ fi
+
+ boot_mesg "Mounting root file system in read-only mode..."
+ mount -n -o remount,ro / >/dev/null
+ evaluate_retval
+
+ if [ ${?} != 0 ]; then
+ echo_failure
+ boot_mesg -n "FAILURE:\n\nCannot check root" ${FAILURE}
+ boot_mesg -n " filesystem because it could not be mounted"
+ boot_mesg -n " in read-only mode.\n\nAfter you"
+ boot_mesg -n " press Enter, this system will be"
+ boot_mesg -n " halted and powered off."
+ boot_mesg -n "\n\nPress enter to continue..." ${INFO}
+ boot_mesg "" ${NORMAL}
+ read ENTER
+ ${rc_base}/init.d/halt stop
+ fi
+
+ if [ -f /forcefsck ]; then
+ boot_mesg -n "/forcefsck found, forcing file" ${INFO}
+ boot_mesg " system checks as requested."
+ echo_ok
+ options="-f"
+ else
+ options=""
+ fi
+
+ boot_mesg "Checking file systems..."
+ # Note: -a option used to be -p; but this fails e.g.
+ # on fsck.minix
+ fsck ${options} -a -A -C -T
+ error_value=${?}
+
+ if [ "${error_value}" = 0 ]; then
+ echo_ok
+ fi
+
+ if [ "${error_value}" = 1 ]; then
+ echo_warning
+ boot_mesg -n "WARNING:\n\nFile system errors" ${WARNING}
+ boot_mesg -n " were found and have been corrected."
+ boot_mesg -n " You may want to double-check that"
+ boot_mesg -n " everything was fixed properly."
+ boot_mesg "" ${NORMAL}
+ fi
+
+ if [ "${error_value}" = 2 -o "${error_value}" = 3 ]; then
+ echo_warning
+ boot_mesg -n "WARNING:\n\nFile system errors" ${WARNING}
+ boot_mesg -n " were found and have been been"
+ boot_mesg -n " corrected, but the nature of the"
+ boot_mesg -n " errors require this system to be"
+ boot_mesg -n " rebooted.\n\nAfter you press enter,"
+ boot_mesg -n " this system will be rebooted"
+ boot_mesg -n "\n\nPress Enter to continue..." ${INFO}
+ boot_mesg "" ${NORMAL}
+ read ENTER
+ reboot -f
+ fi
+
+ if [ "${error_value}" -gt 3 -a "${error_value}" -lt 16 ]; then
+ echo_failure
+ boot_mesg -n "FAILURE:\n\nFile system errors" ${FAILURE}
+ boot_mesg -n " were encountered that could not be"
+ boot_mesg -n " fixed automatically. This system"
+ boot_mesg -n " cannot continue to boot and will"
+ boot_mesg -n " therefore be halted until those"
+ boot_mesg -n " errors are fixed manually by a"
+ boot_mesg -n " System Administrator.\n\nAfter you"
+ boot_mesg -n " press Enter, this system will be"
+ boot_mesg -n " halted and powered off."
+ boot_mesg -n "\n\nPress Enter to continue..." ${INFO}
+ boot_mesg "" ${NORMAL}
+ read ENTER
+ ${rc_base}/init.d/halt stop
+ fi
+
+ if [ "${error_value}" -ge 16 ]; then
+ echo_failure
+ boot_mesg -n "FAILURE:\n\nUnexpected Failure" ${FAILURE}
+ boot_mesg -n " running fsck. Exited with error"
+ boot_mesg -n " code: ${error_value}."
+ boot_mesg "" ${NORMAL}
+ exit ${error_value}
+ fi
+ ;;
+ *)
+ echo "Usage: ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/checkfs
diff --git a/bootscripts/lfs/init.d/cleanfs b/bootscripts/lfs/init.d/cleanfs
new file mode 100644
index 000000000..9a4e18601
--- /dev/null
+++ b/bootscripts/lfs/init.d/cleanfs
@@ -0,0 +1,110 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/cleanfs
+#
+# Description : Clean file system
+#
+# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+# Function to create files/directory on boot.
+create_files() {
+ # Read in the configuration file.
+ exec 9>&0 < /etc/sysconfig/createfiles
+ while read name type perm usr grp dtype maj min junk
+ do
+
+ # Ignore comments and blank lines.
+ case "${name}" in
+ ""|\#*) continue ;;
+ esac
+
+ # Ignore existing files.
+ if [ ! -e "${name}" ]; then
+ # Create stuff based on its type.
+ case "${type}" in
+ dir)
+ mkdir "${name}"
+ ;;
+ file)
+ :> "${name}"
+ ;;
+ dev)
+ case "${dtype}" in
+ char)
+ mknod "${name}" c ${maj} ${min}
+ ;;
+ block)
+ mknod "${name}" b ${maj} ${min}
+ ;;
+ pipe)
+ mknod "${name}" p
+ ;;
+ *)
+ boot_mesg -n "\nUnknown device type: ${dtype}" ${WARNING}
+ boot_mesg "" ${NORMAL}
+ ;;
+ esac
+ ;;
+ *)
+ boot_mesg -n "\nUnknown type: ${type}" ${WARNING}
+ boot_mesg "" ${NORMAL}
+ continue
+ ;;
+ esac
+
+ # Set up the permissions, too.
+ chown ${usr}:${grp} "${name}"
+ chmod ${perm} "${name}"
+ fi
+ done
+ exec 0>&9 9>&-
+}
+
+case "${1}" in
+ start)
+ boot_mesg -n "Cleaning file systems:" ${INFO}
+
+ boot_mesg -n " /tmp" ${NORMAL}
+ cd /tmp &&
+ find . -xdev -mindepth 1 ! -name lost+found \
+ -delete || failed=1
+
+ boot_mesg -n " /var/lock" ${NORMAL}
+ cd /var/lock &&
+ find . -type f ! -newer /proc -exec rm -f {} \; || failed=1
+
+ boot_mesg " /var/run" ${NORMAL}
+ cd /var/run &&
+ find . ! -type d ! -name utmp ! -newer /proc \
+ -exec rm -f {} \; || failed=1
+ > /var/run/utmp
+ if grep -q '^utmp:' /etc/group ; then
+ chmod 664 /var/run/utmp
+ chgrp utmp /var/run/utmp
+ fi
+
+ (exit ${failed})
+ evaluate_retval
+
+ if egrep -qv '^(#|$)' /etc/sysconfig/createfiles 2>/dev/null; then
+ boot_mesg "Creating files and directories..."
+ create_files
+ evaluate_retval
+ fi
+ ;;
+ *)
+ echo "Usage: ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/cleanfs
diff --git a/bootscripts/lfs/init.d/console b/bootscripts/lfs/init.d/console
new file mode 100644
index 000000000..e8b853591
--- /dev/null
+++ b/bootscripts/lfs/init.d/console
@@ -0,0 +1,109 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/console
+#
+# Description : Sets keymap and screen font
+#
+# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
+# Alexander E. Patrakov
+#
+# Version : 00.03
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+# Native English speakers probably don't have /etc/sysconfig/console at all
+if [ -f /etc/sysconfig/console ]
+then
+ . /etc/sysconfig/console
+else
+ exit 0
+fi
+
+is_true() {
+ [ "$1" = "1" ] || [ "$1" = "yes" ] || [ "$1" = "true" ]
+}
+
+failed=0
+
+case "${1}" in
+ start)
+ boot_mesg "Setting up Linux console..."
+ # There should be no bogus failures below this line!
+
+ # Figure out if a framebuffer console is used
+ [ -d /sys/class/graphics/fb0 ] && USE_FB=1 || USE_FB=0
+
+ # Figure out the command to set the console into the
+ # desired mode
+ is_true "${UNICODE}" &&
+ MODE_COMMAND="${ECHO} -en '\033%G' && kbd_mode -u" ||
+ MODE_COMMAND="${ECHO} -en '\033%@\033(K' && kbd_mode -a"
+
+ # On framebuffer consoles, font has to be set for each vt in
+ # UTF-8 mode. This doesn't hurt in non-UTF-8 mode also.
+
+ ! is_true "${USE_FB}" || [ -z "${FONT}" ] ||
+ MODE_COMMAND="${MODE_COMMAND} && setfont ${FONT}"
+
+ # Apply that command to all consoles mentioned in
+ # /etc/inittab. Important: in the UTF-8 mode this should
+ # happen before setfont, otherwise a kernel bug will
+ # show up and the unicode map of the font will not be
+ # used.
+ # FIXME: Fedora Core also initializes two spare consoles
+ # - do we want that?
+
+ for TTY in `grep '^[^#].*respawn:/sbin/agetty' /etc/inittab |
+ grep -o '\btty[[:digit:]]*\b'`
+ do
+ openvt -f -w -c ${TTY#tty} -- \
+ /bin/sh -c "${MODE_COMMAND}" || failed=1
+ done
+
+ # Set the font (if not already set above) and the keymap
+ is_true "${USE_FB}" || [ -z "${FONT}" ] ||
+ setfont $FONT ||
+ failed=1
+ [ -z "${KEYMAP}" ] ||
+ loadkeys ${KEYMAP} >/dev/null 2>&1 ||
+ failed=1
+ [ -z "${KEYMAP_CORRECTIONS}" ] ||
+ loadkeys ${KEYMAP_CORRECTIONS} >/dev/null 2>&1 ||
+ failed=1
+
+ # Linux kernel generates wrong bytes when composing
+ # in Unicode mode. That's why we disable dead keys in Unicode
+ # mode by default. If you need them, download and apply
+ # http://www.linuxfromscratch.org/~alexander/patches/linux-2.6.12.5-utf8_input-2.patch
+ # After patching, add "-m charset_of_your_keymap" to the FONT
+ # variable and set BROKEN_COMPOSE=false
+ # in /etc/sysconfig/console
+
+ [ -n "$BROKEN_COMPOSE" ] || BROKEN_COMPOSE="$UNICODE"
+ ! is_true "$BROKEN_COMPOSE" ||
+ echo "" | loadkeys -c >/dev/null 2>&1 ||
+ failed=1
+
+ # Convert the keymap from $LEGACY_CHARSET to UTF-8
+ [ -z "$LEGACY_CHARSET" ] ||
+ dumpkeys -c "$LEGACY_CHARSET" |
+ loadkeys -u >/dev/null 2>&1 ||
+ failed=1
+
+ # If any of the commands above failed, the trap at the
+ # top would set $failed to 1
+ ( exit $failed )
+ evaluate_retval
+ ;;
+ *)
+ echo $"Usage:" "${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/console
diff --git a/bootscripts/lfs/init.d/consolelog b/bootscripts/lfs/init.d/consolelog
new file mode 100755
index 000000000..34b416195
--- /dev/null
+++ b/bootscripts/lfs/init.d/consolelog
@@ -0,0 +1,61 @@
+#!/bin/sh
+# Begin $rc_base/init.d/consolelog
+
+########################################################################
+#
+# Description : Set the kernel log level for the console
+#
+# Authors : Dan Nicholson - dnicholson@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes : /proc must be mounted before this can run
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+# set the default loglevel
+LOGLEVEL=7
+if [ -r /etc/sysconfig/console ]; then
+ . /etc/sysconfig/console
+fi
+
+case "${1}" in
+ start)
+ case "$LOGLEVEL" in
+ [1-8])
+ boot_mesg "Setting the console log level to ${LOGLEVEL}..."
+ dmesg -n $LOGLEVEL
+ evaluate_retval
+ ;;
+ *)
+ boot_mesg "Console log level '${LOGLEVEL}' is invalid" ${FAILURE}
+ echo_failure
+ ;;
+ esac
+ ;;
+ status)
+ # Read the current value if possible
+ if [ -r /proc/sys/kernel/printk ]; then
+ read level line < /proc/sys/kernel/printk
+ else
+ boot_mesg "Can't read the current console log level" ${FAILURE}
+ echo_failure
+ fi
+
+ # Print the value
+ if [ -n "$level" ]; then
+ ${ECHO} -e "${INFO}The current console log level" \
+ "is ${level}${NORMAL}"
+ fi
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|status}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/consolelog
diff --git a/bootscripts/lfs/init.d/functions b/bootscripts/lfs/init.d/functions
new file mode 100644
index 000000000..a9e13fd27
--- /dev/null
+++ b/bootscripts/lfs/init.d/functions
@@ -0,0 +1,769 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/functions
+#
+# Description : Run Level Control Functions
+#
+# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes : With code based on Matthias Benkmann's simpleinit-msb
+# http://winterdrache.de/linux/newboot/index.html
+#
+########################################################################
+
+## Environmental setup
+# Setup default values for environment
+umask 022
+export PATH="/bin:/usr/bin:/sbin:/usr/sbin"
+
+# Signal sent to running processes to refresh their configuration
+RELOADSIG="HUP"
+
+# Number of seconds between STOPSIG and FALLBACK when stopping processes
+KILLDELAY="3"
+
+## 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))
+
+## Provide an echo that supports -e and -n
+# If formatting is needed, $ECHO should be used
+case "`echo -e -n test`" in
+ -[en]*)
+ ECHO=/bin/echo
+ ;;
+ *)
+ ECHO=echo
+ ;;
+esac
+
+## 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
+
+## 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
+
+STRING_LENGTH="0" # the length of the current message
+
+#*******************************************************************************
+# Function - boot_mesg()
+#
+# Purpose: Sending information from bootup scripts to the console
+#
+# Inputs: $1 is the message
+# $2 is the colorcode for the console
+#
+# Outputs: Standard Output
+#
+# Dependencies: - sed for parsing strings.
+# - grep for counting string length.
+#
+# Todo:
+#*******************************************************************************
+boot_mesg()
+{
+ local ECHOPARM=""
+
+ while true
+ do
+ case "${1}" in
+ -n)
+ ECHOPARM=" -n "
+ shift 1
+ ;;
+ -*)
+ echo "Unknown Option: ${1}"
+ return 1
+ ;;
+ *)
+ break
+ ;;
+ esac
+ done
+
+ ## Figure out the length of what is to be printed to be used
+ ## for warning messages.
+ STRING_LENGTH=$((${#1} + 1))
+
+ # Print the message to the screen
+ ${ECHO} ${ECHOPARM} -e "${2}${1}"
+
+}
+
+boot_mesg_flush()
+{
+ # Reset STRING_LENGTH for next message
+ STRING_LENGTH="0"
+}
+
+boot_log()
+{
+ # Left in for backwards compatibility
+ :
+}
+
+echo_ok()
+{
+ ${ECHO} -n -e "${CURS_UP}${SET_COL}${BRACKET}[${SUCCESS} OK ${BRACKET}]"
+ ${ECHO} -e "${NORMAL}"
+ boot_mesg_flush
+}
+
+echo_failure()
+{
+ ${ECHO} -n -e "${CURS_UP}${SET_COL}${BRACKET}[${FAILURE} FAIL ${BRACKET}]"
+ ${ECHO} -e "${NORMAL}"
+ boot_mesg_flush
+}
+
+echo_warning()
+{
+ ${ECHO} -n -e "${CURS_UP}${SET_COL}${BRACKET}[${WARNING} WARN ${BRACKET}]"
+ ${ECHO} -e "${NORMAL}"
+ boot_mesg_flush
+}
+
+print_error_msg()
+{
+ echo_failure
+ # $i is inherited by the rc script
+ boot_mesg -n "FAILURE:\n\nYou should not be reading this error message.\n\n" ${FAILURE}
+ boot_mesg -n " It means that an unforeseen error took"
+ boot_mesg -n " place in ${i}, which exited with a return value of"
+ boot_mesg " ${error_value}.\n"
+ boot_mesg_flush
+ boot_mesg -n "If you're able to track this"
+ boot_mesg -n " error down to a bug in one of the files provided by"
+ boot_mesg -n " the LFS book, please be so kind to inform us at"
+ boot_mesg " lfs-dev@linuxfromscratch.org.\n"
+ boot_mesg_flush
+ boot_mesg -n "Press Enter to continue..." ${INFO}
+ boot_mesg "" ${NORMAL}
+ read ENTER
+}
+
+check_script_status()
+{
+ # $i is inherited by the rc script
+ if [ ! -f ${i} ]; then
+ boot_mesg "${i} is not a valid symlink." ${WARNING}
+ echo_warning
+ continue
+ fi
+
+ if [ ! -x ${i} ]; then
+ boot_mesg "${i} is not executable, skipping." ${WARNING}
+ echo_warning
+ continue
+ fi
+}
+
+evaluate_retval()
+{
+ error_value="${?}"
+
+ if [ ${error_value} = 0 ]; then
+ echo_ok
+ else
+ echo_failure
+ fi
+
+ # This prevents the 'An Unexpected Error Has Occurred' from trivial
+ # errors.
+ return 0
+}
+
+print_status()
+{
+ if [ "${#}" = "0" ]; then
+ echo "Usage: ${0} {success|warning|failure}"
+ return 1
+ fi
+
+ case "${1}" in
+
+ success)
+ echo_ok
+ ;;
+
+ warning)
+ # Leave this extra case in because old scripts
+ # may call it this way.
+ case "${2}" in
+ running)
+ ${ECHO} -e -n "${CURS_UP}"
+ ${ECHO} -e -n "\\033[${STRING_LENGTH}G "
+ boot_mesg "Already running." ${WARNING}
+ echo_warning
+ ;;
+ not_running)
+ ${ECHO} -e -n "${CURS_UP}"
+ ${ECHO} -e -n "\\033[${STRING_LENGTH}G "
+ boot_mesg "Not running." ${WARNING}
+ echo_warning
+ ;;
+ not_available)
+ ${ECHO} -e -n "${CURS_UP}"
+ ${ECHO} -e -n "\\033[${STRING_LENGTH}G "
+ boot_mesg "Not available." ${WARNING}
+ echo_warning
+ ;;
+ *)
+ # This is how it is supposed to
+ # be called
+ echo_warning
+ ;;
+ esac
+ ;;
+
+ failure)
+ echo_failure
+ ;;
+
+ esac
+
+}
+
+reloadproc()
+{
+ local pidfile=""
+ local failure=0
+
+ while true
+ do
+ case "${1}" in
+ -p)
+ pidfile="${2}"
+ shift 2
+ ;;
+ -*)
+ log_failure_msg "Unknown Option: ${1}"
+ return 2
+ ;;
+ *)
+ break
+ ;;
+ esac
+ done
+
+ if [ "${#}" -lt "1" ]; then
+ log_failure_msg "Usage: reloadproc [-p pidfile] pathname"
+ return 2
+ fi
+
+ # This will ensure compatibility with previous LFS Bootscripts
+ if [ -n "${PIDFILE}" ]; then
+ pidfile="${PIDFILE}"
+ fi
+
+ # Is the process running?
+ if [ -z "${pidfile}" ]; then
+ pidofproc -s "${1}"
+ else
+ pidofproc -s -p "${pidfile}" "${1}"
+ fi
+
+ if [ -n "${pidlist}" ]; then
+ for pid in ${pidlist}
+ do
+ kill -"${RELOADSIG}" "${pid}" || failure="1"
+ done
+
+ (exit ${failure})
+ evaluate_retval
+
+ else
+ boot_mesg "Process ${1} not running." ${WARNING}
+ echo_warning
+ fi
+}
+
+statusproc()
+{
+ local pidfile=""
+ local base=""
+ local ret=""
+
+ while true
+ do
+ case "${1}" in
+ -p)
+ pidfile="${2}"
+ shift 2
+ ;;
+ -*)
+ log_failure_msg "Unknown Option: ${1}"
+ return 2
+ ;;
+ *)
+ break
+ ;;
+ esac
+ done
+
+ if [ "${#}" != "1" ]; then
+ shift 1
+ log_failure_msg "Usage: statusproc [-p pidfile] pathname"
+ return 2
+ fi
+
+ # Get the process basename
+ base="${1##*/}"
+
+ # This will ensure compatibility with previous LFS Bootscripts
+ if [ -n "${PIDFILE}" ]; then
+ pidfile="${PIDFILE}"
+ fi
+
+ # Is the process running?
+ if [ -z "${pidfile}" ]; then
+ pidofproc -s "${1}"
+ else
+ pidofproc -s -p "${pidfile}" "${1}"
+ fi
+
+ # Store the return status
+ ret=$?
+
+ if [ -n "${pidlist}" ]; then
+ ${ECHO} -e "${INFO}${base} is running with Process"\
+ "ID(s) ${pidlist}.${NORMAL}"
+ else
+ if [ -n "${base}" -a -e "/var/run/${base}.pid" ]; then
+ ${ECHO} -e "${WARNING}${1} is not running but"\
+ "/var/run/${base}.pid exists.${NORMAL}"
+ else
+ if [ -n "${pidfile}" -a -e "${pidfile}" ]; then
+ ${ECHO} -e "${WARNING}${1} is not running"\
+ "but ${pidfile} exists.${NORMAL}"
+ else
+ ${ECHO} -e "${INFO}${1} is not running.${NORMAL}"
+ fi
+ fi
+ fi
+
+ # Return the status from pidofproc
+ return $ret
+}
+
+# The below functions are documented in the LSB-generic 2.1.0
+
+#*******************************************************************************
+# Function - pidofproc [-s] [-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
+#
+# Outputs: return 0 - Success, pid's in stdout
+# return 1 - Program is dead, pidfile exists
+# return 2 - Invalid or excessive number of arguments,
+# warning in stdout
+# return 3 - Program is not running
+#
+# Dependencies: pidof, echo, head
+#
+# Todo: Remove dependency on head
+# This depreciates getpids
+# Test changes to pidof
+#
+#*******************************************************************************
+pidofproc()
+{
+ local pidfile=""
+ local lpids=""
+ local silent=""
+ pidlist=""
+ while true
+ do
+ case "${1}" in
+ -p)
+ pidfile="${2}"
+ shift 2
+ ;;
+
+ -s)
+ # Added for legacy opperation of getpids
+ # eliminates several '> /dev/null'
+ silent="1"
+ shift 1
+ ;;
+ -*)
+ log_failure_msg "Unknown Option: ${1}"
+ return 2
+ ;;
+ *)
+ break
+ ;;
+ esac
+ done
+
+ if [ "${#}" != "1" ]; then
+ shift 1
+ log_failure_msg "Usage: pidofproc [-s] [-p pidfile] pathname"
+ return 2
+ fi
+
+ if [ -n "${pidfile}" ]; then
+ if [ ! -r "${pidfile}" ]; then
+ return 3 # Program is not running
+ fi
+
+ lpids=`head -n 1 ${pidfile}`
+ for pid in ${lpids}
+ do
+ if [ "${pid}" -ne "$$" -a "${pid}" -ne "${PPID}" ]; then
+ kill -0 "${pid}" 2>/dev/null &&
+ pidlist="${pidlist} ${pid}"
+ fi
+
+ if [ "${silent}" != "1" ]; then
+ echo "${pidlist}"
+ fi
+
+ test -z "${pidlist}" &&
+ # Program is dead, pidfile exists
+ return 1
+ # else
+ return 0
+ done
+
+ else
+ pidlist=`pidof -o $$ -o $PPID -x "$1"`
+ if [ "${silent}" != "1" ]; then
+ echo "${pidlist}"
+ fi
+
+ # Get provide correct running status
+ if [ -n "${pidlist}" ]; then
+ return 0
+ else
+ return 3
+ fi
+
+ fi
+
+ if [ "$?" != "0" ]; then
+ return 3 # Program is not running
+ fi
+}
+
+# This will ensure compatibility with previous LFS Bootscripts
+getpids()
+{
+ if [ -z "${PIDFILE}" ]; then
+ pidofproc -s -p "${PIDFILE}" $@
+ else
+ pidofproc -s $@
+ fi
+ base="${1##*/}"
+}
+
+#*******************************************************************************
+# Function - loadproc [-f] [-n nicelevel] [-p pidfile] pathname [args]
+#
+# Purpose: This runs the specified program as a daemon
+#
+# Inputs: -f, run the program even if it is already running
+# -n nicelevel, specifies a nice level. See nice(1).
+# -p pidfile, uses the specified pidfile
+# pathname, pathname to the specified program
+# args, arguments to pass to specified program
+#
+# Outputs: return 0 - Success
+# return 2 - Invalid of excessive number of arguments,
+# warning in stdout
+# return 4 - Program or service status is unknown
+#
+# Dependencies: nice
+#
+# Todo: LSB says this should be called start_daemon
+# LSB does not say that it should call evaluate_retval
+# It checks for PIDFILE, which is deprecated.
+# Will be removed after BLFS 6.0
+# loadproc returns 0 if program is already running, not LSB compliant
+#
+#*******************************************************************************
+loadproc()
+{
+ local pidfile=""
+ local forcestart=""
+ local nicelevel="10"
+
+# This will ensure compatibility with previous LFS Bootscripts
+ if [ -n "${PIDFILE}" ]; then
+ pidfile="${PIDFILE}"
+ fi
+
+ while true
+ do
+ case "${1}" in
+ -f)
+ forcestart="1"
+ shift 1
+ ;;
+ -n)
+ nicelevel="${2}"
+ shift 2
+ ;;
+ -p)
+ pidfile="${2}"
+ shift 2
+ ;;
+ -*)
+ log_failure_msg "Unknown Option: ${1}"
+ return 2 #invalid or excess argument(s)
+ ;;
+ *)
+ break
+ ;;
+ esac
+ done
+
+ if [ "${#}" = "0" ]; then
+ log_failure_msg "Usage: loadproc [-f] [-n nicelevel] [-p pidfile] pathname [args]"
+ return 2 #invalid or excess argument(s)
+ fi
+
+ if [ -z "${forcestart}" ]; then
+ if [ -z "${pidfile}" ]; then
+ pidofproc -s "${1}"
+ else
+ pidofproc -s -p "${pidfile}" "${1}"
+ fi
+
+ case "${?}" in
+ 0)
+ log_warning_msg "Unable to continue: ${1} is running"
+ return 0 # 4
+ ;;
+ 1)
+ log_warning_msg "Unable to continue: ${pidfile} exists"
+ return 0 # 4
+ ;;
+ 3)
+ ;;
+ *)
+ log_failure_msg "Unknown error code from pidofproc: ${?}"
+ return 4
+ ;;
+ esac
+ fi
+
+ nice -n "${nicelevel}" "${@}"
+ evaluate_retval # This is "Probably" not LSB compliant, but required to be compatible with older bootscripts
+ return 0
+}
+
+#*******************************************************************************
+# Function - killproc [-p pidfile] pathname [signal]
+#
+# Purpose:
+#
+# Inputs: -p pidfile, uses the specified pidfile
+# pathname, pathname to the specified program
+# signal, send this signal to pathname
+#
+# Outputs: return 0 - Success
+# return 2 - Invalid of excessive number of arguments,
+# warning in stdout
+# return 4 - Unknown Status
+#
+# Dependencies: kill
+#
+# Todo: LSB does not say that it should call evaluate_retval
+# It checks for PIDFILE, which is deprecated.
+# Will be removed after BLFS 6.0
+#
+#*******************************************************************************
+killproc()
+{
+ local pidfile=""
+ local killsig=TERM # default signal is SIGTERM
+ pidlist=""
+
+ # This will ensure compatibility with previous LFS Bootscripts
+ if [ -n "${PIDFILE}" ]; then
+ pidfile="${PIDFILE}"
+ fi
+
+ while true
+ do
+ case "${1}" in
+ -p)
+ pidfile="${2}"
+ shift 2
+ ;;
+ -*)
+ log_failure_msg "Unknown Option: ${1}"
+ return 2
+ ;;
+ *)
+ break
+ ;;
+ esac
+ done
+
+ if [ "${#}" = "2" ]; then
+ killsig="${2}"
+ elif [ "${#}" != "1" ]; then
+ shift 2
+ log_failure_msg "Usage: killproc [-p pidfile] pathname [signal]"
+ return 2
+ fi
+
+ # Is the process running?
+ if [ -z "${pidfile}" ]; then
+ pidofproc -s "${1}"
+ else
+ pidofproc -s -p "${pidfile}" "${1}"
+ fi
+
+ # If running, send the signal
+ if [ -n "${pidlist}" ]; then
+ for pid in ${pidlist}
+ do
+ kill -${killsig} ${pid} 2>/dev/null
+
+ # Wait up to 3 seconds, for ${pid} to terminate
+ case "${killsig}" in
+ TERM|SIGTERM|KILL|SIGKILL)
+ # sleep in 1/10ths of seconds and
+ # multiply KILLDELAY by 10
+ local dtime="${KILLDELAY}0"
+ while [ "${dtime}" != "0" ]
+ do
+ kill -0 ${pid} 2>/dev/null || break
+ sleep 0.1
+ dtime=$(( ${dtime} - 1))
+ done
+ # If ${pid} is still running, kill it
+ kill -0 ${pid} 2>/dev/null && kill -KILL ${pid} 2>/dev/null
+ ;;
+ esac
+ done
+
+ # Check if the process is still running if we tried to stop it
+ case "${killsig}" in
+ TERM|SIGTERM|KILL|SIGKILL)
+ if [ -z "${pidfile}" ]; then
+ pidofproc -s "${1}"
+ else
+ pidofproc -s -p "${pidfile}" "${1}"
+ fi
+
+ # Program was terminated
+ if [ "$?" != "0" ]; then
+ # Remove the pidfile if necessary
+ if [ -f "${pidfile}" ]; then
+ rm -f "${pidfile}"
+ fi
+ echo_ok
+ return 0
+ else # Program is still running
+ echo_failure
+ return 4 # Unknown Status
+ fi
+ ;;
+ *)
+ # Just see if the kill returned successfully
+ evaluate_retval
+ ;;
+ esac
+ else # process not running
+ print_status warning not_running
+ fi
+}
+
+
+#*******************************************************************************
+# Function - log_success_msg "message"
+#
+# Purpose: Print a success message
+#
+# Inputs: $@ - Message
+#
+# Outputs: Text output to screen
+#
+# Dependencies: echo
+#
+# Todo: logging
+#
+#*******************************************************************************
+log_success_msg()
+{
+ ${ECHO} -n -e "${BOOTMESG_PREFIX}${@}"
+ ${ECHO} -e "${SET_COL}""${BRACKET}""[""${SUCCESS}"" OK ""${BRACKET}""]""${NORMAL}"
+ return 0
+}
+
+#*******************************************************************************
+# Function - log_failure_msg "message"
+#
+# Purpose: Print a failure message
+#
+# Inputs: $@ - Message
+#
+# Outputs: Text output to screen
+#
+# Dependencies: echo
+#
+# Todo: logging
+#
+#*******************************************************************************
+log_failure_msg() {
+ ${ECHO} -n -e "${BOOTMESG_PREFIX}${@}"
+ ${ECHO} -e "${SET_COL}""${BRACKET}""[""${FAILURE}"" FAIL ""${BRACKET}""]""${NORMAL}"
+ return 0
+}
+
+#*******************************************************************************
+# Function - log_warning_msg "message"
+#
+# Purpose: print a warning message
+#
+# Inputs: $@ - Message
+#
+# Outputs: Text output to screen
+#
+# Dependencies: echo
+#
+# Todo: logging
+#
+#*******************************************************************************
+log_warning_msg() {
+ ${ECHO} -n -e "${BOOTMESG_PREFIX}${@}"
+ ${ECHO} -e "${SET_COL}""${BRACKET}""[""${WARNING}"" WARN ""${BRACKET}""]""${NORMAL}"
+ return 0
+}
+
+# End $rc_base/init.d/functions
diff --git a/bootscripts/lfs/init.d/halt b/bootscripts/lfs/init.d/halt
new file mode 100644
index 000000000..f3b016c38
--- /dev/null
+++ b/bootscripts/lfs/init.d/halt
@@ -0,0 +1,28 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/halt
+#
+# Description : Halt Script
+#
+# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+ stop)
+ halt -d -f -i -p
+ ;;
+ *)
+ echo "Usage: {stop}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/halt
diff --git a/bootscripts/lfs/init.d/localnet b/bootscripts/lfs/init.d/localnet
new file mode 100644
index 000000000..4e5010229
--- /dev/null
+++ b/bootscripts/lfs/init.d/localnet
@@ -0,0 +1,54 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/localnet
+#
+# Description : Loopback device
+#
+# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+. /etc/sysconfig/network
+
+case "${1}" in
+ start)
+ boot_mesg "Bringing up the loopback interface..."
+ ip addr add 127.0.0.1/8 label lo dev lo
+ ip link set lo up
+ evaluate_retval
+
+ boot_mesg "Setting hostname to ${HOSTNAME}..."
+ hostname ${HOSTNAME}
+ evaluate_retval
+ ;;
+
+ stop)
+ boot_mesg "Bringing down the loopback interface..."
+ ip link set lo down
+ evaluate_retval
+ ;;
+
+ restart)
+ ${0} stop
+ sleep 1
+ ${0} start
+ ;;
+
+ status)
+ echo "Hostname is: $(hostname)"
+ ip link show lo
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|restart|status}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/localnet
diff --git a/bootscripts/lfs/init.d/modules b/bootscripts/lfs/init.d/modules
new file mode 100644
index 000000000..e8fbdfa9e
--- /dev/null
+++ b/bootscripts/lfs/init.d/modules
@@ -0,0 +1,72 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/modules
+#
+# Description : Module auto-loading script
+#
+# Authors : Zack Winkles
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+# Assure that the kernel has module support.
+[ -e /proc/ksyms -o -e /proc/modules ] || exit 0
+
+case "${1}" in
+ start)
+
+ # Exit if there's no modules file or there are no
+ # valid entries
+ [ -r /etc/sysconfig/modules ] &&
+ egrep -qv '^($|#)' /etc/sysconfig/modules ||
+ exit 0
+
+ boot_mesg -n "Loading modules:" ${INFO}
+
+ # Only try to load modules if the user has actually given us
+ # some modules to load.
+ while read module args; do
+
+ # Ignore comments and blank lines.
+ case "$module" in
+ ""|"#"*) continue ;;
+ esac
+
+ # Attempt to load the module, making
+ # sure to pass any arguments provided.
+ modprobe ${module} ${args} >/dev/null
+
+ # Print the module name if successful,
+ # otherwise take note.
+ if [ $? -eq 0 ]; then
+ boot_mesg -n " ${module}" ${NORMAL}
+ else
+ failedmod="${failedmod} ${module}"
+ fi
+ done < /etc/sysconfig/modules
+
+ boot_mesg "" ${NORMAL}
+ # Print a message about successfully loaded
+ # modules on the correct line.
+ echo_ok
+
+ # Print a failure message with a list of any
+ # modules that may have failed to load.
+ if [ -n "${failedmod}" ]; then
+ boot_mesg "Failed to load modules:${failedmod}" ${FAILURE}
+ echo_failure
+ fi
+ ;;
+ *)
+ echo "Usage: ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/modules
diff --git a/bootscripts/lfs/init.d/mountfs b/bootscripts/lfs/init.d/mountfs
new file mode 100644
index 000000000..3d9262463
--- /dev/null
+++ b/bootscripts/lfs/init.d/mountfs
@@ -0,0 +1,54 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/mountfs
+#
+# Description : File System Mount Script
+#
+# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+ start)
+ boot_mesg "Remounting root file system in read-write mode..."
+ mount -n -o remount,rw / >/dev/null
+ evaluate_retval
+
+ # Remove fsck-related file system watermarks.
+ rm -f /fastboot /forcefsck
+
+ boot_mesg "Recording existing mounts in /etc/mtab..."
+ > /etc/mtab
+ mount -f / || failed=1
+ mount -f /proc || failed=1
+ mount -f /sys || failed=1
+ (exit ${failed})
+ evaluate_retval
+
+ # This will mount all filesystems that do not have _netdev in
+ # their option list. _netdev denotes a network filesystem.
+ boot_mesg "Mounting remaining file systems..."
+ mount -a -O no_netdev >/dev/null
+ evaluate_retval
+ ;;
+
+ stop)
+ boot_mesg "Unmounting all other currently mounted file systems..."
+ umount -a -d -r >/dev/null
+ evaluate_retval
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/mountfs
diff --git a/bootscripts/lfs/init.d/mountkernfs b/bootscripts/lfs/init.d/mountkernfs
new file mode 100644
index 000000000..10b165a5c
--- /dev/null
+++ b/bootscripts/lfs/init.d/mountkernfs
@@ -0,0 +1,44 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/mountkernfs
+#
+# Description : Mount proc and sysfs
+#
+# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+ start)
+ boot_mesg -n "Mounting kernel-based file systems:" ${INFO}
+
+ if ! mountpoint /proc >/dev/null; then
+ boot_mesg -n " /proc" ${NORMAL}
+ mount -n /proc || failed=1
+ fi
+
+ if ! mountpoint /sys >/dev/null; then
+ boot_mesg -n " /sys" ${NORMAL}
+ mount -n /sys || failed=1
+ fi
+
+ boot_mesg "" ${NORMAL}
+
+ (exit ${failed})
+ evaluate_retval
+ ;;
+
+ *)
+ echo "Usage: ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/mountkernfs
diff --git a/bootscripts/lfs/init.d/network b/bootscripts/lfs/init.d/network
new file mode 100644
index 000000000..b99ecfdb9
--- /dev/null
+++ b/bootscripts/lfs/init.d/network
@@ -0,0 +1,73 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/network
+#
+# Description : Network Control Script
+#
+# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
+# Nathan Coulson - nathan@linuxfromscratch.org
+# Kevin P. Fleming - kpfleming@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+. /etc/sysconfig/network
+
+case "${1}" in
+ start)
+ # Start all network interfaces
+ for file in ${network_devices}/ifconfig.*
+ do
+ interface=${file##*/ifconfig.}
+
+ # skip if $file is * (because nothing was found)
+ if [ "${interface}" = "*" ]
+ then
+ continue
+ fi
+
+ IN_BOOT=1 ${network_devices}/ifup ${interface}
+ done
+ ;;
+
+ stop)
+ # Reverse list
+ FILES=""
+ for file in ${network_devices}/ifconfig.*
+ do
+ FILES="${file} ${FILES}"
+ done
+
+ # Stop all network interfaces
+ for file in ${FILES}
+ do
+ interface=${file##*/ifconfig.}
+
+ # skip if $file is * (because nothing was found)
+ if [ "${interface}" = "*" ]
+ then
+ continue
+ fi
+
+ IN_BOOT=1 ${network_devices}/ifdown ${interface}
+ done
+ ;;
+
+ restart)
+ ${0} stop
+ sleep 1
+ ${0} start
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|restart}"
+ exit 1
+ ;;
+esac
+
+# End /etc/rc.d/init.d/network
diff --git a/bootscripts/lfs/init.d/rc b/bootscripts/lfs/init.d/rc
new file mode 100644
index 000000000..38d4ae2df
--- /dev/null
+++ b/bootscripts/lfs/init.d/rc
@@ -0,0 +1,99 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/rc
+#
+# Description : Main Run Level Control Script
+#
+# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+# This sets a few default terminal options.
+stty sane
+
+# These 3 signals will not cause our script to exit
+trap "" INT QUIT TSTP
+
+[ "${1}" != "" ] && runlevel=${1}
+
+if [ "${runlevel}" = "" ]; then
+ echo "Usage: ${0} <runlevel>" >&2
+ exit 1
+fi
+
+previous=${PREVLEVEL}
+[ "${previous}" = "" ] && previous=N
+
+if [ ! -d ${rc_base}/rc${runlevel}.d ]; then
+ boot_mesg "${rc_base}/rc${runlevel}.d does not exist." ${WARNING}
+ boot_mesg_flush
+ exit 1
+fi
+
+# Attempt to stop all service started by previous runlevel,
+# and killed in this runlevel
+if [ "${previous}" != "N" ]; then
+ for i in $(ls -v ${rc_base}/rc${runlevel}.d/K* 2> /dev/null)
+ do
+ check_script_status
+
+ suffix=${i#$rc_base/rc$runlevel.d/K[0-9][0-9]}
+ prev_start=$rc_base/rc$previous.d/S[0-9][0-9]$suffix
+ sysinit_start=$rc_base/rcsysinit.d/S[0-9][0-9]$suffix
+
+ if [ "${runlevel}" != "0" ] && [ "${runlevel}" != "6" ]; then
+ if [ ! -f ${prev_start} ] && [ ! -f ${sysinit_start} ]; then
+ boot_mesg -n "WARNING:\n\n${i} can't be" ${WARNING}
+ boot_mesg -n " executed because it was not"
+ boot_mesg -n " not started in the previous"
+ boot_mesg -n " runlevel (${previous})."
+ boot_mesg "" ${NORMAL}
+ boot_mesg_flush
+ continue
+ fi
+ fi
+ ${i} stop
+ error_value=${?}
+
+ if [ "${error_value}" != "0" ]; then
+ print_error_msg
+ fi
+ done
+fi
+
+#Start all functions in this runlevel
+for i in $( ls -v ${rc_base}/rc${runlevel}.d/S* 2> /dev/null)
+do
+ if [ "${previous}" != "N" ]; then
+ suffix=${i#$rc_base/rc$runlevel.d/S[0-9][0-9]}
+ stop=$rc_base/rc$runlevel.d/K[0-9][0-9]$suffix
+ prev_start=$rc_base/rc$previous.d/S[0-9][0-9]$suffix
+
+ [ -f ${prev_start} ] && [ ! -f ${stop} ] && continue
+ fi
+
+ check_script_status
+
+ case ${runlevel} in
+ 0|6)
+ ${i} stop
+ ;;
+ *)
+ ${i} start
+ ;;
+ esac
+ error_value=${?}
+
+ if [ "${error_value}" != "0" ]; then
+ print_error_msg
+ fi
+done
+
+# End $rc_base/init.d/rc
diff --git a/bootscripts/lfs/init.d/reboot b/bootscripts/lfs/init.d/reboot
new file mode 100644
index 000000000..fec0c1f6f
--- /dev/null
+++ b/bootscripts/lfs/init.d/reboot
@@ -0,0 +1,31 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/reboot
+#
+# Description : Reboot Scripts
+#
+# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+ stop)
+ boot_mesg "Restarting system..."
+ reboot -d -f -i
+ ;;
+
+ *)
+ echo "Usage: ${0} {stop}"
+ exit 1
+ ;;
+
+esac
+
+# End $rc_base/init.d/reboot
diff --git a/bootscripts/lfs/init.d/sendsignals b/bootscripts/lfs/init.d/sendsignals
new file mode 100644
index 000000000..4c3d05eda
--- /dev/null
+++ b/bootscripts/lfs/init.d/sendsignals
@@ -0,0 +1,52 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/sendsignals
+#
+# Description : Sendsignals Script
+#
+# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+ stop)
+ boot_mesg "Sending all processes the TERM signal..."
+ killall5 -15
+ error_value=${?}
+
+ sleep ${KILLDELAY}
+
+ if [ "${error_value}" = 0 ]; then
+ echo_ok
+ else
+ echo_failure
+ fi
+
+ boot_mesg "Sending all processes the KILL signal..."
+ killall5 -9
+ error_value=${?}
+
+ sleep ${KILLDELAY}
+
+ if [ "${error_value}" = 0 ]; then
+ echo_ok
+ else
+ echo_failure
+ fi
+ ;;
+
+ *)
+ echo "Usage: ${0} {stop}"
+ exit 1
+ ;;
+
+esac
+
+# End $rc_base/init.d/sendsignals
diff --git a/bootscripts/lfs/init.d/setclock b/bootscripts/lfs/init.d/setclock
new file mode 100644
index 000000000..a87fb2d23
--- /dev/null
+++ b/bootscripts/lfs/init.d/setclock
@@ -0,0 +1,49 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/setclock
+#
+# Description : Setting Linux Clock
+#
+# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+. /etc/sysconfig/clock
+
+CLOCKPARAMS=
+
+case "${UTC}" in
+ yes|true|1)
+ CLOCKPARAMS="${CLOCKPARAMS} --utc"
+ ;;
+
+ no|false|0)
+ CLOCKPARAMS="${CLOCKPARAMS} --localtime"
+ ;;
+
+esac
+
+case ${1} in
+ start)
+ boot_mesg "Setting system clock..."
+ hwclock --hctosys ${CLOCKPARAMS} >/dev/null
+ evaluate_retval
+ ;;
+
+ stop)
+ boot_mesg "Setting hardware clock..."
+ hwclock --systohc ${CLOCKPARAMS} >/dev/null
+ evaluate_retval
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop}"
+ ;;
+
+esac
diff --git a/bootscripts/lfs/init.d/swap b/bootscripts/lfs/init.d/swap
new file mode 100644
index 000000000..edc63f3b0
--- /dev/null
+++ b/bootscripts/lfs/init.d/swap
@@ -0,0 +1,50 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/swap
+#
+# Description : Swap Control Script
+#
+# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+ start)
+ boot_mesg "Activating all swap files/partitions..."
+ swapon -a
+ evaluate_retval
+ ;;
+
+ stop)
+ boot_mesg "Deactivating all swap files/partitions..."
+ swapoff -a
+ evaluate_retval
+ ;;
+
+ restart)
+ ${0} stop
+ sleep 1
+ ${0} start
+ ;;
+
+ status)
+ boot_mesg "Retrieving swap status." ${INFO}
+ echo_ok
+ echo
+ swapon -s
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|restart|status}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/swap
diff --git a/bootscripts/lfs/init.d/sysctl b/bootscripts/lfs/init.d/sysctl
new file mode 100644
index 000000000..0d0b5c1b3
--- /dev/null
+++ b/bootscripts/lfs/init.d/sysctl
@@ -0,0 +1,39 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/sysctl
+#
+# Description : File uses /etc/sysctl.conf to set kernel runtime
+# parameters
+#
+# Authors : Nathan Coulson (nathan@linuxfromscratch.org)
+# Matthew Burgress (matthew@linuxfromscratch.org)
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+ start)
+ if [ -f "/etc/sysctl.conf" ]; then
+ boot_mesg "Setting kernel runtime parameters..."
+ sysctl -q -p
+ evaluate_retval
+ fi
+ ;;
+
+ status)
+ sysctl -a
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|status}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/sysctl
diff --git a/bootscripts/lfs/init.d/sysklogd b/bootscripts/lfs/init.d/sysklogd
new file mode 100644
index 000000000..e0a568ce6
--- /dev/null
+++ b/bootscripts/lfs/init.d/sysklogd
@@ -0,0 +1,57 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/sysklogd
+#
+# Description : Sysklogd loader
+#
+# Authors : Gerard Beekmans - gerard@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+ start)
+ boot_mesg "Starting system log daemon..."
+ loadproc syslogd -m 0
+
+ boot_mesg "Starting kernel log daemon..."
+ loadproc klogd
+ ;;
+
+ stop)
+ boot_mesg "Stopping kernel log daemon..."
+ killproc klogd
+
+ boot_mesg "Stopping system log daemon..."
+ killproc syslogd
+ ;;
+
+ reload)
+ boot_mesg "Reloading system log daemon config file..."
+ reloadproc syslogd
+ ;;
+
+ restart)
+ ${0} stop
+ sleep 1
+ ${0} start
+ ;;
+
+ status)
+ statusproc syslogd
+ statusproc klogd
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|reload|restart|status}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/sysklogd
diff --git a/bootscripts/lfs/init.d/template b/bootscripts/lfs/init.d/template
new file mode 100644
index 000000000..69dc2a6a2
--- /dev/null
+++ b/bootscripts/lfs/init.d/template
@@ -0,0 +1,50 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/
+#
+# Description :
+#
+# Authors :
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+ start)
+ boot_mesg "Starting..."
+ loadproc
+ ;;
+
+ stop)
+ boot_mesg "Stopping..."
+ killproc
+ ;;
+
+ reload)
+ boot_mesg "Reloading..."
+ reloadproc
+ ;;
+
+ restart)
+ ${0} stop
+ sleep 1
+ ${0} start
+ ;;
+
+ status)
+ statusproc
+ ;;
+
+ *)
+ echo "Usage: ${0} {start|stop|reload|restart|status}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/
diff --git a/bootscripts/lfs/init.d/udev b/bootscripts/lfs/init.d/udev
new file mode 100644
index 000000000..03846e6f3
--- /dev/null
+++ b/bootscripts/lfs/init.d/udev
@@ -0,0 +1,77 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/udev
+#
+# Description : Udev cold-plugging script
+#
+# Authors : Zack Winkles, Alexander E. Patrakov
+#
+# Version : 00.02
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+ start)
+ boot_mesg "Populating /dev with device nodes..."
+ if ! grep -q '[[:space:]]sysfs' /proc/mounts; then
+ echo_failure
+ boot_mesg -n "FAILURE:\n\nUnable to create" ${FAILURE}
+ boot_mesg -n " devices without a SysFS filesystem"
+ boot_mesg -n "\n\nAfter you press Enter, this system"
+ boot_mesg -n " will be halted and powered off."
+ boot_mesg -n "\n\nPress Enter to continue..." ${INFO}
+ boot_mesg "" ${NORMAL}
+ read ENTER
+ /etc/rc.d/init.d/halt stop
+ fi
+
+ # Mount a temporary file system over /dev, so that any devices
+ # made or removed during this boot don't affect the next one.
+ # The reason we don't write to mtab is because we don't ever
+ # want /dev to be unavailable (such as by `umount -a').
+ mount -n -t tmpfs tmpfs /dev -o mode=755
+ if [ ${?} != 0 ]; then
+ echo_failure
+ boot_mesg -n "FAILURE:\n\nCannot mount a tmpfs" ${FAILURE}
+ boot_mesg -n " onto /dev, this system will be halted."
+ boot_mesg -n "\n\nAfter you press Enter, this system"
+ boot_mesg -n " will be halted and powered off."
+ boot_mesg -n "\n\nPress Enter to continue..." ${INFO}
+ boot_mesg "" ${NORMAL}
+ read ENTER
+ /etc/rc.d/init.d/halt stop
+ fi
+
+ # Udev handles uevents itself, so we don't need to have
+ # the kernel call out to any binary in response to them
+ echo > /proc/sys/kernel/hotplug
+
+ # Copy static device nodes to /dev
+ cp -a /lib/udev/devices/* /dev
+
+ # Start the udev daemon to continually watch for, and act on,
+ # uevents
+ /sbin/udevd --daemon
+
+ # Now traverse /sys in order to "coldplug" devices that have
+ # already been discovered
+ /sbin/udevadm trigger
+
+ # Now wait for udevd to process the uevents we triggered
+ /sbin/udevadm settle
+ evaluate_retval
+
+ ;;
+
+ *)
+ echo "Usage ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/udev
diff --git a/bootscripts/lfs/init.d/udev_retry b/bootscripts/lfs/init.d/udev_retry
new file mode 100644
index 000000000..8ce819e9e
--- /dev/null
+++ b/bootscripts/lfs/init.d/udev_retry
@@ -0,0 +1,45 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/udev_retry
+#
+# Description : Udev cold-plugging script (retry)
+#
+# Authors : Alexander E. Patrakov
+#
+# Version : 00.02
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+ start)
+ boot_mesg "Retrying failed uevents, if any..."
+
+ # From Debian: "copy the rules generated before / was mounted
+ # read-write":
+ for file in /dev/.udev/tmp-rules--*; do
+ dest=${file##*tmp-rules--}
+ [ "$dest" = '*' ] && break
+ cat $file >> /etc/udev/rules.d/$dest
+ rm -f $file
+ done
+
+ # Re-trigger the failed uevents in hope they will succeed now
+ /sbin/udevadm trigger --retry-failed
+
+ # Now wait for udevd to process the uevents we triggered
+ /sbin/udevadm settle
+ evaluate_retval
+ ;;
+
+ *)
+ echo "Usage ${0} {start}"
+ exit 1
+ ;;
+esac
+
+# End $rc_base/init.d/udev_retry
diff --git a/bootscripts/lfs/sysconfig/createfiles b/bootscripts/lfs/sysconfig/createfiles
new file mode 100644
index 000000000..8d1f89dc6
--- /dev/null
+++ b/bootscripts/lfs/sysconfig/createfiles
@@ -0,0 +1,28 @@
+########################################################################
+# Begin /etc/sysconfig/createfiles
+#
+# Description : Createfiles script config file
+#
+# Authors :
+#
+# Version : 00.00
+#
+# Notes : The syntax of this file is as follows:
+# if type is equal to "file" or "dir"
+# <filename> <type> <permissions> <user> <group>
+# if type is equal to "dev"
+# <filename> <type> <permissions> <user> <group> <devtype> <major> <minor>
+#
+# <filename> is the name of the file which is to be created
+# <type> is either file, dir, or dev.
+# file creates a new file
+# dir creates a new directory
+# dev creates a new device
+# <devtype> is either block, char or pipe
+# block creates a block device
+# char creates a character deivce
+# pipe creates a pipe, this will ignore the <major> and <minor> fields
+# <major> and <minor> are the major and minor numbers used for the device.
+########################################################################
+
+# End /etc/sysconfig/createfiles
diff --git a/bootscripts/lfs/sysconfig/modules b/bootscripts/lfs/sysconfig/modules
new file mode 100644
index 000000000..1c8493d45
--- /dev/null
+++ b/bootscripts/lfs/sysconfig/modules
@@ -0,0 +1,18 @@
+########################################################################
+# Begin /etc/sysconfig/modules
+#
+# Description : Module auto-loading configuration
+#
+# Authors :
+#
+# Version : 00.00
+#
+# Notes : The syntax of this file is as follows:
+# <module> [<arg1> <arg2> ...]
+#
+# Each module should be on it's own line, and any options that you want
+# passed to the module should follow it. The line deliminator is either
+# a space or a tab.
+########################################################################
+
+# End /etc/sysconfig/modules
diff --git a/bootscripts/lfs/sysconfig/network-devices/ifdown b/bootscripts/lfs/sysconfig/network-devices/ifdown
new file mode 100644
index 000000000..b836cb8ef
--- /dev/null
+++ b/bootscripts/lfs/sysconfig/network-devices/ifdown
@@ -0,0 +1,95 @@
+#!/bin/sh
+########################################################################
+# Begin $network_devices/ifdown
+#
+# Description : Interface Down
+#
+# Authors : Nathan Coulson - nathan@linuxfromscratch.org
+# Kevin P. Fleming - kpfleming@linuxfromscratch.org
+#
+# Version : 00.01
+#
+# Notes : the IFCONFIG variable is passed to the scripts found
+# in the services directory, to indicate what file the
+# service should source to get environmental variables.
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+# Collect a list of configuration files for our interface
+if [ -n "${2}" ]; then
+ for file in ${@#$1}; do # All parameters except $1
+ FILES="${FILES} ${network_devices}/ifconfig.${1}/${file}"
+ done
+elif [ -d "${network_devices}/ifconfig.${1}" ]; then
+ FILES=`echo ${network_devices}/ifconfig.${1}/*`
+else
+ FILES="${network_devices}/ifconfig.${1}"
+fi
+
+# Reverse the order configuration files are processed in
+for file in ${FILES}; do
+ FILES2="${file} ${FILES2}"
+done
+FILES=${FILES2}
+
+# Process each configuration file
+for file in ${FILES}; do
+ # skip backup files
+ if [ "${file}" != "${file%""~""}" ]; then
+ continue
+ fi
+
+ if [ ! -f "${file}" ]; then
+ boot_mesg "${file} is not a network configuration file or directory." ${WARNING}
+ echo_warning
+ continue
+ fi
+ (
+ . ${file}
+
+ # Will not process this service if started by boot, and ONBOOT
+ # is not set to yes
+ if [ "${IN_BOOT}" = "1" -a "${ONBOOT}" != "yes" ]; then
+ continue
+ fi
+
+ # Will not process this service if started by hotplug, and
+ # ONHOTPLUG is not set to yes
+ if [ "${IN_HOTPLUG}" = "1" -a "${ONHOTPLUG}" != "yes" ]; then
+ continue
+ fi
+
+ # This will run the service script, if SERVICE is set
+ if [ -n "${SERVICE}" -a -x "${network_devices}/services/${SERVICE}" ]; then
+ if ip link show ${1} > /dev/null 2>&1
+ then
+ IFCONFIG=${file} ${network_devices}/services/${SERVICE} ${1} down
+ else
+ boot_mesg "Interface ${1} doesn't exist." ${WARNING}
+ echo_warning
+ fi
+ else
+ boot_mesg -n "Unable to process ${file}. Either" ${FAILURE}
+ boot_mesg -n " the SERVICE variable was not set,"
+ boot_mesg " or the specified service cannot be executed."
+ echo_failure
+ continue
+ fi
+ )
+done
+
+if [ -z "${2}" ]; then
+ link_status=`ip link show $1`
+ if [ -n "${link_status}" ]; then
+ if echo "${link_status}" | grep -q UP; then
+ boot_mesg "Bringing down the ${1} interface..."
+ ip link set ${1} down
+ evaluate_retval
+ fi
+ fi
+fi
+
+# End $network_devices/ifdown
diff --git a/bootscripts/lfs/sysconfig/network-devices/ifup b/bootscripts/lfs/sysconfig/network-devices/ifup
new file mode 100644
index 000000000..c9dfe2fb9
--- /dev/null
+++ b/bootscripts/lfs/sysconfig/network-devices/ifup
@@ -0,0 +1,89 @@
+#!/bin/sh
+########################################################################
+# Begin $network_devices/ifup
+#
+# Description : Interface Up
+#
+# Authors : Nathan Coulson - nathan@linuxfromscratch.org
+# Kevin P. Fleming - kpfleming@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes : the IFCONFIG variable is passed to the scripts found
+# in the services directory, to indicate what file the
+# service should source to get environmental variables.
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+# Collect a list of configuration files for our interface
+if [ -n "${2}" ]; then
+ for file in ${@#$1} # All parameters except $1
+ do
+ FILES="${FILES} ${network_devices}/ifconfig.${1}/${file}"
+ done
+elif [ -d "${network_devices}/ifconfig.${1}" ]; then
+ FILES=`echo ${network_devices}/ifconfig.${1}/*`
+else
+ FILES="${network_devices}/ifconfig.${1}"
+fi
+
+boot_mesg "Bringing up the ${1} interface..."
+boot_mesg_flush
+
+# Process each configruation file
+for file in ${FILES}; do
+ # skip backup files
+ if [ "${file}" != "${file%""~""}" ]; then
+ continue
+ fi
+
+ if [ ! -f "${file}" ]; then
+ boot_mesg "${file} is not a network configuration file or directory." ${WARNING}
+ echo_warning
+ continue
+ fi
+
+ (
+ . ${file}
+
+ # Will not process this service if started by boot, and ONBOOT
+ # is not set to yes
+ if [ "${IN_BOOT}" = "1" -a "${ONBOOT}" != "yes" ]; then
+ continue
+ fi
+ # Will not process this service if started by hotplug, and
+ # ONHOTPLUG is not set to yes
+ if [ "${IN_HOTPLUG}" = "1" -a "${ONHOTPLUG}" != "yes" -a "${HOSTNAME}" != "(none)" ]; then
+ continue
+ fi
+
+ if [ -n "${SERVICE}" -a -x "${network_devices}/services/${SERVICE}" ]; then
+ if [ -z "${CHECK_LINK}" -o "${CHECK_LINK}" = "y" -o "${CHECK_LINK}" = "yes" -o "${CHECK_LINK}" = "1" ]; then
+ if ip link show ${1} > /dev/null 2>&1; then
+ link_status=`ip link show ${1}`
+ if [ -n "${link_status}" ]; then
+ if ! echo "${link_status}" | grep -q UP; then
+ ip link set ${1} up
+ fi
+ fi
+ else
+ boot_mesg "Interface ${1} doesn't exist." ${WARNING}
+ echo_warning
+ continue
+ fi
+ fi
+ IFCONFIG=${file} ${network_devices}/services/${SERVICE} ${1} up
+ else
+ boot_mesg "Unable to process ${file}. Either" ${FAILURE}
+ boot_mesg " the SERVICE variable was not set,"
+ boot_mesg " or the specified service cannot be executed."
+ echo_failure
+ continue
+ fi
+ )
+done
+
+# End $network_devices/ifup
diff --git a/bootscripts/lfs/sysconfig/network-devices/services/ipv4-static b/bootscripts/lfs/sysconfig/network-devices/services/ipv4-static
new file mode 100644
index 000000000..a550d3d2a
--- /dev/null
+++ b/bootscripts/lfs/sysconfig/network-devices/services/ipv4-static
@@ -0,0 +1,82 @@
+#!/bin/sh
+########################################################################
+# Begin $network_devices/services/ipv4-static
+#
+# Description : IPV4 Static Boot Script
+#
+# Authors : Nathan Coulson - nathan@linuxfromscratch.org
+# Kevin P. Fleming - kpfleming@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+. ${IFCONFIG}
+
+if [ -z "${IP}" ]; then
+ boot_mesg "IP variable missing from ${IFCONFIG}, cannot continue." ${FAILURE}
+ echo_failure
+ exit 1
+fi
+
+if [ -z "${PREFIX}" -a -z "${PEER}" ]; then
+ boot_mesg -n "PREFIX variable missing from ${IFCONFIG}," ${WARNING}
+ boot_mesg " assuming 24."
+ echo_warning
+ PREFIX=24
+ args="${args} ${IP}/${PREFIX}"
+elif [ -n "${PREFIX}" -a -n "${PEER}" ]; then
+ boot_mesg "PREFIX and PEER both specified in ${IFCONFIG}, cannot continue." ${FAILURE}
+ echo_failure
+ 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)
+ boot_mesg "Adding IPv4 address ${IP} to the ${1} interface..."
+ ip addr add ${args} dev ${1}
+ evaluate_retval
+
+ if [ -n "${GATEWAY}" ]; then
+ if ip route | grep -q default; then
+ boot_mesg "Gateway already setup; skipping." ${WARNING}
+ echo_warning
+ else
+ boot_mesg "Setting up default gateway..."
+ ip route add default via ${GATEWAY} dev ${1}
+ evaluate_retval
+ fi
+ fi
+ ;;
+
+ down)
+ if [ -n "${GATEWAY}" ]; then
+ boot_mesg "Removing default gateway..."
+ ip route del default
+ evaluate_retval
+ fi
+
+ boot_mesg "Removing IPv4 address ${IP} from the ${1} interface..."
+ ip addr del ${args} dev ${1}
+ evaluate_retval
+ ;;
+
+ *)
+ echo "Usage: ${0} [interface] {up|down}"
+ exit 1
+ ;;
+esac
+
+# End $network_devices/services/ipv4-static
diff --git a/bootscripts/lfs/sysconfig/network-devices/services/ipv4-static-route b/bootscripts/lfs/sysconfig/network-devices/services/ipv4-static-route
new file mode 100644
index 000000000..378b1deff
--- /dev/null
+++ b/bootscripts/lfs/sysconfig/network-devices/services/ipv4-static-route
@@ -0,0 +1,97 @@
+#!/bin/sh
+########################################################################
+# Begin $network_devices/services/ipv4-static-route
+#
+# Description : IPV4 Static Route Script
+#
+# Authors : Kevin P. Fleming - kpfleming@linuxfromscratch.org
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_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 "
+ ;;
+
+ (*)
+ boot_mesg "Unknown route type (${TYPE}) in ${IFCONFIG}, cannot continue." ${FAILURE}
+ echo_failure
+ exit 1
+ ;;
+esac
+
+if [ -n "${need_ip}" ]; then
+ if [ -z "${IP}" ]; then
+ boot_mesg "IP variable missing from ${IFCONFIG}, cannot continue." ${FAILURE}
+ echo_failure
+ exit 1
+ fi
+
+ if [ -z "${PREFIX}" ]; then
+ boot_mesg "PREFIX variable missing from ${IFCONFIG}, cannot continue." ${FAILURE}
+ echo_failure
+ exit 1
+ fi
+
+ args="${args} ${IP}/${PREFIX}"
+ desc="${desc}${IP}/${PREFIX}"
+fi
+
+if [ -n "${need_gateway}" ]; then
+ if [ -z "${GATEWAY}" ]; then
+ boot_mesg "GATEWAY variable missing from ${IFCONFIG}, cannot continue." ${FAILURE}
+ echo_failure
+ exit 1
+ fi
+ args="${args} via ${GATEWAY}"
+fi
+
+if [ -n "${SOURCE}" ]; then
+ args="${args} src ${SOURCE}"
+fi
+
+case "${2}" in
+ up)
+ boot_mesg "Adding '${desc}' route to the ${1} interface..."
+ ip route add ${args} dev ${1}
+ evaluate_retval
+ ;;
+
+ down)
+ boot_mesg "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 $network_devices/services/ipv4-static-route
diff --git a/bootscripts/lfs/sysconfig/rc b/bootscripts/lfs/sysconfig/rc
new file mode 100644
index 000000000..2333ff488
--- /dev/null
+++ b/bootscripts/lfs/sysconfig/rc
@@ -0,0 +1,18 @@
+########################################################################
+# Begin /etc/sysconfig/rc
+#
+# Description : rc script configuration
+#
+# Authors :
+#
+# Version : 00.00
+#
+# Notes :
+#
+########################################################################
+
+rc_base=/etc/rc.d
+rc_functions=${rc_base}/init.d/functions
+network_devices=/etc/sysconfig/network-devices
+
+# End /etc/sysconfig/rc