构建其他临时工具

由于已经进入了 chroot 环境,从现在开始的构建不会影响宿主系统,但是仍然需要注意 chroot 之后,仍然是以 root 身份执行所有命令,错误的命令很容易摧毁构建中的 LFS 系统。

3.5.1 第二次安装 Libstdc++

  • 大致构建用时: 0.8 SBU
  • 所需磁盘空间: 1.1 GB Libstdc++ 是 GCC 的一部分。首先应该解压 GCC 的压缩包,然后进入 gcc-10.2.0 文件夹。
tar -xf gcc-10.2.0.tar.xz
cd 	gcc-10.2.0

创建一个符号链接,允许在 GCC 源码树中构建 Libstdc++:

ln -s gthr-posix.h libgcc/gthr-default.h

为 Libstdc ++ 另外创建一个用于构建的文件夹并进入该文件夹:

mkdir -v build
cd	build

准备编译 Libstdc++:

../libstdc++-v3/configure		\
    CXXFLAGS="-g -O2 -D_GNU_SOURCE" \
    --prefix=/usr			\
    --disable-multilib			\
    --disable-nls			\
    --host=$(uname -m)-lfs-linux-gnu\
    --disable-libstdcxx-pch

配置选项的含义如表 3-4 所示。

**参数 **作用描述
--host=...指示使用我们刚才编译的交叉编译器,而不是/usr/bin 中的。
CXXFLAGS="-g -O2 -D_GNU_SOURCE"这些编译选项在构建完整的 GCC 时,由顶层目录 Makefile 传递。
--host=$(uname -m)-lfs-linux-gnu我们需要模拟该软件包作为完整编译器的一部分构建时发生的过程。在完整构建 GCC 构建时,系统会传递该选项。
--disable-libstdcxx-pch防止安装预编译包含文件,它在当前阶段没有必要。。

之后编译 Libstdc ++:

make

编译后进行库的安装:

make install

退出并清理软件包:

cd ../..
rm -rf gcc-10.2.0

3.5.2 安装 Gettext-一种国际化和本地化(i18n)系统

这个软件包为程序员、翻译人员甚至用户提供了一套集成良好的工具和文档。

  • 大致构建用时: 1.9 SBU
  • 所需磁盘空间: 310 MB 解压并进入软件包:
tar -xf gettext-0.21.tar.xz
cd	gettext-0.21

对于我们这次用到的临时工具集,我们只需要编译安装 Gettext 软件包里的 3 个程序。 配置 Gettext 准备编译:

./configure --disable-shared

配置选项的含义:

表 3-1 Gettext 配置选项
参数描述
--disable-shared不需要安装任何的 Gettext 动态库,所以不需要编译。

编译软件包:

make

安装 msgfmt、msgmerge 和 xgettext 程序:

cp -v gettext-tools/src/{msgfmt,msgmerge,xgettext} 		/usr/bin

退出并清理软件包:

cd ../..
rm -rf gettext-0.21

3.5.3 安装 Bison-语法生成器

GNU Bison 实际上是使用最广泛的 Yacc-like 分析器生成器,使用它可以生成解释器、编译器、协议实现等多种程序。不但与 Yacc 兼容还具有许多 Yacc 不具备的特性。

  • 大致构建用时: 0.3 SBU
  • 所需磁盘空间: 52 MB 解压并进入软件包:
tar -xf bison-3.7.1.tar.xz
cd	bison-3.7.1

配置 Bison 准备编译:

./configure	\
 --prefix=/usr \
--docdir=/usr/share/doc/bison-3.7.1

--docdir=/usr/share/doc/bison-3.7.1

该选项告诉构建系统将 Bison 文档安装到带有版本号的目录中。

编译软件包:

make

安装软件包:

make install

退出并清理软件包:

cd ..
rm -rf bison-3.7.1

3.5.4 安装 Perl-实用的提取和报告语言

Perl 是 Practical Extraction and Report Language 的缩写,可翻译为 “实用报表提取语言”。从最初是为文本处理而开发的,现在用于各种任务,包括系统管理,Web 开发,网络编程,GUI 开发等。

  • 大致构建用时: 1.8 SBU
  • 所需磁盘空间: 267 MB 解压并进入软件包:
