跟着我来一起编译lfs(三) 临时工具链及文件系统

接下来开始第二次工具链的编译建立一个完成临时系统,为什么要第二次,上一文中解释了,就不多啰嗦了,为了避免不必要的错误,我们先把第一次解压出来的目录文件删除,重新来。

第一件事

echo $LFS

/mnt/lfs

查看环境,这一步一定要看清楚!!!!!

cd $LFS/sources
rm -rf binutils-2.27 gcc-6.2.0 linux-4.7.2 glibc-2.24

编译Binutils

tar jxf binutils-2.27.tar.bz2
cd binutils-2.27
mkdir -v build
cd build
CC=$LFS_TGT-gcc \
AR=$LFS_TGT-ar \
RANLIB=$LFS_TGT-ranlib \
../configure \
--prefix=/tools \
--disable-nls \
--disable-werror \
--with-lib-path=/tools/lib \
--with-sysroot
make
make install
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin

GCC

cd $LFS/sources
tar jxf gcc-6.2.0.tar.bz2
cd gcc-6.2.0
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
  `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include-fixed/limits.h
for file in \
 $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
do
  cp -uv $file{,.orig}
  sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
      -e 's@/usr@/tools@g' $file.orig > $file
  echo '
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file
  touch $file.orig
done
tar -xf ../mpfr-3.1.4.tar.xz
mv -v mpfr-3.1.4 mpfr
tar -xf ../gmp-6.1.1.tar.xz
mv -v gmp-6.1.1 gmp
tar -xf ../mpc-1.0.3.tar.gz
mv -v mpc-1.0.3 mpc
mkdir -v build
cd build
CC=$LFS_TGT-gcc \
CXX=$LFS_TGT-g++ \
AR=$LFS_TGT-ar \
RANLIB=$LFS_TGT-ranlib \
../configure \
--prefix=/tools \
--with-local-prefix=/tools \
--with-native-system-header-dir=/tools/include \
--enable-languages=c,c++ \
--disable-libstdcxx-pch \
--disable-multilib \
--disable-bootstrap \
--disable-libgomp
make
make install

进入/tools/bin目录建一个CC的链接,很多软件编译的时候用的是CC

cd $LFS/tools/bin
ln -sv gcc /tools/bin/cc

来测试一下编译的工具

cd ~
echo 'int main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'

正常情况,首该没有任何错误,然后显示
[Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2]

如果输出不是像上面那样或者根本就没有输出,那么可能某些地方出错了。调查并回溯这些步骤,找出问题所在并改正它。在继续之前必须解决这个问题。

一旦一切都顺利,清理测试文件:

rm -v dummy.c a.out
我们继续


下面我们编译4个用来测试的包,目的就是为了后面的测试用的,非必须。


Tcl-core

cd $LFS/sources
tar zxf tcl-core8.6.6-src.tar.gz
cd tcl8.6.6/unix/
./configure --prefix=/tools
make

测试

TZ=UTC make test
make install

改权限

chmod -v u+w /tools/lib/libtcl8.6.so

安装tcl头文件

make install-private-headers

创建软链接

cd $LFS/tools/bin
ln -sv tclsh8.6 /tools/bin/tclsh

Expect

cd $LFS/sources
tar zxf expect5.45.tar.gz
cd expect5.45
cp -v configure{,.orig}
sed 's:/usr/local/bin:/bin:' configure.orig > configure
./configure --prefix=/tools \
--with-tcl=/tools/lib \
--with-tclinclude=/tools/include
make

测试一下,这里测试可能会有错误,不过不要紧

make test
make SCRIPTS="" install

DejaGNU

cd $LFS/sources
tar zxf dejagnu-1.6.tar.gz
cd dejagnu-1.6
./configure --prefix=/tools
make install
make check

Check

cd $LFS/sources
tar zxf check-0.10.0.tar.gz
cd check-0.10.0
PKG_CONFIG= ./configure --prefix=/tools
make

这个过程可能会很慢,等不及就退出吧

make check
make install

继续安装
Ncurses

cd $LFS/sources
tar zxf ncurses-6.0.tar.gz
cd ncurses-6.0
sed -i s/mawk// configure
./configure --prefix=/tools \
--with-shared \
--without-debug \
--without-ada \
--enable-widec \
--enable-overwrite
make
make install

Bash

cd $LFS/sources
tar zxf bash-4.3.30.tar.gz
cd bash-4.3.30
./configure --prefix=/tools --without-bash-malloc
make
make tests
make install

建立软链接

cd $LFS/tools/bin
ln -sv bash /tools/bin/sh

Bzip2

cd $LFS/sources
tar zxf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
make
make PREFIX=/tools install

Coreutils

cd $LFS/sources
xz -d coreutils-8.25.tar.xz
tar xf coreutils-8.25.tar
cd coreutils-8.25
./configure --prefix=/tools --enable-install-program=hostname
make
make RUN_EXPENSIVE_TESTS=yes check
make install

Diffutils

cd $LFS/sources
xz -d diffutils-3.5.tar.xz
tar xf diffutils-3.5.tar
cd diffutils-3.5
./configure --prefix=/tools
make
make check
make install

File

cd $LFS/sources
tar zxf file-5.28.tar.gz
cd file-5.28
./configure --prefix=/tools
make
make check
make install

Findutils

cd $LFS/sources
tar zxf findutils-4.6.0.tar.gz
cd findutils-4.6.0
./configure --prefix=/tools
make
make check
make install

Gawk

cd $LFS/sources
xz -d gawk-4.1.3.tar.xz
tar xf gawk-4.1.3.tar
cd gawk-4.1.3
./configure --prefix=/tools
make
make check
make install

Gettext

cd $LFS/sources
xz -d gettext-0.19.8.1.tar.xz
tar xf gettext-0.19.8.1.tar
cd gettext-0.19.8.1
cd gettext-tools
EMACS="no" ./configure --prefix=/tools --disable-shared
make -C gnulib-lib
make -C intl pluralx.c
make -C src msgfmt
make -C src msgmerge
make -C src xgettext
cp -v src/{msgfmt,msgmerge,xgettext} /tools/bin

Grep

cd $LFS/sources
xz -d grep-2.25.tar.xz
tar xf grep-2.25.tar
cd grep-2.25
./configure --prefix=/tools
make
make check
make install

Gzip

cd $LFS/sources
xz -d gzip-1.8.tar.xz
tar xf gzip-1.8.tar
cd gzip-1.8
./configure --prefix=/tools
make
make check
make install

M4

cd $LFS/sources
xz -d m4-1.4.17.tar.xz
tar xf m4-1.4.17.tar
cd m4-1.4.17
./configure --prefix=/tools
make
make check
make install

Make

cd $LFS/sources
tar jxf make-4.2.1.tar.bz2
cd make-4.2.1
./configure --prefix=/tools --without-guile
make
make check
make install

Patch

cd $LFS/sources
xz -d patch-2.7.5.tar.xz
tar xf patch-2.7.5.tar
cd patch-2.7.5
./configure --prefix=/tools
make
make check
make install

Perl

cd $LFS/sources
tar jxf perl-5.24.0.tar.bz2
cd perl-5.24.0
sh Configure -des -Dprefix=/tools -Dlibs=-lm
make
cp -v perl cpan/podlators/scripts/pod2man /tools/bin
mkdir -pv /tools/lib/perl5/5.24.0
cp -Rv lib/* /tools/lib/perl5/5.24.0

Sed

cd $LFS/sources
tar jxf sed-4.2.2.tar.bz2
cd sed-4.2.2
./configure --prefix=/tools
make
make check
make install

Tar

cd $LFS/sources
xz -d tar-1.29.tar.xz
tar xf tar-1.29.tar
cd tar-1.29
./configure --prefix=/tools
make
make check
make install

Texinfo

cd $LFS/sources
xz -d texinfo-6.1.tar.xz
tar xf texinfo-6.1.tar
cd texinfo-6.1
./configure --prefix=/tools
make
make check
make install

Util-linux

cd $LFS/sources
xz -d util-linux-2.28.1.tar.xz
tar xf util-linux-2.28.1.tar
cd util-linux-2.28.1
./configure --prefix=/tools \
--without-python \
--disable-makeinstall-chown \
--without-systemdsystemunitdir \
--enable-libmount-force-mountinfo \
PKG_CONFIG=""
make
make install

Xz

cd $LFS/sources
xz -d xz-5.2.2.tar.xz
tar xf xz-5.2.2.tar
cd xz-5.2.2
./configure --prefix=/tools
make
make check
make install

如果你一路到了这里,恭喜你,工具链环境编译结束了,轻松一下,虽让只是一路复制,但是也是很辛苦的。

接下来做一下收尾工作,清理一下不用的东西,但是这不是必须的,如果怕出问题就算了,这边主要是清理无效的文件,节省空间

strip --strip-debug /tools/lib/*
/usr/bin/strip --strip-unneeded /tools/{,s}bin/*

还可以删除一些帮助文件,当然也不是必须的

rm -rf /tools/{,share}/{info,man,doc}

最后改变目录的所属

exit
chown -R root:root $LFS/tools

好了,接下来这一步很重要,备份!!,备份!!,备份!!,重要的话说三遍

在第一章中我们创建了一个虚拟硬盘,我们现在就要备份这个硬盘,怎么备份?找到这个文件拷贝一份。

先关闭虚拟机

查看虚拟硬盘位置

复制一份。

 

好了,大家休息吧!后面正真开始构建lfs系统,期待一下!