构建其他临时工具
由于已经进入了 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
配置选项的含义:
| 参数 | 描述 |
|---|---|
| --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
配置选项的含义:
| -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
配置选项的含义:
| 选项 | 描述 |
|---|---|
| --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
配置选项的含义:
| 参数 | 描述 |
|---|---|
ADJTIME\_PATH=/var/lib/hwclock/adjtime | 该选项根据 FHS 的规则,设定硬件时钟信息记录文件的位置。对于临时工具,这并不是严格要求的,但是这样可以防止在其他位置创建该文件,导致这个文件在安装最终的 Util-linux 软件包时不被覆盖或移除。 |
--disable-* | 这些选项防止产生关于一些组件的警告,这些组件需要一些 LFS 之外,或当前尚未安装的软件包。 |
--without-python | 该选项禁用 Python,防止构建系统尝试构建不需要的语言绑定。 |
编译软件包:
make
安装软件包:
make install
退出并清理软件包:
cd ..
rm -rf util-linux-2.36