cd /tmp tar -xjvf /sources/linux-2.6.32.8.tar.bz2 cd linux-2.6.32.8 make mrproper make headers_check make INSTALL_HDR_PATH=dest headers_install
So far, so toolchain.
find dest/include \( -name .install -o -name ..install.cmd \) -delete
That's different. This command, according to the book, is to delete some non-essential hidden files in the ./dest/include directory. You can see the [.install] and [..install.cmd] files which would be treated as hidden because they start with a [.]. The option at the end of the line [-delete] tells the whole thing what to do with the files found by the command.
cp -rv dest/include/* /usr/include cd .. rm -rvf linux-2.6.32.8
All the rest is the same, other than the final destination that we copy the files to - this time it is /usr/include and not the /tools directory. The next package is, I think it may be safe to say, the easiest one we have dealt with, and most probably will deal with. It is a collection of manual pages. These are the pages that are brought up with the [man] command.
tar -xjvf /sources/man-pages-3.23.tar.bz2 cd man-pages-3.23 make install cd .. rm -rvf man-pages-3.23
Well, things are going well aren't they? Let's move on to another simple … oh shit, it's Glibc again.
tar -xjvf /sources/glibc-2.11.1.tar.bz2 cd glibc-2.11.1 DL=$(readelf -l /bin/sh | sed -n 's@.*interpret.*/tools\(.*\)]$@\1@p')
Ok, first of all I refuse to take a command seriously if it starts going on about elves. Secondly SHIT it's SED! The bastard was sneakily hiding halfway through that command! Careful now - he just seems to be setting a variable [DL]. Lets see what that is going to be used for.
sed -i "s|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=$DL -o|" scripts/test-installation.pl
Aaaargh! More sed in-fucking-sanity.
unset DL
At last, something clear. Apparently the point of all this is to change a script that runs in the test suite for Glibc to make sure it doesn't try to test the /tools version of Glibc by accident. Right, next.
sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in
Bugger. We have elf and sed again. Lets try to not get over excited. Apparently, this forces the 'ldd shell script' (whatever that is) to use the /bin/bash program.
mkdir -v ../glibc-build cd ../glibc-build case `uname -m` in i?86) echo "CFLAGS += -march=i486 -mtune=native -O3 -pipe" > configparms ;; esac
That is mostly the same as we saw before, but there is a tweak with the [-O3] and [-pipe] options. The first sets the optimisation level for the compiler. It is safe to think of this as the compression level of a file compressor. More optimisation will take longer to compile, but should result in a smaller final program file, that also runs faster. The second just tells the compiler it can pipe [|] information from one command to another during the compilation instead of using temporary files. As you might imagine, this is considerably quicker, and does not actually affect the end result.
../glibc-2.11.1/configure --prefix=/usr --disable-profile --enable-add-ons --enable-kernel=2.6.18 --libexecdir=/usr/lib/glibc
This time we are installing to [/usr] so the prefix has changed. Expect to see this in virtually every package. The other change is the [libexecdir=/usr/lib/glibc]. According to the book, this changes the location for one program file that is installed. Does not seem to be earth shattering.
make $CORES_TO_USE cp -v ../glibc-2.11.1/iconvdata/gconv-modules iconvdata
We are now going to check the compiled files, and this command copies across a file from the unpacked source code folder to the build folder for testing purposes.
make $CORES_TO_USE -k check 2>&1 | tee glibc-check-log
This command actually runs the tests and sends the output to a file.
grep Error glibc-check-log
This command searches the log file from the last command for any lines with the word Error in them and prints them out. When I ran this, the output looked like this:
make[2]: [/sources/glibc-build/posix/annexc.out] Error 1 (ignored) make[2]: *** [/sources/glibc-build/rt/tst-cpuclock2.out] Error 1 make[1]: *** [rt/tests] Error 2 make: *** [check] Error 2
All of these errors are referred to in the book and anticipated. It is safe to proceed with these. During another build I got these errors instead:
make[2]: [/tmp/glibc-build/posix/annexc.out] Error 1 (ignored) make[2]: *** [/tmp/glibc-build/posix/tst-waitid.out] Error 1 make[1]: *** [posix/tests] Error 2 make[2]: *** [/tmp/glibc-build/rt/tst-mqueue5.out] Error 1 make[2]: *** [/tmp/glibc-build/rt/tst-cpuclock2.out] Error 1 make[1]: *** [rt/tests] Error 2 make: *** [check] Error 2
At this point we should create another empty file, by touching it. Incidentally is it just me or is there something vaguely unsettling about the command 'touch'?
touch /etc/ld.so.conf
As it sounds, this is a config file and we will fill it up shortly.
make install
This next section creates a number of locale files. These are language specific translation files, and we have alluded to them before. The book recommends the following locales be installed in order to be sure of passing the tests in other software we are going to install. To these I have added the en_GB versions. How you get your own country codes if they are not listed is an adventure for you and google to embark on together.
mkdir -pv /usr/lib/locale localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8 localedef -i de_DE -f ISO-8859-1 de_DE localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro localedef -i de_DE -f UTF-8 de_DE.UTF-8 localedef -i en_HK -f ISO-8859-1 en_HK localedef -i en_PH -f ISO-8859-1 en_PH localedef -i en_US -f ISO-8859-1 en_US localedef -i en_US -f UTF-8 en_US.UTF-8 localedef -i es_MX -f ISO-8859-1 es_MX localedef -i fa_IR -f UTF-8 fa_IR localedef -i fr_FR -f ISO-8859-1 fr_FR localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro localedef -i fr_FR -f UTF-8 fr_FR.UTF-8 localedef -i it_IT -f ISO-8859-1 it_IT localedef -i ja_JP -f EUC-JP ja_JP localedef -i tr_TR -f UTF-8 tr_TR.UTF-8 localedef -i zh_CN -f GB18030 zh_CN.GB18030 localedef -i en_GB -f UTF-8 en_GB.utf8 localedef -i en_GB -f ISO-8859-1 en_GB
The next file to be created is effectively a list of types of information and where to find them. Essentially it seems designed to tell the system whether to look locally for a user list, for instance, or whether to look to a domain server. I think.
cat > /etc/nsswitch.conf << "EOF" # Begin /etc/nsswitch.conf passwd: files group: files shadow: files hosts: files dns networks: files protocols: files services: files ethers: files rpc: files # End /etc/nsswitch.conf EOF
The following command tells the system that we are on London Time. If you are not on London time you can find out what time zone code you need instead by running the program [tzselect].
cp -v --remove-destination /usr/share/zoneinfo/Europe/London /etc/localtime
Lastly, we are back to this config file. This is a list of alternative locations that the system can look to find shared libraries. Or in other words, parts of programs that other programs might want to use. You will find, if you dip your toes into a lot of the BLFS packages, that this list becomes quite lengthy.
cat > /etc/ld.so.conf << "EOF" # Begin /etc/ld.so.conf /usr/local/lib /opt/lib # End /etc/ld.so.conf EOF
cd .. rm -rvf glibc-2.11.1 glibc-build
And thus endeth the lesson on how to properly install the full C library Glibc.
No comments:
Post a Comment