7.13. Creating Essential Symlinks

Some programs use hard-wired paths to files which do not exist yet. In order to satisfy these programs, create a number of symbolic links which will be replaced by real files throughout the course of the next chapter after the software has been installed.

ln -sv /tools/bin/{bash,cat,echo,grep,login,pwd,stty} ${CLFS}/bin
ln -sv /tools/bin/file ${CLFS}/usr/bin
ln -sv /tools/lib/libgcc_s.so{,.1} ${CLFS}/usr/lib
ln -sv /tools/lib64/libgcc_s.so{,.1} ${CLFS}/usr/lib64
ln -sv /tools/lib/libstdc++.so{.6,} ${CLFS}/usr/lib
ln -sv /tools/lib64/libstdc++.so{.6,} ${CLFS}/usr/lib64
sed -e 's/tools/usr/' /tools/lib/libstdc++.la > ${CLFS}/usr/lib/libstdc++.la
ln -sv bash ${CLFS}/bin/sh
ln -sv /tools/sbin/init ${CLFS}/sbin
ln -sv /tools/etc/{login.{access,defs},limits} ${CLFS}/etc

The purpose of each link:

/bin/bash

Many bash scripts specify /bin/bash.

/bin/cat

This pathname is hard-coded into Glibc's configure script.

/bin/echo

This is to satisfy one of the tests in Glibc's test suite, which expects /bin/echo.

/bin/grep

This to avoid a hard-coded /tools reference in Libtool.

/bin/login

The agetty program expects to find login in /bin.

/bin/pwd

Some configure scripts, particularly Glibc's, have this pathname hard-coded.

/bin/stty

This pathname is hard-coded into Expect, therefore it is needed for Binutils and GCC test suites to pass.

/usr/bin/file

Binutils' configure scripts specify this command location.

/usr/lib/libgcc_s.so{,.1}

Glibc needs this for the pthreads library to work.

/usr/lib/libstdc++{,.6}

This is needed by several tests in Glibc's test suite, as well as for C++ support in GMP.

/usr/lib/libstdc++.la

This prevents a /tools reference that would otherwise be in /usr/lib/libstdc++.la after GCC is installed.

/bin/sh

Many shell scripts hard-code /bin/sh.

/sbin/init

This is where the kernel expects to find init.

/etc/{login.{access,defs},limits}

These are configuration files used by Shadow and are expected to be found in /etc, for programs such as login and su to work.

Historically, Linux maintains a list of the mounted file systems in the file /etc/mtab. Modern kernels maintain this list internally and expose it to the user via the /proc filesystem. To satisfy utilities that expect the presence of /etc/mtab, create the following symbolic link:

ln -sv /proc/self/mounts ${CLFS}/etc/mtab