Minimum Host Prerequisites
jhuntwork at linuxfromscratch.org
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 version-check.sh 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 version-check.sh, when I run it, my output is:
bash, version 1.14.7(1)
/bin/sh: symbolic link to bash
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.
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)
DIRENT UTIME STDC_HEADERS HAVE_UNISTD_H ASMV
Linux version 2.2.14-5.0 (root at porky.devel.redhat.com) (gcc version
egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)) #1 Tue Mar 7 21:07:39
GNU m4 1.4
GNU Make version 3.78.1, by Richard Stallman and Roland McGrath.
GNU sed version 3.02
tar (GNU tar) 1.13.17
makeinfo (GNU texinfo) 4.0
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 version-check.sh 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