tar -xf perl-5.32.0.tar.xz
cd 	perl-5.32.0

配置 Perl 准备编译:

sh Configure 						\
	-des -Dprefix=/usr  -Dvendorprefix=/usr \
    -Dprivlib=/usr/lib/perl5/5.32/core_perl \
    -Darchlib=/usr/lib/perl5/5.32/core_perl \
    -Dsitelib=/usr/lib/perl5/5.32/site_perl \
    -Dsitearch=/usr/lib/perl5/5.32/site_perl \
    -Dvendorlib=/usr/lib/perl5/5.32/vendor_perl \
    -Dvendorarch=/usr/lib/perl5/5.32/vendor_perl

配置选项的含义:

表 3-1 Perl 配置选项
-des这是三个选项地组合:
-d 对所有选项使用默认值;
-e 确保完成所有任务;
-s 静默,不产生非必要输出

编译软件包:

make

安装软件包:

make install

退出并清理软件包:

cd ..
rm -rf perl-5.32.0

3.5.5 安装 Python

  • 大致构建用时: 1.2 SBU
  • 所需磁盘空间: 353 MB 解压并进入软件包:
tar -xf Python-3.8.5.tar.xz
cd 	Python-3.8.5

配置 Python 准备编译:

./configure 		\
    --prefix=/usr   	\
    --enable-shared 	\
    --without-ensurepip

配置选项的含义:

表 3-1 Python 配置选项
选项描述
--enable-shared该选项防止安装静态库。
--without-ensurepip该选项用于禁用现阶段好不需要的 Python 安装程序。不安装 pip,在临时系统中没必要安装

编译软件包:

make

安装软件包:

make install

退出并清理软件包:

cd ..
rm -rf Python-3.8.5

3.5.6 安装 Texinfo-一种排版语法

Texinfo 是 GNU 项目的官方文档格式。许多非 GNU 项目也广泛使用。Texinfo 使用单个源文件以多种格式生成输出,包括在线和打印(DVI、HTML、Info、PDF、XML 等)。

  • 大致构建用时: 0.3 SBU
  • 所需磁盘空间: 105 MB 解压并进入软件包:
tar -xf texinfo-6.7.tar.xz
cd 	texinfo-6.7

配置 Texinfo 准备编译:

./configure --prefix=/usr

作为配置过程的一部分,有一个测试会指出 TestXS_la-TestXS.lo 有一处错误。这与 LFS 没有关系,可以忽略。 编译软件包:

make

安装软件包:

make install

退出并清理软件包:

cd ..
rm -rf texinfo-6.7

3.5.7 安装 Util-Linux 内核组织分发的标准软件包

Linux 的基本工具套件。

  • 大致构建用时: 0.8 SBU
  • 所需磁盘空间: 133 MB 解压并进入软件包:
tar -xf util-linux-2.36.tar.xz
cd	util-linux-2.36

首先创建一个目录,允许 hwclock 程序存储数据:

mkdir -pv /var/lib/hwclock

配置 Util-linux 准备编译:

./configure					\
    ADJTIME_PATH=/var/lib/hwclock/adjtime \
    --docdir=/usr/share/doc/util-linux-2.36 \
    --disable-chfn-chsh  --disable-login \
    --disable-nologin 	--disable-su \
    --disable-setpriv	--disable-runuser \
    --disable-pylibmount	--disable-static \
    --without-python

配置选项的含义:

表 3-1 Util-linux 配置选项
参数描述
ADJTIME\_PATH=/var/lib/hwclock/adjtime该选项根据 FHS 的规则,设定硬件时钟信息记录文件的位置。对于临时工具,这并不是严格要求的,但是这样可以防止在其他位置创建该文件,导致这个文件在安装最终的 Util-linux 软件包时不被覆盖或移除。
--disable-*这些选项防止产生关于一些组件的警告,这些组件需要一些 LFS 之外,或当前尚未安装的软件包。
--without-python该选项禁用 Python,防止构建系统尝试构建不需要的语言绑定。

编译软件包:

make

安装软件包:

make install

退出并清理软件包:

cd ..
rm -rf util-linux-2.36