فهرست منبع

Brought jh branch up to date. Should be considered broken with this commit, since the placement of gcc's bootstrap needs to be fixed in this branch. Will fix shortly.

git-svn-id: http://svn.linuxfromscratch.org/LFS/branches/jh/BOOK@8670 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689
Jeremy Huntwork 17 سال پیش
والد
کامیت
b329b40033
100فایلهای تغییر یافته به همراه9022 افزوده شده و 111 حذف شده
  1. 13 6
      Makefile
  2. 6 1
      appendices/acknowledgments.xml
  3. 403 0
      appendices/creat-comm.xml
  4. 4 3
      appendices/dependencies.xml
  5. 25 0
      appendices/license.xml
  6. 33 0
      appendices/mit-lic.xml
  7. 195 0
      appendices/scripts.xml
  8. 30 0
      appendices/udev-rules.xml
  9. 38 0
      aux-file-data.sh
  10. 927 0
      bootscripts/ChangeLog
  11. 29 0
      bootscripts/LICENSE
  12. 134 0
      bootscripts/Makefile
  13. 79 0
      bootscripts/README
  14. 42 0
      bootscripts/contrib/lsb-v3/ChangeLog
  15. 31 0
      bootscripts/contrib/lsb-v3/INSTALL
  16. 115 0
      bootscripts/contrib/lsb-v3/Makefile
  17. 93 0
      bootscripts/contrib/lsb-v3/README
  18. 26 0
      bootscripts/contrib/lsb-v3/etc/inittab
  19. 8 0
      bootscripts/contrib/lsb-v3/etc/lsb-config
  20. 105 0
      bootscripts/contrib/lsb-v3/init.d/checkfs
  21. 113 0
      bootscripts/contrib/lsb-v3/init.d/cleanfs
  22. 111 0
      bootscripts/contrib/lsb-v3/init.d/console
  23. 32 0
      bootscripts/contrib/lsb-v3/init.d/halt
  24. 214 0
      bootscripts/contrib/lsb-v3/init.d/lfs-functions
  25. 84 0
      bootscripts/contrib/lsb-v3/init.d/localnet
  26. 99 0
      bootscripts/contrib/lsb-v3/init.d/modules
  27. 60 0
      bootscripts/contrib/lsb-v3/init.d/mountfs
  28. 45 0
      bootscripts/contrib/lsb-v3/init.d/mountkernfs
  29. 73 0
      bootscripts/contrib/lsb-v3/init.d/network
  30. 196 0
      bootscripts/contrib/lsb-v3/init.d/rc
  31. 34 0
      bootscripts/contrib/lsb-v3/init.d/reboot
  32. 49 0
      bootscripts/contrib/lsb-v3/init.d/sendsignals
  33. 61 0
      bootscripts/contrib/lsb-v3/init.d/setclock
  34. 57 0
      bootscripts/contrib/lsb-v3/init.d/swap
  35. 41 0
      bootscripts/contrib/lsb-v3/init.d/sysctl
  36. 71 0
      bootscripts/contrib/lsb-v3/init.d/sysklogd
  37. 92 0
      bootscripts/contrib/lsb-v3/init.d/template
  38. 81 0
      bootscripts/contrib/lsb-v3/init.d/udev
  39. 51 0
      bootscripts/contrib/lsb-v3/init.d/udev_retry
  40. 577 0
      bootscripts/contrib/lsb-v3/lsb/init-functions
  41. 306 0
      bootscripts/contrib/lsb-v3/lsb/manage-functions
  42. 28 0
      bootscripts/contrib/lsb-v3/sysconfig/createfiles
  43. 18 0
      bootscripts/contrib/lsb-v3/sysconfig/modules
  44. 93 0
      bootscripts/contrib/lsb-v3/sysconfig/network-devices/ifdown
  45. 87 0
      bootscripts/contrib/lsb-v3/sysconfig/network-devices/ifup
  46. 80 0
      bootscripts/contrib/lsb-v3/sysconfig/network-devices/services/ipv4-static
  47. 92 0
      bootscripts/contrib/lsb-v3/sysconfig/network-devices/services/ipv4-static-route
  48. 52 0
      bootscripts/contrib/lsb-v3/sysconfig/rc
  49. 69 0
      bootscripts/contrib/lsb-v3/sysconfig/rc.site
  50. 11 0
      bootscripts/contrib/lsb/Makefile
  51. 348 0
      bootscripts/contrib/lsb/lib/init-functions
  52. 45 0
      bootscripts/contrib/sysconfig/network-devices/services/mtu
  53. 131 0
      bootscripts/lfs/init.d/checkfs
  54. 110 0
      bootscripts/lfs/init.d/cleanfs
  55. 109 0
      bootscripts/lfs/init.d/console
  56. 61 0
      bootscripts/lfs/init.d/consolelog
  57. 769 0
      bootscripts/lfs/init.d/functions
  58. 28 0
      bootscripts/lfs/init.d/halt
  59. 54 0
      bootscripts/lfs/init.d/localnet
  60. 72 0
      bootscripts/lfs/init.d/modules
  61. 54 0
      bootscripts/lfs/init.d/mountfs
  62. 44 0
      bootscripts/lfs/init.d/mountkernfs
  63. 73 0
      bootscripts/lfs/init.d/network
  64. 99 0
      bootscripts/lfs/init.d/rc
  65. 31 0
      bootscripts/lfs/init.d/reboot
  66. 52 0
      bootscripts/lfs/init.d/sendsignals
  67. 49 0
      bootscripts/lfs/init.d/setclock
  68. 50 0
      bootscripts/lfs/init.d/swap
  69. 39 0
      bootscripts/lfs/init.d/sysctl
  70. 57 0
      bootscripts/lfs/init.d/sysklogd
  71. 50 0
      bootscripts/lfs/init.d/template
  72. 77 0
      bootscripts/lfs/init.d/udev
  73. 45 0
      bootscripts/lfs/init.d/udev_retry
  74. 28 0
      bootscripts/lfs/sysconfig/createfiles
  75. 18 0
      bootscripts/lfs/sysconfig/modules
  76. 95 0
      bootscripts/lfs/sysconfig/network-devices/ifdown
  77. 89 0
      bootscripts/lfs/sysconfig/network-devices/ifup
  78. 82 0
      bootscripts/lfs/sysconfig/network-devices/services/ipv4-static
  79. 97 0
      bootscripts/lfs/sysconfig/network-devices/services/ipv4-static-route
  80. 18 0
      bootscripts/lfs/sysconfig/rc
  81. 394 6
      chapter01/changelog.xml
  82. 93 19
      chapter01/whatsnew.xml
  83. 1 1
      chapter02/creatingfilesystem.xml
  84. 21 3
      chapter03/packages.xml
  85. 66 11
      chapter03/patches.xml
  86. 3 3
      chapter05/chapter05.xml
  87. 6 0
      chapter05/coreutils.xml
  88. 6 2
      chapter05/expect.xml
  89. 22 14
      chapter05/gcc-pass1.xml
  90. 8 0
      chapter05/gcc-pass2.xml
  91. 7 24
      chapter05/glibc.xml
  92. 84 0
      chapter05/gmp.xml
  93. 72 0
      chapter05/mpfr.xml
  94. 12 12
      chapter05/tcl.xml
  95. 22 2
      chapter05/util-linux-ng.xml
  96. 1 1
      chapter06/autoconf.xml
  97. 1 1
      chapter06/automake.xml
  98. 12 0
      chapter06/binutils.xml
  99. 1 1
      chapter06/bison.xml
  100. 3 1
      chapter06/chapter06.xml

+ 13 - 6
Makefile

@@ -12,7 +12,7 @@ else
   Q = @
 endif
 
-lfs: validxml profile-html
+lfs: maketar validxml profile-html
 	@echo "Generating chunked XHTML files..."
 	$(Q)xsltproc --nonet -stringparam chunk.quietly $(CHUNK_QUIET) \
 	  -stringparam rootid "$(ROOT_ID)" -stringparam base.dir $(BASEDIR)/ \
@@ -67,7 +67,7 @@ nochunks: validxml profile-html
 	@echo "Running Tidy..."
 	$(Q)tidy -config tidy.conf $(BASEDIR)/$(NOCHUNKS_OUTPUT) || true
 	@echo "Running obfuscate.sh..."
-	$(Q)sh obfuscate.sh $(BASEDIR)/$(NOCHUNKS_OUTPUT)
+	$(Q)bash obfuscate.sh $(BASEDIR)/$(NOCHUNKS_OUTPUT)
 	$(Q)sed -i -e "s@text/html@application/xhtml+xml@g"  \
 	  $(BASEDIR)/$(NOCHUNKS_OUTPUT)
 
@@ -78,9 +78,17 @@ tmpdir:
 	$(Q)rm -f $(RENDERTMP)/lfs-pdf.fo
 
 validxml: tmpdir
+	@echo "Processing bootscripts..."
+	$(Q)bash process-scripts.sh $(RENDERTMP)
 	@echo "Validating the book..."
 	$(Q)xmllint --nonet --noent --xinclude --postvalid \
 	  -o $(RENDERTMP)/lfs-full.xml index.xml
