Minimum Host Prerequisites

Jeremy Huntwork jhuntwork at
Mon Oct 20 07:36:14 PDT 2008


So after some testing on a Redhat 6.2 system, I can say definitely that 
our host pre-reqs are higher than they technically need to be. I'd like 
to eventually drop all the below changes into the jh branch, but I just 
wanted to give a little status report first, for those interested.

First, I had to modify the script to show proper output 
on all items. Basically, there were three problems.

1. The command 'readlink' didn't exist on my system. (Probably because 
it doesn't have coreutils, but the old fileutils package).

2. The version of bash does not recognize '--version'. Instead it 
provides '-version' to show the version number _upon starting up_. Which 

3. Bash won't spit you back out to your old shell when you issue 
-version by itself.

So, to fix, I altered all instances of the lengthy echo "somefile ->" 
`readlink somefile` to just 'file somefile'. The file command will tell 
us nicely if a file is a symlink and where it points to.

And I changed the command 'bash --version' to 'bash -version -c ""'. 
This works for even modern versions of bash like 3.2.

So, with the fixed up, when I run it, my output is:

bash, version 1.14.7(1)
/bin/sh: symbolic link to bash
Binutils: 2.9.5
GNU Bison version 1.28
/usr/bin/yacc: ELF 32-bit LSB executable, Intel 80386, version 1, 
dynamically linked (uses shared libs), stripped
bzip2,  Version 0.9.5d, 4-Sept-99.
Coreutils:  4.0p
diff - GNU diffutils version 2.7
GNU find version 4.1
GNU Awk 3.0.4
/usr/bin/awk: symbolic link to /bin/gawk
GNU C Library stable release version 2.1.3,
grep (GNU grep) 2.4
gzip 1.2.4 (18 Aug 93)
Compilation options:
Linux version 2.2.14-5.0 (root at (gcc version 
egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)) #1 Tue Mar 7 21:07:39 
EST 2000
GNU m4 1.4
GNU Make version 3.78.1, by Richard Stallman and Roland McGrath.
patch 2.5
Perl version='5.00503';
GNU sed version 3.02
tar (GNU tar) 1.13.17
makeinfo (GNU texinfo) 4.0
Compilation OK

So, there are some things to note here:

1. Our host pre-reqs for Linux are correct. In order to build NPTL you 
must be running a 2.6 kernel, so first thing I did was build a 2.6 kernel.

2. Binutils (and possibly others after it) require a more modern bash, 
the Linux kernel (for the headers) require a modern make (as does Glibc, 
if it finds 'gmake' on the host system pointing to an old make it will 
bail), and Glibc also requires a modern version of sed. So there are two 
solutions here: either keep the host prereqs for those versions where 
they are, or do a pre-binutils-pass1 copy of each into tools, just like 
DIY does. Either way, the host system needs an upgrade for those 3 packages.

3. Apart from the items in #2, there are only a few other very minor 
changes that allow such an old system to build:

   a. check if the compiler can handle using '-B/usr/bin/' for binutils 
pass 1 and gcc pass 1, disable it if not

   b. don't use the configure patch for binutils pass 1 and 2, is 
ineffective on the older system. 'echo "MAKEINFO = :" >> Makefile' works 

   c. old versions of 'mkdir' don't have a -v switch. Either don't use 
it before coreutils is installed, or use 'install -dv' instead.

   d. Glibc in chapter 5 needs the 'MAKEINFO = :" set as well, can add 
this to the end of the configparms file we make.

   e. When we unpack the mpfr and gmp files in the gcc pass 1 and 2 
sections, I have to do 'bzcat $file | tar -xf -'

That's it. Even if we kept the pre-reqs for bash, sed and make, we can 
alter the following in our host pre-reqs:

  * "Binutils-2.12" can become "Binutils-2.9.5"

  * "Bison-1.875 (/usr/bin/yacc should be a link to bison or small 
script that executes bison)" can become "Bison-1.28" and we can drop the 
note about yacc needs to be a link or script since it seems to be bogus

  * "Bzip2-1.0.2" can become "Bzip2-0.9.5d"

  * "Coreutils-5.0 (or Sh-Utils-2.0, Textutils-2.0, and Fileutils-4.1)" 
can become "Coreutils-5.0 (or Sh-Utils-2.0, Textutils-2.0, and 
Fileutils-4.0)". Could probably adjust the script so 
that it will print either 'coreutils' or 'fileutils'. And perhaps if it 
gets 'fileutils', check the version info for sh-utils and textutils.

  * "Diffutils-2.8" can become "Diffutils-2.7"

  * "Findutils-4.1.20" can become "Findutils-4.1"

  * "Gcc-3.0.1" can at _least_ become "Gcc-2.95" I don't know if you 
want to mention "egcs-2.91.66" but it works.

  * "Glibc-2.2.5" can become "Glibc-2.1.3"

  * "Grep-2.5" can become "Grep-2.4"

  * "Patch-2.5.4" can become "Patch-2.5"

  * "Perl-5.6.0" can become "Perl-5"

  * "Tar-1.14" can become "Tar-1.13.17"

  * "Texinfo-4.8" might be able to be dropped (I don't know I'd have to 
test without it) but it can at least be moved down to "Texinfo-4.0"

Well, that's about it. :)


More information about the lfs-dev mailing list