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