+	$(Q)rm -f appendices/*.script
+	$(Q)sh aux-file-data.sh $(RENDERTMP)/lfs-full.xml
+
+maketar:
+	@echo "Making tarballs..."
+	$(Q)sh make-aux-files.sh $(RENDERTMP)
 
 profile-html: validxml
 	@echo "Generating profiled XML for XHTML..."
@@ -99,11 +107,10 @@ dump-commands: validxml
 	$(Q)xsltproc --output $(DUMPDIR)/ \
 	   stylesheets/dump-commands.xsl $(RENDERTMP)/lfs-full.xml
 
-validate:
-	@echo "Validating the book..."
-	$(Q)xmllint --noout --nonet --xinclude --postvalid index.xml
+validate: maketar validxml
+	@echo "Validation complete."
 
 all: lfs nochunks pdf dump-commands
 
 .PHONY : all dump-commands lfs nochunks pdf profile-html tmpdir validate \
-	 validxml wget-list
+	 validxml wget-list maketar

+ 6 - 1
appendices/acknowledgments.xml

@@ -61,7 +61,7 @@
     <listitem>
       <para><ulink url="mailto:randy@linuxfromscratch.org">Randy
       McMurchy</ulink> &lt;randy@linuxfromscratch.org&gt; &ndash; BLFS
-      Project Leader</para>
+      Project Leader, LFS Editor</para>
     </listitem>
 
     <listitem>
@@ -70,6 +70,11 @@
       BLFS Editor</para>
     </listitem>
 
+    <listitem>
+      <para><ulink url="mailto:dj@linuxfromscratch.org">DJ Lucas</ulink>
+      &lt;dj@linuxfromscratch.org&gt; &ndash; LFS and BLFS Editor</para>
+    </listitem>
+
     <listitem>
       <para><ulink url="mailto:ken@linuxfromscratch.org">Ken Moffat</ulink>
       &lt;ken@linuxfromscratch.org&gt; &ndash; LFS and CLFS Editor</para>

+ 403 - 0
appendices/creat-comm.xml

@@ -0,0 +1,403 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+   "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+  <!ENTITY % general-entities SYSTEM "../general.ent">
+  %general-entities;
+]>
+
+<sect1 id="CC" xreflabel="Creative Commons License">
+  <?dbhtml filename="creat-comm.html"?>
+
+  <title>Creative Commons License</title>
+
+  <para role='title'>Creative Commons Legal Code</para>
+
+  <para role='title'>Attribution-NonCommercial-ShareAlike 2.0</para>
+
+  <important>
+    <para>CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT
+    PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
+    ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN
+    "AS-IS" BASIS.  CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION
+    PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS
+    USE.</para>
+  </important>
+
+  <para role='title'>License</para>
+
+  <para>THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
+  COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
+  COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
+  AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.</para>
+
+  <para>BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE
+  BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS
+  CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
+  CONDITIONS.</para>
+
+  <orderedlist>
+    <?dbfo label-width="1.5em"?>
+    <listitem>
+      <para>Definitions</para>
+
+      <orderedlist>
+        <listitem>
+          <para>"Collective Work" means a work, such as a periodical issue, anthology or
+          encyclopedia, in which the Work in its entirety in unmodified form, along
+          with a number of other contributions, constituting separate and independent
+          works in themselves, are assembled into a collective whole. A work that
+          constitutes a Collective Work will not be considered a Derivative Work (as
+          defined below) for the purposes of this License.</para>
+        </listitem>
+
+        <listitem>
+          <para>"Derivative Work" means a work based upon the Work or upon
+          the Work and other pre-existing works, such as a translation, musical
+          arrangement, dramatization, fictionalization, motion picture version, sound
+          recording, art reproduction, abridgment, condensation, or any other form in
+          which the Work may be recast, transformed, or adapted, except that a work
+          that constitutes a Collective Work will not be considered a Derivative Work
+          for the purpose of this License. For the avoidance of doubt, where the Work
+          is a musical composition or sound recording, the synchronization of the Work
+          in timed-relation with a moving image ("synching") will be considered a
+          Derivative Work for the purpose of this License.</para>
+        </listitem>
+
+        <listitem>
+          <para>"Licensor" means the individual or entity that offers the
+          Work under the terms of this License.</para>
+        </listitem>
+
+        <listitem>
+          <para>"Original Author" means the individual or entity who created
+          the Work.</para>
+        </listitem>
+
+        <listitem>
+          <para>"Work" means the copyrightable work of authorship offered
+          under the terms of this License.</para>
+        </listitem>
+
+        <listitem>
+          <para>"You" means an individual or entity exercising rights under
+          this License who has not previously violated the terms of this License with
+          respect to the Work, or who has received express permission from the
+          Licensor to exercise rights under this License despite a previous
+          violation.</para>
+        </listitem>
+
+        <listitem>
+          <para>"License Elements" means the following high-level license
+          attributes as selected by Licensor and indicated in the title of this
+          License: Attribution, Noncommercial, ShareAlike.</para>
+        </listitem>
+
+      </orderedlist>
+    </listitem>
+
+    <listitem>
+      <para>Fair Use Rights. Nothing in this license is intended to reduce,
+      limit, or restrict any rights arising from fair use, first sale or other
+      limitations on the exclusive rights of the copyright owner under copyright law
+      or other applicable laws.</para>
+    </listitem>
+
+
+    <listitem>
+      <para>License Grant. Subject to the terms and conditions of this
+      License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
+      perpetual (for the duration of the applicable copyright) license to exercise
+      the rights in the Work as stated below:</para>
+
+      <orderedlist>
+
+        <listitem>
+          <para>to reproduce the Work, to incorporate the Work into one or
+          more Collective Works, and to reproduce the Work as incorporated in the
+          Collective Works;</para>
+        </listitem>
+
+        <listitem>
+          <para>to create and reproduce Derivative Works;</para>
+        </listitem>
+
+        <listitem>
+          <para>to distribute copies or phonorecords of, display publicly,
+          perform publicly, and perform publicly by means of a digital audio
+          transmission the Work including as incorporated in Collective
+          Works;</para>
+        </listitem>
+
+        <listitem>
+          <para>to distribute copies or phonorecords of, display publicly,
+          perform publicly, and perform publicly by means of a digital audio
+          transmission Derivative Works;</para>
+        </listitem>
+
+      </orderedlist>
+
+      <para>The above rights may be exercised in all media and formats whether now
+      known or hereafter devised. The above rights include the right to make such
+      modifications as are technically necessary to exercise the rights in other
+      media and formats. All rights not expressly granted by Licensor are hereby
+      reserved, including but not limited to the rights set forth in Sections 4(e)
+      and 4(f).</para>
+    </listitem>
+
+    <listitem>
+      <para>Restrictions.The license granted in Section 3 above is
+      expressly made subject to and limited by the following
+      restrictions:</para>
+
+      <orderedlist>
+
+        <listitem>
+          <para>You may distribute, publicly display, publicly perform, or
+          publicly digitally perform the Work only under the terms of this License, and
+          You must include a copy of, or the Uniform Resource Identifier for, this
+          License with every copy or phonorecord of the Work You distribute, publicly
+          display, publicly perform, or publicly digitally perform. You may not offer
+          or impose any terms on the Work that alter or restrict the terms of this
+          License or the recipients' exercise of the rights granted hereunder. You may
+          not sublicense the Work. You must keep intact all notices that refer to this
+          License and to the disclaimer of warranties. You may not distribute, publicly
+          display, publicly perform, or publicly digitally perform the Work with any
+          technological measures that control access or use of the Work in a manner
+          inconsistent with the terms of this License Agreement. The above applies to
+          the Work as incorporated in a Collective Work, but this does not require the
+          Collective Work apart from the Work itself to be made subject to the terms of
+          this License. If You create a Collective Work, upon notice from any Licensor
+          You must, to the extent practicable, remove from the Collective Work any
+          reference to such Licensor or the Original Author, as requested. If You
+          create a Derivative Work, upon notice from any Licensor You must, to the
+          extent practicable, remove from the Derivative Work any reference to such
+          Licensor or the Original Author, as requested.</para>
+        </listitem>
+
+        <listitem>
+          <para>You may distribute, publicly display, publicly perform, or
+          publicly digitally perform a Derivative Work only under the terms of this
+          License, a later version of this License with the same License Elements as
+          this License, or a Creative Commons iCommons license that contains the same
+          License Elements as this License (e.g. Attribution-NonCommercial-ShareAlike
+          2.0 Japan). You must include a copy of, or the Uniform Resource Identifier
+          for, this License or other license specified in the previous sentence with
+          every copy or phonorecord of each Derivative Work You distribute, publicly
+          display, publicly perform, or publicly digitally perform. You may not offer
+          or impose any terms on the Derivative Works that alter or restrict the terms
+          of this License or the recipients' exercise of the rights granted hereunder,
+          and You must keep intact all notices that refer to this License and to the
+          disclaimer of warranties. You may not distribute, publicly display, publicly
+          perform, or publicly digitally perform the Derivative Work with any
+          technological measures that control access or use of the Work in a manner
+          inconsistent with the terms of this License Agreement. The above applies to
+          the Derivative Work as incorporated in a Collective Work, but this does not
+          require the Collective Work apart from the Derivative Work itself to be made
+          subject to the terms of this License.</para>
+        </listitem>
+
+        <listitem>
+          <para>You may not exercise any of the rights granted to You in
+          Section 3 above in any manner that is primarily intended for or directed
+          toward commercial advantage or private monetary compensation. The exchange of
+          the Work for other copyrighted works by means of digital file-sharing or
+          otherwise shall not be considered to be intended for or directed toward
+          commercial advantage or private monetary compensation, provided there is no
+          payment of any monetary compensation in connection with the exchange of
+          copyrighted works.</para>
+        </listitem>
+
+        <listitem>
+          <para>If you distribute, publicly display, publicly perform, or
+          publicly digitally perform the Work or any Derivative Works or Collective
+          Works, You must keep intact all copyright notices for the Work and give the
+          Original Author credit reasonable to the medium or means You are utilizing by
+          conveying the name (or pseudonym if applicable) of the Original Author if
+          supplied; the title of the Work if supplied; to the extent reasonably
+          practicable, the Uniform Resource Identifier, if any, that Licensor specifies
+          to be associated with the Work, unless such URI does not refer to the
+          copyright notice or licensing information for the Work; and in the case of a
+          Derivative Work, a credit identifying the use of the Work in the Derivative
+          Work (e.g., "French translation of the Work by Original Author," or
+          "Screenplay based on original Work by Original Author"). Such credit may be
+          implemented in any reasonable manner; provided, however, that in the case of
+          a Derivative Work or Collective Work, at a minimum such credit will appear
+          where any other comparable authorship credit appears and in a manner at least
+          as prominent as such other comparable authorship credit.</para>
+        </listitem>
+
+
+        <listitem>
+          <para>For the avoidance of doubt, where the Work is a musical
+          composition:</para>
+
+          <orderedlist>
+
+            <listitem>
+              <para>Performance Royalties Under Blanket Licenses. Licensor
+              reserves the exclusive right to collect, whether individually or via a
+              performance rights society (e.g. ASCAP, BMI, SESAC), royalties for the
+              public performance or public digital performance (e.g. webcast) of the
+              Work if that performance is primarily intended for or directed toward
+              commercial advantage or private monetary compensation.</para>
+            </listitem>
+
+            <listitem>
+              <para>Mechanical Rights and Statutory Royalties. Licensor
+              reserves the exclusive right to collect, whether individually or via a
+              music rights agency or designated agent (e.g. Harry Fox Agency),
+              royalties    for any phonorecord You create from the Work ("cover
+              version") and distribute, subject to the compulsory license created
+              by 17 USC Section 115 of the US Copyright Act (or the equivalent in
+              other jurisdictions), if Your distribution of such cover version is primarily
+              intended for or directed toward commercial advantage or private monetary
+              compensation.  6. Webcasting Rights and Statutory Royalties.  For the
+              avoidance of doubt, where the Work is a sound recording, Licensor
+              reserves the exclusive right to collect, whether individually or via a
+              performance-rights society (e.g. SoundExchange), royalties for the public
+              digital performance (e.g. webcast) of the Work, subject to the compulsory
+              license created by 17 USC Section 114 of the US Copyright Act (or the
+              equivalent in other jurisdictions), if Your public digital performance is
+              primarily intended for or directed toward commercial advantage or private
+              monetary compensation.</para>
+            </listitem>
+
+          </orderedlist>
+        </listitem>
+
+        <listitem>
+          <para>Webcasting Rights and Statutory Royalties. For the
+          avoidance of doubt, where the Work is a sound recording, Licensor reserves
+          the exclusive right to collect, whether individually or via a
+          performance-rights society (e.g.  SoundExchange), royalties for the public
+          digital performance (e.g. webcast) of the Work, subject to the compulsory
+          license created by 17 USC Section 114 of the US Copyright Act (or the
+          equivalent in other jurisdictions), if Your public digital performance is
+          primarily intended for or directed toward commercial advantage or private
+          monetary compensation.</para>
+        </listitem>
+
+      </orderedlist>
+    </listitem>
+
+    <listitem>
+      <para>Representations, Warranties and Disclaimer</para>
+
+      <para>UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
+      OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND
+      CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING,
+      WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A
+      PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS,
+      ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE.
+      SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH
+      EXCLUSION MAY NOT APPLY TO YOU.</para>
+    </listitem>
+
+    <listitem>
+      <para>Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY
+      APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY
+      FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
+      ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN
+      ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</para>
+    </listitem>
+
+    <listitem>
+      <para>Termination</para>
+
+      <orderedlist>
+
+        <listitem>
+          <para>This License and the rights granted hereunder will terminate
+          automatically upon any breach by You of the terms of this License.
+          Individuals or entities who have received Derivative Works or Collective
+          Works from You under this License, however, will not have their licenses
+          terminated provided such individuals or entities remain in full compliance
+          with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any
+          termination of this License.</para>
+        </listitem>
+
+        <listitem>
+          <para>Subject to the above terms and conditions, the license
+          granted here is perpetual (for the duration of the applicable copyright in
+          the Work).  Notwithstanding the above, Licensor reserves the right to release
+          the Work under different license terms or to stop distributing the Work at
+          any time; provided, however that any such election will not serve to withdraw
+          this License (or any other license that has been, or is required to be,
+          granted under the terms of this License), and this License will continue in
+          full force and effect unless terminated as stated above.</para>
+        </listitem>
+
+      </orderedlist>
+    </listitem>
+
+    <listitem>
+      <para>Miscellaneous</para>
+
+      <orderedlist>
+
+        <listitem>
+          <para>Each time You distribute or publicly digitally perform the
+          Work or a Collective Work, the Licensor offers to the recipient a license to
+          the Work on the same terms and conditions as the license granted to You under
+          this License.</para>
+        </listitem>
+
+        <listitem>
+          <para>Each time You distribute or publicly digitally perform a
+          Derivative Work, Licensor offers to the recipient a license to the original
+          Work on the same terms and conditions as the license granted to You under
+          this License.</para>
+        </listitem>
+
+        <listitem>
+          <para>If any provision of this License is invalid or unenforceable
+          under applicable law, it shall not affect the validity or enforceability of
+          the remainder of the terms of this License, and without further action by the
+          parties to this agreement, such provision shall be reformed to the minimum
+          extent necessary to make such provision valid and
+          enforceable.</para>
+        </listitem>
+
+        <listitem>
+          <para>No term or provision of this License shall be deemed waived
+          and no breach consented to unless such waiver or consent shall be in writing
+          and signed by the party to be charged with such waiver or
+          consent.</para>
+        </listitem>
+
+        <listitem>
+          <para>This License constitutes the entire agreement between the
+          parties with respect to the Work licensed here. There are no understandings,
+          agreements or representations with respect to the Work not specified here.
+          Licensor shall not be bound by any additional provisions that may appear in
+          any communication from You. This License may not be modified without the
+          mutual written agreement of the Licensor and You.</para>
+        </listitem>
+
+
+      </orderedlist>
+    </listitem>
+  </orderedlist>
+
+  <important>
+    <para>Creative Commons is not a party to this License, and makes no warranty
+    whatsoever in connection with the Work. Creative Commons will not be liable to
+    You or any party on any legal theory for any damages whatsoever, including
+    without limitation any general, special, incidental or consequential damages
+    arising in connection to this license. Notwithstanding the foregoing two (2)
+    sentences, if Creative Commons has expressly identified itself as the Licensor
+    hereunder, it shall have all rights and obligations of Licensor.</para>
+
+    <para>Except for the limited purpose of indicating to the public that the Work is
+    licensed under the CCPL, neither party will use the trademark "Creative
+    Commons" or any related trademark or logo of Creative Commons without the prior
+    written consent of Creative Commons. Any permitted use will be in compliance
+    with Creative Commons' then-current trademark usage guidelines, as may be
+    published on its website or otherwise made available upon request from time to
+    time.</para>
+
+    <para>Creative Commons may be contacted at <ulink url='http://creativecommons.org/' />.</para>
+  </important>
+
+
+</sect1>

+ 4 - 3
appendices/dependencies.xml

@@ -486,7 +486,8 @@
 
         <seglistitem>
          <seg>Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, GCC,
-         Gettext, Glibc, Grep, Make, Patch, Perl, Sed, Tar, and Texinfo</seg>
+         Gettext, Glibc, GMP (Chapter 6), Grep, M4 (Chapter 5), Make,
+         MPFR (Chapter 6), Patch, Perl, Sed, Tar, and Texinfo</seg>
         </seglistitem>
       </segmentedlist>
 
@@ -1072,7 +1073,7 @@
 
         <seglistitem>
          <seg>Bash, Berkeley DB, Binutils, Coreutils, Gawk, GCC, Glibc, Grep,
-         Groff, Make, and Sed</seg>
+         Groff, Make, Sed, and Zlib</seg>
         </seglistitem>
       </segmentedlist>
 
@@ -1475,7 +1476,7 @@
         <segtitle>&before;</segtitle>
 
         <seglistitem>
-          <seg>File, Module-Init-Tools, and Util-Linux</seg>
+          <seg>File, Module-Init-Tools, Perl, and Util-Linux</seg>
         </seglistitem>
       </segmentedlist>
 

+ 25 - 0
appendices/license.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+  <!ENTITY % general-entities SYSTEM "../general.ent">
+  %general-entities;
+]>
+
+<appendix id="Licenses" xreflabel="Appendix E">
+  <?dbhtml dir="appendices"?>
+  <?dbhtml filename="licenses.html"?>
+
+  <title>LFS Licenses</title>
+
+	<para>This book is licensed under the Creative Commons
+	Attribution-NonCommercial-ShareAlike 2.0 License.</para>
+
+	<para>Computer instructions may be extracted from the book under the MIT
+	License.</para>
+
+	
+	<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="creat-comm.xml"/>
+	<xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="mit-lic.xml"/>
+
+
+</appendix>

+ 33 - 0
appendices/mit-lic.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+   "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+  <!ENTITY % general-entities SYSTEM "../general.ent">
+  %general-entities;
+]>
+
+<sect1 id="MIT" xreflabel="MIT License">
+  <?dbhtml filename="mit.html" ?>
+
+  <title>The MIT License</title>
+
+  <para>Copyright &copy; &copyrightdate; Gerard Beekmans</para>
+
+  <para>Permission is hereby granted, free of charge, to any person obtaining a copy
+	of this software and associated documentation files (the "Software"), to deal
+	in the Software without restriction, including without limitation the rights
+	to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+	copies of the Software, and to permit persons to whom the Software is
+	furnished to do so, subject to the following conditions:</para>
+
+  <para>The above copyright notice and this permission notice shall be included in
+	all copies or substantial portions of the Software.</para>
+
+  <para>HE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+	IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+	FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+	AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+	LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+	OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+	THE SOFTWARE.</para>
+
+</sect1>

+ 195 - 0
appendices/scripts.xml

@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+  <!ENTITY % general-entities SYSTEM "../general.ent">
+  <!ENTITY checkfs            SYSTEM "checkfs.script"> 
+  <!ENTITY cleanfs            SYSTEM "cleanfs.script"> 
+  <!ENTITY console            SYSTEM "console.script"> 
+  <!ENTITY functions          SYSTEM "functions.script"> 
+  <!ENTITY consolelog         SYSTEM "consolelog.script"> 
+  <!ENTITY halt               SYSTEM "halt.script"> 
+  <!ENTITY localnet           SYSTEM "localnet.script"> 
+  <!ENTITY modules            SYSTEM "modules.script"> 
+  <!ENTITY mountfs            SYSTEM "mountfs.script"> 
+  <!ENTITY mountkernfs        SYSTEM "mountkernfs.script"> 
+  <!ENTITY network            SYSTEM "network.script"> 
+  <!ENTITY reboot             SYSTEM "reboot.script"> 
+  <!ENTITY rc                 SYSTEM "rc.script"> 
+  <!ENTITY sendsignals        SYSTEM "sendsignals.script"> 
+  <!ENTITY setclock           SYSTEM "setclock.script"> 
+  <!ENTITY swap               SYSTEM "swap.script"> 
+  <!ENTITY sysctl             SYSTEM "sysctl.script"> 
+  <!ENTITY sysklogd           SYSTEM "sysklogd.script"> 
+  <!ENTITY template           SYSTEM "template.script"> 
+  <!ENTITY udev               SYSTEM "udev.script"> 
+  <!ENTITY udev_retry         SYSTEM "udev_retry.script"> 
+  <!ENTITY createfiles        SYSTEM "createfiles.script"> 
+  <!ENTITY modules_sys        SYSTEM "modules-sysinit.script"> 
+  <!ENTITY rc_sys             SYSTEM "rc-sysinit.script"> 
+  <!ENTITY ifup               SYSTEM "ifup.script"> 
+  <!ENTITY ifdown             SYSTEM "ifdown.script"> 
+  <!ENTITY ipv4_static        SYSTEM "ipv4-static.script"> 
+  <!ENTITY ipv4_static_route  SYSTEM "ipv4-static-route.script"> 
+  %general-entities;
+]>
+
+<appendix id="scripts" xreflabel="Appendix D">
+  <?dbhtml dir="scripts"?>
+  <?dbhtml filename="scripts.html"?>
+
+  <title>Boot and sysconfig scripts version-&lfs-bootscripts-version;</title>
+
+	<para>The scripts in this appendix are listed by the directory where they
+	normally reside.  The order is <filename
+	class='directory'>/etc/rc.d/init.d</filename>, <filename
+	class='directory'>/etc/sysconfig</filename>, <filename
+	class='directory'>/etc/sysconfig/network-devices</filename>, and <filename
+	class='directory'>/etc/sysconfig/network-devices/services</filename>.  Within
+	each section, the files are listed in the order they are normally called.
+	</para>
+
+  <sect1 id="rc" role="wrap">
+    <title>/etc/rc.d/init.d/rc</title>
+
+    <para>The <systemitem>rc</systemitem> script is the first script called by 
+    <application>init</application> and initiates the boot process.</para>
+
+    <screen>&rc;</screen> 
+  </sect1>
+
+  <sect1 id="functions" role="wrap">
+    <title>/etc/rc.d/init.d/functions</title>
+    <screen>&functions;</screen> 
+  </sect1>
+
+  <sect1 id="mountkernfs" role="wrap">
+    <title>/etc/rc.d/init.d/mountkernfs</title>
+    <screen>&mountkernfs;</screen> 
+  </sect1>
+
+  <sect1 id="consolelog" role="wrap">
+    <title>/etc/rc.d/init.d/consolelog</title>
+    <screen>&consolelog;</screen> 
+  </sect1>
+
+  <sect1 id="modules" role="wrap">
+    <title>/etc/rc.d/init.d/modules</title>
+    <screen>&modules;</screen> 
+  </sect1>
+
+  <sect1 id="udev" role="wrap">
+    <title>/etc/rc.d/init.d/udev</title>
+    <screen>&udev;</screen> 
+  </sect1>
+
+  <sect1 id="swap" role="wrap">
+    <title>/etc/rc.d/init.d/swap</title>
+    <screen>&swap;</screen> 
+  </sect1>
+
+  <sect1 id="setclock" role="wrap">
+    <title>/etc/rc.d/init.d/setclock</title>
+    <screen>&setclock;</screen> 
+  </sect1>
+
+  <sect1 id="checkfs" role="wrap">
+    <title>/etc/rc.d/init.d/checkfs</title>
+    <screen>&checkfs;</screen> 
+  </sect1>
+
+  <sect1 id="mountfs" role="wrap">
+    <title>/etc/rc.d/init.d/mountfs</title>
+    <screen>&mountfs;</screen> 
+  </sect1>
+
+  <sect1 id="udev_retry" role="wrap">
+    <title>/etc/rc.d/init.d/udev_retry</title>
+    <screen>&udev_retry;</screen> 
+  </sect1>
+
+  <sect1 id="cleanfs" role="wrap">
+    <title>/etc/rc.d/init.d/cleanfs</title>
+    <screen>&cleanfs;</screen> 
+  </sect1>
+
+  <sect1 id="console" role="wrap">
+    <title>/etc/rc.d/init.d/console</title>
+    <screen>&console;</screen> 
+  </sect1>
+
+  <sect1 id="localnet" role="wrap">
+    <title>/etc/rc.d/init.d/localnet</title>
+    <screen>&localnet;</screen> 
+  </sect1>
+
+  <sect1 id="sysctlscript" role="wrap">
+    <title>/etc/rc.d/init.d/sysctl</title>
+    <screen>&sysctl;</screen> 
+  </sect1>
+
+  <sect1 id="sysklogd" role="wrap">
+    <title>/etc/rc.d/init.d/sysklogd</title>
+    <screen>&sysklogd;</screen> 
+  </sect1>
+
+  <sect1 id="network" role="wrap">
+    <title>/etc/rc.d/init.d/network</title>
+    <screen>&network;</screen> 
+  </sect1>
+
+  <sect1 id="sendsignals" role="wrap">
+    <title>/etc/rc.d/init.d/sendsignals</title>
+    <screen>&sendsignals;</screen> 
+  </sect1>
+
+  <sect1 id="rebootscript" role="wrap">
+    <title>/etc/rc.d/init.d/reboot</title>
+    <screen>&reboot;</screen> 
+  </sect1>
+
+  <sect1 id="haltscript" role="wrap">
+    <title>/etc/rc.d/init.d/halt</title>
+    <screen>&halt;</screen> 
+  </sect1>
+
+  <sect1 id="template" role="wrap">
+    <title>/etc/rc.d/init.d/template</title>
+    <screen>&template;</screen> 
+  </sect1>
+
+  <sect1 id="rcsys" role="wrap">
+    <title>/etc/sysconfig/rc</title>
+    <screen>&rc_sys;</screen> 
+  </sect1>
+
+  <sect1 id="modulessys" role="wrap">
+    <title>/etc/sysconfig/modules</title>
+    <screen>&modules_sys;</screen> 
+  </sect1>
+
+  <sect1 id="createfiles" role="wrap">
+    <title>/etc/sysconfig/createfiles</title>
+    <screen>&createfiles;</screen> 
+  </sect1>
+
+  <sect1 id="ifup" role="wrap">
+    <title>/etc/sysconfig/network-devices/ifup</title>
+    <screen>&ifup;</screen> 
+  </sect1>
+
+  <sect1 id="ifdown" role="wrap">
+    <title>/etc/sysconfig/network-devices/ifdown</title>
+    <screen>&ifdown;</screen> 
+  </sect1>
+
+  <sect1 id="ipv4static" role="wrap">
+    <title>/etc/sysconfig/network-devices/services/ipv4-static</title>
+    <screen>&ipv4_static;</screen> 
+  </sect1>
+
+  <sect1 id="ipv4route" role="wrap">
+    <title>/etc/sysconfig/network-devices/services/ipv4-static-route</title>
+    <screen>&ipv4_static_route;</screen> 
+  </sect1>
+
+</appendix>

+ 30 - 0
appendices/udev-rules.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+  <!ENTITY % general-entities SYSTEM "../general.ent">
+  <!ENTITY lfs-rules   SYSTEM "55-lfs.rules.script"> 
+  <!ENTITY cdrom-rules SYSTEM "61-cdrom.rules.script"> 
+  %general-entities;
+]>
+
+<appendix id="rules" xreflabel="Appendix E">
+  <?dbhtml dir="scripts"?>
+  <?dbhtml filename="udev-rules.html"?>
+
+  <title>Udev configuration rules</title>
+
+	<para>The rules from &udev-config;.tar.bz2 in this appendix are listed for
+	convenience.  Installation is normally done via instructions in <xref
+	linkend='ch-system-udev'/>.  </para>
+
+  <sect1 id="lfsrules" role="wrap">
+    <title>55-lfs.rules</title>
+    <screen>&lfs-rules;</screen> 
+  </sect1>
+
+  <sect1 id="cdromrules" role="wrap">
+    <title>61-cdrom.rules</title>
+    <screen>&cdrom-rules;</screen> 
+  </sect1>
+
+</appendix>

+ 38 - 0
aux-file-data.sh

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

+ 927 - 0
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
+

+ 29 - 0
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.
+

+ 134 - 0
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
+

+ 79 - 0
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.

+ 42 - 0
bootscripts/contrib/lsb-v3/ChangeLog

@@ -0,0 +1,42 @@
+ChangeLog
+20080908 - [dj] * Corrected echo command in rc script - Thanks to 
+                  Michael Tremer at IPFire.
+
+20080907 - [dj] * Use new initd-tools package to activate scripts.
+                * $syslog and modules services cannot be a hard dependencies
+                  due to minimal install target.
+                * Store bootlog date in UTC.
+                * Added hard deps to network script for local_fs, swap, and
+                  localnet (account for /usr at network instead of $remote_fs).
+
+20080831 - [dj] * Corrected more, and minimized dependencies in scripts.
+                * Don't try to write to bootlog in 0 and 6.
+                * Use /etc/rcS.d instead of /etc/rcsysinit.d - added
+                  replacement /etc/inittab file
+
+20080830 - [dj] * Corrected remaining dependency errors in script headers.
+
+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

+ 31 - 0
bootscripts/contrib/lsb-v3/INSTALL

@@ -0,0 +1,31 @@
+LSB-V3 Installation:
+
+NOTE:  initd-tools must be installed prior to installation of these scripts.
+
+initd-tools installation:
+
+Download initd-tools from: 
+http://www.dwcab.com/downloads/initd-tools/initd-tools-0.1.2.tar.gz
+
+        ./configure &&
+        make &&
+        make check &&
+        make install
+    
+Inline installation of lsb-v3 bootscripts:
+        sudo make install
+
+After LFS installation of lsb-v3 bootscripts:
+        for file in /etc/rc.d /etc/sysconfig/rc /etc/sysconfig/modules \
+            /etc/sysconfig/createfiles
+        do
+            mv $file $file.bak
+        done &&
+        make install
+
+There is no longer an upgrade path for existing installations. You will have
+to reinstall any bootscripts installed by BLFS or any self written scripts.
+Fortunately, this will soon be very easy for BLFS scripts as a contrib 
+directory containing lsb-v3 scripts will be added in the near future.
+
+That's it!

+ 115 - 0
bootscripts/contrib/lsb-v3/Makefile

@@ -0,0 +1,115 @@
+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}/rcS.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/
+	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
+	if [ -f   ${EXTDIR}/inittab               ]; then install -m ${CONFMODE} ${EXTDIR}/inittab     ${EXTDIR}/inittab.bak; fi
+	install                   -m ${CONFMODE} etc/inittab ${EXTDIR}/
+	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/
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/checkfs
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/cleanfs
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/halt
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/console
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/localnet
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/modules
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/mountfs
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/mountkernfs
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/network
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/reboot
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/sendsignals
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/setclock
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/sysklogd
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/swap
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/sysctl
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/udev
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/udev_retry
+
+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/
+	if [ ! -f ${EXTDIR}/sysconfig/rc          ]; then install -m ${CONFMODE} sysconfig/rc          ${EXTDIR}/sysconfig/; fi
+	if [ -f   ${EXTDIR}/inittab               ]; then install -m ${CONFMODE} ${EXTDIR}/inittab     ${EXTDIR}/inittab.bak; fi
+	install                   -m ${CONFMODE} etc/inittab ${EXTDIR}/
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/checkfs
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/cleanfs
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/halt
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/localnet
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/mountfs
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/mountkernfs
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/reboot
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/sendsignals
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/setclock
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/swap
+	/usr/lib/lsb/install_initd ${EXTDIR}/init.d/udev
+
+.PHONY: all create-dirs create-service-dir create-boottemp-dir \
+	install minimal 
+

+ 93 - 0
bootscripts/contrib/lsb-v3/README

@@ -0,0 +1,93 @@
+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-05-31).  As is
+usually the case with a rewrite, there have been many changes:
+
+AS OF 20080907, THESE SCRIPTS REQUIRE THE NEW initd-tools PACKAGE.
+Dan Nicholson has recently released an initd-tools package that contain 
+LSB compliant install_initd and remove_initd programs written in C.
+See the INSTALL file for installation instructions.
+
+LSB Version 3.2 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.
+
+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.
+
+Path changes - 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.
+I've also removed the rcsysinit.d directory and replaced it with rcS.d.
+
+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.  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
+

+ 26 - 0
bootscripts/contrib/lsb-v3/etc/inittab

@@ -0,0 +1,26 @@
+# Begin /etc/inittab
+
+id:3:initdefault:
+
+si::sysinit:/etc/init.d/rc S
+
+l0:0:wait:/etc/init.d/rc 0
+l1:S1:wait:/etc/init.d/rc 1
+l2:2:wait:/etc/init.d/rc 2
+l3:3:wait:/etc/init.d/rc 3
+l4:4:wait:/etc/init.d/rc 4
+l5:5:wait:/etc/init.d/rc 5
+l6:6:wait:/etc/init.d/rc 6
+
+ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
+
+su:S016:once:/sbin/sulogin
+
+1:2345:respawn:/sbin/agetty tty1 9600
+2:2345:respawn:/sbin/agetty tty2 9600
+3:2345:respawn:/sbin/agetty tty3 9600
+4:2345:respawn:/sbin/agetty tty4 9600
+5:2345:respawn:/sbin/agetty tty5 9600
+6:2345:respawn:/sbin/agetty tty6 9600
+
+# End /etc/inittab

+ 8 - 0
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
+

+ 105 - 0
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:
+# Required-Stop:
+# Should-Stop:
+# Default-Start:       S
+# 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

+ 113 - 0
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:       S
+# Default-Stop:        
+# Short-Description:   Cleans temporary directories early in the boot process.
+# Description:         Cleans temporary directories /var/run, /var/lock, and
+#                      /tmp.  cleanfs also creates /var/run/utmp and any files 
+#                      defined in /etc/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

+ 111 - 0
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:       S
+# 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

+ 32 - 0
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:
+# 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

+ 214 - 0
bootscripts/contrib/lsb-v3/init.d/lfs-functions

@@ -0,0 +1,214 @@
+# 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
+}
+

+ 84 - 0
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:
+# Should-Stop:
+# Default-Start:       S
+# Default-Stop:        0 6
+# 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

+ 99 - 0
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 sysctl
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start:       S
+# 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

+ 60 - 0
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:
+# Required-Stop:       swap
+# Should-Stop:
+# Default-Start:       S
+# Default-Stop:        0 6
+# Short-Description:   Mounts/unmounts local filesystems defined in /etc/fstab.
+# Description:         Remounts root filesystem read/write and mounts all
+#                      remaining local filesystems defined in /etc/fstab on
+#                      start.  Remounts 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

+ 45 - 0
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:       S
+# 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

+ 73 - 0
bootscripts/contrib/lsb-v3/init.d/network

@@ -0,0 +1,73 @@
+#!/bin/sh
+# Begin /etc/init.d/network
+
+### BEGIN INIT INFO
+# Provides:            $network
+# Required-Start:      $local_fs swap localnet
+# Should-Start:        $syslog
+# Required-Stop:       $local_fs swap localnet 
+# Should-Stop:         $syslog
+# 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

+ 196 - 0
bootscripts/contrib/lsb-v3/init.d/rc

@@ -0,0 +1,196 @@
+#!/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 (S) 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}" = "S" -a "${TEMPFS_MOUNT}" != "" ]; then
+    mount -n -t tmpfs tmpfs "${TEMPFS_MOUNT}" -o mode=600
+fi
+
+# Provide an interactive prompt (if requested)
+if [ "${runlevel}" = "S" -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 -e "${WARNING}${RC_BASE}/rc${runlevel}.d does not exist."
+    echo -e "${NORMAL}"
+    exit 1
+fi
+
+# Source the interactive state file if it exists
+if [ "${runlevel}" != "S" -a -f "${TEMPFS_MOUNT}/.interactive-start" ]; then
+    . "${TEMPFS_MOUNT}/.interactive-start"
+fi
+
+# Prompt for interactive startup after completing S
+if [ "${interactive}" = "I" -a "${runlevel}" != "S" -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
+        S_start=$RC_BASE/rcS.d/S[0-9][0-9]$script
+
+        if [ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; then
+            if [ ! -f ${prev_start} ] && [ ! -f ${S_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}" != "S" ]; 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"
+    # Don't try and write in 0 and 6, this is a 'boot' log
+    if [ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; then
+        cat "${TEMPFS_MOUNT}/.bootlog" >> /var/log/boot.log
+        rm -f "${TEMPFS_MOUNT}/.bootlog"
+    fi
+fi
+
+# End $RC_BASE/init.d/rc

+ 34 - 0
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:
+# 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

+ 49 - 0
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:       $local_fs swap localnet
+# Should-Stop:
+# Default-Start:
+# Default-Stop:        0 6
+# 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

+ 61 - 0
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:
+# Should-Start:        modules
+# Required-Stop:
+# Should-Stop:         $syslog
+# Default-Start:       S
+# 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:  K46
+# X-LFS-Provided-By:   LFS BLFS
+### 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

+ 57 - 0
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:
+# Should-Start:        modules
+# Required-Stop:       localnet
+# Should-Stop:
+# Default-Start:       S
+# Default-Stop:        0 6
+# 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

+ 41 - 0
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:      mountkernfs
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start:       S
+# 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

+ 71 - 0
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:       $local_fs sendsignals
+# 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

+ 92 - 0
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

+ 81 - 0
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:
+# Should-Start:        modules
+# Required-Stop:
+# Should-Stop:
+# Default-Start:       S
+# 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

+ 51 - 0
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:       S
+# 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

+ 577 - 0
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 -u +"%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 -u +"%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 -u +"%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

+ 306 - 0
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

+ 28 - 0
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

+ 18 - 0
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

+ 93 - 0
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

+ 87 - 0
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

+ 80 - 0
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

+ 92 - 0
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

+ 52 - 0
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

+ 69 - 0
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
+}
+

+ 11 - 0
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

+ 348 - 0
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
+}
+

+ 45 - 0
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

+ 131 - 0
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

+ 110 - 0
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

+ 109 - 0
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

+ 61 - 0
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

+ 769 - 0
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

+ 28 - 0
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

+ 54 - 0
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

+ 72 - 0
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

+ 54 - 0
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

+ 44 - 0
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

+ 73 - 0
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

+ 99 - 0
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

+ 31 - 0
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

+ 52 - 0
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

+ 49 - 0
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

+ 50 - 0
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

+ 39 - 0
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

+ 57 - 0
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

+ 50 - 0
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/

+ 77 - 0
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

+ 45 - 0
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

+ 28 - 0
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

+ 18 - 0
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

+ 95 - 0
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

+ 89 - 0
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

+ 82 - 0
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

+ 97 - 0
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

+ 18 - 0
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

+ 394 - 6
chapter01/changelog.xml

@@ -34,20 +34,408 @@
         </listitem>
       </itemizedlist>
     </listitem>
+
 -->
 
+    <listitem>
+      <para>2008-10-18</para>
+      <itemizedlist>
+        <listitem>
+          <para>[jhuntwork] - Fixed build locations of m4 so that it links against the
+          glibc built in /tools and so that no packages in chapter 6 hard-code references
+          to the temporarly location. Also made m4 a host prerequisite.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+
+
+    <listitem>
+      <para>2008-10-15</para>
+      <itemizedlist>
+        <listitem>
+          <para>[bdubbs] - Added --disable-libssp to glibc Pass 1 in Chapter 5
+          to eliminate a build failure on some systems.</para>
+        </listitem>
+        <listitem>
+          <para>[dj] - Updated to udev-config-20081015.</para>
+        </listitem>
+        <listitem>
+          <para>[dj] - Modified udev instructions following upstream
+          recommendations.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+
+    <listitem>
+      <para>2008-10-13</para>
+      <itemizedlist>
+        <listitem>
+          <para>[randy] - Modified the Chapter 5 instructions so that instead
+          of building the GMP and MPFR packages separately for GCC Pass2, they
+          are built by GCC internally.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added a configure option to the Chapter 6 Gettext
+          instructions so that the documentation is installed in a versioned
+          directory.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+
+    <listitem>
+      <para>2008-10-12</para>
+      <itemizedlist>
+        <listitem>
+          <para>[dj] - Updated to E2fsprogs-1.41.2.</para>
+        </listitem>
+        <listitem>
+          <para>[dj] - Corrected installation prefixes of Iproute2
+          package with DESTDIR and MANDIR paths. Thanks to Steffen Pankratz 
+          for the fix.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Modified the Chapter 6 GMP instructions to include a
+          method for determining all the tests in the test suite passed.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Modified the GCC search for correct headers command
+          to account for the new include-fixed directory.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added a patch to the Chapter 6 Binutils instructions
+          to correct some errors in the test suite.</para>
+        </listitem>
+        <listitem>
+          <para>[dj] - Corrected installation of udev rule files.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Moved the Chapter 6 M4 installation into alphabetical
+          order as it is installed in Chapter 5 now and therefore doesn't need
+          to precede the Bison installation.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Moved the Chapter 5 M4 installation to before GCC
+          Pass1 so that the internal GCC build of GMP will not fail in case
+          M4 doesn't exist on the host. Also updated GCC's dependencies to
+          reflect GMP and MPFR.</para>
+        </listitem>
+        <listitem>
+          <para>[dj] - Changed Chapter 5 GCC Pass 1 build to static.  Thanks to
+          Jeremy Huntwork for the suggestion and supporting text.</para>
+        </listitem>
+        <listitem>
+          <para>[dj] - Added note to Chapter 6 GCC about the new include-fixed
+          directory and changed the sample output to match.</para>
+        </listitem>
+        <listitem>
+          <para>[dj] - Added instruction to keep Chapter 5 Glibc from honoring
+          /etc/ld.so.preload.  Thanks to Alexander Patrakov for the fix.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added descriptions of the configure options used
+          in the GMP instructions and updated the installed library
+          descriptions.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+
+    <listitem>
+      <para>2008-10-11</para>
+      <itemizedlist>
+        <listitem>
+          <para>[dj] - Removed the Chapter 5 Glibc test suite information as
+          it requires a working C++ compiler to run.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added three configure parameters to the Chapter 6
+          Util-linux-ng instructions so that additional programs are
+          installed. Also updated the installed programs list.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added a sed command to the Sysvinit instructions to
+          suppress the installation of the wall program and its man page as a
+          maintained version of this program is installed by
+          Util-linux-ng.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added commands to the Chapter 6 Binutils instructions
+          to suppress the installation of standards.info. Thanks to Greg
+          Schafer for contributing the fix.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added a patch to the Procps instructions to fix a
+          unicode related issue in the watch program.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added documentation installation commands to the
+          Chapter 6 Kbd instructions.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Modified the IPRoute2 installation command so that the
+          docs are installed in a versioned directory.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Modified the Groff installation command so that the
+          docs are installed in a standardized versioned directory.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added documentation installation commands to the
+          Chapter 6 Gawk instructions.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added commands to the Chapter 6 Flex instructions
+          to install a .pdf doc file.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added a parameter to the configure command in the
+          Automake instructions so that docs are installed in a versioned
+          directory.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Module-Init-Tools to 3.4.1.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added documentation installation commands to the
+          Chapter 6 Readline instructions.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added documentation installation commands to the
+          Chapter 6 Ncurses instructions.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+
+    <listitem>
+      <para>2008-10-10</para>
+      <itemizedlist>
+        <listitem>
+          <para>[randy] - Added documentation enhancements to the E2fsprogs
+          package.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Removed an unnecessary parameter from the
+          Util-linux-ng Chapter 6 make command. Thanks to Greg Schafer for
+          pointing it out.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated the Perl instructions. Thanks to Greg Schafer
+          for pointing out the issues. This change also required that the Zlib
+          package is built right before the Perl package in Chapter 6.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Vim to 7.2.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Udev to 130.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+
+    <listitem>
+      <para>2008-10-09</para>
+      <itemizedlist>
+        <listitem>
+          <para>[randy] - Updated File to 4.26</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Shadow to 4.1.2.1.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Man-DB to 2.5.2.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Iproute to 2.6.26.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added a command to the Inetutils instructions to
+          correct an issue with GCC-&gcc-version;.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+
+    <listitem>
+      <para>2008-10-07</para>
+      <itemizedlist>
+        <listitem>
+          <para>[randy] - Updated Autoconf to 2.63.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Libtool to 2.2.6a.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Corrected the instruction to untar the E2fsprogs
+          tarball in Section 2.3. Thanks to William Immendorf for pointing
+          out the error.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Berkeley DB to 4.7.25.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Man-pages to 3.11.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Util-linux-ng to 2.14.1.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Texinfo to 4.13.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+
+    <listitem>
+      <para>2008-10-06</para>
+      <itemizedlist>
+        <listitem>
+          <para>[robert] - Added -v to the cp command in the Chapter 5 Expect
+          instructions.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Tar to 1.20.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Perl to 5.10.0.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated M4 to 1.4.11 and added it to the Chapter 5
+          build as it is required by the GMP package in Chapter 6.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Findutils to 4.4.0.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+
+    <listitem>
+      <para>2008-10-05</para>
+      <itemizedlist>
+        <listitem>
+          <para>[randy] - Updated E2fsprogs to 1.41.1.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added the Mktemp-1.5 package to the list of
+          removed items in the Chapter3 'What's new ...' page.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Coreutils to 6.12. Thanks to William
+          Immendorf for contributing a patch to add the mktemp program
+          information to the Coreutils page.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated the Bash Fixes patch to the -8 version.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added a patch to the Expect instructions to fix an
+          issue with recent Tcl versions.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Tcl to 8.5.4.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated the Linux kernel to 2.6.26.5.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated Glibc to a 2.8 snapshot taken on
+          9/29/2008. The tarball of this snapshot includes the libidn
+          data that previously was separately packaged.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Added the GMP and MPFR packages to the list of
+          packages in Chapter 3. Thanks to Lefteris Dimitroulakis for
+          pointing out the omission.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+
+    <listitem>
+      <para>2008-10-03</para>
+      <itemizedlist>
+        <listitem>
+          <para>[bdubbs] - Added version check for Perl in Host System 
+          Requirements.</para>
+        </listitem>
+        <listitem>
+          <para>[randy] - Updated GCC to 4.3.2 which includes adding the
+          GMP-4.2.4 and MPFR-2.3.2 packages. This new version of GCC requires
+          the added packages. Thanks to DJ Lucas for the stimulus and initial
+          work resulting in this and all of the other package updates coming
+          up.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+
+    <listitem>
+      <para>2008-07-11</para>
+      <itemizedlist>
+        <listitem>
+          <para>[ken] - Belatedly fixed known vulnerabilities in perl.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+
+    <listitem>
+      <para>2008-06-03</para>
+      <itemizedlist>
+        <listitem>
+          <para>[bdubbs] - Added udev-config scripts to appendices.</para>
+        </listitem>
+        <listitem>
+          <para>[bdubbs] - Added lfs-bootscripts to appendices.</para>
+        </listitem>
+        <listitem>
+          <para>[bdubbs] - Updated license to Creative Commons with
+          extracted code under the MIT license.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+
+    <listitem>
+      <para>2008-05-23</para>
+      <itemizedlist>
+        <listitem>
+          <para>[bryan] - Install a few extra rules from the
+          etc/udev/packages directory in udev.  Thanks to Dan
+          Nicholson for noticing the issue.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+            
+    <listitem>
+      <para>2008-05-22</para>
+      <itemizedlist>
+        <listitem>
+          <para>[bryan] - Updated Udev to 122, udev-config to
+          20080522, and lfs-bootscripts to 20080522.  Also made
+          persistent-net rules able to be pre-generated, using
+          udevadm test.  Fixes #2057, #2079 (I think), #2170, and
+          #2186.</para>
+        </listitem>
+      </itemizedlist>
+    </listitem>
+
     <listitem>
       <para>2008-04-23</para>
       <itemizedlist>
-	<listitem>
-	  <para>[jhuntwork] - Fixed behavior in kbd where man pages
+        <listitem>
+          <para>[jhuntwork] - Use -mtune=native for glibc. We don't
+          want our libc optimized for 486. It should be optimized
+          for the local machine.</para>
+        </listitem>
+        <listitem>
+          <para>[jhuntwork] - Updated Autoconf to 2.62.</para>
+        </listitem>
+        <listitem>
+          <para>[jhuntwork] - Updated E2fsprogs to 1.40.8. Fixes #2173.
+          </para>
+        </listitem>
+        <listitem>
+          <para>[jhuntwork] - Fixed behavior in kbd where man pages
           for optional programs that aren't built are installed.
-	  Thanks Greg Schafer for spotting this.
-	  </para>
-	</listitem>
+          Thanks Greg Schafer for spotting this.
+          </para>
+        </listitem>
         <listitem>
           <para>[jhuntwork] - Fixed kbd to install getkeycodes,
-	  setkeycodes and resizecons. Also moved loadkeys to /bin from
+          setkeycodes and resizecons. Also moved loadkeys to /bin from
           /usr/bin. Thanks, Greg Schafer.</para>
         </listitem>
       </itemizedlist>

+ 93 - 19
chapter01/whatsnew.xml

@@ -29,9 +29,9 @@
     </listitem>
 -->
 
-    <!--<listitem>
+    <listitem>
       <para>Autoconf &autoconf-version;</para>
-    </listitem>-->
+    </listitem>
     <listitem>
       <para>Automake &automake-version;</para>
     </listitem>
@@ -50,9 +50,9 @@
     <!--<listitem>
       <para>Bzip2 &bzip2-version;</para>
     </listitem>-->
-    <!--<listitem>
+    <listitem>
       <para>Coreutils &coreutils-version;</para>
-    </listitem>-->
+    </listitem>
     <!--<listitem>
       <para>DejaGNU &dejagnu-version;</para>
     </listitem>-->
@@ -86,6 +86,9 @@
     <listitem>
       <para>Glibc &glibc-version;</para>
     </listitem>
+    <!-- <listitem>
+      <para>GMP &gmp-version;</para>
+    </listitem> -->
     <listitem>
       <para>Grep &grep-version;</para>
     </listitem>
@@ -122,9 +125,9 @@
     <listitem>
       <para>Linux &linux-version;</para>
     </listitem>
-    <!--<listitem>
+    <listitem>
       <para>M4 &m4-version;</para>
-    </listitem>-->
+    </listitem>
     <!--<listitem>
       <para>Make &make-version;</para>
     </listitem>-->
@@ -140,15 +143,18 @@
     <listitem>
       <para>Module-Init-Tools &module-init-tools-version;</para>
     </listitem>
+    <!-- <listitem>
+      <para>MPFR &mpfr-version;</para>
+    </listitem> -->
     <!--<listitem>
       <para>Ncurses &ncurses-version;</para>
     </listitem>-->
     <!--<listitem>
       <para>Patch &patch-version;</para>
     </listitem>-->
-    <!--<listitem>
+    <listitem>
       <para>Perl &perl-version;</para>
-    </listitem>-->
+    </listitem>
     <!--<listitem>
       <para>Procps &procps-version;</para>
     </listitem>-->
@@ -161,9 +167,9 @@
     <!--<listitem>
       <para>Sed &sed-version;</para>
     </listitem>-->
-    <!--<listitem>
+    <listitem>
       <para>Shadow &shadow-version;</para>
-    </listitem>-->
+    </listitem>
     <listitem>
       <para>Sysklogd &sysklogd-version;</para>
     </listitem>
@@ -179,18 +185,18 @@
     <listitem>
       <para>Texinfo &texinfo-version;</para>
     </listitem>
-    <!--<listitem>
+    <listitem>
       <para>Udev &udev-version;</para>
-    </listitem>-->
+    </listitem>
     <listitem>
       <para>&udev-config;</para>
     </listitem>
     <listitem>
       <para>Util-Linux-NG &util-linux-ng-version;</para>
     </listitem>
-    <!--<listitem>
+    <listitem>
       <para>Vim &vim-version;</para>
-    </listitem>-->
+    </listitem>
     <!--<listitem>
       <para>Zlib &zlib-version;</para>
     </listitem>-->
@@ -212,10 +218,38 @@
       <para>&bash-fixes-patch;</para>
     </listitem>
 
+    <listitem>
+      <para>&binutils-configure-patch;</para>
+    </listitem>
+
+    <listitem>
+      <para>&binutils-gcc-patch;</para>
+    </listitem>
+
+    <listitem>
+      <para>&coreutils-old-kernel-patch;</para>
+    </listitem>
+
     <listitem>
       <para>&db-fixes-patch;</para>
     </listitem>
 
+    <listitem>
+      <para>&expect-tcl-patch;</para>
+    </listitem>
+
+    <listitem>
+      <para>GMP-&gmp-version;</para>
+    </listitem>
+
+    <listitem>
+      <para>&glibc-iconv-test-fixes-patch;</para>
+    </listitem>
+
+    <listitem>
+      <para>&glibc-ildoubl-test-fix-patch;</para>
+    </listitem>
+
     <listitem>
       <para>&grep-debian-patch;</para>
     </listitem>
@@ -224,16 +258,36 @@
       <para>&grep-fixes-patch;</para>
     </listitem>
 
+    <listitem>
+      <para>M4 to the Chapter 5 build</para>
+    </listitem>
+
     <listitem>
       <para>&module-init-manpages-patch;</para>
     </listitem>
 
     <listitem>
-      <para>&readline-fixes-patch;</para>
+      <para>MPFR-&mpfr-version;</para>
+    </listitem>
+
+    <listitem>
+      <para>&perl-libc-patch;</para>
+    </listitem>
+
+    <listitem>
+      <para>&perl-page-patch;</para>
+    </listitem>
+
+    <listitem>
+      <para>&perl-security-patch;</para>
     </listitem>
 
     <listitem>
-      <para>&udev-usbid-patch;</para>
+      <para>&procps-watch-patch;</para>
+    </listitem>
+
+    <listitem>
+      <para>&readline-fixes-patch;</para>
     </listitem>
 
     <listitem>
@@ -250,7 +304,11 @@
     </listitem>
 
     <listitem>
-      <para>db-4.5.29-fixes-1.patch</para>
+      <para>coreutils-6.10-i18n-1.patch</para>
+    </listitem>
+
+    <listitem>
+      <para>db-4.5.20-fixes-1.patch</para>
     </listitem>
 
     <listitem>
@@ -273,12 +331,24 @@
       <para>man-db-2.4.4-fixes-1.patch</para>
     </listitem>
 
+    <listitem>
+      <para>mktemp 1.5</para>
+    </listitem>
+
     <listitem>
       <para>module-init-tools-3.2.2-modprobe-1.patch</para>
     </listitem>
 
     <listitem>
-      <para>readline-5.4-fixes-4.patch</para>
+      <para>perl-5.8.8-libc-2.patch</para>
+    </listitem>
+
+    <listitem>
+      <para>readline-5.2-fixes-3.patch</para>
+    </listitem>
+
+    <listitem>
+      <para>shadow-4.0.18.1-useradd_fix-2.patch</para>
     </listitem>
 
     <listitem>
@@ -290,7 +360,11 @@
     </listitem>
 
     <listitem>
-      <para>vim-7.1-fixes-1.patch</para>
+      <para>Util-linux 2.12r</para>
+    </listitem>
+
+    <listitem>
+      <para>vim-7.1-fixes-6.patch</para>
     </listitem>
 
   </itemizedlist>

+ 1 - 1
chapter02/creatingfilesystem.xml

@@ -51,7 +51,7 @@
     resulting binaries to re-create the filesystem on your LFS partition:</para>
 
 <screen role="nodump"><userinput>cd /tmp
-tar -xjvf /path/to/sources/e2fsprogs-&e2fsprogs-version;.tar.bz2
+tar -xzvf /path/to/sources/e2fsprogs-&e2fsprogs-version;.tar.gz
 cd e2fsprogs-&e2fsprogs-version;
 mkdir -v build
 cd build

+ 21 - 3
chapter03/packages.xml

@@ -203,13 +203,22 @@
       </listitem>
     </varlistentry>
 
-    <varlistentry>
+    <!-- <varlistentry>
       <term>Glibc LibIDN add-on (&glibc-libidn-version;) - <token>&glibc-libidn-size;</token>:</term>
       <listitem>
         <para>Home page: <ulink url="&glibc-libidn-home;"/></para>
         <para>Download: <ulink url="&glibc-libidn-url;"/></para>
         <para>MD5 sum: <literal>&glibc-libidn-md5;</literal></para>
       </listitem>
+    </varlistentry> -->
+
+    <varlistentry>
+      <term>GMP (&gmp-version;) - <token>&gmp-size;</token>:</term>
+      <listitem>
+        <para>Home page: <ulink url="&gmp-home;"/></para>
+        <para>Download: <ulink url="&gmp-url;"/></para>
+        <para>MD5 sum: <literal>&gmp-md5;</literal></para>
+      </listitem>
     </varlistentry>
 
     <varlistentry>
@@ -363,14 +372,14 @@
       </listitem>
     </varlistentry>
 
-    <varlistentry>
+    <!-- <varlistentry>
       <term>Mktemp (&mktemp-version;) - <token>&mktemp-size;</token>:</term>
       <listitem>
         <para>Home page: <ulink url="&mktemp-home;"/></para>
         <para>Download: <ulink url="&mktemp-url;"/></para>
         <para>MD5 sum: <literal>&mktemp-md5;</literal></para>
       </listitem>
-    </varlistentry>
+    </varlistentry> -->
 
     <varlistentry>
       <term>Module-Init-Tools (&module-init-tools-version;) - <token>&module-init-tools-size;</token>:</term>
@@ -381,6 +390,15 @@
       </listitem>
     </varlistentry>
 
+    <varlistentry>
+      <term>MPFR (&mpfr-version;) - <token>&mpfr-size;</token>:</term>
+      <listitem>
+        <para>Home page: <ulink url="&mpfr-home;"/></para>
+        <para>Download: <ulink url="&mpfr-url;"/></para>
+        <para>MD5 sum: <literal>&mpfr-md5;</literal></para>
+      </listitem>
+    </varlistentry>
+
     <varlistentry>
       <term>Ncurses (&ncurses-version;) - <token>&ncurses-size;</token>:</term>
       <listitem>

+ 66 - 11
chapter03/patches.xml

@@ -42,6 +42,14 @@
       </listitem>
     </varlistentry>
 
+    <varlistentry>
+      <term>Binutils GCC 4.3 Patch - <token>&binutils-gcc-patch-size;</token>:</term>
+      <listitem>
+        <para>Download: <ulink url="&patches-root;&binutils-gcc-patch;"/></para>
+        <para>MD5 sum: <literal>&binutils-gcc-patch-md5;</literal></para>
+      </listitem>
+    </varlistentry>
+
     <varlistentry>
       <term>Binutils Texinfo Version Patch - <token>&binutils-configure-patch-size;</token>:</term>
       <listitem>
@@ -58,12 +66,20 @@
       </listitem>
     </varlistentry>
 
-    <varlistentry>
+    <!-- <varlistentry>
       <term>Coreutils Internationalization Fixes Patch - <token>&coreutils-i18n-patch-size;</token>:</term>
       <listitem>
         <para>Download: <ulink url="&patches-root;&coreutils-i18n-patch;"/></para>
         <para>MD5 sum: <literal>&coreutils-i18n-patch-md5;</literal></para>
       </listitem>
+    </varlistentry> -->
+
+    <varlistentry>
+      <term>Coreutils Old Kernel Patch - <token>&coreutils-old-kernel-patch-size;</token>:</term>
+      <listitem>
+        <para>Download: <ulink url="&patches-root;&coreutils-old-kernel-patch;"/></para>
+        <para>MD5 sum: <literal>&coreutils-old-kernel-patch-md5;</literal></para>
+      </listitem>
     </varlistentry>
 
     <varlistentry>
@@ -91,7 +107,31 @@
     </varlistentry>
 
     <varlistentry>
-      <term>Grep Debian Patch - <token>&grep-debian-patch-size;</token>;</term>
+      <term>Expect Tcl Patch - <token>&expect-tcl-patch-size;</token>:</term>
+      <listitem>
+        <para>Download: <ulink url="&patches-root;&expect-tcl-patch;"/></para>
+        <para>MD5 sum: <literal>&expect-tcl-patch-md5;</literal></para>
+      </listitem>
+    </varlistentry>
+
+    <varlistentry>
+      <term>Glibc Iconv Test Fixes Patch - <token>&glibc-iconv-test-fixes-patch-size;</token>:</term>
+      <listitem>
+	<para>Download: <ulink url="&patches-root;&glibc-iconv-test-fixes-patch;"/></para>
+	<para>MD5 sum: <literal>&glibc-iconv-test-fixes-patch-md5;</literal></para>
+      </listitem>
+    </varlistentry>
+
+    <varlistentry>
+      <term>Glibc Ildoubl Test Fix Patch - <token>&glibc-ildoubl-test-fix-patch-size;</token>:</term>
+      <listitem>
+	<para>Download: <ulink url="&patches-root;&glibc-ildoubl-test-fix-patch;"/></para>
+	<para>MD5 sum: <literal>&glibc-ildoubl-test-fix-patch-md5;</literal></para>
+      </listitem>
+    </varlistentry>
+
+    <varlistentry>
+      <term>Grep Debian Patch - <token>&grep-debian-patch-size;</token>:</term>
       <listitem>
 	<para>Download: <ulink url="&patches-root;&grep-debian-patch;"/></para>
 	<para>MD5 sum: <literal>&grep-debian-patch-md5;</literal></para>
@@ -163,30 +203,45 @@
     </varlistentry>
 
     <varlistentry>
-      <term>Readline Fixes Patch - <token>&readline-fixes-patch-size;</token>:</term>
+      <term>Perl Page Patch - <token>&perl-page-patch-size;</token>:</term>
       <listitem>
-        <para>Download: <ulink url="&patches-root;&readline-fixes-patch;"/></para>
-        <para>MD5 sum: <literal>&readline-fixes-patch-md5;</literal></para>
+        <para>Download: <ulink url="&patches-root;&perl-page-patch;"/></para>
+        <para>MD5 sum: <literal>&perl-page-patch-md5;</literal></para>
       </listitem>
     </varlistentry>
 
     <varlistentry>
-      <term>Shadow Useradd Patch - <token>&shadow-useradd-patch-size;</token>:</term>
+      <term>Perl Security Patch - <token>&perl-security-patch-size;</token>:</term>
       <listitem>
-        <para>Download: <ulink url="&patches-root;&shadow-useradd-patch;"/></para>
-        <para>MD5 sum: <literal>&shadow-useradd-patch-md5;</literal></para>
+        <para>Download: <ulink url="&patches-root;&perl-security-patch;"/></para>
+        <para>MD5 sum: <literal>&perl-security-patch-md5;</literal></para>
       </listitem>
     </varlistentry>
 
+    <varlistentry>
+      <term>Procps Watch Patch - <token>&procps-watch-patch-size;</token>:</term>
+      <listitem>
+        <para>Download: <ulink url="&patches-root;&procps-watch-patch;"/></para>
+        <para>MD5 sum: <literal>&procps-watch-patch-md5;</literal></para>
+      </listitem>
+    </varlistentry>
 
     <varlistentry>
-      <term>Udev usb_id Segfault Patch - <token>&udev-usbid-patch-size;</token>:</term>
+      <term>Readline Fixes Patch - <token>&readline-fixes-patch-size;</token>:</term>
       <listitem>
-        <para>Download: <ulink url="&patches-root;&udev-usbid-patch;"/></para>
-        <para>MD5 sum: <literal>&udev-usbid-md5;</literal></para>
+        <para>Download: <ulink url="&patches-root;&readline-fixes-patch;"/></para>
+        <para>MD5 sum: <literal>&readline-fixes-patch-md5;</literal></para>
       </listitem>
     </varlistentry>
 
+    <!-- <varlistentry>
+      <term>Shadow Useradd Patch - <token>&shadow-useradd-patch-size;</token>:</term>
+      <listitem>
+        <para>Download: <ulink url="&patches-root;&shadow-useradd-patch;"/></para>
+        <para>MD5 sum: <literal>&shadow-useradd-patch-md5;</literal></para>
+      </listitem>
+    </varlistentry> -->
+
 
     <varlistentry>
       <term>Vim Fixes Patch - <token>&vim-fixes-patch-size;</token>:</term>

+ 3 - 3
chapter05/chapter05.xml

@@ -21,6 +21,8 @@
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="tcl.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="expect.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="dejagnu.xml"/>
+  <!-- <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="gmp.xml"/>
+  <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="mpfr.xml"/> -->
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="gcc-pass2.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="binutils-pass2.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="ncurses.xml"/>
@@ -34,9 +36,7 @@
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="gettext.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="grep.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="gzip.xml"/>
-<!--  <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="m4.xml"/>
-  <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="bison.xml"/>
-  <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="flex.xml"/> -->
+  <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="m4.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="make.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="patch.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="perl.xml"/>

+ 6 - 0
chapter05/coreutils.xml

@@ -43,6 +43,12 @@
   <sect2 role="installation">
     <title>Installation of Coreutils</title>
 
+    <para>There's an internal issue with Coreutils which makes some of the
+    programs behave abnormally if you build using an older kernel. Apply a
+    patch to fix the issue:</para>
+
+<screen><userinput remap="pre">patch -Np1 -i ../&coreutils-old-kernel-patch;</userinput></screen>
+
     <para>Prepare Coreutils for compilation:</para>
 
 <screen><userinput remap="configure">./configure --prefix=/tools --enable-install-program=hostname</userinput></screen>

+ 6 - 2
chapter05/expect.xml

@@ -46,13 +46,17 @@
 
 <screen><userinput remap="pre">patch -Np1 -i ../&expect-spawn-patch;</userinput></screen>
 
+    <para>Next, fix a bug that is a result of recent Tcl changes:</para>
+
+<screen><userinput remap="pre">patch -Np1 -i ../&expect-tcl-patch;</userinput></screen>
+
     <para>Next, force Expect's configure script to use <filename>/bin/stty</filename>
     instead of a <filename>/usr/local/bin/stty</filename> it may find on the host system.
     This will ensure that our testsuite tools remain sane for the final builds of our
     toolchain:</para>
 
-<screen><userinput remap="pre">cp configure{,.bak}
-sed 's:/usr/local/bin:/bin:' configure.bak &gt; configure</userinput></screen>
+<screen><userinput remap="pre">cp -v configure{,.orig}
+sed 's:/usr/local/bin:/bin:' configure.orig &gt; configure</userinput></screen>
 
     <para>Now prepare Expect for compilation:</para>
 

+ 22 - 14
chapter05/gcc-pass1.xml

@@ -43,6 +43,15 @@
   <sect2 role="installation">
     <title>Installation of GCC</title>
 
+    <para>GCC now requires the GMP and MPFR packages. As these packages may
+    not be included in your host distribution, they will be built with
+    GCC.</para>
+
+<screen><userinput remap="pre">tar -jxf ../mpfr-&mpfr-version;.tar.bz2
+mv mpfr-&mpfr-version; mpfr
+tar -jxf ../gmp-&gmp-version;.tar.bz2
+mv gmp-&gmp-version; gmp</userinput></screen>
+
     <para>The GCC documentation recommends building GCC outside of the
     source directory in a dedicated build directory:</para>
 
@@ -52,9 +61,8 @@ cd ../gcc-build</userinput></screen>
     <para>Prepare GCC for compilation:</para>
 
 <screen><userinput remap="configure">CC="gcc -B/usr/bin/" ../gcc-&gcc-version;/configure --prefix=/tools \
-    --with-local-prefix=/tools --disable-nls --disable-shared \
-    --enable-languages=c --disable-multilib \
-    --disable-bootstrap</userinput></screen>
+    --with-local-prefix=/tools --disable-nls --disable-shared --disable-libssp \
+    --enable-languages=c</userinput></screen>
 
     <variablelist>
       <title>The meaning of the configure options:</title>
@@ -84,8 +92,9 @@ cd ../gcc-build</userinput></screen>
       <varlistentry>
         <term><parameter>--disable-shared</parameter></term>
         <listitem>
-          <para>This forces gcc to link its internal libraries statically. We do this
-	  to avoid possible issues with the host system.</para>
+          <para>This switch forces GCC to link its internal libraries
+          statically. We do this to avoid possible issues with the host
+          system.</para>
         </listitem>
       </varlistentry>
 
@@ -128,16 +137,15 @@ cd ../gcc-build</userinput></screen>
 
 <screen><userinput remap="install">make install</userinput></screen>
 
-    <para>Using <command>--disable-shared</command> means that the file
-    <filename class="libraryfile">libgcc_eh.a</filename>
-    isn't created and installed. The next package, Glibc, depends on this 
-    library as it uses <command>-lgcc_eh</command> within its build system.
-    We can satisfy that dependency by creating a symlink to
-    <filename class="libraryfile">libgcc.a</filename>, since that file will
-    end up containing the objects normally contained in
-    <filename class="libraryfile">libgcc_eh.a</filename>.</para>
+    <para>Using <parameter>--disable-shared</parameter> means that the
+    <filename>libgcc_eh.a</filename> file isn't created and installed. The
+    Glibc package depends on this library as it uses
+    <parameter>-lgcc_eh</parameter> within its build system. We can satisfy
+    that dependency by creating a symlink to <filename>libgcc.a</filename>,
+    since that file will end up containing the objects normally contained in
+    <filename>libgcc_eh.a</filename>.</para>
 
-<screen><userinput>ln -vs libgcc.a `gcc -print-libgcc-file-name | \
+<screen><userinput remap="install">ln -vs libgcc.a `gcc -print-libgcc-file-name | \
     sed 's/libgcc/&amp;_eh/'`</userinput></screen>
 
     <para>As a finishing touch, create a symlink. Many programs and scripts

+ 8 - 0
chapter05/gcc-pass2.xml

@@ -124,6 +124,14 @@ done</userinput></screen>
    sed '/MULTILIB_OSDIRNAMES/d' $file.orig &gt; $file
 done</userinput></screen>
 
+    <para>As in the first build of GCC it requires the GMP and MPFR packages.
+    Unpack the tarballs and move them into the required directory names:</para>
+
+<screen><userinput remap="pre">tar -jxf ../mpfr-&mpfr-version;.tar.bz2
+mv mpfr-&mpfr-version; mpfr
+tar -jxf ../gmp-&gmp-version;.tar.bz2
+mv gmp-&gmp-version; gmp</userinput></screen>
+
     <para>Create a separate build directory again:</para>
 
 <screen><userinput remap="pre">mkdir -v ../gcc-build

+ 7 - 24
chapter05/glibc.xml

@@ -43,6 +43,11 @@
   <sect2 role="installation">
     <title>Installation of Glibc</title>
 
+    <para>Fix a potential issue if <filename>/etc/ld.so.preload</filename> is
+    used on the host system.</para>
+
+<screen><userinput remap="pre">sed -i 's@/etc/ld.so.preload@/tools/etc/ld.so.preload@' elf/rtld.c</userinput></screen>
+
     <para>The Glibc documentation recommends building Glibc outside of the source
     directory in a dedicated build directory:</para>
 
@@ -159,30 +164,8 @@ esac</userinput></screen>
 
 <screen><userinput remap="make">make</userinput></screen>
 
-    <para>Compilation is now complete. As mentioned earlier, running the
-    test suites for the temporary tools installed in this chapter is not
-    mandatory. To run the Glibc test suite (if desired), the following
-    command will do so:</para>
-
-<screen><userinput remap="test">make check</userinput></screen>
-
-    <para>For a discussion of test failures that are of particular
-    importance, please see <xref linkend="ch-system-glibc" role="."/></para>
-
-    <para>In this chapter, some tests can be adversely affected by
-    existing tools or environmental issues on the host system. Glibc test
-    suite failures in this chapter are typically not worrisome. The Glibc
-    installed in <xref linkend="chapter-building-system"/> is the one that
-    will ultimately end up being used, so that is the one that needs to pass
-    most tests (even in <xref linkend="chapter-building-system"/>, some
-    failures could still occur, for example, with the math tests).</para>
-
-    <para>When experiencing a failure, make a note of it, then continue by
-    reissuing the <command>make check</command> command. The test suite
-    should pick up where it left off and continue. This stop-start sequence
-    can be circumvented by issuing a <command>make -k check</command> command.
-    If using this option, be sure to log the output so that the log file can
-    be examined for failures later.</para>
+    <para>This package does come with a test suite, however, it cannot be
+    run at this time because we do not have a C++ compiler yet.</para>
 
     <para>The install stage of Glibc will issue a harmless warning at the
     end about the absence of <filename>/tools/etc/ld.so.conf</filename>.

+ 84 - 0
chapter05/gmp.xml

@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+  <!ENTITY % general-entities SYSTEM "../general.ent">
+  %general-entities;
+]>
+
+<sect1 id="ch-tools-gmp" role="wrap">
+  <?dbhtml filename="gmp.html"?>
+
+  <sect1info condition="script">
+    <productname>gmp</productname>
+    <productnumber>&gmp-version;</productnumber>
+    <address>&gmp-url;</address>
+  </sect1info>
+
+  <title>GMP-&gmp-version;</title>
+
+  <indexterm zone="ch-tools-gmp">
+    <primary sortas="a-GMP">GMP</primary>
+    <secondary>tools</secondary>
+  </indexterm>
+
+  <sect2 role="package">
+    <title/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../chapter06/gmp.xml"
+    xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
+
+    <segmentedlist>
+      <segtitle>&buildtime;</segtitle>
+      <segtitle>&diskspace;</segtitle>
+
+      <seglistitem>
+        <seg>&gmp-ch5-sbu;</seg>
+        <seg>&gmp-ch5-du;</seg>
+      </seglistitem>
+    </segmentedlist>
+
+  </sect2>
+
+  <sect2 role="installation">
+    <title>Installation of GMP</title>
+
+    <para>Prepare GMP for compilation:</para>
+
+<screen><userinput remap="configure">./configure --prefix=/tools --enable-mpbsd</userinput></screen>
+
+    <variablelist>
+      <title>The meaning of the configure option:</title>
+
+      <varlistentry>
+        <term><parameter>--enable-mpbsd</parameter></term>
+        <listitem>
+          <para>This builds the Berkeley MP compatibility library</para>
+        </listitem>
+      </varlistentry>
+
+    </variablelist>
+
+    <para>Compile the package:</para>
+
+<screen><userinput remap="make">make</userinput></screen>
+
+    <para>To test the results, issue:</para>
+
+<screen><userinput remap="test">make check</userinput></screen>
+
+    <para>Install the package:</para>
+
+<screen><userinput remap="install">make install</userinput></screen>
+
+  </sect2>
+
+  <sect2 role="content">
+    <title/>
+
+    <para>Details on this package are located in
+    <xref linkend="contents-gmp" role="."/></para>
+
+  </sect2>
+
+</sect1>

+ 72 - 0
chapter05/mpfr.xml

@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+  <!ENTITY % general-entities SYSTEM "../general.ent">
+  %general-entities;
+]>
+
+<sect1 id="ch-tools-mpfr" role="wrap">
+  <?dbhtml filename="mpfr.html"?>
+
+  <sect1info condition="script">
+    <productname>mpfr</productname>
+    <productnumber>&mpfr-version;</productnumber>
+    <address>&mpfr-url;</address>
+  </sect1info>
+
+  <title>MPFR-&mpfr-version;</title>
+
+  <indexterm zone="ch-tools-mpfr">
+    <primary sortas="a-MPFR">MPFR</primary>
+    <secondary>tools</secondary>
+  </indexterm>
+
+  <sect2 role="package">
+    <title/>
+
+    <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
+    href="../chapter06/mpfr.xml"
+    xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
+
+    <segmentedlist>
+      <segtitle>&buildtime;</segtitle>
+      <segtitle>&diskspace;</segtitle>
+
+      <seglistitem>
+        <seg>&mpfr-ch5-sbu;</seg>
+        <seg>&mpfr-ch5-du;</seg>
+      </seglistitem>
+    </segmentedlist>
+
+  </sect2>
+
+  <sect2 role="installation">
+    <title>Installation of MPFR</title>
+
+    <para>Prepare MPFR for compilation:</para>
+
+<screen><userinput remap="configure">./configure --prefix=/tools --enable-thread-safe</userinput></screen>
+
+    <para>Compile the package:</para>
+
+<screen><userinput remap="make">make</userinput></screen>
+
+    <para>To test the results, issue:</para>
+
+<screen><userinput remap="test">make check</userinput></screen>
+
+    <para>Install the package:</para>
+
+<screen><userinput remap="install">make install</userinput></screen>
+
+  </sect2>
+
+  <sect2 role="content">
+    <title/>
+
+    <para>Details on this package are located in
+    <xref linkend="contents-mpfr" role="."/></para>
+
+  </sect2>
+
+</sect1>

+ 12 - 12
chapter05/tcl.xml

@@ -81,7 +81,7 @@
 
     <para>Now make a necessary symbolic link:</para>
 
-<screen><userinput remap="install">ln -sv tclsh8.4 /tools/bin/tclsh</userinput></screen>
+<screen><userinput remap="install">ln -sv tclsh8.5 /tools/bin/tclsh</userinput></screen>
 
   </sect2>
 
@@ -93,8 +93,8 @@
       <segtitle>Installed library</segtitle>
 
       <seglistitem>
-        <seg>tclsh (link to tclsh8.4) and tclsh8.4</seg>
-        <seg>libtcl8.4.so</seg>
+        <seg>tclsh (link to tclsh8.5) and tclsh8.5</seg>
+        <seg>libtcl8.5.so</seg>
       </seglistitem>
     </segmentedlist>
 
@@ -103,12 +103,12 @@
       <?dbfo list-presentation="list"?>
       <?dbhtml list-presentation="table"?>
 
-      <varlistentry id="tclsh8.4">
-        <term><command>tclsh8.4</command></term>
+      <varlistentry id="tclsh8.5">
+        <term><command>tclsh8.5</command></term>
         <listitem>
           <para>The Tcl command shell</para>
-          <indexterm zone="ch-tools-tcl tclsh8.4">
-            <primary sortas="b-tclsh8.4">tclsh8.4</primary>
+          <indexterm zone="ch-tools-tcl tclsh8.5">
+            <primary sortas="b-tclsh8.5">8.5</primary>
           </indexterm>
         </listitem>
       </varlistentry>
@@ -116,19 +116,19 @@
       <varlistentry id="tclsh">
         <term><command>tclsh</command></term>
         <listitem>
-          <para>A link to tclsh8.4</para>
+          <para>A link to tclsh8.5</para>
           <indexterm zone="ch-tools-tcl tclsh">
             <primary sortas="b-tclsh">tclsh</primary>
           </indexterm>
         </listitem>
       </varlistentry>
 
-      <varlistentry id="libtcl8.4.so">
-        <term><filename class="libraryfile">libtcl8.4.so</filename></term>
+      <varlistentry id="libtcl8.5.so">
+        <term><filename class="libraryfile">libtcl8.5.so</filename></term>
         <listitem>
           <para>The Tcl library</para>
-          <indexterm zone="ch-tools-tcl libtcl8.4.so">
-            <primary sortas="c-libtcl8.4.so">libtcl8.4.so</primary>
+          <indexterm zone="ch-tools-tcl libtcl8.5.so">
+            <primary sortas="c-libtcl8.5.so">libtcl8.5.so</primary>
           </indexterm>
         </listitem>
       </varlistentry>

+ 22 - 2
chapter05/util-linux-ng.xml

@@ -50,14 +50,34 @@
     <para>Only a few of the utilities contained in this package need to be
     built:</para>
 
-<screen><userinput remap="make">make -C mount mount umount
+<screen><userinput remap="make">make BLKID_LIBS="-lblkid -luuid" -C mount mount umount
 make -C text-utils more</userinput></screen>
 
+    <variablelist>
+      <title>The meaning of the make parameter:</title>
+
+      <varlistentry>
+        <term><parameter>BLKID_LIBS="-lblkid -luuid"</parameter></term>
+        <listitem>
+          <para>When building only a subset of the package, the
+          <filename class="libraryfile">libuuid.so</filename> library is not
+          pulled into the build as it is supposed to. This command overrides
+          the default from the <filename>Makefile</filename>.</para>
+        </listitem>
+      </varlistentry>
+
+    </variablelist>
+
+    <!-- Not sure why this is in there. There is no test suite. Though
+         running 'make check' may build these programs, there is no
+         testing done.
     <para>This package comes with a test suite, but running it will cause all of
     the binaries to be built and tested.  If you still wish to run the tests,
     issue:</para>
 
-<screen><userinput remap="test">make check</userinput></screen>
+<screen><userinput remap="test">make check</userinput></screen> -->
+
+    <para>This package does not come with a test suite.</para>
 
     <para>Copy these programs to the temporary tools directory:</para>
 

+ 1 - 1
chapter06/autoconf.xml

@@ -53,7 +53,7 @@
 
 <screen><userinput remap="test">make check</userinput></screen>
 
-    <para>This takes a long time, about 3 SBUs. In addition, 6 tests are skipped
+    <para>This takes a long time, about 4.7 SBUs. In addition, 6 tests are skipped
     that use Automake. For full test coverage, Autoconf can be re-tested
     after Automake has been installed.</para>
 

+ 1 - 1
chapter06/automake.xml

@@ -49,7 +49,7 @@
 
     <para>Prepare Automake for compilation:</para>
 
-<screen><userinput remap="configure">./configure --prefix=/usr</userinput></screen>
+<screen><userinput remap="configure">./configure --prefix=/usr --docdir=/usr/share/doc/automake-&automake-version;</userinput></screen>
 
     <para>Compile the package:</para>
 

+ 12 - 0
chapter06/binutils.xml

@@ -61,6 +61,18 @@ Ask your system administrator to create more.</computeroutput></screen>
 
 <screen><userinput remap="pre">patch -Np1 -i ../&binutils-configure-patch;</userinput></screen>
 
+    <para>Apply the following patch to prevent some failures when running the
+    the test suite:</para>
+
+<screen><userinput remap="pre">patch -Np1 -i ../&binutils-gcc-patch;</userinput></screen>
+
+    <para>Suppress the installation of an outdated
+    <filename>standards.info</filename> file as a newer one is installed later
+    on in the Autoconf instructions:</para>
+
+<screen><userinput remap="pre">rm -fv etc/standards.info
+sed -i.bak '/^INFO/s/standards.info //' etc/Makefile.in</userinput></screen>
+
     <para>The Binutils documentation recommends building Binutils outside of the
     source directory in a dedicated build directory:</para>
 

+ 1 - 1
chapter06/bison.xml

@@ -55,7 +55,7 @@
 
 <screen><userinput remap="make">make</userinput></screen>
 
-    <para>To test the results, issue:</para>
+    <para>To test the results (about 0.5 SBU), issue:</para>
 
 <screen><userinput remap="test">make check</userinput></screen>
 

+ 3 - 1
chapter06/chapter06.xml

@@ -22,6 +22,8 @@
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="glibc.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="readjusting.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="binutils.xml"/>
+  <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="gmp.xml"/>
+  <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="mpfr.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="gcc.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="db.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="sed.xml"/>
@@ -33,9 +35,9 @@
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="ncurses.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="procps.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="libtool.xml"/>
+  <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="zlib.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="perl.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="readline.xml"/>
-  <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="zlib.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="autoconf.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="automake.xml"/>
   <xi:include xmlns:xi="http://www.w3.org/2003/XInclude" href="bash.xml"/>

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است